diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-29 09:28:46 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-11-29 09:28:46 +0000 |
commit | 235fbfd4ccd35b017a8a245aace91757330c94e9 (patch) | |
tree | 2462e917f0c01663dda4d99bf342ba74b74e869b /searchlib | |
parent | 974b223bb6a99865bc9a72e39d2fe86568564179 (diff) |
Avoid sync.
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/transactionlog/domain.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp index 25ada00e7fb..c3a40e00e37 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp @@ -7,6 +7,7 @@ #include <vespa/vespalib/io/fileutil.h> #include <vespa/vespalib/util/lambdatask.h> #include <vespa/vespalib/util/size_literals.h> +#include <vespa/vespalib/util/retain_guard.h> #include <vespa/fastos/file.h> #include <algorithm> #include <thread> @@ -64,12 +65,16 @@ Domain::Domain(const string &domainName, const string & baseDir, Executor & exec } SerialNumList partIdVector = scanDir(); const SerialNum lastPart = partIdVector.empty() ? 0 : partIdVector.back(); + vespalib::MonitoredRefCount pending; for (const SerialNum partId : partIdVector) { if ( partId != std::numeric_limits<SerialNum>::max()) { - _executor.execute(makeLambdaTask([this, partId, lastPart]() { addPart(partId, partId == lastPart); })); + _executor.execute(makeLambdaTask([this, partId, lastPart, refGuard=vespalib::RetainGuard(pending)]() { + (void) refGuard; + addPart(partId, partId == lastPart); + })); } } - _executor.sync(); + pending.waitForZeroRefCount(); if (_parts.empty() || _parts.crbegin()->second->isClosed()) { _parts[lastPart] = std::make_shared<DomainPart>(_name, dir(), lastPart, _config.getEncoding(), _config.getCompressionlevel(), _fileHeaderContext, false); |