diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-13 21:18:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-13 21:18:52 +0200 |
commit | fd9b726786f4c00b276f2d84fd0a3593a0c406eb (patch) | |
tree | ce19e91bc7625d0863626b474337addea5293f53 | |
parent | 5d99eeefabb8ff58e0b6125cccb1430a521b5390 (diff) | |
parent | afcb4c97a52610cce8df37489d3c590d4138f5a9 (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 …
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; } |