diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2017-10-12 14:18:26 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2017-10-17 15:52:10 +0200 |
commit | b2de6349a5e71ac46b1bd7f38ff38c96f4b1a189 (patch) | |
tree | 25b6e907470902fbf507f4913bead957ec424a8a /searchlib | |
parent | 4d335b9bde8f4c4b624471a5eb956af4ae6ba73e (diff) |
Introduce async write interface in the TLS.
Wire it in all the way up and in to proton.
The implementation is still synchronous.
Diffstat (limited to 'searchlib')
7 files changed, 45 insertions, 6 deletions
diff --git a/searchlib/src/vespa/searchlib/common/CMakeLists.txt b/searchlib/src/vespa/searchlib/common/CMakeLists.txt index b1f71303449..f9db738528c 100644 --- a/searchlib/src/vespa/searchlib/common/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/common/CMakeLists.txt @@ -13,6 +13,7 @@ vespa_add_library(searchlib_common OBJECT featureset.cpp fileheadercontext.cpp foregroundtaskexecutor.cpp + gatecallback.cpp growablebitvector.cpp indexmetainfo.cpp location.cpp diff --git a/searchlib/src/vespa/searchlib/common/gatecallback.cpp b/searchlib/src/vespa/searchlib/common/gatecallback.cpp new file mode 100644 index 00000000000..a853909be71 --- /dev/null +++ b/searchlib/src/vespa/searchlib/common/gatecallback.cpp @@ -0,0 +1,12 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "gatecallback.h" +#include <vespa/vespalib/util/sync.h> + +namespace search { + +GateCallback::~GateCallback() { + _gate.countDown(); +} + +} diff --git a/searchlib/src/vespa/searchlib/common/gatecallback.h b/searchlib/src/vespa/searchlib/common/gatecallback.h new file mode 100644 index 00000000000..1e85d796089 --- /dev/null +++ b/searchlib/src/vespa/searchlib/common/gatecallback.h @@ -0,0 +1,24 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include "idestructorcallback.h" + +namespace vespalib { class Gate; } + +namespace search { + +class GateCallback : public IDestructorCallback { +public: + GateCallback(vespalib::Gate & gate) : _gate(gate) {} + ~GateCallback() override; +private: + vespalib::Gate & _gate; +}; + +class IgnoreCallback : public IDestructorCallback { +public: + IgnoreCallback() { } + ~IgnoreCallback() override = default; +}; + +} // namespace search diff --git a/searchlib/src/vespa/searchlib/common/idestructorcallback.h b/searchlib/src/vespa/searchlib/common/idestructorcallback.h index 4c42f68f0e4..77adba7a4cc 100644 --- a/searchlib/src/vespa/searchlib/common/idestructorcallback.h +++ b/searchlib/src/vespa/searchlib/common/idestructorcallback.h @@ -3,8 +3,7 @@ #include <memory> -namespace search -{ +namespace search { /** * Interface for class that performs a callback when instance is @@ -17,7 +16,7 @@ class IDestructorCallback { public: using SP = std::shared_ptr<IDestructorCallback>; - virtual ~IDestructorCallback() { } + virtual ~IDestructorCallback() = default; }; } // namespace search diff --git a/searchlib/src/vespa/searchlib/transactionlog/common.h b/searchlib/src/vespa/searchlib/transactionlog/common.h index 65ef8f363c0..db8b9727daa 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/common.h +++ b/searchlib/src/vespa/searchlib/transactionlog/common.h @@ -2,6 +2,7 @@ #pragma once #include <vespa/searchlib/common/serialnum.h> +#include <vespa/searchlib/common/idestructorcallback.h> #include <vespa/vespalib/objects/nbostream.h> #include <vespa/vespalib/util/buffer.h> @@ -90,8 +91,9 @@ int makeDirectory(const char * dir); class Writer { public: + using DoneCallback = std::shared_ptr<IDestructorCallback>; virtual ~Writer() { } - virtual void commit(const vespalib::string & domainName, const Packet & packet) = 0; + virtual void commit(const vespalib::string & domainName, const Packet & packet, DoneCallback done) = 0; }; } diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp index ca17457bdb9..e793aafd38f 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp @@ -453,8 +453,9 @@ void TransLogServer::domainStatus(FRT_RPCRequest *req) } } -void TransLogServer::commit(const vespalib::string & domainName, const Packet & packet) +void TransLogServer::commit(const vespalib::string & domainName, const Packet & packet, DoneCallback done) { + (void) done; Domain::SP domain(findDomain(domainName)); if (domain) { domain->commit(packet); diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserver.h b/searchlib/src/vespa/searchlib/transactionlog/translogserver.h index 92832786059..c12e37dd1c8 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/translogserver.h +++ b/searchlib/src/vespa/searchlib/transactionlog/translogserver.h @@ -31,7 +31,7 @@ public: virtual ~TransLogServer(); DomainStats getDomainStats() const; - void commit(const vespalib::string & domainName, const Packet & packet) override; + void commit(const vespalib::string & domainName, const Packet & packet, DoneCallback done) override; class Session |