summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-04-13 21:18:52 +0200
committerGitHub <noreply@github.com>2021-04-13 21:18:52 +0200
commitfd9b726786f4c00b276f2d84fd0a3593a0c406eb (patch)
treece19e91bc7625d0863626b474337addea5293f53
parent5d99eeefabb8ff58e0b6125cccb1430a521b5390 (diff)
parentafcb4c97a52610cce8df37489d3c590d4138f5a9 (diff)
Merge pull request #17415 from vespa-engine/balder/avoid-sync
- Depending on sync of an executor that is shared is not a good idea …
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/sessionmanager.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/documentdb.h4
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.h3
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp9
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h5
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp7
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h1
9 files changed, 23 insertions, 14 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/matching/sessionmanager.cpp b/searchcore/src/vespa/searchcore/proton/matching/sessionmanager.cpp
index cf3a788ef7d..a1da4422f77 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/sessionmanager.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/sessionmanager.cpp
@@ -173,7 +173,7 @@ SessionManager::SessionManager(uint32_t maxSize)
_search_map(std::make_unique<SearchSessionCache>()) {
}
-SessionManager::~SessionManager() { }
+SessionManager::~SessionManager() = default;
void SessionManager::insert(search::grouping::GroupingSession::UP session) {
_grouping_cache->insert(std::move(session));
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
index 1f06521f4d3..fadd6fd0726 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.cpp
@@ -121,7 +121,7 @@ DocumentDB::create(const vespalib::string &baseDir,
const ProtonConfig &protonCfg,
IDocumentDBOwner &owner,
vespalib::SyncableThreadExecutor &warmupExecutor,
- vespalib::ThreadStackExecutorBase &sharedExecutor,
+ vespalib::ThreadExecutor &sharedExecutor,
storage::spi::BucketExecutor &bucketExecutor,
const search::transactionlog::WriterFactory &tlsWriterFactory,
MetricsWireService &metricsWireService,
@@ -145,7 +145,7 @@ DocumentDB::DocumentDB(const vespalib::string &baseDir,
const ProtonConfig &protonCfg,
IDocumentDBOwner &owner,
vespalib::SyncableThreadExecutor &warmupExecutor,
- vespalib::ThreadStackExecutorBase &sharedExecutor,
+ vespalib::ThreadExecutor &sharedExecutor,
storage::spi::BucketExecutor & bucketExecutor,
const search::transactionlog::WriterFactory &tlsWriterFactory,
MetricsWireService &metricsWireService,
diff --git a/searchcore/src/vespa/searchcore/proton/server/documentdb.h b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
index 7f238583ea7..b1ba818e03f 100644
--- a/searchcore/src/vespa/searchcore/proton/server/documentdb.h
+++ b/searchcore/src/vespa/searchcore/proton/server/documentdb.h
@@ -216,7 +216,7 @@ private:
const ProtonConfig &protonCfg,
IDocumentDBOwner &owner,
vespalib::SyncableThreadExecutor &warmupExecutor,
- vespalib::ThreadStackExecutorBase &sharedExecutor,
+ vespalib::ThreadExecutor &sharedExecutor,
storage::spi::BucketExecutor &bucketExecutor,
const search::transactionlog::WriterFactory &tlsWriterFactory,
MetricsWireService &metricsWireService,
@@ -248,7 +248,7 @@ public:
const ProtonConfig &protonCfg,
IDocumentDBOwner &owner,
vespalib::SyncableThreadExecutor &warmupExecutor,
- vespalib::ThreadStackExecutorBase &sharedExecutor,
+ vespalib::ThreadExecutor &sharedExecutor,
storage::spi::BucketExecutor & bucketExecutor,
const search::transactionlog::WriterFactory &tlsWriterFactory,
MetricsWireService &metricsWireService,
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.cpp b/searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.cpp
index 6ab7fe373c4..b446c5d07ba 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.cpp
@@ -14,7 +14,7 @@ void
convertRunningJobsToSlime(const std::vector<MaintenanceJobRunner::SP> &jobs, Cursor &array)
{
for (const auto &jobRunner : jobs) {
- if (jobRunner->isRunning()) {
+ if (jobRunner->isRunnable()) {
Cursor &object = array.addObject();
object.setString("name", jobRunner->getJob().getName());
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.h b/searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.h
index 6aa2528b4f9..7fa4415a8e6 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.h
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenance_controller_explorer.h
@@ -18,8 +18,7 @@ private:
public:
MaintenanceControllerExplorer(std::vector<MaintenanceJobRunner::SP> jobs);
- // Implements vespalib::StateExplorer
- virtual void get_state(const vespalib::slime::Inserter &inserter, bool full) const override;
+ void get_state(const vespalib::slime::Inserter &inserter, bool full) const override;
};
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp
index c71e9d832f3..b60c6c6e79c 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp
@@ -31,7 +31,7 @@ public:
}
MaintenanceController::MaintenanceController(IThreadService &masterThread,
- vespalib::SyncableThreadExecutor & defaultExecutor,
+ vespalib::Executor & defaultExecutor,
const DocTypeName &docTypeName)
: IBucketFreezeListener(),
_masterThread(masterThread),
@@ -93,8 +93,11 @@ MaintenanceController::killJobs()
for (auto &job : _jobs) {
job->stop(); // Make sure no more tasks are added to the executor
}
- _defaultExecutor.sync();
- _defaultExecutor.sync();
+ for (auto &job : _jobs) {
+ while (job->isRunning()) {
+ std::this_thread::sleep_for(1ms);
+ }
+ }
JobList tmpJobs = _jobs;
{
Guard guard(_jobsLock);
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h
index fdb6f4fa880..4ab6cd6f3dc 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h
@@ -12,7 +12,6 @@
namespace vespalib {
class Timer;
- class SyncableThreadExecutor;
class Executor;
}
namespace searchcorespi::index { struct IThreadService; }
@@ -36,7 +35,7 @@ public:
using UP = std::unique_ptr<MaintenanceController>;
enum class State {INITIALIZING, STARTED, PAUSED, STOPPING};
- MaintenanceController(IThreadService &masterThread, vespalib::SyncableThreadExecutor & defaultExecutor, const DocTypeName &docTypeName);
+ MaintenanceController(IThreadService &masterThread, vespalib::Executor & defaultExecutor, const DocTypeName &docTypeName);
~MaintenanceController() override;
void registerJobInMasterThread(IMaintenanceJob::UP job);
@@ -78,7 +77,7 @@ private:
using Guard = std::lock_guard<Mutex>;
IThreadService &_masterThread;
- vespalib::SyncableThreadExecutor &_defaultExecutor;
+ vespalib::Executor &_defaultExecutor;
MaintenanceDocumentSubDB _readySubDB;
MaintenanceDocumentSubDB _remSubDB;
MaintenanceDocumentSubDB _notReadySubDB;
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp b/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp
index 9518342a37f..658fa9f7482 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.cpp
@@ -80,6 +80,13 @@ bool
MaintenanceJobRunner::isRunning() const
{
Guard guard(_lock);
+ return _running;
+}
+
+bool
+MaintenanceJobRunner::isRunnable() const
+{
+ Guard guard(_lock);
return _running || _queued;
}
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h b/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h
index dc13cdfc7d9..6d51a4418ee 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenancejobrunner.h
@@ -32,6 +32,7 @@ public:
void run() override;
void stop();
bool isRunning() const;
+ bool isRunnable() const;
const vespalib::Executor & getExecutor() const { return _executor; }
const IMaintenanceJob &getJob() const { return *_job; }
IMaintenanceJob &getJob() { return *_job; }