summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-11-29 09:28:46 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-11-29 09:28:46 +0000
commit235fbfd4ccd35b017a8a245aace91757330c94e9 (patch)
tree2462e917f0c01663dda4d99bf342ba74b74e869b
parent974b223bb6a99865bc9a72e39d2fe86568564179 (diff)
Avoid sync.
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.cpp9
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);