summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-09-15 18:29:54 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-09-15 18:29:54 +0000
commitfbc9f364526587b0f312ef186e619a1f53c00617 (patch)
tree140d6237d7de933da0b5ea4011742b2276dea58b /searchlib
parent7ecd25a81bb636174954da2caa8255cc1f7b3515 (diff)
Avoid a lookup and copying a shared_ptr by looking up and using the domain directly.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/transactionlog/translogclient_test.cpp5
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/common.h8
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/domain.h6
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp10
-rw-r--r--searchlib/src/vespa/searchlib/transactionlog/translogserver.h6
5 files changed, 21 insertions, 14 deletions
diff --git a/searchlib/src/tests/transactionlog/translogclient_test.cpp b/searchlib/src/tests/transactionlog/translogclient_test.cpp
index 3ee5b73102e..80142f705c1 100644
--- a/searchlib/src/tests/transactionlog/translogclient_test.cpp
+++ b/searchlib/src/tests/transactionlog/translogclient_test.cpp
@@ -322,17 +322,18 @@ fillDomainTest(TransLogServer & s1, const vespalib::string & domain, size_t numP
{
size_t value(0);
Counter inFlight(0);
+ auto domainWriter = s1.getWriter(domain);
for(size_t i=0; i < numPackets; i++) {
std::unique_ptr<Packet> p(new Packet(DEFAULT_PACKET_SIZE));
for(size_t j=0; j < numEntries; j++, value++) {
Packet::Entry e(value+1, j+1, vespalib::ConstBufferRef((const char *)&value, sizeof(value)));
p->add(e);
if ( p->sizeBytes() > DEFAULT_PACKET_SIZE ) {
- s1.commit(domain, *p, std::make_shared<CountDone>(inFlight));
+ domainWriter->commit(*p, std::make_shared<CountDone>(inFlight));
p = std::make_unique<Packet>(DEFAULT_PACKET_SIZE);
}
}
- s1.commit(domain, *p, std::make_shared<CountDone>(inFlight));
+ domainWriter->commit(*p, std::make_shared<CountDone>(inFlight));
LOG(info, "Inflight %ld", inFlight.load());
}
while (inFlight.load() != 0) {
diff --git a/searchlib/src/vespa/searchlib/transactionlog/common.h b/searchlib/src/vespa/searchlib/transactionlog/common.h
index 8dba5d448f8..8bfa17cfcfb 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/common.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/common.h
@@ -85,7 +85,13 @@ class Writer {
public:
using DoneCallback = std::shared_ptr<IDestructorCallback>;
virtual ~Writer() = default;
- virtual void commit(const vespalib::string & domainName, const Packet & packet, DoneCallback done) = 0;
+ virtual void commit(const Packet & packet, DoneCallback done) = 0;
+};
+
+class WriterFactory {
+public:
+ virtual ~WriterFactory() = default;
+ virtual std::shared_ptr<Writer> getWriter(const vespalib::string & domainName) const = 0;
};
class Destination {
diff --git a/searchlib/src/vespa/searchlib/transactionlog/domain.h b/searchlib/src/vespa/searchlib/transactionlog/domain.h
index c2cdb6f86b9..9adff564cc8 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/domain.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/domain.h
@@ -12,7 +12,7 @@ namespace search::transactionlog {
class DomainPart;
class Session;
-class Domain
+class Domain : public Writer
{
public:
using SP = std::shared_ptr<Domain>;
@@ -21,13 +21,13 @@ public:
Domain(const vespalib::string &name, const vespalib::string &baseDir, Executor & executor,
const DomainConfig & cfg, const common::FileHeaderContext &fileHeaderContext);
- ~Domain();
+ ~Domain() override;
DomainInfo getDomainInfo() const;
const vespalib::string & name() const { return _name; }
bool erase(SerialNum to);
- void commit(const Packet & packet, Writer::DoneCallback onDone);
+ void commit(const Packet & packet, Writer::DoneCallback onDone) override;
int visit(const Domain::SP & self, SerialNum from, SerialNum to, std::unique_ptr<Destination> dest);
SerialNum begin() const;
diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp
index 64e472520a5..fcef06c3f2e 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp
+++ b/searchlib/src/vespa/searchlib/transactionlog/translogserver.cpp
@@ -243,10 +243,10 @@ TransLogServer::getDomainNames()
}
Domain::SP
-TransLogServer::findDomain(stringref domainName)
+TransLogServer::findDomain(stringref domainName) const
{
ReadGuard domainGuard(_domainMutex);
- DomainList::iterator found(_domains.find(domainName));
+ auto found(_domains.find(domainName));
if (found != _domains.end()) {
return found->second;
}
@@ -556,12 +556,12 @@ TransLogServer::domainStatus(FRT_RPCRequest *req)
}
}
-void
-TransLogServer::commit(const vespalib::string & domainName, const Packet & packet, DoneCallback done)
+std::shared_ptr<Writer>
+TransLogServer::getWriter(const vespalib::string & domainName) const
{
Domain::SP domain(findDomain(domainName));
if (domain) {
- domain->commit(packet, std::move(done));
+ return domain;
} else {
throw IllegalArgumentException("Could not find domain " + domainName);
}
diff --git a/searchlib/src/vespa/searchlib/transactionlog/translogserver.h b/searchlib/src/vespa/searchlib/transactionlog/translogserver.h
index 1c3ed24ecea..77e38c90c9a 100644
--- a/searchlib/src/vespa/searchlib/transactionlog/translogserver.h
+++ b/searchlib/src/vespa/searchlib/transactionlog/translogserver.h
@@ -18,7 +18,7 @@ namespace search::transactionlog {
class TransLogServerExplorer;
class Domain;
-class TransLogServer : public document::Runnable, private FRT_Invokable, public Writer
+class TransLogServer : public document::Runnable, private FRT_Invokable, public WriterFactory
{
public:
friend class TransLogServerExplorer;
@@ -33,7 +33,7 @@ public:
~TransLogServer() override;
DomainStats getDomainStats() const;
bool commitIfStale();
- void commit(const vespalib::string & domainName, const Packet & packet, DoneCallback done) override;
+ std::shared_ptr<Writer> getWriter(const vespalib::string & domainName) const override;
TransLogServer & setDomainConfig(const DomainConfig & cfg);
vespalib::duration getChunkAgeLimit() const;
@@ -72,7 +72,7 @@ private:
void downSession(FRT_RPCRequest *req);
std::vector<vespalib::string> getDomainNames();
- DomainSP findDomain(vespalib::stringref name);
+ DomainSP findDomain(vespalib::stringref name) const;
vespalib::string dir() const { return _baseDir + "/" + _name; }
vespalib::string domainList() const { return dir() + "/" + _name + ".domains"; }