aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/vespa/searchcore/proton/server/feed_handler_stats.cpp
blob: f5665c47529fdfffb32ee8a0366a3936812b7cda (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
71
72
73
74
75
76
77
78
79
80
81
82
83
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#include "feed_handler_stats.h"
#include <cassert>
#include <vespa/log/log.h>

LOG_SETUP(".proton.server.feed_handler_stats");

namespace proton {

namespace {

template <typename T>
void update_min_max(T value, std::optional<T>& min, std::optional<T>& max)
{
    if (!min.has_value() || value < min.value()) {
        min = value;
    }
    if (!max.has_value() || value > max.value()) {
        max = value;
    }
}

}

FeedHandlerStats::FeedHandlerStats(uint64_t commits, uint64_t operations, double total_latency) noexcept
    : _commits(commits),
      _operations(operations),
      _total_latency(total_latency),
      _min_operations(),
      _max_operations(),
      _min_latency(),
      _max_latency()
{
}

FeedHandlerStats::FeedHandlerStats() noexcept
    : FeedHandlerStats(0, 0, 0.0)
{
}

FeedHandlerStats::~FeedHandlerStats() = default;


FeedHandlerStats&
FeedHandlerStats::operator-=(const FeedHandlerStats& rhs) noexcept
{
    _commits -= rhs._commits;
    _operations -= rhs._operations;
    _total_latency -= rhs._total_latency;
    return *this;
}

void
FeedHandlerStats::add_commit(uint32_t operations, double latency) noexcept
{
    ++_commits;
    _operations += operations;
    _total_latency += latency;
    update_min_max(operations, _min_operations, _max_operations);
    update_min_max(latency, _min_latency, _max_latency);
}

void
FeedHandlerStats::reset_min_max() noexcept
{
    _min_operations.reset();
    _max_operations.reset();
    _min_latency.reset();
    _max_latency.reset();
}

void
FeedOperationCounter::commitCompleted(size_t numOperations) {
    assert(_commitsStarted > _commitsCompleted);
    assert(_operationsStarted >= _operationsCompleted + numOperations);
    _operationsCompleted += numOperations;
    _commitsCompleted++;
    LOG(spam, "%zu: onCommitDone(%zu) total=%zu left=%zu",
        _commitsCompleted, numOperations, _operationsCompleted, operationsInFlight());
}

}