summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fnet/src/vespa/fnet/task.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/metrics/trans_log_server_metrics.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/proton.cpp1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/proton.h17
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/CMakeLists.txt1
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/common.h11
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.cpp13
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.h72
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domainconfig.cpp16
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domainconfig.h63
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/ichunk.h3
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/session.cpp1
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/session.h8
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.cpp3
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/trans_log_server_explorer.h15
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/translogserver.h14
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/translogserverapp.h4
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;