summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2017-10-12 14:18:26 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2017-10-17 15:52:10 +0200
commitb2de6349a5e71ac46b1bd7f38ff38c96f4b1a189 (patch)
tree25b6e907470902fbf507f4913bead957ec424a8a /searchlib
parent4d335b9bde8f4c4b624471a5eb956af4ae6ba73e (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')
-rw-r--r--searchlib/src/vespa/searchlib/common/CMakeLists.txt1
-rw-r--r--searchlib/src/vespa/searchlib/common/gatecallback.cpp12
-rw-r--r--searchlib/src/vespa/searchlib/common/gatecallback.h24
-rw-r--r--searchlib/src/vespa/searchlib/common/idestructorcallback.h5
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/common.h4
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp3
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/translogserver.h2
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