summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests
diff options
context:
space:
mode:
authorArne Juul <arnej@verizonmedia.com>2020-06-17 13:11:26 +0000
committerArne Juul <arnej@verizonmedia.com>2020-06-17 13:15:50 +0000
commitf9be44201661bb12c5999cd2329ccea28817e246 (patch)
tree7bdc1f505629e89a723eb49196fbecb21184c9d2 /searchlib/src/tests
parent24f3af2b0d89353dd13c73f29261d40b59fa7e0d (diff)
refactor task data into common base class
Diffstat (limited to 'searchlib/src/tests')
-rw-r--r--searchlib/src/tests/tensor/hnsw_index/stress_hnsw_mt.cpp76
1 files changed, 26 insertions, 50 deletions
diff --git a/searchlib/src/tests/tensor/hnsw_index/stress_hnsw_mt.cpp b/searchlib/src/tests/tensor/hnsw_index/stress_hnsw_mt.cpp
index fa6f760a33f..679ee4ca1c9 100644
--- a/searchlib/src/tests/tensor/hnsw_index/stress_hnsw_mt.cpp
+++ b/searchlib/src/tests/tensor/hnsw_index/stress_hnsw_mt.cpp
@@ -144,16 +144,29 @@ public:
using PrepUP = std::unique_ptr<PrepareResult>;
using ReadGuard = GenerationHandler::Guard;
- struct CompleteAddTask : vespalib::Executor::Task {
+ // union of data required by tasks
+ struct TaskBase : vespalib::Executor::Task {
Stressor &parent;
uint32_t docid;
ConstVectorRef vec;
PrepUP prepare_result;
+ ReadGuard read_guard;
- CompleteAddTask(Stressor &p, uint32_t d, ConstVectorRef v, PrepUP r)
- : parent(p), docid(d), vec(v), prepare_result(std::move(r))
+ TaskBase(Stressor &p, uint32_t d, ConstVectorRef v, PrepUP r, ReadGuard g)
+ : parent(p), docid(d), vec(v), prepare_result(std::move(r)), read_guard(g)
{}
+ TaskBase(Stressor &p, uint32_t d, ConstVectorRef v, ReadGuard g)
+ : TaskBase(p, d, v, PrepUP(), g) {}
+ TaskBase(Stressor &p, uint32_t d, ReadGuard g)
+ : TaskBase(p, d, ConstVectorRef(), PrepUP(), g) {}
+ TaskBase(Stressor &p, uint32_t d, ConstVectorRef v, PrepUP r)
+ : TaskBase(p, d, v, std::move(r), ReadGuard()) {}
+ TaskBase(Stressor &p, uint32_t d)
+ : TaskBase(p, d, ConstVectorRef(), PrepUP(), ReadGuard()) {}
+ };
+ struct CompleteAddTask : TaskBase {
+ using TaskBase::TaskBase;
void run() override {
parent.vectors.set(docid, vec);
parent.index->complete_add_document(docid, std::move(prepare_result));
@@ -162,16 +175,8 @@ public:
}
};
- struct TwoPhaseAddTask : vespalib::Executor::Task {
- Stressor &parent;
- uint32_t docid;
- ConstVectorRef vec;
- GenerationHandler::Guard read_guard;
-
- TwoPhaseAddTask(Stressor &p, uint32_t d, ConstVectorRef v, ReadGuard r)
- : parent(p), docid(d), vec(v), read_guard(r)
- {}
-
+ struct TwoPhaseAddTask : TaskBase {
+ using TaskBase::TaskBase;
void run() override {
auto v = vespalib::tensor::TypedCells(vec);
auto up = parent.index->prepare_add_document(docid, v, read_guard);
@@ -184,14 +189,8 @@ public:
}
};
- struct CompleteRemoveTask : vespalib::Executor::Task {
- Stressor &parent;
- uint32_t docid;
-
- CompleteRemoveTask(Stressor &p, uint32_t d)
- : parent(p), docid(d)
- {}
-
+ struct CompleteRemoveTask : TaskBase {
+ using TaskBase::TaskBase;
void run() override {
parent.index->remove_document(docid);
parent.existing_ids->clearBit(docid);
@@ -199,15 +198,8 @@ public:
}
};
- struct TwoPhaseRemoveTask : vespalib::Executor::Task {
- Stressor &parent;
- uint32_t docid;
- GenerationHandler::Guard read_guard;
-
- TwoPhaseRemoveTask(Stressor &p, uint32_t d, ReadGuard r)
- : parent(p), docid(d), read_guard(r)
- {}
-
+ struct TwoPhaseRemoveTask : TaskBase {
+ using TaskBase::TaskBase;
void run() override {
auto task = std::make_unique<CompleteRemoveTask>(parent, docid);
auto r = parent.write_thread.execute(std::move(task));
@@ -218,16 +210,8 @@ public:
}
};
- struct CompleteUpdateTask : vespalib::Executor::Task {
- Stressor &parent;
- uint32_t docid;
- ConstVectorRef vec;
- std::unique_ptr<PrepareResult> prepare_result;
-
- CompleteUpdateTask(Stressor &p, uint32_t d, ConstVectorRef v, PrepUP r)
- : parent(p), docid(d), vec(v), prepare_result(std::move(r))
- {}
-
+ struct CompleteUpdateTask : TaskBase {
+ using TaskBase::TaskBase;
void run() override {
parent.index->remove_document(docid);
parent.vectors.set(docid, vec);
@@ -237,16 +221,8 @@ public:
}
};
- struct TwoPhaseUpdateTask : vespalib::Executor::Task {
- Stressor &parent;
- uint32_t docid;
- ConstVectorRef vec;
- GenerationHandler::Guard read_guard;
-
- TwoPhaseUpdateTask(Stressor &p, uint32_t d, ConstVectorRef v, ReadGuard r)
- : parent(p), docid(d), vec(v), read_guard(r)
- {}
-
+ struct TwoPhaseUpdateTask : TaskBase {
+ using TaskBase::TaskBase;
void run() override {
auto v = vespalib::tensor::TypedCells(vec);
auto up = parent.index->prepare_add_document(docid, v, read_guard);