summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-01-26 14:26:02 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-01-26 14:26:02 +0000
commit560a8692f0d014a39118159915efafc4a0a5dddc (patch)
treebe472754e7dff8adc1af0306e5e85522332b4ada
parent8ff94a33ec4fd8dc42b942e9d73181d4a2164339 (diff)
gc last usages of closures
-rw-r--r--document/src/vespa/document/repo/documenttyperepo.cpp1
-rw-r--r--document/src/vespa/document/repo/documenttyperepo.h1
-rw-r--r--searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp7
-rw-r--r--searchcore/src/tests/proton/index/indexmanager_test.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp1
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/matcher.h1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.h1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h2
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp6
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h29
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp66
-rw-r--r--searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h2
13 files changed, 73 insertions, 56 deletions
diff --git a/document/src/vespa/document/repo/documenttyperepo.cpp b/document/src/vespa/document/repo/documenttyperepo.cpp
index 50ab6aaa646..129972d5524 100644
--- a/document/src/vespa/document/repo/documenttyperepo.cpp
+++ b/document/src/vespa/document/repo/documenttyperepo.cpp
@@ -25,7 +25,6 @@ using std::fstream;
using std::make_pair;
using std::pair;
using std::vector;
-using vespalib::Closure1;
using vespalib::Identifiable;
using vespalib::IllegalArgumentException;
using vespalib::hash_map;
diff --git a/document/src/vespa/document/repo/documenttyperepo.h b/document/src/vespa/document/repo/documenttyperepo.h
index 4e3a1b07619..1e6da090296 100644
--- a/document/src/vespa/document/repo/documenttyperepo.h
+++ b/document/src/vespa/document/repo/documenttyperepo.h
@@ -4,7 +4,6 @@
#include <memory>
#include <vespa/vespalib/stllike/string.h>
-#include <vespa/vespalib/util/closure.h>
namespace document {
diff --git a/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp b/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp
index 203b6646880..d231040aeda 100644
--- a/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/configurer/configurer_test.cpp
@@ -48,7 +48,6 @@ using std::make_shared;
using CCR = DocumentDBConfig::ComparisonResult;
using Configurer = SearchableDocSubDBConfigurer;
using ConfigurerUP = std::unique_ptr<SearchableDocSubDBConfigurer>;
-using SummarySetup = SummaryManager::SummarySetup;
using DocumenttypesConfigSP = proton::DocumentDBConfig::DocumenttypesConfigSP;
const vespalib::string BASE_DIR("baseDir");
@@ -56,10 +55,10 @@ const vespalib::string DOC_TYPE("invalid");
class IndexManagerDummyReconfigurer : public searchcorespi::IIndexManager::Reconfigurer
{
- bool reconfigure(vespalib::Closure0<bool>::UP closure) override {
+ bool reconfigure(std::unique_ptr<Configure> configure) override {
bool ret = true;
- if (closure)
- ret = closure->call(); // Perform index manager reconfiguration now
+ if (configure)
+ ret = configure->configure(); // Perform index manager reconfiguration now
return ret;
}
};
diff --git a/searchcore/src/tests/proton/index/indexmanager_test.cpp b/searchcore/src/tests/proton/index/indexmanager_test.cpp
index 50d23529413..065d95e82fa 100644
--- a/searchcore/src/tests/proton/index/indexmanager_test.cpp
+++ b/searchcore/src/tests/proton/index/indexmanager_test.cpp
@@ -61,10 +61,10 @@ namespace {
class IndexManagerDummyReconfigurer : public searchcorespi::IIndexManager::Reconfigurer {
- virtual bool reconfigure(vespalib::Closure0<bool>::UP closure) override {
+ virtual bool reconfigure(std::unique_ptr<Configure> configure) override {
bool ret = true;
- if (closure.get() != nullptr) {
- ret = closure->call(); // Perform index manager reconfiguration now
+ if (configure) {
+ ret = configure->configure(); // Perform index manager reconfiguration now
}
return ret;
}
diff --git a/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp b/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp
index 5cb4394880f..2b8f32f2835 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/match_thread.cpp
@@ -10,7 +10,6 @@
#include <vespa/searchlib/common/bitvector.h>
#include <vespa/searchlib/queryeval/multibitvectoriterator.h>
#include <vespa/searchlib/queryeval/andnotsearch.h>
-#include <vespa/vespalib/util/closure.h>
#include <vespa/vespalib/util/thread_bundle.h>
#include <vespa/vespalib/data/slime/cursor.h>
#include <vespa/vespalib/data/slime/inserter.h>
diff --git a/searchcore/src/vespa/searchcore/proton/matching/matcher.h b/searchcore/src/vespa/searchcore/proton/matching/matcher.h
index 39d1fa38007..1a04940b2f4 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/matcher.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/matcher.h
@@ -18,7 +18,6 @@
#include <vespa/searchlib/queryeval/blueprint.h>
#include <vespa/searchlib/query/base.h>
#include <vespa/vespalib/util/clock.h>
-#include <vespa/vespalib/util/closure.h>
#include <vespa/vespalib/util/thread_bundle.h>
#include <mutex>
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.h b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
index 9f6cf44c75d..9c2facdddb0 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
@@ -87,7 +87,6 @@ private:
InitializeThreads _initializeThreads;
typedef search::SerialNum SerialNum;
- typedef vespalib::Closure Closure;
typedef search::index::Schema Schema;
using lock_guard = std::lock_guard<std::mutex>;
// variables related to reconfig
diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp
index 987d19bb8a8..2768c7ea337 100644
--- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.cpp
@@ -243,7 +243,7 @@ SearchableDocSubDB::initFeedView(IAttributeWriter::SP attrWriter,
* flush engine has not started.
*/
bool
-SearchableDocSubDB::reconfigure(vespalib::Closure0<bool>::UP closure)
+SearchableDocSubDB::reconfigure(std::unique_ptr<Configure> configure)
{
assert(_writeService.master().isCurrentThread());
@@ -255,8 +255,8 @@ SearchableDocSubDB::reconfigure(vespalib::Closure0<bool>::UP closure)
bool ret = true;
- if (closure)
- ret = closure->call(); // Perform index manager reconfiguration now
+ if (configure)
+ ret = configure->configure(); // Perform index manager reconfiguration now
reconfigureIndexSearchable();
return ret;
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h
index 4e021e74189..12d9d24b525 100644
--- a/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/searchabledocsubdb.h
@@ -94,7 +94,7 @@ private:
void initFeedView(IAttributeWriter::SP attrWriter, const DocumentDBConfig &configSnapshot);
void reconfigureMatchingMetrics(const vespa::config::search::RankProfilesConfig &config);
- bool reconfigure(vespalib::Closure0<bool>::UP closure) override;
+ bool reconfigure(std::unique_ptr<Configure> configure) override;
void reconfigureIndexSearchable();
void syncViews();
void applyFlushConfig(const DocumentDBFlushConfig &flushConfig);
diff --git a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp
index f391843e02a..d278b5c677a 100644
--- a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp
+++ b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.cpp
@@ -1,10 +1,8 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/searchcorespi/index/iindexmanager.h>
+#include "iindexmanager.h"
namespace searchcorespi {
-IIndexManager::Reconfigurer::~Reconfigurer()
-{
-}
+IIndexManager::Reconfigurer::~Reconfigurer() = default;
} // namespace searchcorespi
diff --git a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h
index 300c2af265d..9d77abd417f 100644
--- a/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h
+++ b/searchcorespi/src/vespa/searchcorespi/index/iindexmanager.h
@@ -6,7 +6,6 @@
#include <vespa/searchcorespi/flush/flushstats.h>
#include <vespa/searchcorespi/flush/iflushtarget.h>
#include <vespa/searchlib/common/serialnum.h>
-#include <vespa/vespalib/util/closure.h>
namespace vespalib { class IDestructorCallback; }
namespace document { class Document; }
@@ -37,15 +36,41 @@ protected:
public:
using OnWriteDoneType = const std::shared_ptr<vespalib::IDestructorCallback> &;
+
+ struct Configure {
+ virtual ~Configure() = default;
+ virtual bool configure() = 0;
+ };
+ template <class FunctionType>
+ class LambdaConfigure : public Configure {
+ FunctionType _func;
+
+ public:
+ LambdaConfigure(FunctionType &&func)
+ : _func(std::move(func))
+ {}
+ ~LambdaConfigure() override = default;
+ bool configure() override { return _func(); }
+ };
+
+ template <class FunctionType>
+ static std::unique_ptr<Configure>
+ makeLambdaConfigure(FunctionType &&function)
+ {
+ return std::make_unique<LambdaConfigure<std::decay_t<FunctionType>>>
+ (std::forward<FunctionType>(function));
+ }
+
/**
* Interface used to signal when index manager has been reconfigured.
*/
struct Reconfigurer {
+ using Configure = searchcorespi::IIndexManager::Configure;
virtual ~Reconfigurer();
/**
* Reconfigure index manager and infrastructure around it while system is in a quiescent state.
*/
- virtual bool reconfigure(vespalib::Closure0<bool>::UP closure) = 0;
+ virtual bool reconfigure(std::unique_ptr<Configure> configure) = 0;
};
typedef std::unique_ptr<IIndexManager> UP;
diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp
index 348dbc97f25..e6588f3e7b4 100644
--- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp
+++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.cpp
@@ -8,7 +8,6 @@
#include "indexmaintainer.h"
#include "indexreadutilities.h"
#include "indexwriteutilities.h"
-#include <vespa/fastos/file.h>
#include <vespa/searchcorespi/flush/lambdaflushtask.h>
#include <vespa/searchlib/common/i_flush_token.h>
#include <vespa/searchlib/index/schemautil.h>
@@ -16,12 +15,11 @@
#include <vespa/searchlib/util/filekit.h>
#include <vespa/vespalib/io/fileutil.h>
#include <vespa/vespalib/util/array.hpp>
-#include <vespa/vespalib/util/autoclosurecaller.h>
-#include <vespa/vespalib/util/closuretask.h>
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/vespalib/util/lambdatask.h>
#include <vespa/vespalib/util/destructor_callbacks.h>
#include <vespa/vespalib/util/time.h>
+#include <vespa/fastos/file.h>
#include <sstream>
#include <vespa/log/log.h>
@@ -39,48 +37,46 @@ using search::SerialNum;
using vespalib::makeLambdaTask;
using vespalib::makeLambdaCallback;
using std::ostringstream;
-using vespalib::makeClosure;
-using vespalib::makeTask;
using vespalib::string;
-using vespalib::Closure0;
using vespalib::Executor;
using vespalib::Runnable;
using vespalib::IDestructorCallback;
namespace searchcorespi::index {
+using Configure = IIndexManager::Configure;
+using Reconfigurer = IIndexManager::Reconfigurer;
+
namespace {
class ReconfigRunnable : public Runnable {
public:
bool &_result;
- IIndexManager::Reconfigurer &_reconfigurer;
- Closure0<bool>::UP _closure;
+ Reconfigurer &_reconfigurer;
+ std::unique_ptr<Configure> _configure;
- ReconfigRunnable(bool &result,
- IIndexManager::Reconfigurer &reconfigurer,
- Closure0<bool>::UP closure)
+ ReconfigRunnable(bool &result, Reconfigurer &reconfigurer, std::unique_ptr<Configure> configure)
: _result(result),
_reconfigurer(reconfigurer),
- _closure(std::move(closure))
+ _configure(std::move(configure))
{ }
void run() override {
- _result = _reconfigurer.reconfigure(std::move(_closure));
+ _result = _reconfigurer.reconfigure(std::move(_configure));
}
};
class ReconfigRunnableTask : public Executor::Task {
private:
- IIndexManager::Reconfigurer &_reconfigurer;
- Closure0<bool>::UP _closure;
+ Reconfigurer &_reconfigurer;
+ std::unique_ptr<Configure> _configure;
public:
- ReconfigRunnableTask(IIndexManager::Reconfigurer &reconfigurer, Closure0<bool>::UP closure) :
- _reconfigurer(reconfigurer),
- _closure(std::move(closure))
+ ReconfigRunnableTask(Reconfigurer &reconfigurer, std::unique_ptr<Configure> configure)
+ : _reconfigurer(reconfigurer),
+ _configure(std::move(configure))
{ }
void run() override {
- _reconfigurer.reconfigure(std::move(_closure));
+ _reconfigurer.reconfigure(std::move(_configure));
}
};
@@ -595,9 +591,10 @@ IndexMaintainer::reconfigureAfterFlush(FlushArgs &args, IDiskIndex::SP &diskInde
// Called by a flush worker thread
for (;;) {
// Call reconfig closure for this change
- Closure0<bool>::UP closure(makeClosure(this, &IndexMaintainer::doneFlush,
- &args, &diskIndex));
- if (reconfigure(std::move(closure))) {
+ auto configure = makeLambdaConfigure([this, argsP=&args, diskIndexP=&diskIndex]() {
+ return doneFlush(argsP, diskIndexP);
+ });
+ if (reconfigure(std::move(configure))) {
return;
}
ChangeGens changeGens = getChangeGens();
@@ -726,7 +723,9 @@ IndexMaintainer::warmupDone(ISearchableIndexCollection::SP current)
// Called by a search thread
LockGuard lock(_new_search_lock);
if (current == _source_list) {
- auto makeSure = makeClosure(this, &IndexMaintainer::makeSureAllRemainingWarmupIsDone, current);
+ auto makeSure = makeLambdaConfigure([this, collection=std::move(current)]() {
+ return makeSureAllRemainingWarmupIsDone(std::move(collection));
+ });
auto task = std::make_unique<ReconfigRunnableTask>(_ctx.getReconfigurer(), std::move(makeSure));
_ctx.getThreadingService().master().execute(std::move(task));
} else {
@@ -831,11 +830,11 @@ IndexMaintainer::getChangeGens(void)
}
bool
-IndexMaintainer::reconfigure(Closure0<bool>::UP closure)
+IndexMaintainer::reconfigure(std::unique_ptr<Configure> configure)
{
// Called by a flush engine worker thread
bool result = false;
- ReconfigRunnable runnable(result, _ctx.getReconfigurer(), std::move(closure));
+ ReconfigRunnable runnable(result, _ctx.getReconfigurer(), std::move(configure));
_ctx.getThreadingService().master().run(runnable);
return result;
}
@@ -945,8 +944,10 @@ IndexMaintainer::initFlush(SerialNum serialNum, searchcorespi::FlushStats * stat
// Ensure that all index thread tasks accessing memory index have completed.
_ctx.getThreadingService().sync();
// Call reconfig closure for this change
- Closure0<bool>::UP closure( makeClosure(this, &IndexMaintainer::doneInitFlush, &args, &new_index));
- bool success = _ctx.getReconfigurer().reconfigure(std::move(closure));
+ auto configure = makeLambdaConfigure([this, argsP=&args, indexP=&new_index]() {
+ return doneInitFlush(argsP, indexP);
+ });
+ bool success = _ctx.getReconfigurer().reconfigure(std::move(configure));
assert(success);
(void) success;
if (args._skippedEmptyLast && args._extraIndexes.empty()) {
@@ -1075,8 +1076,9 @@ IndexMaintainer::runFusion(const FusionSpec &fusion_spec, std::shared_ptr<search
args._prunedSchema = prunedSchema;
for (;;) {
// Call reconfig closure for this change
- Closure0<bool>::UP closure( makeClosure(this, &IndexMaintainer::doneFusion, &args, &new_index));
- bool success = reconfigure(std::move(closure));
+ bool success = reconfigure(makeLambdaConfigure([this,argsP=&args,indexP=&new_index]() {
+ return doneFusion(argsP, indexP);
+ }));
if (success) {
break;
}
@@ -1196,8 +1198,7 @@ void
IndexMaintainer::scheduleCommit()
{
assert(_ctx.getThreadingService().master().isCurrentThread());
- _ctx.getThreadingService().index().
- execute(makeTask(makeClosure<IndexMaintainer *, IndexMaintainer, void>(this, &IndexMaintainer::commit)));
+ _ctx.getThreadingService().index().execute(makeLambdaTask([this]() { commit(); }));
}
void
@@ -1206,8 +1207,7 @@ IndexMaintainer::commit()
// only triggered via scheduleCommit()
assert(_ctx.getThreadingService().index().isCurrentThread());
LockGuard lock(_index_update_lock);
- _current_index->commit(std::shared_ptr<vespalib::IDestructorCallback>(),
- _current_serial_num);
+ _current_index->commit({}, _current_serial_num);
// caller calls _ctx.getThreadingService().sync()
}
diff --git a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h
index 35c0c0fbd2f..f002d6253c3 100644
--- a/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h
+++ b/searchcorespi/src/vespa/searchcorespi/index/indexmaintainer.h
@@ -255,7 +255,7 @@ class IndexMaintainer : public IIndexManager,
* reconfigure index manager with closure as argument. Wait for
* result.
*/
- bool reconfigure(vespalib::Closure0<bool>::UP closure);
+ bool reconfigure(std::unique_ptr<Configure> configure);
void warmupDone(ISearchableIndexCollection::SP current) override;
bool makeSureAllRemainingWarmupIsDone(ISearchableIndexCollection::SP keepAlive);
void scheduleCommit();