aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton/documentdb/maintenancecontroller
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-05-10 15:49:36 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-05-10 20:57:23 +0000
commit31fa5fa15ed23e4b5fa848604ac41626199cf390 (patch)
tree0544123707cb9f6389dae8c404111fa152a5f669 /searchcore/src/tests/proton/documentdb/maintenancecontroller
parentaf1f8d076495792bb508ee208815d013c0523dbc (diff)
GC frozen buckets concept
Diffstat (limited to 'searchcore/src/tests/proton/documentdb/maintenancecontroller')
-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
3 files changed, 0 insertions, 190 deletions
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)
{