diff options
author | Tor Egge <Tor.Egge@oath.com> | 2017-10-11 11:41:56 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@oath.com> | 2017-10-11 11:41:56 +0000 |
commit | b9045545bcdf00961231cd5bda9a323fb89daa1b (patch) | |
tree | cafa8595fdcdede7fb4507eddba5c4730decd34d /searchlib | |
parent | 41954227a91b74499f24326ab288ea21f8eae604 (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.cpp | 20 |
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)); { |