diff options
Diffstat (limited to 'staging_vespalib/src/vespa/vespalib/util/sequencedtaskexecutorobserver.h')
-rw-r--r-- | staging_vespalib/src/vespa/vespalib/util/sequencedtaskexecutorobserver.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/staging_vespalib/src/vespa/vespalib/util/sequencedtaskexecutorobserver.h b/staging_vespalib/src/vespa/vespalib/util/sequencedtaskexecutorobserver.h new file mode 100644 index 00000000000..9307a7ddb37 --- /dev/null +++ b/staging_vespalib/src/vespa/vespalib/util/sequencedtaskexecutorobserver.h @@ -0,0 +1,38 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +#pragma once + +#include "isequencedtaskexecutor.h" +#include <atomic> + +namespace vespalib { + +/** + * Observer class to observe class to run multiple tasks in parallel, + * but tasks with same id has to be run in sequence. + */ +class SequencedTaskExecutorObserver : public ISequencedTaskExecutor +{ + ISequencedTaskExecutor &_executor; + std::atomic<uint32_t> _executeCnt; + std::atomic<uint32_t> _syncCnt; + std::vector<uint32_t> _executeHistory; + std::mutex _mutex; +public: + using ISequencedTaskExecutor::getExecutorId; + + SequencedTaskExecutorObserver(ISequencedTaskExecutor &executor); + ~SequencedTaskExecutorObserver() override; + + void executeTask(ExecutorId id, vespalib::Executor::Task::UP task) override; + void sync() override; + + uint32_t getExecuteCnt() const { return _executeCnt; } + uint32_t getSyncCnt() const { return _syncCnt; } + std::vector<uint32_t> getExecuteHistory(); + + void setTaskLimit(uint32_t taskLimit) override; + + vespalib::ExecutorStats getStats() override; +}; + +} // namespace search |