aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/vespa/searchcore/proton/server/disk_mem_usage_state.h
blob: 2730388de9afbda142d3aea7137bcea50d99563a (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
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.

#pragma once

#include "resource_usage_state.h"
#include <algorithm>

namespace proton {

/**
 * Class used to describe state of disk and memory usage relative to configured limits.
 * In addition relative transient disk and memory usage are tracked.
 */
class DiskMemUsageState
{
    ResourceUsageState _diskState;
    ResourceUsageState _memoryState;
    double _transient_disk_usage;
    double _transient_memory_usage;

public:
    DiskMemUsageState() = default;
    DiskMemUsageState(const ResourceUsageState &diskState_,
                      const ResourceUsageState &memoryState_,
                      double transient_disk_usage_ = 0,
                      double transient_memory_usage_ = 0)
        : _diskState(diskState_),
          _memoryState(memoryState_),
          _transient_disk_usage(transient_disk_usage_),
          _transient_memory_usage(transient_memory_usage_)
    {
    }
    bool operator==(const DiskMemUsageState &rhs) const {
        return ((_diskState == rhs._diskState) &&
                (_memoryState == rhs._memoryState) &&
                (_transient_disk_usage == rhs._transient_disk_usage) &&
                (_transient_memory_usage == rhs._transient_memory_usage));
    }
    bool operator!=(const DiskMemUsageState &rhs) const {
        return ! ((*this) == rhs);
    }
    const ResourceUsageState &diskState() const { return _diskState; }
    const ResourceUsageState &memoryState() const { return _memoryState; }
    double transient_disk_usage() const { return _transient_disk_usage; }
    double transient_memory_usage() const { return _transient_memory_usage; }
    double non_transient_disk_usage() const { return std::max(0.0, _diskState.usage() - _transient_disk_usage); }
    double non_transient_memory_usage() const { return std::max(0.0, _memoryState.usage() - _transient_memory_usage); }
    bool aboveDiskLimit(double resourceLimitFactor) const { return diskState().aboveLimit(resourceLimitFactor); }
    bool aboveMemoryLimit(double resourceLimitFactor) const { return memoryState().aboveLimit(resourceLimitFactor); }
};

} // namespace proton