From 440abe7b5a68a530e96a677e86d1a74de3c0c050 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Tue, 10 Oct 2017 16:53:52 +0200 Subject: Introduce a commit executor. For now it will be the same as the session executor. However, later on they might differ. --- searchlib/src/vespa/searchlib/transactionlog/domain.cpp | 9 ++++++--- searchlib/src/vespa/searchlib/transactionlog/domain.h | 11 ++++++----- .../src/vespa/searchlib/transactionlog/translogserver.cpp | 8 ++++---- 3 files changed, 16 insertions(+), 12 deletions(-) (limited to 'searchlib') diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp index db21b0244cc..5146de3b50e 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp @@ -21,10 +21,11 @@ using std::runtime_error; namespace search::transactionlog { -Domain::Domain(const string &domainName, const string & baseDir, - vespalib::ThreadExecutor & sessionExecutor, uint64_t domainPartSize, - DomainPart::Crc defaultCrcType, const FileHeaderContext &fileHeaderContext) : +Domain::Domain(const string &domainName, const string & baseDir, Executor & commitExecutor, + Executor & sessionExecutor, uint64_t domainPartSize, DomainPart::Crc defaultCrcType, + const FileHeaderContext &fileHeaderContext) : _defaultCrcType(defaultCrcType), + _commitExecutor(commitExecutor), _sessionExecutor(sessionExecutor), _sessionId(1), _syncMonitor(), @@ -192,6 +193,7 @@ Domain::triggerSyncNow() MonitorGuard guard(_syncMonitor); if (!_pendingSync) { _pendingSync = true; + _commitExecutor.sync(); DomainPart::SP dp(_parts.rbegin()->second); _sessionExecutor.execute(Sync::UP(new Sync(_syncMonitor, dp, _pendingSync))); } @@ -344,6 +346,7 @@ int Domain::startSession(int sessionId) int Domain::closeSession(int sessionId) { + _commitExecutor.sync(); int retval(-1); { LockGuard guard(_sessionLock); diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.h b/searchlib/src/vespa/searchlib/transactionlog/domain.h index f2172bf70ed..dfd201d182f 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/domain.h +++ b/searchlib/src/vespa/searchlib/transactionlog/domain.h @@ -35,10 +35,11 @@ typedef std::map DomainStats; class Domain { public: - typedef std::shared_ptr SP; - Domain(const vespalib::string &name, const vespalib::string &baseDir, - vespalib::ThreadExecutor & sessionExecutor, uint64_t domainPartSize, - DomainPart::Crc defaultCrcType, const common::FileHeaderContext &fileHeaderContext); + using SP = std::shared_ptr; + using Executor = vespalib::ThreadExecutor; + Domain(const vespalib::string &name, const vespalib::string &baseDir, Executor & commitExecutor, + Executor & sessionExecutor, uint64_t domainPartSize, DomainPart::Crc defaultCrcType, + const common::FileHeaderContext &fileHeaderContext); virtual ~Domain(); @@ -89,9 +90,9 @@ private: using SessionList = std::map; using DomainPartList = std::map; - using Executor = vespalib::ThreadExecutor; DomainPart::Crc _defaultCrcType; + Executor & _commitExecutor; Executor & _sessionExecutor; std::atomic _sessionId; vespalib::Monitor _syncMonitor; diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp index 2e0a0414321..e1fc4399613 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp @@ -109,8 +109,8 @@ TransLogServer::TransLogServer(const vespalib::string &name, int listenPort, con domainDir >> domainName; if ( ! domainName.empty()) { try { - auto domain = std::make_shared(domainName, dir(), _sessionExecutor, _domainPartSize, - _defaultCrcType,_fileHeaderContext); + auto domain = std::make_shared(domainName, dir(), _sessionExecutor, _sessionExecutor, + _domainPartSize, _defaultCrcType,_fileHeaderContext); _domains[domain->name()] = domain; } catch (const std::exception & e) { LOG(warning, "Failed creating %s domain on startup. Exception = %s", domainName.c_str(), e.what()); @@ -356,8 +356,8 @@ void TransLogServer::createDomain(FRT_RPCRequest *req) Domain::SP domain(findDomain(domainName)); if ( !domain ) { try { - domain = std::make_shared(domainName, dir(), _sessionExecutor, _domainPartSize, - _defaultCrcType, _fileHeaderContext); + domain = std::make_shared(domainName, dir(), _sessionExecutor, _sessionExecutor, + _domainPartSize, _defaultCrcType, _fileHeaderContext); { Guard domainGuard(_lock); _domains[domain->name()] = domain; -- cgit v1.2.3