diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-10-10 16:53:52 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-10-10 16:55:13 +0200 |
commit | 440abe7b5a68a530e96a677e86d1a74de3c0c050 (patch) | |
tree | b079655e038670349068da2cdb5da8ccf94aea4e /searchlib | |
parent | 747ec906a6185372ed94c167885afe706cf5948c (diff) |
Introduce a commit executor. For now it will be the same as the session executor.
However, later on they might differ.
Diffstat (limited to 'searchlib')
3 files changed, 16 insertions, 12 deletions
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<vespalib::string, DomainInfo> DomainStats; class Domain { public: - typedef std::shared_ptr<Domain> 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<Domain>; + 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<int, Session::SP>; using DomainPartList = std::map<int64_t, DomainPart::SP>; - using Executor = vespalib::ThreadExecutor; DomainPart::Crc _defaultCrcType; + Executor & _commitExecutor; Executor & _sessionExecutor; std::atomic<int> _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<Domain>(domainName, dir(), _sessionExecutor, _domainPartSize, - _defaultCrcType,_fileHeaderContext); + auto domain = std::make_shared<Domain>(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<Domain>(domainName, dir(), _sessionExecutor, _domainPartSize, - _defaultCrcType, _fileHeaderContext); + domain = std::make_shared<Domain>(domainName, dir(), _sessionExecutor, _sessionExecutor, + _domainPartSize, _defaultCrcType, _fileHeaderContext); { Guard domainGuard(_lock); _domains[domain->name()] = domain; |