summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@oath.com>2017-09-06 21:12:40 +0000
committerTor Egge <Tor.Egge@oath.com>2017-09-07 10:12:11 +0000
commit42ea50613f43d7b68be70895d9c5e4f7c5a63ea5 (patch)
tree3d74a6280a1c7a1cd57d8f90c493650dca91d489
parente4a5a970ea408db968bc9abbeec7977527e38dea (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.
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp10
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp26
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h2
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);