• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

paticcaa / pain / 17455596282

04 Sep 2025 06:40AM UTC coverage: 56.572% (+0.4%) from 56.202%
17455596282

push

github

ivanallen
add snapshot

Signed-off-by: allen <1007729991@qq.com>

1424 of 3382 branches covered (42.11%)

Branch coverage included in aggregate %.

53 of 79 new or added lines in 9 files covered. (67.09%)

5 existing lines in 3 files now uncovered.

1688 of 2119 relevant lines covered (79.66%)

439.4 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

71.15
/src/deva/mock/mock_deva.cc
1
#include "deva/mock/mock_deva.h"
2
#include <braft/cli.h>
3
#include <braft/route_table.h>
4
#include <pain/base/path.h>
5
#include <pain/base/plog.h>
6
#include <cerrno>
7
#include <fmt/format.h>
8
#include <fmt/ranges.h>
9

10
namespace pain::deva::mock {
11

12
MockDeva::MockDeva() :
6✔
13
    _group("test_group"),
18!
14
    _data_path("/tmp/deva_mock_data_XXXXXX"),
18!
15
    _node_addrs({"127.0.0.1:8200", "127.0.0.1:8201", "127.0.0.1:8202"}),
48!
16
    _do_not_remove_data_path(false) {
18✔
17
    _node_conf = fmt::format("{}", fmt::join(_node_addrs, ","));
18!
18
    make_temp_dir_or_die(&_data_path);
6!
19
    PLOG_INFO(("data_path", _data_path));
6✔
20

21
    auto node_size = _node_addrs.size();
6✔
22

23
    _deva_machine.resize(node_size);
6!
24
    _data_paths.resize(node_size);
6!
25

26
    for (size_t i = 0; i < node_size; i++) {
24✔
27
        _data_paths[i] = fmt::format("{}/{}", _data_path, i);
36✔
28
    }
29
    braft::rtb::update_configuration(_group, _node_conf);
6!
30
}
24!
31

32
MockDeva::~MockDeva() {
6✔
33
    stop();
6✔
34
    if (!_do_not_remove_data_path) {
6!
35
        std::filesystem::remove_all(_data_path);
6✔
36
    }
37
}
6✔
38

39
Status MockDeva::start() {
6✔
40
    PLOG_INFO(("desc", "start")("node_count", _deva_machine.size()));
6✔
41
    for (size_t i = 0; i < _deva_machine.size(); i++) {
24✔
42
        auto status = start(i);
18!
43
        if (!status.ok()) {
18!
44
            return status;
×
45
        }
46
    }
18!
47
    return Status::OK();
6✔
48
}
49

50
Status MockDeva::start(int index) {
20✔
51
    PLOG_INFO(("desc", "start")("index", index));
20✔
52
    _deva_machine[index] = std::make_unique<DevaMachine>(
80✔
53
        _data_paths[index].c_str(), _group.c_str(), _node_addrs[index].c_str(), _node_conf.c_str());
60!
54
    return _deva_machine[index]->start();
20✔
55
}
56

57
void MockDeva::stop(int index) {
38✔
58
    if (_deva_machine[index]) {
38✔
59
        PLOG_INFO(("desc", "stop")("index", index));
20✔
60
        _deva_machine[index]->stop();
20✔
61
        _deva_machine[index].reset();
20✔
62
    }
63
}
38✔
64

65
void MockDeva::stop() {
12✔
66
    PLOG_INFO(("desc", "stop"));
12✔
67
    for (size_t i = 0; i < _deva_machine.size(); i++) {
48✔
68
        stop(i);
36✔
69
    }
70
}
12✔
71

72
Status MockDeva::wait_for_leader(std::string* addr, int timeout_ms) {
7✔
73
    PLOG_INFO(("desc", "wait_for_leader")("timeout_ms", timeout_ms));
7✔
74
    constexpr int sleep_interval_ms = 500;
7✔
75
    for (int i = 0; i < timeout_ms / sleep_interval_ms; i++) {
31!
76
        auto status = braft::rtb::refresh_leader(_group, sleep_interval_ms);
31!
77
        if (!status.ok()) {
31✔
78
            bthread_usleep(sleep_interval_ms * 1000); // NOLINT(readability-magic-numbers)
24!
79
            continue;
24✔
80
        }
81
        braft::PeerId leader;
7✔
82
        braft::rtb::select_leader(_group, &leader);
7!
83
        if (leader.is_empty()) {
7!
84
            bthread_usleep(sleep_interval_ms * 1000); // NOLINT(readability-magic-numbers)
×
85
            continue;
×
86
        }
87
        *addr = leader.to_string();
7!
88
        return Status::OK();
7✔
89
    }
38!
90
    return Status(ENODEV, "No leader");
×
91
}
92

93
Status MockDeva::snapshot(int index) {
3✔
94
    PLOG_INFO(("desc", "snapshot")("index", index));
3✔
95
    return braft::cli::snapshot(_group, _node_addrs[index], braft::cli::CliOptions());
3!
96
}
97

98
Status MockDeva::snapshot() {
1✔
99
    PLOG_INFO(("desc", "snapshot"));
1✔
100
    for (size_t i = 0; i < _deva_machine.size(); i++) {
4✔
101
        auto status = snapshot(i);
3!
102
        if (!status.ok()) {
3!
NEW
103
            return status;
×
104
        }
105
    }
3!
106
    return Status::OK();
1✔
107
}
108

109
} // namespace pain::deva::mock
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc