summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@oath.com>2017-10-11 11:41:56 +0000
committerTor Egge <Tor.Egge@oath.com>2017-10-11 11:41:56 +0000
commitb9045545bcdf00961231cd5bda9a323fb89daa1b (patch)
treecafa8595fdcdede7fb4507eddba5c4730decd34d /searchlib
parent41954227a91b74499f24326ab288ea21f8eae604 (diff)
Wait for existing sync task to complete before scheduling a new sync task
when switching to new domain part.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp
index 5146de3b50e..5d66dded0dd 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp
+++ b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp
@@ -263,6 +263,18 @@ void Domain::cleanSessions()
}
}
+namespace {
+
+void waitPendingSync(vespalib::Monitor &syncMonitor, bool &pendingSync)
+{
+ MonitorGuard guard(syncMonitor);
+ while (pendingSync) {
+ guard.wait();
+ }
+}
+
+}
+
void Domain::commit(const Packet & packet)
{
DomainPart::SP dp(_parts.rbegin()->second);
@@ -270,13 +282,9 @@ void Domain::commit(const Packet & packet)
Packet::Entry entry;
entry.deserialize(is);
if (dp->byteSize() > _domainPartSize) {
+ waitPendingSync(_syncMonitor, _pendingSync);
triggerSyncNow();
- {
- MonitorGuard guard(_syncMonitor);
- while (_pendingSync) {
- guard.wait();
- }
- }
+ waitPendingSync(_syncMonitor, _pendingSync);
dp->close();
dp.reset(new DomainPart(_name, dir(), entry.serial(), _defaultCrcType, _fileHeaderContext, false));
{