summaryrefslogtreecommitdiffstats
path: root/searchcore
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-04-12 10:06:32 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2021-04-12 10:06:32 +0000
commitef5b81cb74fcd07649182745416ad3cf78e36017 (patch)
treec6d8aa8f01285ed315f456e634f9b9c63bf04001 /searchcore
parent8dc926818cdddde34fb287b215203dde02216f8d (diff)
Check if job has been stopped before posting to master executor to reduce risk for accesing freed memory after documentdb have been shutdown.
Diffstat (limited to 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp2
-rw-r--r--searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp2
2 files changed, 4 insertions, 0 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp
index f0847ff051e..34167933356 100644
--- a/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/bucketmovejobv2.cpp
@@ -181,6 +181,7 @@ private:
void
BucketMoveJobV2::failOperation(std::shared_ptr<BucketMoveJobV2> job, BucketId bucketId) {
auto & master = job->_master;
+ if (job->_stopped) return;
master.execute(makeLambdaTask([job=std::move(job), bucketId]() {
if (job->_stopped.load(std::memory_order_relaxed)) return;
job->considerBucket(job->_ready.meta_store()->getBucketDB().takeGuard(), bucketId);
@@ -205,6 +206,7 @@ BucketMoveJobV2::prepareMove(std::shared_ptr<BucketMoveJobV2> job, BucketMoverSP
{
auto moveOps = mover->createMoveOperations(std::move(keys));
auto & master = job->_master;
+ if (job->_stopped) return;
master.execute(makeLambdaTask([job=std::move(job), mover=std::move(mover), moveOps=std::move(moveOps), onDone=std::move(onDone)]() mutable {
if (job->_stopped.load(std::memory_order_relaxed)) return;
job->completeMove(std::move(mover), std::move(moveOps), std::move(onDone));
diff --git a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp
index 52fd18cd971..db83862ba90 100644
--- a/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp
+++ b/searchcore/src/vespa/searchcore/proton/server/lid_space_compaction_job_take2.cpp
@@ -50,6 +50,7 @@ public:
void fail(const Bucket & bucket) override {
assert(bucket.getBucketId() == _meta.bucketId);
auto & master = _job->_master;
+ if (_job->_stopped) return;
master.execute(makeLambdaTask([job=std::move(_job)] { job->_scanItr.reset(); }));
}
private:
@@ -86,6 +87,7 @@ CompactionJob::moveDocument(std::shared_ptr<CompactionJob> job, const search::Do
if (metaThen.gid != op->getDocument()->getId().getGlobalId()) return;
auto & master = job->_master;
+ if (job->_stopped) return;
master.execute(makeLambdaTask([self=std::move(job), meta=metaThen, moveOp=std::move(op), onDone=std::move(context)]() mutable {
if (self->_stopped.load(std::memory_order_relaxed)) return;
self->completeMove(meta, std::move(moveOp), std::move(onDone));