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

paticcaa / pain / 17713096990

14 Sep 2025 03:23PM UTC coverage: 55.184% (+0.9%) from 54.268%
17713096990

push

github

ivanallen
extract rsm to common

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

1660 of 4120 branches covered (40.29%)

Branch coverage included in aggregate %.

166 of 187 new or added lines in 13 files covered. (88.77%)

101 existing lines in 7 files now uncovered.

1938 of 2400 relevant lines covered (80.75%)

513.03 hits per line

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

47.77
/src/deva/deva_service_impl.cc
1
#include "deva/deva_service_impl.h"
2
#include <brpc/closure_guard.h>
3

4
#include <pain/base/uuid.h>
5
#include "pain/proto/deva_store.pb.h"
6
#include "common/object_id_util.h"
7
#include "deva/bridge.h"
8
#include "deva/deva.h"
9
#include "deva/macro.h"
10

11
#define DEVA_SERVICE_METHOD(name)                                                                                      \
12
    void DevaServiceImpl::name(::google::protobuf::RpcController* controller,                                          \
13
                               [[maybe_unused]] const pain::proto::deva::name##Request* request,                       \
14
                               [[maybe_unused]] pain::proto::deva::name##Response* response,                           \
15
                               ::google::protobuf::Closure* done)
16

17
namespace pain::deva {
18

19
DevaServiceImpl::DevaServiceImpl(common::RsmPtr rsm) : _rsm(rsm) {}
23✔
20

21
DEVA_SERVICE_METHOD(OpenFile) {
14✔
22
    brpc::ClosureGuard done_guard(done);
14✔
23
    DEFINE_SPAN(span, controller);
42!
24
    PLOG_DEBUG(("desc", "OpenFile")("request", request->DebugString()));
14✔
25
    auto& path = request->path();
14!
26
    auto flags = request->flags();
14!
27

28
    if ((flags & pain::proto::deva::OpenFlag::OPEN_CREATE) != 0) {
14✔
29
        pain::proto::deva::store::CreateFileRequest create_request;
13!
30
        pain::proto::deva::store::CreateFileResponse create_response;
13!
31
        // TODO: using config
32
        auto partition_id = (++_partition_id) % 10; // NOLINT
13✔
33
        auto file_id = ObjectId::generate(partition_id);
13!
34
        create_request.set_path(path);
35
        common::to_proto(file_id, create_request.mutable_file_id());
13!
36
        create_request.set_mode(0666); // NOLINT
13!
37
        create_request.set_uid(0);
13!
38
        create_request.set_gid(0);
13!
39
        create_request.set_atime(butil::gettimeofday_us());
13!
40
        create_request.set_mtime(butil::gettimeofday_us());
13!
41
        create_request.set_ctime(butil::gettimeofday_us());
13!
42
        auto status = bridge<Deva, OpType::kCreateFile>(1, _rsm, create_request, &create_response).get();
13!
43
        if (!status.ok()) {
13!
44
            PLOG_ERROR(("desc", "failed to create file")("error", status.error_str()));
×
45
            response->mutable_header()->set_status(status.error_code());
×
UNCOV
46
            response->mutable_header()->set_message(status.error_str());
×
UNCOV
47
            return;
×
48
        }
49
        response->mutable_file_info()->Swap(create_response.mutable_file_info());
13!
50
        response->mutable_header()->set_status(0);
13!
51
        response->mutable_header()->set_message("ok");
13!
52
    } else {
13!
53
        // readdir
54
        // get file info
55
        pain::proto::deva::store::GetFileInfoRequest get_file_info_request;
1!
56
        pain::proto::deva::store::GetFileInfoResponse get_file_info_response;
1!
57
        get_file_info_request.set_path(path);
58
        auto status = bridge<Deva, OpType::kGetFileInfo>(1, _rsm, get_file_info_request, &get_file_info_response).get();
1!
59
        if (!status.ok()) {
1!
UNCOV
60
            PLOG_ERROR(("desc", "failed to get file info")("error", status.error_str()));
×
61
        }
62
        response->mutable_file_info()->Swap(get_file_info_response.mutable_file_info());
1!
63
        response->mutable_header()->set_status(0);
1!
64
        response->mutable_header()->set_message("ok");
1!
65
    }
1✔
66

67
    response->mutable_header()->set_status(0);
14!
68
    response->mutable_header()->set_message("ok");
14!
69
}
14!
70

71
DEVA_SERVICE_METHOD(CloseFile) {
×
72
    brpc::ClosureGuard done_guard(done);
×
UNCOV
73
    DEFINE_SPAN(span, controller);
×
74
}
×
75

76
DEVA_SERVICE_METHOD(RemoveFile) {
×
77
    brpc::ClosureGuard done_guard(done);
×
UNCOV
78
    DEFINE_SPAN(span, controller);
×
UNCOV
79
}
×
80

81
DEVA_SERVICE_METHOD(Mkdir) {
13✔
82
    brpc::ClosureGuard done_guard(done);
13✔
83
    DEFINE_SPAN(span, controller);
39!
84
    auto& path = request->path();
13!
85
    pain::proto::deva::store::CreateDirRequest create_request;
13!
86
    pain::proto::deva::store::CreateDirResponse create_response;
13!
87
    auto partition_id = (++_partition_id) % 10; // NOLINT
13✔
88
    auto dir_id = ObjectId::generate(partition_id);
13!
89
    create_request.set_path(path);
90
    common::to_proto(dir_id, create_request.mutable_dir_id());
13!
91
    create_request.set_mode(0777); // NOLINT
13!
92
    create_request.set_uid(0);
13!
93
    create_request.set_gid(0);
13!
94
    create_request.set_atime(butil::gettimeofday_us());
13!
95
    create_request.set_mtime(butil::gettimeofday_us());
13!
96
    create_request.set_ctime(butil::gettimeofday_us());
13!
97
    auto status = bridge<Deva, OpType::kCreateDir>(1, _rsm, create_request, &create_response).get();
13!
98
    if (!status.ok()) {
13!
99
        PLOG_ERROR(("desc", "failed to create file")("error", status.error_str()));
×
100
        response->mutable_header()->set_status(status.error_code());
×
UNCOV
101
        response->mutable_header()->set_message(status.error_str());
×
UNCOV
102
        return;
×
103
    }
104
    response->mutable_file_info()->Swap(create_response.mutable_file_info());
13!
105
    response->mutable_header()->set_status(0);
13!
106
    response->mutable_header()->set_message("ok");
13!
107
}
13!
108

109
DEVA_SERVICE_METHOD(ReadDir) {
2✔
110
    brpc::ClosureGuard done_guard(done);
2✔
111
    DEFINE_SPAN(span, controller);
6!
112
    auto& path = request->path();
2!
113
    pain::proto::deva::store::ReadDirRequest read_dir_request;
2!
114
    pain::proto::deva::store::ReadDirResponse read_dir_response;
2!
115
    read_dir_request.set_path(path);
116
    auto status = bridge<Deva, OpType::kReadDir>(1, _rsm, read_dir_request, &read_dir_response).get();
2!
117
    if (!status.ok()) {
2!
118
        PLOG_ERROR(("desc", "failed to read dir")("error", status.error_str()));
×
119
        response->mutable_header()->set_status(status.error_code());
×
UNCOV
120
        response->mutable_header()->set_message(status.error_str());
×
UNCOV
121
        return;
×
122
    }
123
    response->mutable_entries()->Swap(read_dir_response.mutable_entries());
2!
124
    response->mutable_header()->set_status(0);
2!
125
    response->mutable_header()->set_message("ok");
2!
126
}
2!
127

128
DEVA_SERVICE_METHOD(SealFile) {
×
129
    brpc::ClosureGuard done_guard(done);
×
UNCOV
130
    DEFINE_SPAN(span, controller);
×
131
}
×
132

133
DEVA_SERVICE_METHOD(NewChunk) {
×
134
    brpc::ClosureGuard done_guard(done);
×
UNCOV
135
    DEFINE_SPAN(span, controller);
×
136
}
×
137

138
DEVA_SERVICE_METHOD(CheckInChunk) {
×
139
    brpc::ClosureGuard done_guard(done);
×
UNCOV
140
    DEFINE_SPAN(span, controller);
×
141
}
×
142

143
DEVA_SERVICE_METHOD(SealChunk) {
×
144
    brpc::ClosureGuard done_guard(done);
×
UNCOV
145
    DEFINE_SPAN(span, controller);
×
146
}
×
147

148
DEVA_SERVICE_METHOD(SealAndNewChunk) {
×
149
    brpc::ClosureGuard done_guard(done);
×
UNCOV
150
    DEFINE_SPAN(span, controller);
×
UNCOV
151
}
×
152

153
DEVA_SERVICE_METHOD(ManusyaHeartbeat) {
1✔
154
    brpc::ClosureGuard done_guard(done);
1✔
155
    DEFINE_SPAN(span, controller);
3!
156
    auto& manusya_registration = request->manusya_registration();
1!
157
    pain::proto::deva::store::ManusyaHeartbeatRequest manusya_heartbeat_request;
1!
158
    pain::proto::deva::store::ManusyaHeartbeatResponse manusya_heartbeat_response;
1!
159

160
    manusya_heartbeat_request.mutable_manusya_registration()->CopyFrom(manusya_registration);
1!
161

162
    auto status =
1✔
163
        bridge<Deva, OpType::kManusyaHeartbeat>(1, _rsm, manusya_heartbeat_request, &manusya_heartbeat_response).get();
1!
164
    if (!status.ok()) {
1!
165
        PLOG_ERROR(("desc", "failed to handle manusya heartbeat")("error", status.error_str()));
×
166
        response->mutable_header()->set_status(status.error_code());
×
UNCOV
167
        response->mutable_header()->set_message(status.error_str());
×
UNCOV
168
        return;
×
169
    }
170
    response->mutable_header()->set_status(0);
1!
171
    response->mutable_header()->set_message("ok");
1!
172
}
1!
173

174
DEVA_SERVICE_METHOD(ListManusya) {
2✔
175
    brpc::ClosureGuard done_guard(done);
2✔
176
    DEFINE_SPAN(span, controller);
6!
177
    pain::proto::deva::store::ListManusyaRequest list_manusya_request;
2!
178
    pain::proto::deva::store::ListManusyaResponse list_manusya_response;
2!
179
    auto status = bridge<Deva, OpType::kListManusya>(1, _rsm, list_manusya_request, &list_manusya_response).get();
2!
180
    if (!status.ok()) {
2!
181
        PLOG_ERROR(("desc", "failed to list manusya")("error", status.error_str()));
×
182
        response->mutable_header()->set_status(status.error_code());
×
UNCOV
183
        response->mutable_header()->set_message(status.error_str());
×
UNCOV
184
        return;
×
185
    }
186
    response->mutable_manusya_descriptors()->Swap(list_manusya_response.mutable_manusya_descriptors());
2!
187
    response->mutable_header()->set_status(0);
2!
188
    response->mutable_header()->set_message("ok");
2!
189
}
2!
190

191
} // namespace pain::deva
192

193
#undef DEVA_SERVICE_METHOD
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