summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-09-14 09:24:02 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-09-14 09:24:02 +0000
commite07397569ebe62ef3ecb62f2f2698d4cb798893f (patch)
tree4bbbc406bd9877d8de70e0844208070aaa8e9a70
parent7619197c924289a83dda3066e7fc0f9fb06821ad (diff)
Add commit chunk
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/common.cpp25
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/common.h16
2 files changed, 41 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/transactionlog/common.cpp b/searchlib/src/vespa/searchlib/transactionlog/common.cpp
index afaaa349b64..209616614f7 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/common.cpp
+++ b/searchlib/src/vespa/searchlib/transactionlog/common.cpp
@@ -121,4 +121,29 @@ Packet::add(const Packet::Entry & e)
_range.to(e.serial());
}
+CommitChunk::CommitChunk()
+ : _data(size_t(-1)),
+ _callBacks(),
+ _firstArrivalTime()
+{}
+
+CommitChunk::~CommitChunk() = default;
+
+void
+CommitChunk::add(const Packet &packet, Writer::DoneCallback onDone) {
+ if (_callBacks.empty()) {
+ _firstArrivalTime = vespalib::steady_clock::now();
+ }
+ _data.merge(packet);
+ _callBacks.emplace_back(std::move(onDone));
+}
+
+vespalib::duration
+CommitChunk::age() const {
+ if (_callBacks.empty()) {
+ return 0ms;
+ }
+ return (vespalib::steady_clock::now() - _firstArrivalTime);
+}
+
}
diff --git a/searchlib/src/vespa/searchlib/transactionlog/common.h b/searchlib/src/vespa/searchlib/transactionlog/common.h
index 5cb1d67d525..ae2f6f1a962 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/common.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/common.h
@@ -5,6 +5,7 @@
#include <vespa/searchlib/common/idestructorcallback.h>
#include <vespa/vespalib/objects/nbostream.h>
#include <vespa/vespalib/util/buffer.h>
+#include <vespa/vespalib/util/time.h>
namespace search::transactionlog {
@@ -103,4 +104,19 @@ public:
virtual bool ok() const = 0;
};
+class CommitChunk {
+public:
+ CommitChunk();
+ ~CommitChunk();
+ void add(const Packet & packet, Writer::DoneCallback onDone);
+ size_t sizeBytes() const { return _data.sizeBytes(); }
+ const Packet & getPacket() const { return _data; }
+ vespalib::duration age() const;
+ size_t getNumCallBacks() const { return _callBacks.size(); }
+private:
+ Packet _data;
+ std::vector<Writer::DoneCallback> _callBacks;
+ vespalib::steady_time _firstArrivalTime;
+};
+
}