aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-09-29 11:20:19 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-09-29 11:20:19 +0000
commit49b4fe09df28949208ff78ee98c582ce2d7fd99c (patch)
treeba91ce3c89d295740c7e1fc13b6ad5e891295f47 /searchlib/src
parent628a9a9dd57d9eadd3ad786c5cde40ccfec1ba63 (diff)
Commit last chunk prior to sync.
Diffstat (limited to 'searchlib/src')
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.h1
2 files changed, 13 insertions, 3 deletions
diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp
index bd7feec0598..126a7afed4d 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp
+++ b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp
@@ -209,6 +209,10 @@ Domain::getSynced() const
void
Domain::triggerSyncNow()
{
+ {
+ vespalib::MonitorGuard guard(_currentChunkMonitor);
+ commitAndTransferResponses(guard);
+ }
MonitorGuard guard(_syncMonitor);
if (!_pendingSync) {
_pendingSync = true;
@@ -352,12 +356,17 @@ Domain::startCommit(DoneCallback onDone) {
void
Domain::commitIfFull(const vespalib::MonitorGuard &guard) {
if (_currentChunk->sizeBytes() > _config.getChunkSizeLimit()) {
- auto completed = std::move(_currentChunk);
- _currentChunk = std::make_unique<CommitChunk>(_config.getChunkSizeLimit(), completed->stealCallbacks());
- commitChunk(std::move(completed), guard);
+ commitAndTransferResponses(guard);
}
}
+void
+Domain::commitAndTransferResponses(const vespalib::MonitorGuard &guard) {
+ auto completed = std::move(_currentChunk);
+ _currentChunk = std::make_unique<CommitChunk>(_config.getChunkSizeLimit(), completed->stealCallbacks());
+ commitChunk(std::move(completed), guard);
+}
+
std::unique_ptr<CommitChunk>
Domain::grabCurrentChunk(const vespalib::MonitorGuard & guard) {
assert(guard.monitors(_currentChunkMonitor));
diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.h b/searchlib/src/vespa/searchlib/transactionlog/domain.h
index 041ec27cf23..e41ad930840 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/domain.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/domain.h
@@ -57,6 +57,7 @@ public:
Domain & setConfig(const DomainConfig & cfg);
private:
void commitIfFull(const vespalib::MonitorGuard & guard);
+ void commitAndTransferResponses(const vespalib::MonitorGuard & guard);
std::unique_ptr<CommitChunk> grabCurrentChunk(const vespalib::MonitorGuard & guard);
void commitChunk(std::unique_ptr<CommitChunk> chunk, const vespalib::MonitorGuard & chunkOrderGuard);