summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-09-21 18:23:22 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-09-21 18:25:17 +0000
commit31b179d62e3dec85d9af5058857ed16fa81a4002 (patch)
treef66c30877dd6a457ab22dab968b435cbb0ea0e72 /searchlib
parent0c260f43b83325821b237a00cb5b69e0ac687ce2 (diff)
Add CommitResult.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/common.cpp26
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/common.h27
2 files changed, 47 insertions, 6 deletions
diff --git a/searchlib/src/vespa/searchlib/transactionlog/common.cpp b/searchlib/src/vespa/searchlib/transactionlog/common.cpp
index 556ebca06ec..3308f3182dc 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/common.cpp
+++ b/searchlib/src/vespa/searchlib/transactionlog/common.cpp
@@ -121,11 +121,26 @@ Packet::add(const Packet::Entry & e)
_range.to(e.serial());
}
+Writer::CommitResult::CommitResult()
+ : _callBacks()
+{}
+Writer::CommitResult::CommitResult( CommitPayload commitPayLoad)
+ : _callBacks(std::move(commitPayLoad))
+{}
+
+Writer::CommitResult::~CommitResult() = default;
+
CommitChunk::CommitChunk(size_t reserveBytes, size_t reserveCount)
: _data(reserveBytes),
- _callBacks()
+ _callBacks(std::make_shared<Writer::DoneCallbacksList>())
+{
+ _callBacks->reserve(reserveCount);
+}
+
+CommitChunk::CommitChunk(size_t reserveBytes, Writer::CommitPayload postponed)
+ : _data(reserveBytes),
+ _callBacks(std::move(postponed))
{
- _callBacks.reserve(reserveCount);
}
CommitChunk::~CommitChunk() = default;
@@ -133,7 +148,12 @@ CommitChunk::~CommitChunk() = default;
void
CommitChunk::add(const Packet &packet, Writer::DoneCallback onDone) {
_data.merge(packet);
- _callBacks.emplace_back(std::move(onDone));
+ _callBacks->emplace_back(std::move(onDone));
+}
+
+Writer::CommitResult
+CommitChunk::createCommitResult() const {
+ return Writer::CommitResult(_callBacks);
}
}
diff --git a/searchlib/src/vespa/searchlib/transactionlog/common.h b/searchlib/src/vespa/searchlib/transactionlog/common.h
index 7cdfad44b87..c8f7a81ac7d 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/common.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/common.h
@@ -84,6 +84,21 @@ int makeDirectory(const char * dir);
class Writer {
public:
using DoneCallback = std::shared_ptr<IDestructorCallback>;
+ using DoneCallbacksList = std::vector<DoneCallback>;
+ using CommitPayload = std::shared_ptr<DoneCallbacksList>;
+ class CommitResult {
+ public:
+ CommitResult();
+ CommitResult(CommitPayload callBacks);
+ CommitResult(CommitResult &&) noexcept = default;
+ CommitResult & operator = (CommitResult &&) noexcept = default;
+ CommitResult(const CommitResult &) = delete;
+ CommitResult & operator = (const CommitResult &) = delete;
+ ~CommitResult();
+ size_t getNumOperations() const { return _callBacks->size(); }
+ private:
+ CommitPayload _callBacks;
+ };
virtual ~Writer() = default;
virtual void commit(const Packet & packet, DoneCallback done) = 0;
};
@@ -106,14 +121,20 @@ public:
class CommitChunk {
public:
CommitChunk(size_t reserveBytes, size_t reserveCount);
+ CommitChunk(size_t reserveBytes, Writer::CommitPayload postponed);
~CommitChunk();
+ bool empty() const { return _callBacks->empty(); }
void add(const Packet & packet, Writer::DoneCallback onDone);
size_t sizeBytes() const { return _data.sizeBytes(); }
const Packet & getPacket() const { return _data; }
- size_t getNumCallBacks() const { return _callBacks.size(); }
+ size_t getNumCallBacks() const { return _callBacks->size(); }
+ Writer::CommitResult createCommitResult() const;
+ void setCommitDoneCallback(Writer::DoneCallback onDone) { _onCommitDone = std::move(onDone); }
+ Writer::CommitPayload stealCallbacks() { return std::move(_callBacks); }
private:
- Packet _data;
- std::vector<Writer::DoneCallback> _callBacks;
+ Packet _data;
+ Writer::CommitPayload _callBacks;
+ Writer::DoneCallback _onCommitDone;
};
}