diff options
author | Tor Egge <Tor.Egge@oath.com> | 2017-09-06 21:12:40 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@oath.com> | 2017-09-07 10:12:11 +0000 |
commit | 42ea50613f43d7b68be70895d9c5e4f7c5a63ea5 (patch) | |
tree | 3d74a6280a1c7a1cd57d8f90c493650dca91d489 | |
parent | e4a5a970ea408db968bc9abbeec7977527e38dea (diff) |
Don't call notifyRemoveDone if document meta store wasn't updated.
Don't call notifyRemoveDone if document moved within same subdb.
Don't skip calling notifyRemoveDone due to lack of attributes or
indexed fields.
4 files changed, 23 insertions, 19 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp index 301224cf134..522b0aed617 100644 --- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp @@ -15,13 +15,15 @@ RemoveDoneContext::RemoveDoneContext(std::unique_ptr<FeedToken> token, IGidToLidChangeHandler &gidToLidChangeHandler, const document::GlobalId &gid, uint32_t lid, - search::SerialNum serialNum) + search::SerialNum serialNum, + bool enableNotifyRemoveDone) : OperationDoneContext(std::move(token), opType, metrics), _executor(executor), _task(), _gidToLidChangeHandler(gidToLidChangeHandler), _gid(gid), - _serialNum(serialNum) + _serialNum(serialNum), + _enableNotifyRemoveDone(enableNotifyRemoveDone) { if (lid != 0) { _task = std::make_unique<RemoveDoneTask>(documentMetaStore, lid); @@ -30,7 +32,9 @@ RemoveDoneContext::RemoveDoneContext(std::unique_ptr<FeedToken> token, RemoveDoneContext::~RemoveDoneContext() { - _gidToLidChangeHandler.notifyRemoveDone(_gid, _serialNum); + if (_enableNotifyRemoveDone) { + _gidToLidChangeHandler.notifyRemoveDone(_gid, _serialNum); + } ack(); if (_task) { vespalib::Executor::Task::UP res = _executor.execute(std::move(_task)); diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h index ccd480a5a91..9311a6d2b6e 100644 --- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h +++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h @@ -29,6 +29,7 @@ class RemoveDoneContext : public OperationDoneContext IGidToLidChangeHandler &_gidToLidChangeHandler; document::GlobalId _gid; search::SerialNum _serialNum; + bool _enableNotifyRemoveDone; public: RemoveDoneContext(std::unique_ptr<FeedToken> token, @@ -39,7 +40,8 @@ public: IGidToLidChangeHandler &gidToLidChangeHandler, const document::GlobalId &gid, uint32_t lid, - search::SerialNum serialNum); + search::SerialNum serialNum, + bool enableNotifyRemoveDone); virtual ~RemoveDoneContext(); }; diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp index e6cc982e2f5..c6f888545b1 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp @@ -120,8 +120,9 @@ public: const document::GlobalId &gid, uint32_t lid, SerialNum serialNum, + bool enableNotifyRemoveDone, IDestructorCallback::SP moveDoneCtx) - : RemoveDoneContext(std::move(token), opType, metrics, executor, documentMetaStore, gidToLidChangeHandler, gid, lid, serialNum), + : RemoveDoneContext(std::move(token), opType, metrics, executor, documentMetaStore, gidToLidChangeHandler, gid, lid, serialNum, enableNotifyRemoveDone), _moveDoneCtx(std::move(moveDoneCtx)) {} virtual ~RemoveDoneContextForMove() {} @@ -135,14 +136,15 @@ createRemoveDoneContext(std::unique_ptr<FeedToken> token, const FeedOperation::T const document::GlobalId &gid, uint32_t lid, SerialNum serialNum, + bool enableNotifyRemoveDone, IDestructorCallback::SP moveDoneCtx) { if (moveDoneCtx) { return std::make_shared<RemoveDoneContextForMove> - (std::move(token), opType, metrics, executor, documentMetaStore, gidToLidChangeHandler, gid, lid, serialNum, std::move(moveDoneCtx)); + (std::move(token), opType, metrics, executor, documentMetaStore, gidToLidChangeHandler, gid, lid, serialNum, enableNotifyRemoveDone, std::move(moveDoneCtx)); } else { return std::make_shared<RemoveDoneContext> - (std::move(token), opType, metrics, executor, documentMetaStore, gidToLidChangeHandler, gid, lid, serialNum); + (std::move(token), opType, metrics, executor, documentMetaStore, gidToLidChangeHandler, gid, lid, serialNum, enableNotifyRemoveDone); } } @@ -313,7 +315,7 @@ StoreOnlyFeedView::internalPut(FeedToken::UP token, const PutOperation &putOp) if (docAlreadyExists && putOp.changedDbdId()) { assert(!putOp.getValidDbdId(_params._subDbId)); const document::GlobalId &gid = docId.getGlobalId(); - internalRemove(std::move(token), serialNum, gid, putOp.getPrevLid(), putOp.getType(), IDestructorCallback::SP()); + internalRemove(std::move(token), serialNum, gid, putOp.getPrevLid(), putOp.getType(), useDocumentMetaStore(serialNum), IDestructorCallback::SP()); } if (token.get() != NULL) { token->ack(putOp.getType(), _params._metrics); @@ -591,7 +593,7 @@ StoreOnlyFeedView::internalRemove(FeedToken::UP token, const RemoveOperation &rm if (rmOp.changedDbdId()) { assert(!rmOp.getValidDbdId(_params._subDbId)); const document::GlobalId &gid = docId.getGlobalId(); - internalRemove(std::move(token), serialNum, gid, rmOp.getPrevLid(), rmOp.getType(), IDestructorCallback::SP()); + internalRemove(std::move(token), serialNum, gid, rmOp.getPrevLid(), rmOp.getType(), useDocumentMetaStore(serialNum), IDestructorCallback::SP()); } } if (token.get() != NULL) { @@ -601,18 +603,13 @@ StoreOnlyFeedView::internalRemove(FeedToken::UP token, const RemoveOperation &rm void StoreOnlyFeedView::internalRemove(FeedToken::UP token, SerialNum serialNum, const document::GlobalId &gid, Lid lid, - FeedOperation::Type opType, IDestructorCallback::SP moveDoneCtx) + FeedOperation::Type opType, bool enableNotifyRemoveDone, IDestructorCallback::SP moveDoneCtx) { removeSummary(serialNum, lid); bool explicitReuseLid = _lidReuseDelayer.delayReuse(lid); std::shared_ptr<RemoveDoneContext> onWriteDone; - if (explicitReuseLid || token) { - onWriteDone = createRemoveDoneContext(std::move(token), opType, _params._metrics, _writeService.master(), - _metaStore, _gidToLidChangeHandler, gid, (explicitReuseLid ? lid : 0u), serialNum, moveDoneCtx); - } else if (moveDoneCtx) { - onWriteDone = createRemoveDoneContext(FeedToken::UP(), opType, _params._metrics, _writeService.master(), - _metaStore, _gidToLidChangeHandler, gid, 0u, serialNum, moveDoneCtx); - } + onWriteDone = createRemoveDoneContext(std::move(token), opType, _params._metrics, _writeService.master(), + _metaStore, _gidToLidChangeHandler, gid, (explicitReuseLid ? lid : 0u), serialNum, enableNotifyRemoveDone, moveDoneCtx); bool immediateCommit = _commitTimeTracker.needCommit(); removeAttributes(serialNum, lid, immediateCommit, onWriteDone); removeIndexedFields(serialNum, lid, immediateCommit, onWriteDone); @@ -770,7 +767,8 @@ StoreOnlyFeedView::handleMove(const MoveOperation &moveOp, IDestructorCallback:: } if (docAlreadyExists && moveOp.changedDbdId()) { const document::GlobalId &gid = docId.getGlobalId(); - internalRemove(FeedToken::UP(), serialNum, gid, moveOp.getPrevLid(), moveOp.getType(), doneCtx); + bool enableNotifyRemoveDone = useDocumentMetaStore(serialNum) && !moveOp.getValidDbdId(_params._subDbId); + internalRemove(FeedToken::UP(), serialNum, gid, moveOp.getPrevLid(), moveOp.getType(), enableNotifyRemoveDone, doneCtx); } } diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h index 3b3a5efbe24..01a8122ed1e 100644 --- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h +++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h @@ -181,7 +181,7 @@ private: bool immediateCommit); void internalRemove(FeedTokenUP token, SerialNum serialNum, const document::GlobalId &gid, Lid lid, - FeedOperation::Type opType, std::shared_ptr<search::IDestructorCallback> moveDoneCtx); + FeedOperation::Type opType, bool enableNotifyRemoveDone, std::shared_ptr<search::IDestructorCallback> moveDoneCtx); // Ack token early if visibility delay is nonzero void considerEarlyAck(FeedTokenUP &token, FeedOperation::Type opType); |