aboutsummaryrefslogtreecommitdiffstats
path: root/vespalib/src/vespa/vespalib/util/sequencedtaskexecutorobserver.cpp
blob: 54de5ea72dd4293172c5ada7918caa8f3c86fa25 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include "sequencedtaskexecutorobserver.h"

namespace vespalib {

SequencedTaskExecutorObserver::SequencedTaskExecutorObserver(ISequencedTaskExecutor &executor)
    : ISequencedTaskExecutor(executor.getNumExecutors()),
      _executor(executor),
      _executeCnt(0u),
      _syncCnt(0u),
      _executeHistory(),
      _mutex()
{
}

SequencedTaskExecutorObserver::~SequencedTaskExecutorObserver() = default;

void
SequencedTaskExecutorObserver::executeTask(ExecutorId id, Executor::Task::UP task)
{
    ++_executeCnt;
    {
        std::lock_guard<std::mutex> guard(_mutex);
        _executeHistory.emplace_back(id.getId());
    }
    _executor.executeTask(id, std::move(task));
}

void
SequencedTaskExecutorObserver::executeTasks(TaskList tasks)
{
    _executeCnt += tasks.size();
    {
        std::lock_guard<std::mutex> guard(_mutex);
        for (const auto & task : tasks) {
            _executeHistory.emplace_back(task.first.getId());
        }
    }
    _executor.executeTasks(std::move(tasks));
}

void
SequencedTaskExecutorObserver::sync_all()
{
    ++_syncCnt;
    _executor.sync_all();
}

std::vector<uint32_t>
SequencedTaskExecutorObserver::getExecuteHistory()
{
    std::lock_guard<std::mutex> guard(_mutex);
    return _executeHistory;
}

void SequencedTaskExecutorObserver::setTaskLimit(uint32_t taskLimit) {
    _executor.setTaskLimit(taskLimit);
}

ExecutorStats SequencedTaskExecutorObserver::getStats() {
    return _executor.getStats();
}

ISequencedTaskExecutor::ExecutorId
SequencedTaskExecutorObserver::getExecutorId(uint64_t componentId) const {
    return _executor.getExecutorId(componentId);
}

} // namespace search