summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-05-11 10:52:30 +0200
committerGitHub <noreply@github.com>2021-05-11 10:52:30 +0200
commit4f0fc6d74b24fbc7af2606afc1306cac95bc3704 (patch)
treeacf6bc67d192a10ac8ff184a0806769dc3974a33
parentfffd4f1b40ddcd769565bd20b2ee278e594f0f50 (diff)
parent31fa5fa15ed23e4b5fa848604ac41626199cf390 (diff)
Merge pull request #17812 from vespa-engine/balder/gc-frozen-buckets-concept
GC frozen buckets concept
-rw-r--r--searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.cpp7
-rw-r--r--searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.h9
-rw-r--r--searchcore/src/tests/proton/documentdb/maintenancecontroller/CMakeLists.txt17
-rw-r--r--searchcore/src/tests/proton/documentdb/maintenancecontroller/frozenbucketsmap_test.cpp85
-rw-r--r--searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp88
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt1
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/frozenbuckets.cpp142
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/frozenbuckets.h100
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/ifrozenbuckethandler.h31
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp24
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h12
11 files changed, 4 insertions, 512 deletions
diff --git a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.cpp b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.cpp
index cd305c51810..4b9d893eca5 100644
--- a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.cpp
+++ b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.cpp
@@ -163,13 +163,6 @@ MyStorer::startCommit(DoneCallback) {
return CommitResult();
}
-IFrozenBucketHandler::ExclusiveBucketGuard::UP
-MyFrozenBucketHandler::acquireExclusiveBucket(BucketId bucket) {
- return (_bucket == bucket)
- ? ExclusiveBucketGuard::UP()
- : std::make_unique<ExclusiveBucketGuard>(bucket);
-}
-
MyDocumentStore::MyDocumentStore()
: _readDoc(),
_readLid(0)
diff --git a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.h b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.h
index 5063aeff347..348499d937f 100644
--- a/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.h
+++ b/searchcore/src/tests/proton/documentdb/lid_space_compaction/lid_space_common.h
@@ -3,7 +3,6 @@
#pragma once
#include <vespa/searchcore/proton/server/i_document_scan_iterator.h>
-#include <vespa/searchcore/proton/server/ifrozenbuckethandler.h>
#include <vespa/searchcore/proton/server/imaintenancejobrunner.h>
#include <vespa/searchcore/proton/server/lid_space_compaction_handler.h>
#include <vespa/searchcore/proton/server/remove_operations_rate_tracker.h>
@@ -103,14 +102,6 @@ struct MyStorer : public IOperationStorer {
CommitResult startCommit(DoneCallback) override;
};
-struct MyFrozenBucketHandler : public IFrozenBucketHandler {
- BucketId _bucket;
- MyFrozenBucketHandler() : _bucket() {}
- ExclusiveBucketGuard::UP acquireExclusiveBucket(BucketId bucket) override;
- void addListener(IBucketFreezeListener *) override { }
- void removeListener(IBucketFreezeListener *) override { }
-};
-
struct MyFeedView : public test::DummyFeedView {
explicit MyFeedView(std::shared_ptr<const DocumentTypeRepo> repo)
: test::DummyFeedView(std::move(repo))
diff --git a/searchcore/src/tests/proton/documentdb/maintenancecontroller/CMakeLists.txt b/searchcore/src/tests/proton/documentdb/maintenancecontroller/CMakeLists.txt
index 0864f444ecf..7a2f741c1be 100644
--- a/searchcore/src/tests/proton/documentdb/maintenancecontroller/CMakeLists.txt
+++ b/searchcore/src/tests/proton/documentdb/maintenancecontroller/CMakeLists.txt
@@ -18,20 +18,3 @@ vespa_add_executable(searchcore_maintenancecontroller_test_app TEST
searchlib_test
)
vespa_add_test(NAME searchcore_maintenancecontroller_test_app COMMAND searchcore_maintenancecontroller_test_app)
-vespa_add_executable(searchcore_frozenbucketsmap_test_app TEST
- SOURCES
- frozenbucketsmap_test.cpp
- DEPENDS
- searchcore_server
- searchcore_feedoperation
- searchcore_matching
- searchcore_attribute
- searchcore_documentmetastore
- searchcore_bucketdb
- searchcore_pcommon
- searchcore_persistenceengine
- searchcore_grouping
- searchcore_proton_metrics
- searchcore_fconfig
-)
-vespa_add_test(NAME searchcore_frozenbucketsmap_test_app COMMAND searchcore_frozenbucketsmap_test_app)
diff --git a/searchcore/src/tests/proton/documentdb/maintenancecontroller/frozenbucketsmap_test.cpp b/searchcore/src/tests/proton/documentdb/maintenancecontroller/frozenbucketsmap_test.cpp
deleted file mode 100644
index b9a7e967b74..00000000000
--- a/searchcore/src/tests/proton/documentdb/maintenancecontroller/frozenbucketsmap_test.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-#include <vespa/log/log.h>
-LOG_SETUP("frozenbucketsmap_test");
-#include <vespa/vespalib/testkit/testapp.h>
-#include <vespa/searchcore/proton/server/frozenbuckets.h>
-#include <vespa/vespalib/util/threadstackexecutor.h>
-
-using namespace proton;
-using document::BucketId;
-
-class RWTask : public vespalib::Executor::Task {
-public:
- RWTask(FrozenBucketsMap & m, BucketId b, size_t count) : _b(b), _m(m), _count(count) {}
-protected:
- const BucketId _b;
- FrozenBucketsMap & _m;
- const size_t _count;
-};
-
-class Reader : public RWTask {
-public:
- Reader(FrozenBucketsMap & m, BucketId b, size_t count) :
- RWTask(m, b, count),
- numContended(0)
- {}
- ~Reader() {
- LOG(info, "NumContended = %ld", numContended);
- }
- void run() override {
- for (size_t i(0); i < _count; i++) {
- _m.freezeBucket(_b);
- if (_m.thawBucket(_b)) {
- numContended++;
- }
- }
- }
- size_t numContended;
-};
-
-class Writer : public RWTask {
-public:
- Writer(FrozenBucketsMap & m, BucketId b, size_t count) :
- RWTask(m, b, count),
- numFailed(0),
- numSucces(0)
- {}
- ~Writer() {
- EXPECT_EQUAL(_count, numSucces + numFailed);
- LOG(info, "NumSuccess = %ld, NumFailed = %ld", numSucces, numFailed);
- }
- void run() override {
- for (size_t i(0); i < _count; i++) {
- IFrozenBucketHandler::ExclusiveBucketGuard::UP guard = _m.acquireExclusiveBucket(_b);
- if (guard) {
- numSucces++;
- } else {
- numFailed++;
- }
- }
- }
- size_t numFailed;
- size_t numSucces;
-};
-
-TEST("Race reader and writer on FrozenBucketsMap") {
- FrozenBucketsMap m;
- BucketId a(8, 6);
- constexpr size_t NUM_READERS = 3;
- constexpr size_t NUM_WRITERS = 1;
- constexpr size_t READER_COUNT = 1000000;
- constexpr size_t WRITER_COUNT = 1000000;
- vespalib::ThreadStackExecutor executor(NUM_READERS+NUM_WRITERS, 0x10000);
- for (size_t i(0); i < NUM_READERS; i++) {
- EXPECT_FALSE(bool(executor.execute(std::make_unique<Reader>(m, a, READER_COUNT))));
- }
- for (size_t i(0); i < NUM_WRITERS; i++) {
- EXPECT_FALSE(bool(executor.execute(std::make_unique<Writer>(m, a, WRITER_COUNT))));
- }
- executor.sync();
-}
-
-TEST_MAIN()
-{
- TEST_RUN_ALL();
-}
diff --git a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp
index deaeec07db7..67a7ceeae34 100644
--- a/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp
+++ b/searchcore/src/tests/proton/documentdb/maintenancecontroller/maintenancecontroller_test.cpp
@@ -264,28 +264,6 @@ public:
bool waitIdle(vespalib::duration timeout);
};
-
-class MyFrozenBucket
-{
- IBucketFreezer &_freezer;
- BucketId _bucketId;
-public:
- typedef std::unique_ptr<MyFrozenBucket> UP;
-
- MyFrozenBucket(IBucketFreezer &freezer,
- const BucketId &bucketId)
- : _freezer(freezer),
- _bucketId(bucketId)
- {
- _freezer.freezeBucket(_bucketId);
- }
-
- ~MyFrozenBucket()
- {
- _freezer.thawBucket(_bucketId);
- }
-};
-
struct MySimpleJob : public BlockableMaintenanceJob
{
vespalib::CountDownLatch _latch;
@@ -1006,39 +984,6 @@ TEST_F("require that a split maintenance job is executed", MaintenanceController
EXPECT_EQUAL(0u, myJob._latch.getCount());
}
-TEST_F("require that a blocked job is unblocked and executed after thaw bucket",
- MaintenanceControllerFixture)
-{
- auto job1 = std::make_unique<MySimpleJob>(TIMEOUT * 2, TIMEOUT * 2, 1);
- MySimpleJob &myJob1 = *job1;
- auto job2 = std::make_unique< MySimpleJob>(TIMEOUT * 2, TIMEOUT * 2, 0);
- MySimpleJob &myJob2 = *job2;
- f._mc.registerJobInMasterThread(std::move(job1));
- f._mc.registerJobInMasterThread(std::move(job2));
- f._injectDefaultJobs = false;
- f.startMaintenance();
-
- myJob1.block();
- EXPECT_TRUE(myJob1.isBlocked());
- EXPECT_FALSE(myJob2.isBlocked());
- IBucketFreezer &ibf = f._mc;
- ibf.freezeBucket(BucketId(1));
- ibf.thawBucket(BucketId(1));
- EXPECT_TRUE(myJob1.isBlocked());
- ibf.freezeBucket(BucketId(1));
- IFrozenBucketHandler & fbh = f._mc;
- // This is to simulate contention, as that is required for notification on thawed buckets.
- EXPECT_FALSE(fbh.acquireExclusiveBucket(BucketId(1)));
- ibf.thawBucket(BucketId(1));
- f._executor.sync();
- EXPECT_FALSE(myJob1.isBlocked());
- EXPECT_FALSE(myJob2.isBlocked());
- bool done1 = myJob1._latch.await(TIMEOUT);
- EXPECT_TRUE(done1);
- std::this_thread::sleep_for(2s);
- EXPECT_EQUAL(0u, myJob2._runCnt);
-}
-
TEST_F("require that blocked jobs are not executed", MaintenanceControllerFixture)
{
auto job = std::make_unique<MySimpleJob>(200ms, 200ms, 0);
@@ -1079,39 +1024,6 @@ TEST_F("require that maintenance controller state list jobs", MaintenanceControl
EXPECT_EQUAL("long_running_job", allJobs[1]["name"].asString().make_string());
}
-TEST("Verify FrozenBucketsMap interface") {
- FrozenBucketsMap m;
- BucketId a(8, 6);
- {
- auto guard = m.acquireExclusiveBucket(a);
- EXPECT_TRUE(bool(guard));
- EXPECT_EQUAL(a, guard->getBucket());
- }
- m.freezeBucket(a);
- EXPECT_FALSE(m.thawBucket(a));
- m.freezeBucket(a);
- {
- auto guard = m.acquireExclusiveBucket(a);
- EXPECT_FALSE(bool(guard));
- }
- EXPECT_TRUE(m.thawBucket(a));
- m.freezeBucket(a);
- m.freezeBucket(a);
- m.freezeBucket(a);
- {
- auto guard = m.acquireExclusiveBucket(a);
- EXPECT_FALSE(bool(guard));
- }
- EXPECT_FALSE(m.thawBucket(a));
- EXPECT_FALSE(m.thawBucket(a));
- EXPECT_TRUE(m.thawBucket(a));
- {
- auto guard = m.acquireExclusiveBucket(a);
- EXPECT_TRUE(bool(guard));
- EXPECT_EQUAL(a, guard->getBucket());
- }
-}
-
const MaintenanceJobRunner *
findJob(const MaintenanceController::JobList &jobs, const vespalib::string &jobName)
{
diff --git a/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt b/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt
index 73b7404ce31..d2ebb7a58a2 100644
--- a/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt
+++ b/searchcore/src/vespa/searchcore/proton/server/CMakeLists.txt
@@ -50,7 +50,6 @@ vespa_add_library(searchcore_server STATIC
flushhandlerproxy.cpp
forcecommitcontext.cpp
forcecommitdonetask.cpp
- frozenbuckets.cpp
health_adapter.cpp
heart_beat_job.cpp
idocumentdbowner.cpp
diff --git a/searchcore/src/vespa/searchcore/proton/server/frozenbuckets.cpp b/searchcore/src/vespa/searchcore/proton/server/frozenbuckets.cpp
deleted file mode 100644
index 54ef4ea2da4..00000000000
--- a/searchcore/src/vespa/searchcore/proton/server/frozenbuckets.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "frozenbuckets.h"
-#include "ibucketfreezelistener.h"
-#include <vespa/searchcorespi/index/i_thread_service.h>
-#include <vespa/vespalib/util/lambdatask.h>
-#include <algorithm>
-
-using document::BucketId;
-using vespalib::makeLambdaTask;
-
-namespace proton {
-
-FrozenBucketsMap::FrozenBucketsMap()
- : _lock(),
- _cond(),
- _map()
-{ }
-
-FrozenBucketsMap::~FrozenBucketsMap() {
- assert(_map.empty());
-}
-
-void
-FrozenBucketsMap::freezeBucket(BucketId bucket) {
-
- std::unique_lock<std::mutex> guard(_lock);
- std::pair<BucketId, FrozenBucket> tryVal(std::make_pair(bucket, FrozenBucket(FrozenBucket::Reader)));
-
- std::pair<Map::iterator, bool> res;
- for (res = _map.insert(tryVal); !res.second && (res.first->second.isExclusive()); res = _map.insert(tryVal)) {
- _cond.wait(guard);
- }
-
- if (!res.second) {
- res.first->second.addReader();
- }
-}
-
-
-bool
-FrozenBucketsMap::thawBucket(BucketId bucket)
-{
- std::lock_guard<std::mutex> guard(_lock);
- Map::iterator it(_map.find(bucket));
- assert(it != _map.end());
- assert(it->second.hasReaders());
- bool isLastAndContended(false);
- if (it->second.isLast()) {
- if (it->second.getNotifyWriter()) {
- isLastAndContended = true;
- }
- _map.erase(it);
- _cond.notify_all();
- } else {
- it->second.removeReader();
- }
- return isLastAndContended;
-}
-
-
-IFrozenBucketHandler::ExclusiveBucketGuard::UP
-FrozenBucketsMap::acquireExclusiveBucket(document::BucketId bucket)
-{
- std::lock_guard<std::mutex> guard(_lock);
- Map::iterator it(_map.find(bucket));
- if (it != _map.end()) {
- assert(it->second.hasReaders());
- it->second.setNotifyWriter();
- return ExclusiveBucketGuard::UP();
- }
- _map[bucket] = FrozenBucket(FrozenBucket::Writer);
- return std::make_unique<ExclusiveBucketGuard>(*this, bucket);
-}
-
-void
-FrozenBucketsMap::releaseExclusiveBucket(document::BucketId bucket)
-{
- std::lock_guard<std::mutex> guard(_lock);
- Map::const_iterator it(_map.find(bucket));
- assert ((it != _map.end()) && (it->second.isExclusive()));
- _map.erase(it);
- _cond.notify_all();
-}
-
-FrozenBuckets::FrozenBuckets(IThreadService &masterThread) :
- _frozen(),
- _masterThread(masterThread),
- _listeners()
-{
-}
-
-FrozenBuckets::~FrozenBuckets()
-{
- assert(_listeners.empty());
-}
-
-IFrozenBucketHandler::ExclusiveBucketGuard::UP
-FrozenBuckets::acquireExclusiveBucket(document::BucketId bucket) {
- return _frozen.acquireExclusiveBucket(bucket);
-}
-
-void
-FrozenBuckets::notifyThawed(document::BucketId bucket) {
- assert(_masterThread.isCurrentThread());
- for (auto &listener : _listeners) {
- listener->notifyThawedBucket(bucket);
- }
-}
-
-void
-FrozenBuckets::freezeBucket(BucketId bucket)
-{
- _frozen.freezeBucket(bucket);
-}
-
-void
-FrozenBuckets::thawBucket(BucketId bucket)
-{
- if (_frozen.thawBucket(bucket)) {
- _masterThread.execute(makeLambdaTask([this, bucket]() { notifyThawed(bucket); }));
- }
-}
-
-void
-FrozenBuckets::addListener(IBucketFreezeListener *listener)
-{
- // assert(_masterThread.isCurrentThread());
- _listeners.push_back(listener);
-}
-
-void
-FrozenBuckets::removeListener(IBucketFreezeListener *listener)
-{
- // assert(_masterThread.isCurrentThread());
- auto it = std::find(_listeners.begin(), _listeners.end(), listener);
- if (it != _listeners.end()) {
- _listeners.erase(it);
- }
-}
-
-} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/frozenbuckets.h b/searchcore/src/vespa/searchcore/proton/server/frozenbuckets.h
deleted file mode 100644
index 339bb7fa5d0..00000000000
--- a/searchcore/src/vespa/searchcore/proton/server/frozenbuckets.h
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#pragma once
-
-#include "ifrozenbuckethandler.h"
-#include "ibucketfreezer.h"
-#include <mutex>
-#include <condition_variable>
-#include <cassert>
-#include <map>
-#include <vector>
-
-
-namespace searchcorespi { namespace index {struct IThreadService; }}
-
-namespace proton {
-
-class IBucketFreezeListener;
-
-/**
- * Controls read and write access to buckets.
- */
-class FrozenBucketsMap {
-public:
- FrozenBucketsMap();
- ~FrozenBucketsMap();
- IFrozenBucketHandler::ExclusiveBucketGuard::UP acquireExclusiveBucket(document::BucketId bucket);
- void freezeBucket(document::BucketId bucket);
- // Returns true if it was the last one and it was contended.
- bool thawBucket(document::BucketId bucket);
- class ExclusiveBucketGuard : public IFrozenBucketHandler::ExclusiveBucketGuard {
- public:
- ExclusiveBucketGuard(const ExclusiveBucketGuard &) = delete;
- ExclusiveBucketGuard(ExclusiveBucketGuard &&) = delete;
- ExclusiveBucketGuard & operator=(const ExclusiveBucketGuard &) = delete;
- ExclusiveBucketGuard & operator=(ExclusiveBucketGuard &&) = delete;
-
- ExclusiveBucketGuard(FrozenBucketsMap & handler, document::BucketId & bucketId)
- : IFrozenBucketHandler::ExclusiveBucketGuard(bucketId),
- _handler(handler)
- { }
- ~ExclusiveBucketGuard() { _handler.releaseExclusiveBucket(getBucket());}
- private:
- FrozenBucketsMap & _handler;
- };
-private:
- void releaseExclusiveBucket(document::BucketId bucket);
- class FrozenBucket {
- public:
- enum Type {Reader, Writer};
- explicit FrozenBucket(Type type=Reader) : _refCount((type==Reader) ? 1 : -1), _notifyWriter(false) { }
- ~FrozenBucket() { assert((_refCount == -1) || (_refCount == 1));}
- void setNotifyWriter() { _notifyWriter = true; }
- bool getNotifyWriter() const { return _notifyWriter; }
- bool isLast() const { return _refCount == 1; }
- bool isExclusive() const { return _refCount == -1; }
- bool hasReaders() const { return _refCount >= 1; }
- void addReader() {
- assert(_refCount >= 1);
- _refCount++;
- }
- void removeReader() {
- assert(_refCount > 1);
- _refCount--;
- }
- private:
- int32_t _refCount;
- bool _notifyWriter;
- };
- typedef std::map<document::BucketId, FrozenBucket> Map;
- std::mutex _lock;
- std::condition_variable _cond;
- Map _map;
-};
-
-/**
- * Class that remembers which buckets are frozen and notifies all
- * registered listeners on bucket frozenness changes.
- */
-class FrozenBuckets : public IFrozenBucketHandler,
- public IBucketFreezer
-{
- using IThreadService = searchcorespi::index::IThreadService;
- FrozenBucketsMap _frozen;
- IThreadService &_masterThread;
- std::vector<IBucketFreezeListener *> _listeners;
-
- void notifyThawed(document::BucketId bucket);
-public:
- FrozenBuckets(IThreadService &masterThread);
- virtual ~FrozenBuckets();
-
- virtual ExclusiveBucketGuard::UP acquireExclusiveBucket(document::BucketId bucket) override;
- virtual void freezeBucket(document::BucketId bucket) override;
- virtual void thawBucket(document::BucketId bucket) override;
- virtual void addListener(IBucketFreezeListener *listener) override;
- virtual void removeListener(IBucketFreezeListener *listener) override;
-};
-
-} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/ifrozenbuckethandler.h b/searchcore/src/vespa/searchcore/proton/server/ifrozenbuckethandler.h
deleted file mode 100644
index bcd671c95b9..00000000000
--- a/searchcore/src/vespa/searchcore/proton/server/ifrozenbuckethandler.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#pragma once
-
-#include <vespa/document/bucket/bucketid.h>
-#include <memory>
-
-namespace proton {
-
-class IBucketFreezeListener;
-
-class IFrozenBucketHandler
-{
-public:
- class ExclusiveBucketGuard {
- public:
- typedef std::unique_ptr<ExclusiveBucketGuard> UP;
- ExclusiveBucketGuard(document::BucketId bucketId) : _bucketId(bucketId) { }
- virtual ~ExclusiveBucketGuard() { }
- document::BucketId getBucket() const { return _bucketId; }
- private:
- document::BucketId _bucketId;
- };
-
- virtual ~IFrozenBucketHandler() = default;
- virtual ExclusiveBucketGuard::UP acquireExclusiveBucket(document::BucketId bucket) = 0;
- virtual void addListener(IBucketFreezeListener *listener) = 0;
- virtual void removeListener(IBucketFreezeListener *listener) = 0;
-};
-
-}
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp
index 3b4526e6f7c..011b6cb4b07 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.cpp
@@ -42,8 +42,7 @@ MaintenanceController::MaintenanceController(IThreadService &masterThread,
vespalib::Executor & defaultExecutor,
MonitoredRefCount & refCount,
const DocTypeName &docTypeName)
- : IBucketFreezeListener(),
- _masterThread(masterThread),
+ : _masterThread(masterThread),
_defaultExecutor(defaultExecutor),
_refCount(refCount),
_readySubDB(),
@@ -51,19 +50,15 @@ MaintenanceController::MaintenanceController(IThreadService &masterThread,
_notReadySubDB(),
_periodicTimer(),
_config(),
- _frozenBuckets(masterThread),
_state(State::INITIALIZING),
_docTypeName(docTypeName),
_jobs(),
_jobsLock()
-{
- _frozenBuckets.addListener(this); // forward freeze/thaw to bmc
-}
+{ }
MaintenanceController::~MaintenanceController()
{
kill();
- _frozenBuckets.removeListener(this);
}
void
@@ -235,19 +230,4 @@ MaintenanceController::syncSubDBs(const MaintenanceDocumentSubDB &readySubDB,
}
}
-
-void
-MaintenanceController::notifyThawedBucket(const BucketId &bucket)
-{
- (void) bucket;
- // No need to take _jobsLock as modification of _jobs also happens in master write thread.
- for (const auto &jw : _jobs) {
- IBlockableMaintenanceJob *job = jw->getJob().asBlockable();
- if (job && job->isBlocked()) {
- job->unBlock(IBlockableMaintenanceJob::BlockedReason::FROZEN_BUCKET);
- }
- }
-}
-
-
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h
index 6415c51eeed..049238ae193 100644
--- a/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h
+++ b/searchcore/src/vespa/searchcore/proton/server/maintenancecontroller.h
@@ -4,8 +4,6 @@
#include "maintenancedocumentsubdb.h"
#include "i_maintenance_job.h"
-#include "frozenbuckets.h"
-#include "ibucketfreezelistener.h"
#include <vespa/searchcore/proton/common/doctypename.h>
#include <vespa/searchcore/proton/common/monitored_refcount.h>
#include <vespa/vespalib/util/scheduledexecutor.h>
@@ -29,7 +27,7 @@ class MonitoredRefCount;
* and a set of maintenance jobs for a document db.
* The maintenance jobs are independent of the controller.
*/
-class MaintenanceController : public IBucketFreezeListener
+class MaintenanceController
{
public:
using IThreadService = searchcorespi::index::IThreadService;
@@ -40,7 +38,7 @@ public:
MaintenanceController(IThreadService &masterThread, vespalib::Executor & defaultExecutor, MonitoredRefCount & refCount, const DocTypeName &docTypeName);
- ~MaintenanceController() override;
+ ~MaintenanceController();
void registerJobInMasterThread(IMaintenanceJob::UP job);
void registerJobInDefaultPool(IMaintenanceJob::UP job);
@@ -63,10 +61,6 @@ public:
void kill();
- operator IBucketFreezer &() { return _frozenBuckets; }
- operator const IFrozenBucketHandler &() const { return _frozenBuckets; }
- operator IFrozenBucketHandler &() { return _frozenBuckets; }
-
bool getStarted() const { return _state >= State::STARTED; }
bool getStopping() const { return _state == State::STOPPING; }
bool getPaused() const { return _state == State::PAUSED; }
@@ -89,7 +83,6 @@ private:
MaintenanceDocumentSubDB _notReadySubDB;
std::unique_ptr<vespalib::ScheduledExecutor> _periodicTimer;
DocumentDBMaintenanceConfigSP _config;
- FrozenBuckets _frozenBuckets;
State _state;
const DocTypeName &_docTypeName;
JobList _jobs;
@@ -97,7 +90,6 @@ private:
void addJobsToPeriodicTimer();
void restart();
- void notifyThawedBucket(const document::BucketId &bucket) override;
void performHoldJobs(JobList jobs);
void registerJob(vespalib::Executor & executor, IMaintenanceJob::UP job);
};