summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-10-10 16:53:52 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-10-10 16:55:13 +0200
commit440abe7b5a68a530e96a677e86d1a74de3c0c050 (patch)
treeb079655e038670349068da2cdb5da8ccf94aea4e /searchlib
parent747ec906a6185372ed94c167885afe706cf5948c (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')
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.cpp9
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.h11
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp8
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;