diff options
19 files changed, 144 insertions, 123 deletions
diff --git a/fnet/src/vespa/fnet/task.cpp b/fnet/src/vespa/fnet/task.cpp index 0888cba6582..f5263450e6a 100644 --- a/fnet/src/vespa/fnet/task.cpp +++ b/fnet/src/vespa/fnet/task.cpp @@ -14,9 +14,7 @@ FNET_Task::FNET_Task(FNET_Scheduler *scheduler) } -FNET_Task::~FNET_Task() -{ -} +FNET_Task::~FNET_Task() = default; void diff --git a/searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.cpp b/searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.cpp index 85644c2111a..348adf5bf41 100644 --- a/searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.cpp +++ b/searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.cpp @@ -17,7 +17,7 @@ TransLogServerMetrics::DomainMetrics::DomainMetrics(metrics::MetricSet *parent, { } -TransLogServerMetrics::DomainMetrics::~DomainMetrics() {} +TransLogServerMetrics::DomainMetrics::~DomainMetrics() = default; void TransLogServerMetrics::DomainMetrics::update(const DomainInfo &stats) @@ -66,7 +66,7 @@ TransLogServerMetrics::TransLogServerMetrics(metrics::MetricSet *parent) { } -TransLogServerMetrics::~TransLogServerMetrics() { } +TransLogServerMetrics::~TransLogServerMetrics() = default; void TransLogServerMetrics::update(const DomainStats &stats) diff --git a/searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.h b/searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.h index 830d643e93e..727b0c6304d 100644 --- a/searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.h +++ b/searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.h @@ -3,7 +3,7 @@ #pragma once #include <vespa/metrics/metrics.h> -#include <vespa/searchlib/transactionlog/domain.h> +#include <vespa/searchlib/transactionlog/domainconfig.h> namespace proton { diff --git a/searchcore/src/vespa/searchcore/proton/server/proton.cpp b/searchcore/src/vespa/searchcore/proton/server/proton.cpp index b297dd860ea..c40f1263324 100644 --- a/searchcore/src/vespa/searchcore/proton/server/proton.cpp +++ b/searchcore/src/vespa/searchcore/proton/server/proton.cpp @@ -22,6 +22,7 @@ #include <vespa/searchcore/proton/summaryengine/docsum_by_slime.h> #include <vespa/searchcore/proton/matchengine/matchengine.h> #include <vespa/searchlib/transactionlog/trans_log_server_explorer.h> +#include <vespa/searchlib/transactionlog/translogserverapp.h> #include <vespa/searchlib/util/fileheadertk.h> #include <vespa/searchlib/common/packets.h> #include <vespa/document/base/exceptions.h> diff --git a/searchcore/src/vespa/searchcore/proton/server/proton.h b/searchcore/src/vespa/searchcore/proton/server/proton.h index 6b561ad5deb..55fd3594463 100644 --- a/searchcore/src/vespa/searchcore/proton/server/proton.h +++ b/searchcore/src/vespa/searchcore/proton/server/proton.h @@ -19,7 +19,6 @@ #include <vespa/searchcore/proton/persistenceengine/persistenceengine.h> #include <vespa/searchlib/common/fileheadercontext.h> #include <vespa/searchlib/engine/monitorapi.h> -#include <vespa/searchlib/transactionlog/translogserverapp.h> #include <vespa/vespalib/net/component_config_producer.h> #include <vespa/vespalib/net/generic_state_handler.h> #include <vespa/vespalib/net/json_get_handler.h> @@ -31,7 +30,7 @@ #include <shared_mutex> namespace vespalib { class StateServer; } - +namespace search::transactionlog { class TransLogServerApp; } namespace proton { class DiskMemUsageSampler; @@ -52,12 +51,12 @@ class Proton : public IProtonConfigurerOwner, public vespalib::StateExplorer { private: - typedef search::transactionlog::TransLogServerApp TLS; - typedef search::engine::MonitorRequest MonitorRequest; - typedef search::engine::MonitorReply MonitorReply; - typedef search::engine::MonitorClient MonitorClient; - typedef std::map<DocTypeName, DocumentDB::SP> DocumentDBMap; - typedef BootstrapConfig::ProtonConfigSP ProtonConfigSP; + using TLS = search::transactionlog::TransLogServerApp; + using MonitorRequest = search::engine::MonitorRequest; + using MonitorReply = search::engine::MonitorReply; + using MonitorClient = search::engine::MonitorClient; + using DocumentDBMap = std::map<DocTypeName, DocumentDB::SP>; + using ProtonConfigSP = BootstrapConfig::ProtonConfigSP; using InitializeThreads = std::shared_ptr<vespalib::SyncableThreadExecutor>; using BucketSpace = document::BucketSpace; @@ -91,7 +90,7 @@ private: MetricsUpdateHook _metricsHook; std::unique_ptr<MetricsEngine> _metricsEngine; ProtonFileHeaderContext _fileHeaderContext; - TLS::UP _tls; + std::unique_ptr<TLS> _tls; std::unique_ptr<DiskMemUsageSampler> _diskMemUsageSampler; PersistenceEngine::UP _persistenceEngine; DocumentDBMap _documentDBMap; diff --git a/searchlib/src/vespa/searchlib/transactionlog/CMakeLists.txt b/searchlib/src/vespa/searchlib/transactionlog/CMakeLists.txt index 4ead34552bd..5dca84a26c1 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/transactionlog/CMakeLists.txt @@ -4,6 +4,7 @@ vespa_add_library(searchlib_transactionlog OBJECT chunks.cpp common.cpp domain.cpp + domainconfig.cpp domainpart.cpp ichunk.cpp nosyncproxy.cpp diff --git a/searchlib/src/vespa/searchlib/transactionlog/common.h b/searchlib/src/vespa/searchlib/transactionlog/common.h index 0deceb2668a..5cb1d67d525 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/common.h +++ b/searchlib/src/vespa/searchlib/transactionlog/common.h @@ -90,8 +90,17 @@ int makeDirectory(const char * dir); class Writer { public: using DoneCallback = std::shared_ptr<IDestructorCallback>; - virtual ~Writer() { } + virtual ~Writer() = default; virtual void commit(const vespalib::string & domainName, const Packet & packet, DoneCallback done) = 0; }; +class Destination { +public: + virtual ~Destination() = default; + virtual bool send(int32_t id, const vespalib::string & domain, const Packet & packet) = 0; + virtual bool sendDone(int32_t id, const vespalib::string & domain) = 0; + virtual bool connected() const = 0; + virtual bool ok() const = 0; +}; + } diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp index 56320cbb723..2fa1fbdeceb 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/domain.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/domain.cpp @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "domain.h" +#include "domainpart.h" +#include "session.h" #include <vespa/vespalib/util/stringfmt.h> #include <vespa/vespalib/util/closuretask.h> #include <vespa/vespalib/io/fileutil.h> @@ -30,15 +32,6 @@ namespace search::transactionlog { VESPA_THREAD_STACK_TAG(domain_commit_executor); -DomainConfig::DomainConfig() - : _encoding(Encoding::Crc::xxh64, Encoding::Compression::none), - _compressionLevel(9), - _fSyncOnCommit(false), - _partSizeLimit(0x10000000), // 256M - _chunkSizeLimit(0x40000), // 256k - _chunkAgeLimit(10ms) -{ } - Domain::Domain(const string &domainName, const string & baseDir, Executor & commitExecutor, Executor & sessionExecutor, const DomainConfig & cfg, const FileHeaderContext &fileHeaderContext) : _config(cfg), @@ -446,7 +439,7 @@ Domain::erase(SerialNum to) int Domain::visit(const Domain::SP & domain, SerialNum from, SerialNum to, - std::unique_ptr<Session::Destination> dest) + std::unique_ptr<Destination> dest) { assert(this == domain.get()); cleanSessions(); diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.h b/searchlib/src/vespa/searchlib/transactionlog/domain.h index c45366953b6..3f9afb7dde5 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/domain.h +++ b/searchlib/src/vespa/searchlib/transactionlog/domain.h @@ -1,73 +1,23 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once -#include "domainpart.h" -#include "session.h" +#include "domainconfig.h" +#include <vespa/vespalib/util/sync.h> #include <vespa/vespalib/util/threadexecutor.h> -#include <vespa/vespalib/util/time.h> -#include <vespa/fastos/thread.h> -#include <chrono> +#include <atomic> +namespace search::common { class FileHeaderContext; } namespace search::transactionlog { -class DomainConfig { -public: - using duration = vespalib::duration; - DomainConfig(); - DomainConfig & setEncoding(Encoding v) { _encoding = v; return *this; } - DomainConfig & setPartSizeLimit(size_t v) { _partSizeLimit = v; return *this; } - DomainConfig & setChunkSizeLimit(size_t v) { _chunkSizeLimit = v; return *this; } - DomainConfig & setChunkAgeLimit(vespalib::duration v) { _chunkAgeLimit = v; return *this; } - DomainConfig & setCompressionLevel(uint8_t v) { _compressionLevel = v; return *this; } - DomainConfig & setFSyncOnCommit(bool v) { _fSyncOnCommit = v; return *this; } - Encoding getEncoding() const { return _encoding; } - size_t getPartSizeLimit() const { return _partSizeLimit; } - size_t getChunkSizeLimit() const { return _chunkSizeLimit; } - duration getChunkAgeLimit() const { return _chunkAgeLimit; } - uint8_t getCompressionlevel() const { return _compressionLevel; } - bool getFSyncOnCommit() const { return _fSyncOnCommit; } -private: - Encoding _encoding; - uint8_t _compressionLevel; - bool _fSyncOnCommit; - size_t _partSizeLimit; - size_t _chunkSizeLimit; - duration _chunkAgeLimit; -}; - -struct PartInfo { - SerialNumRange range; - size_t numEntries; - size_t byteSize; - vespalib::string file; - PartInfo(SerialNumRange range_in, size_t numEntries_in, size_t byteSize_in, vespalib::stringref file_in) - : range(range_in), - numEntries(numEntries_in), - byteSize(byteSize_in), - file(file_in) - {} -}; - -struct DomainInfo { - using DurationSeconds = std::chrono::duration<double>; - SerialNumRange range; - size_t numEntries; - size_t byteSize; - DurationSeconds maxSessionRunTime; - std::vector<PartInfo> parts; - DomainInfo(SerialNumRange range_in, size_t numEntries_in, size_t byteSize_in, DurationSeconds maxSessionRunTime_in) - : range(range_in), numEntries(numEntries_in), byteSize(byteSize_in), maxSessionRunTime(maxSessionRunTime_in), parts() {} - DomainInfo() - : range(), numEntries(0), byteSize(0), maxSessionRunTime(), parts() {} -}; - -typedef std::map<vespalib::string, DomainInfo> DomainStats; +class DomainPart; +class Session; class Domain { public: using SP = std::shared_ptr<Domain>; using Executor = vespalib::SyncableThreadExecutor; + using DomainPartSP = std::shared_ptr<DomainPart>; Domain(const vespalib::string &name, const vespalib::string &baseDir, Executor & commitExecutor, Executor & sessionExecutor, const DomainConfig & cfg, const common::FileHeaderContext &fileHeaderContext); @@ -78,7 +28,7 @@ public: bool erase(SerialNum to); void commit(const Packet & packet, Writer::DoneCallback onDone); - int visit(const Domain::SP & self, SerialNum from, SerialNum to, std::unique_ptr<Session::Destination> dest); + int visit(const Domain::SP & self, SerialNum from, SerialNum to, std::unique_ptr<Destination> dest); SerialNum begin() const; SerialNum end() const; @@ -95,7 +45,7 @@ public: int closeSession(int sessionId); SerialNum findOldestActiveVisit() const; - DomainPart::SP findPart(SerialNum s); + DomainPartSP findPart(SerialNum s); static vespalib::string getDir(const vespalib::string & base, const vespalib::string & domain) { @@ -138,8 +88,8 @@ private: SerialNumList scanDir(); - using SessionList = std::map<int, Session::SP>; - using DomainPartList = std::map<int64_t, DomainPart::SP>; + using SessionList = std::map<int, std::shared_ptr<Session>>; + using DomainPartList = std::map<int64_t, DomainPartSP>; using DurationSeconds = std::chrono::duration<double>; DomainConfig _config; diff --git a/searchlib/src/vespa/searchlib/transactionlog/domainconfig.cpp b/searchlib/src/vespa/searchlib/transactionlog/domainconfig.cpp new file mode 100644 index 00000000000..beac8cf714b --- /dev/null +++ b/searchlib/src/vespa/searchlib/transactionlog/domainconfig.cpp @@ -0,0 +1,16 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "domainconfig.h" + +namespace search::transactionlog { + +DomainConfig::DomainConfig() + : _encoding(Encoding::Crc::xxh64, Encoding::Compression::none), + _compressionLevel(9), + _fSyncOnCommit(false), + _partSizeLimit(0x10000000), // 256M + _chunkSizeLimit(0x40000), // 256k + _chunkAgeLimit(10ms) +{ } + +} diff --git a/searchlib/src/vespa/searchlib/transactionlog/domainconfig.h b/searchlib/src/vespa/searchlib/transactionlog/domainconfig.h new file mode 100644 index 00000000000..ada1e20e095 --- /dev/null +++ b/searchlib/src/vespa/searchlib/transactionlog/domainconfig.h @@ -0,0 +1,63 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include "ichunk.h" +#include <vespa/vespalib/util/time.h> +#include <map> + +namespace search::transactionlog { + +class DomainConfig { +public: + using duration = vespalib::duration; + DomainConfig(); + DomainConfig & setEncoding(Encoding v) { _encoding = v; return *this; } + DomainConfig & setPartSizeLimit(size_t v) { _partSizeLimit = v; return *this; } + DomainConfig & setChunkSizeLimit(size_t v) { _chunkSizeLimit = v; return *this; } + DomainConfig & setChunkAgeLimit(vespalib::duration v) { _chunkAgeLimit = v; return *this; } + DomainConfig & setCompressionLevel(uint8_t v) { _compressionLevel = v; return *this; } + DomainConfig & setFSyncOnCommit(bool v) { _fSyncOnCommit = v; return *this; } + Encoding getEncoding() const { return _encoding; } + size_t getPartSizeLimit() const { return _partSizeLimit; } + size_t getChunkSizeLimit() const { return _chunkSizeLimit; } + duration getChunkAgeLimit() const { return _chunkAgeLimit; } + uint8_t getCompressionlevel() const { return _compressionLevel; } + bool getFSyncOnCommit() const { return _fSyncOnCommit; } +private: + Encoding _encoding; + uint8_t _compressionLevel; + bool _fSyncOnCommit; + size_t _partSizeLimit; + size_t _chunkSizeLimit; + duration _chunkAgeLimit; +}; + +struct PartInfo { + SerialNumRange range; + size_t numEntries; + size_t byteSize; + vespalib::string file; + PartInfo(SerialNumRange range_in, size_t numEntries_in, size_t byteSize_in, vespalib::stringref file_in) + : range(range_in), + numEntries(numEntries_in), + byteSize(byteSize_in), + file(file_in) + {} +}; + +struct DomainInfo { + using DurationSeconds = std::chrono::duration<double>; + SerialNumRange range; + size_t numEntries; + size_t byteSize; + DurationSeconds maxSessionRunTime; + std::vector<PartInfo> parts; + DomainInfo(SerialNumRange range_in, size_t numEntries_in, size_t byteSize_in, DurationSeconds maxSessionRunTime_in) + : range(range_in), numEntries(numEntries_in), byteSize(byteSize_in), maxSessionRunTime(maxSessionRunTime_in), parts() {} + DomainInfo() + : range(), numEntries(0), byteSize(0), maxSessionRunTime(), parts() {} +}; + +using DomainStats = std::map<vespalib::string, DomainInfo>; + +} diff --git a/searchlib/src/vespa/searchlib/transactionlog/ichunk.h b/searchlib/src/vespa/searchlib/transactionlog/ichunk.h index 5e44815cb1b..854227cfc9c 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/ichunk.h +++ b/searchlib/src/vespa/searchlib/transactionlog/ichunk.h @@ -3,9 +3,6 @@ #pragma once #include "common.h" -#include <memory> - -namespace vespalib { class nbostream; } namespace search::transactionlog { diff --git a/searchlib/src/vespa/searchlib/transactionlog/session.cpp b/searchlib/src/vespa/searchlib/transactionlog/session.cpp index dda840808ce..c91b719be37 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/session.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/session.cpp @@ -1,6 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "session.h" #include "domain.h" +#include "domainpart.h" #include <vespa/fastlib/io/bufferedfile.h> #include <vespa/log/log.h> diff --git a/searchlib/src/vespa/searchlib/transactionlog/session.h b/searchlib/src/vespa/searchlib/transactionlog/session.h index 9b8d23371e8..ddbe218ed4e 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/session.h +++ b/searchlib/src/vespa/searchlib/transactionlog/session.h @@ -23,14 +23,6 @@ private: using time_point = std::chrono::time_point<std::chrono::steady_clock>; public: - class Destination { - public: - virtual ~Destination() = default; - virtual bool send(int32_t id, const vespalib::string & domain, const Packet & packet) = 0; - virtual bool sendDone(int32_t id, const vespalib::string & domain) = 0; - virtual bool connected() const = 0; - virtual bool ok() const = 0; - }; typedef std::shared_ptr<Session> SP; Session(const Session &) = delete; Session & operator = (const Session &) = delete; diff --git a/searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.cpp b/searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.cpp index 1d1edbed658..bdf12ab64e8 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.cpp @@ -1,6 +1,8 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "trans_log_server_explorer.h" +#include "translogserver.h" +#include "domain.h" #include <vespa/vespalib/data/slime/slime.h> #include <vespa/vespalib/util/time.h> #include <vespa/fastos/file.h> @@ -44,6 +46,7 @@ struct DomainExplorer : vespalib::StateExplorer { } // namespace search::transactionlog::<unnamed> +TransLogServerExplorer::~TransLogServerExplorer() = default; void TransLogServerExplorer::get_state(const Inserter &inserter, bool full) const { diff --git a/searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.h b/searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.h index 65d3a687bc9..66fb1698104 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.h +++ b/searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.h @@ -2,24 +2,27 @@ #pragma once -#include "translogserver.h" #include <vespa/vespalib/net/state_explorer.h> namespace search::transactionlog { +class TransLogServer; + /** * Class used to explore the state of a transaction log server. */ class TransLogServerExplorer : public vespalib::StateExplorer { private: - TransLogServer::SP _server; + using TransLogServerSP = std::shared_ptr<TransLogServer>; + TransLogServerSP _server; public: - TransLogServerExplorer(TransLogServer::SP server) : _server(std::move(server)) {} - virtual void get_state(const vespalib::slime::Inserter &inserter, bool full) const override; - virtual std::vector<vespalib::string> get_children_names() const override; - virtual std::unique_ptr<StateExplorer> get_child(vespalib::stringref name) const override; + TransLogServerExplorer(TransLogServerSP server) : _server(std::move(server)) {} + ~TransLogServerExplorer() override; + void get_state(const vespalib::slime::Inserter &inserter, bool full) const override; + std::vector<vespalib::string> get_children_names() const override; + std::unique_ptr<StateExplorer> get_child(vespalib::stringref name) const override; }; } diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp index 03ea237e161..ec70f32694a 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp +++ b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp @@ -1,9 +1,9 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "translogserver.h" +#include "domain.h" #include <vespa/searchlib/common/gatecallback.h> #include <vespa/vespalib/util/stringfmt.h> #include <vespa/vespalib/io/fileutil.h> -#include <vespa/vespalib/util/time.h> #include <vespa/vespalib/util/exceptions.h> #include <vespa/fnet/frt/supervisor.h> #include <vespa/fnet/frt/rpcrequest.h> @@ -42,7 +42,6 @@ public: void PerformTask() override; }; - SyncHandler::SyncHandler(FRT_Supervisor *supervisor, FRT_RPCRequest *req, const Domain::SP &domain, const TransLogServer::Session::SP &session, SerialNum syncTo) : FNET_Task(supervisor->GetScheduler()), @@ -53,10 +52,8 @@ SyncHandler::SyncHandler(FRT_Supervisor *supervisor, FRT_RPCRequest *req, const { } - SyncHandler::~SyncHandler() = default; - void SyncHandler::PerformTask() { @@ -75,7 +72,6 @@ SyncHandler::PerformTask() } } - class StaleCommitTask final : public FNET_Task { public: StaleCommitTask(FNET_Scheduler * sceduler, TransLogServer & server, double seconds2Wait) @@ -89,8 +85,6 @@ public: if (_server.running()) { _server.commitIfStale(); Schedule(_seconds2Wait); - } else { - delete this; } } private: @@ -168,12 +162,13 @@ TransLogServer::TransLogServer(const vespalib::string &name, int listenPort, con } start(*_threadPool); double chunkAgeLimit = vespalib::to_s(_domainConfig.getChunkAgeLimit()); - auto staleCommitTask = new StaleCommitTask(_supervisor->GetScheduler(), *this, chunkAgeLimit); - staleCommitTask->ScheduleNow(); + _staleCommitTask = std::make_unique<StaleCommitTask>(_supervisor->GetScheduler(), *this, chunkAgeLimit); + _staleCommitTask->ScheduleNow(); } TransLogServer::~TransLogServer() { + _staleCommitTask->Kill(); stop(); join(); _commitExecutor.shutdown(); @@ -397,7 +392,7 @@ writeDomainDir(std::lock_guard<std::mutex> &guard, vespalib::File::sync(dir); } -class RPCDestination : public Session::Destination { +class RPCDestination : public Destination { public: RPCDestination(FRT_Supervisor & supervisor, FNET_Connection * connection) : _supervisor(supervisor), _connection(connection), _ok(true) diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserver.h b/searchlib/src/vespa/searchlib/transactionlog/translogserver.h index 385af5c96bf..8e0e8041385 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/translogserver.h +++ b/searchlib/src/vespa/searchlib/transactionlog/translogserver.h @@ -1,7 +1,7 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #pragma once -#include "domain.h" +#include "domainconfig.h" #include <vespa/vespalib/util/document_runnable.h> #include <vespa/vespalib/util/threadstackexecutor.h> #include <vespa/document/util/queue.h> @@ -10,19 +10,20 @@ class FRT_Supervisor; class FNET_Transport; +class FNET_Task; namespace search::common { class FileHeaderContext; } namespace search::transactionlog { class TransLogServerExplorer; +class Domain; class TransLogServer : public document::Runnable, private FRT_Invokable, public Writer { public: friend class TransLogServerExplorer; - typedef std::unique_ptr<TransLogServer> UP; - typedef std::shared_ptr<TransLogServer> SP; - + using SP = std::shared_ptr<TransLogServer>; + using DomainSP = std::shared_ptr<Domain>; TransLogServer(const vespalib::string &name, int listenPort, const vespalib::string &baseDir, const common::FileHeaderContext &fileHeaderContext, const DomainConfig & cfg, size_t maxThreads); TransLogServer(const vespalib::string &name, int listenPort, const vespalib::string &baseDir, @@ -70,13 +71,13 @@ private: void downSession(FRT_RPCRequest *req); std::vector<vespalib::string> getDomainNames(); - Domain::SP findDomain(vespalib::stringref name); + DomainSP findDomain(vespalib::stringref name); vespalib::string dir() const { return _baseDir + "/" + _name; } vespalib::string domainList() const { return dir() + "/" + _name + ".domains"; } static const Session::SP & getSession(FRT_RPCRequest *req); - using DomainList = std::map<vespalib::string, Domain::SP >; + using DomainList = std::map<vespalib::string, DomainSP >; vespalib::string _name; vespalib::string _baseDir; @@ -86,6 +87,7 @@ private: std::unique_ptr<FastOS_ThreadPool> _threadPool; std::unique_ptr<FNET_Transport> _transport; std::unique_ptr<FRT_Supervisor> _supervisor; + std::unique_ptr<FNET_Task> _staleCommitTask; DomainList _domains; mutable std::mutex _domainMutex; // Protects _domains std::condition_variable _domainCondition; diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h b/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h index d46805c105c..fb93559c29f 100644 --- a/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h +++ b/searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h @@ -23,11 +23,9 @@ private: void configure(std::unique_ptr<searchlib::TranslogserverConfig> cfg) override ; public: - typedef std::unique_ptr<TransLogServerApp> UP; - TransLogServerApp(const config::ConfigUri & tlsConfigUri, const common::FileHeaderContext &fileHeaderContext); - ~TransLogServerApp(); + ~TransLogServerApp() override; TransLogServer::SP getTransLogServer() const; |