summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-05-13 20:42:13 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-05-13 20:42:13 +0000
commitca2268cc54943fd31fc1a25adfc5b543f97f6bb8 (patch)
treea24f570ba36aa96609830ece4d2229a8f8df2f7f /searchcore
parent06533c50e0f68f1fb4168187a702da06bce9a5d5 (diff)
The moveDoneContext must must live longer than the PendingLidTracker::Token.
Since you either have a FeedToken or a moveDoneContext, and as they share the same IDestructorCallback as base class, it is enough with one token. This token is destructed after the PendingLidTracker::Token.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp14
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h8
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/putdonecontext.h5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/removedonecontext.h6
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp76
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h6
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h2
10 files changed, 31 insertions, 98 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp
index 31e4c87b352..445f21044a8 100644
--- a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.cpp
@@ -1,24 +1,14 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include "operationdonecontext.h"
-#include <vespa/searchcore/proton/common/feedtoken.h>
namespace proton {
-OperationDoneContext::OperationDoneContext(FeedToken token)
+OperationDoneContext::OperationDoneContext(IDestructorCallback::SP token)
: _token(std::move(token))
{
}
-OperationDoneContext::~OperationDoneContext()
-{
- ack();
-}
-
-void
-OperationDoneContext::ack()
-{
- _token.reset();
-}
+OperationDoneContext::~OperationDoneContext() = default;
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h
index 16b6a320b66..ccd7721fe25 100644
--- a/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/operationdonecontext.h
@@ -3,7 +3,6 @@
#pragma once
#include <vespa/vespalib/util/idestructorcallback.h>
-#include <vespa/searchcore/proton/common/feedtoken.h>
namespace proton {
@@ -16,13 +15,14 @@ namespace proton {
*/
class OperationDoneContext : public vespalib::IDestructorCallback
{
- FeedToken _token;
- void ack();
public:
- OperationDoneContext(FeedToken token);
+ using IDestructorCallback = vespalib::IDestructorCallback;
+ OperationDoneContext(IDestructorCallback::SP token);
~OperationDoneContext() override;
bool hasToken() const { return static_cast<bool>(_token); }
+private:
+ IDestructorCallback::SP _token;
};
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp
index 23caaf1250b..ac4f79ca89b 100644
--- a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.cpp
@@ -9,9 +9,8 @@ using document::Document;
namespace proton {
-PutDoneContext::PutDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted,
- std::shared_ptr<const Document> doc,
- uint32_t lid)
+PutDoneContext::PutDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted,
+ std::shared_ptr<const Document> doc, uint32_t lid)
: OperationDoneContext(std::move(token)),
_uncommitted(std::move(uncommitted)),
_lid(lid),
diff --git a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h
index e7271d8a1b3..66bae97ad02 100644
--- a/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/putdonecontext.h
@@ -28,9 +28,8 @@ class PutDoneContext : public OperationDoneContext
std::shared_ptr<const document::Document> _doc;
public:
- PutDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted,
- std::shared_ptr<const document::Document> doc,
- uint32_t lid);
+ PutDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted,
+ std::shared_ptr<const document::Document> doc, uint32_t lid);
~PutDoneContext() override;
void registerPutLid(DocIdLimit *docIdLimit) { _docIdLimit = docIdLimit; }
diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp
index b73b3c02120..5f98db0ee49 100644
--- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.cpp
@@ -7,9 +7,8 @@
namespace proton {
-RemoveDoneContext::RemoveDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted, vespalib::Executor &executor,
- IDocumentMetaStore &documentMetaStore,
- uint32_t lid)
+RemoveDoneContext::RemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted,
+ vespalib::Executor &executor, IDocumentMetaStore &documentMetaStore, uint32_t lid)
: OperationDoneContext(std::move(token)),
_executor(executor),
_task(),
diff --git a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h
index 5eea6f7faaf..6aa5a2297d0 100644
--- a/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/removedonecontext.h
@@ -5,8 +5,6 @@
#include "operationdonecontext.h"
#include <vespa/searchcore/proton/common/ipendinglidtracker.h>
#include <vespa/vespalib/util/executor.h>
-#include <vespa/document/base/globalid.h>
-#include <vespa/searchlib/common/serialnum.h>
namespace proton {
@@ -28,8 +26,8 @@ class RemoveDoneContext : public OperationDoneContext
IPendingLidTracker::Token _uncommitted;
public:
- RemoveDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted, vespalib::Executor &executor, IDocumentMetaStore &documentMetaStore,
- uint32_t lid);
+ RemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, vespalib::Executor &executor,
+ IDocumentMetaStore &documentMetaStore, uint32_t lid);
~RemoveDoneContext() override;
};
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
index df9ff54e29e..04ad4ee20ed 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.cpp
@@ -43,39 +43,11 @@ namespace proton {
namespace {
-class PutDoneContextForMove : public PutDoneContext {
-private:
- IDestructorCallback::SP _moveDoneCtx;
-
-public:
- PutDoneContextForMove(FeedToken token, IPendingLidTracker::Token uncommitted,
- std::shared_ptr<const Document> doc, uint32_t lid, IDestructorCallback::SP moveDoneCtx)
- : PutDoneContext(std::move(token), std::move(uncommitted),std::move(doc), lid),
- _moveDoneCtx(std::move(moveDoneCtx))
- {}
- ~PutDoneContextForMove() override = default;
-};
-
-std::shared_ptr<PutDoneContext>
-createPutDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted,
- std::shared_ptr<const Document> doc, uint32_t lid, IDestructorCallback::SP moveDoneCtx)
-{
- std::shared_ptr<PutDoneContext> result;
- if (moveDoneCtx) {
- result = std::make_shared<PutDoneContextForMove>(std::move(token), std::move(uncommitted),
- std::move(doc), lid, std::move(moveDoneCtx));
- } else {
- result = std::make_shared<PutDoneContext>(std::move(token), std::move(uncommitted), std::move(doc), lid);
- }
- return result;
-}
-
std::shared_ptr<PutDoneContext>
-createPutDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted,
+createPutDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted,
std::shared_ptr<const Document> doc, uint32_t lid)
{
- return createPutDoneContext(std::move(token), std::move(uncommitted), std::move(doc),
- lid, IDestructorCallback::SP());
+ return std::make_shared<PutDoneContext>(std::move(token), std::move(uncommitted), std::move(doc), lid);
}
std::shared_ptr<UpdateDoneContext>
@@ -94,30 +66,11 @@ void setPrev(DocumentOperation &op, const documentmetastore::IStore::Result &res
}
}
-class RemoveDoneContextForMove : public RemoveDoneContext {
-private:
- IDestructorCallback::SP _moveDoneCtx;
-
-public:
- RemoveDoneContextForMove(FeedToken token, IPendingLidTracker::Token uncommitted, vespalib::Executor &executor,
- IDocumentMetaStore &documentMetaStore, uint32_t lid, IDestructorCallback::SP moveDoneCtx)
- : RemoveDoneContext(std::move(token), std::move(uncommitted), executor, documentMetaStore, lid),
- _moveDoneCtx(std::move(moveDoneCtx))
- {}
- ~RemoveDoneContextForMove() override = default;
-};
-
std::shared_ptr<RemoveDoneContext>
-createRemoveDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted, vespalib::Executor &executor,
- IDocumentMetaStore &documentMetaStore, uint32_t lid, IDestructorCallback::SP moveDoneCtx)
+createRemoveDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, vespalib::Executor &executor,
+ IDocumentMetaStore &documentMetaStore, uint32_t lid)
{
- if (moveDoneCtx) {
- return std::make_shared<RemoveDoneContextForMove>
- (std::move(token), std::move(uncommitted), executor, documentMetaStore, lid, std::move(moveDoneCtx));
- } else {
- return std::make_shared<RemoveDoneContext>
- (std::move(token), std::move(uncommitted), executor, documentMetaStore, lid);
- }
+ return std::make_shared<RemoveDoneContext>(std::move(token), std::move(uncommitted), executor, documentMetaStore, lid);
}
class SummaryPutDoneContext : public OperationDoneContext
@@ -310,8 +263,7 @@ StoreOnlyFeedView::internalPut(FeedToken token, const PutOperation &putOp)
if (docAlreadyExists && putOp.changedDbdId()) {
//TODO, better to have an else than an assert ?
assert(!putOp.getValidDbdId(_params._subDbId));
- internalRemove(std::move(token), _pendingLidsForCommit->produce(putOp.getPrevLid()), serialNum,
- putOp.getPrevLid(), IDestructorCallback::SP());
+ internalRemove(std::move(token), _pendingLidsForCommit->produce(putOp.getPrevLid()), serialNum, putOp.getPrevLid());
}
}
@@ -593,8 +545,7 @@ StoreOnlyFeedView::internalRemove(FeedToken token, const RemoveOperationWithDocI
if (rmOp.changedDbdId()) {
//TODO Prefer else over assert ?
assert(!rmOp.getValidDbdId(_params._subDbId));
- internalRemove(std::move(token), _pendingLidsForCommit->produce(rmOp.getPrevLid()), serialNum,
- rmOp.getPrevLid(), IDestructorCallback::SP());
+ internalRemove(std::move(token), _pendingLidsForCommit->produce(rmOp.getPrevLid()), serialNum, rmOp.getPrevLid());
}
}
}
@@ -612,19 +563,17 @@ StoreOnlyFeedView::internalRemove(FeedToken token, const RemoveOperationWithGid
if (rmOp.getValidPrevDbdId(_params._subDbId)) {
if (rmOp.changedDbdId()) {
assert(!rmOp.getValidDbdId(_params._subDbId));
- internalRemove(std::move(token), _pendingLidsForCommit->produce(rmOp.getPrevLid()), serialNum,
- rmOp.getPrevLid(), IDestructorCallback::SP());
+ internalRemove(std::move(token), _pendingLidsForCommit->produce(rmOp.getPrevLid()), serialNum, rmOp.getPrevLid());
}
}
}
void
-StoreOnlyFeedView::internalRemove(FeedToken token, IPendingLidTracker::Token uncommitted, SerialNum serialNum,
- Lid lid, IDestructorCallback::SP moveDoneCtx)
+StoreOnlyFeedView::internalRemove(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, SerialNum serialNum, Lid lid)
{
bool explicitReuseLid = _lidReuseDelayer.delayReuse(lid);
auto onWriteDone = createRemoveDoneContext(std::move(token), std::move(uncommitted), _writeService.master(), _metaStore,
- (explicitReuseLid ? lid : 0u), std::move(moveDoneCtx));
+ (explicitReuseLid ? lid : 0u));
removeSummary(serialNum, lid, onWriteDone);
removeAttributes(serialNum, lid, onWriteDone);
removeIndexedFields(serialNum, lid, onWriteDone);
@@ -773,14 +722,13 @@ StoreOnlyFeedView::handleMove(const MoveOperation &moveOp, IDestructorCallback::
if (moveOp.changedDbdId() && useDocumentMetaStore(serialNum)) {
_gidToLidChangeHandler.notifyPut(FeedToken(), docId.getGlobalId(), moveOp.getLid(), serialNum);
}
- auto onWriteDone = createPutDoneContext(FeedToken(), _pendingLidsForCommit->produce(moveOp.getLid()),
- doc, moveOp.getLid(), doneCtx);
+ auto onWriteDone = createPutDoneContext(doneCtx, _pendingLidsForCommit->produce(moveOp.getLid()), doc, moveOp.getLid());
putSummary(serialNum, moveOp.getLid(), doc, onWriteDone);
putAttributes(serialNum, moveOp.getLid(), *doc, onWriteDone);
putIndexedFields(serialNum, moveOp.getLid(), doc, onWriteDone);
}
if (docAlreadyExists && moveOp.changedDbdId()) {
- internalRemove(FeedToken(), _pendingLidsForCommit->produce(moveOp.getPrevLid()), serialNum, moveOp.getPrevLid(), doneCtx);
+ internalRemove(std::move(doneCtx), _pendingLidsForCommit->produce(moveOp.getPrevLid()), serialNum, moveOp.getPrevLid());
}
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
index 7f1876cbbdf..5a0257fda57 100644
--- a/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
+++ b/searchcore/src/vespa/searchcore/proton/server/storeonlyfeedview.h
@@ -53,7 +53,7 @@ public:
using LidVector = LidVectorContext::LidVector;
using Document = document::Document;
using DocumentUpdate = document::DocumentUpdate;
- using OnWriteDoneType =const std::shared_ptr<vespalib::IDestructorCallback> &;
+ using OnWriteDoneType = const std::shared_ptr<vespalib::IDestructorCallback> &;
using OnForceCommitDoneType =const std::shared_ptr<ForceCommitContext> &;
using OnOperationDoneType = const std::shared_ptr<OperationDoneContext> &;
using OnPutDoneType = const std::shared_ptr<PutDoneContext> &;
@@ -66,6 +66,7 @@ public:
using DocumentSP = std::shared_ptr<Document>;
using DocumentUpdateSP = std::shared_ptr<DocumentUpdate>;
using LidReuseDelayer = documentmetastore::LidReuseDelayer;
+ using IDestructorCallbackSP = std::shared_ptr<vespalib::IDestructorCallback>;
using Lid = search::DocumentIdT;
@@ -180,8 +181,7 @@ private:
// returns the number of documents removed.
size_t removeDocuments(const RemoveDocumentsOperation &op, bool remove_index_and_attribute_fields);
- void internalRemove(FeedToken token, IPendingLidTracker::Token uncommitted, SerialNum serialNum,
- Lid lid, std::shared_ptr<vespalib::IDestructorCallback> moveDoneCtx);
+ void internalRemove(IDestructorCallbackSP token, IPendingLidTracker::Token uncommitted, SerialNum serialNum, Lid lid);
IPendingLidTracker::Token get_pending_lid_token(const DocumentOperation &op);
diff --git a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp
index 3feaba15c00..8558c19f1ba 100644
--- a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.cpp
@@ -7,7 +7,7 @@ using document::Document;
namespace proton {
-UpdateDoneContext::UpdateDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted, const document::DocumentUpdate::SP &upd)
+UpdateDoneContext::UpdateDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, const document::DocumentUpdate::SP &upd)
: OperationDoneContext(std::move(token)),
_uncommitted(std::move(uncommitted)),
_upd(upd),
diff --git a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h
index 6dad929aa26..6ca0e118b5b 100644
--- a/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h
+++ b/searchcore/src/vespa/searchcore/proton/server/updatedonecontext.h
@@ -24,7 +24,7 @@ class UpdateDoneContext : public OperationDoneContext
document::DocumentUpdate::SP _upd;
std::shared_future<std::unique_ptr<const document::Document>> _doc;
public:
- UpdateDoneContext(FeedToken token, IPendingLidTracker::Token uncommitted, const document::DocumentUpdate::SP &upd);
+ UpdateDoneContext(IDestructorCallback::SP token, IPendingLidTracker::Token uncommitted, const document::DocumentUpdate::SP &upd);
~UpdateDoneContext() override;
const document::DocumentUpdate &getUpdate() { return *_upd; }