Skip to content
This repository was archived by the owner on Jun 23, 2022. It is now read-only.

feat(http): add HTTP interfaces to query backup info #342

Merged
merged 124 commits into from
Dec 12, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
b747c9e
fix bugs
Smityz Nov 5, 2019
e0eadcc
1
Smityz Nov 6, 2019
f01f554
Merge commit 'e0eadccc2c894f0d727ce71b63d6b2e38c4b1359'
Smityz Nov 6, 2019
94a5df4
server_info changed
Smityz Nov 7, 2019
6c83c09
unit test
Smityz Nov 8, 2019
18b4ba8
cpp format
Smityz Nov 8, 2019
b451f8b
1
Smityz Nov 9, 2019
21a9bed
add unit test
Smityz Nov 9, 2019
a65d8a5
format
Smityz Nov 11, 2019
4101e3a
format4
Smityz Nov 11, 2019
91ee474
format4
Smityz Nov 11, 2019
3698f65
fix run-clang-format.sh
Smityz Nov 11, 2019
4df892f
rollback format.sh
Smityz Nov 11, 2019
d24d02e
add unit test
Smityz Nov 12, 2019
75321f6
format
Smityz Nov 12, 2019
b5ae5de
add unit tests && fix bugs
Smityz Nov 12, 2019
5852bdf
add unit test && fix some bugs
Smityz Nov 13, 2019
3c1d65f
1
Smityz Nov 13, 2019
126d6ac
1
Smityz Nov 13, 2019
248e890
Update replication_ddl_client.cpp
Smityz Nov 13, 2019
278b291
1
Smityz Nov 14, 2019
9c29853
1
Smityz Nov 14, 2019
5b5b75e
fix commentary
Smityz Nov 14, 2019
9267fee
1
Smityz Nov 14, 2019
88b8ced
fix private unit test
Smityz Nov 14, 2019
aadde4d
fix private unit test
Smityz Nov 14, 2019
39f11b8
final
Smityz Nov 14, 2019
5ef75e4
Merge branch 'master' into master
acelyc111 Nov 14, 2019
eb92a19
1213
Smityz Nov 14, 2019
a85bf06
format
Smityz Nov 14, 2019
f9a0acc
fomat again
Smityz Nov 14, 2019
dd6d544
delete
Smityz Nov 15, 2019
e486ae4
1
Smityz Nov 15, 2019
e010b3f
change comment
Smityz Nov 15, 2019
0bd206e
2222
Smityz Nov 15, 2019
dd60dbf
1
Smityz Nov 15, 2019
9272cb0
final
Smityz Nov 15, 2019
41d51d3
change private
Smityz Nov 15, 2019
04128bc
change files
Smityz Nov 18, 2019
8765a16
change files
Smityz Nov 18, 2019
f92dc5d
1
Smityz Nov 18, 2019
61e4ceb
test change place
Smityz Nov 18, 2019
da730df
1
Smityz Nov 18, 2019
039ec48
123
Smityz Nov 18, 2019
d5a486b
Update replication_ddl_client.h
Smityz Nov 18, 2019
1524bed
Merge branch 'master' into master
acelyc111 Nov 19, 2019
764e244
Update replication_ddl_client.h
Smityz Nov 19, 2019
dda574f
Update utils.h
Smityz Nov 19, 2019
bc2d6e8
Merge pull request #1 from XiaoMi/master
Smityz Nov 21, 2019
fe9c062
1
Smityz Nov 21, 2019
2132769
1
Smityz Nov 21, 2019
5afeb9d
1
Smityz Nov 21, 2019
2556322
1
Smityz Nov 21, 2019
5fa06e3
1
Smityz Nov 21, 2019
6bcd64a
1
Smityz Nov 21, 2019
8c02fe5
1
Smityz Nov 21, 2019
2daffb3
1
Smityz Nov 21, 2019
de18c2b
123123
Smityz Nov 22, 2019
c97ae27
1
Smityz Nov 22, 2019
fe36db7
1
Smityz Nov 22, 2019
1a5fb1b
1
Smityz Nov 25, 2019
d69aa29
fake
Smityz Nov 25, 2019
6991e37
fake
Smityz Nov 25, 2019
43870a7
1
Smityz Nov 26, 2019
58bdaca
123
Smityz Nov 27, 2019
b98f356
format
Smityz Nov 27, 2019
deca26d
add more unit test
Smityz Nov 28, 2019
e0a1490
change 1
Smityz Nov 29, 2019
e59beb6
bug
Smityz Nov 29, 2019
e7c1df4
bug
Smityz Nov 29, 2019
b1b106d
delete
Smityz Nov 29, 2019
25feec9
Merge pull request #2 from XiaoMi/master
Smityz Nov 29, 2019
96ade91
1
Smityz Nov 29, 2019
689f4e4
Delete back.sh
Smityz Nov 29, 2019
52684e4
format
Smityz Nov 29, 2019
12a4914
1
Smityz Nov 29, 2019
6643900
1
Smityz Nov 29, 2019
d965982
format
Smityz Dec 1, 2019
c7bbe50
add more trackers
Smityz Dec 2, 2019
4c65e8d
Merge branch 'master' into tracker
Dec 2, 2019
a06279c
1
Smityz Dec 2, 2019
7d082ca
Merge branch 'tracker' of github.com:Smityz/rdsn into tracker
Smityz Dec 2, 2019
4e520ac
Merge branch 'tracker' into http
Smityz Dec 2, 2019
e5d2497
Merge branch 'master' into http
Dec 2, 2019
fd1968b
change output format
Smityz Dec 3, 2019
0a2b6fe
Merge branch 'master' into http
acelyc111 Dec 3, 2019
3f9e711
Merge branch 'http' of github.com:Smityz/rdsn into http
Smityz Dec 3, 2019
b5a7004
final
Smityz Dec 3, 2019
dccb6b3
Merge pull request #3 from XiaoMi/master
Smityz Dec 3, 2019
7261d28
Merge branch 'master' into http
Smityz Dec 3, 2019
0e24246
format
Smityz Dec 3, 2019
7b1fe39
Merge branch 'master' into http
Smityz Dec 4, 2019
6238d9f
Merge branch 'master' of github.com:XiaoMi/rdsn
Smityz Dec 4, 2019
a6c06fe
Merge branch 'http'
Smityz Dec 4, 2019
4dd5c47
merge
Smityz Dec 4, 2019
aab59f0
maybe some fault
Smityz Dec 4, 2019
dd067bd
Merge branch 'http' of github.com:Smityz/rdsn into http
Smityz Dec 4, 2019
fa37212
restore
Smityz Dec 4, 2019
728f4d6
format
Smityz Dec 4, 2019
856f28c
change1
Smityz Dec 5, 2019
526f711
final
Smityz Dec 5, 2019
44ef9aa
new
Smityz Dec 5, 2019
e5875e2
Update meta_backup_service.cpp
Smityz Dec 5, 2019
877b432
Update meta_backup_service.cpp
Smityz Dec 5, 2019
53b6add
Update meta_http_service.cpp
Smityz Dec 5, 2019
dd1fd5e
format
Smityz Dec 5, 2019
956a4a6
Merge branch 'master' into http
Smityz Dec 5, 2019
c0f599a
change2
Smityz Dec 5, 2019
d2615e1
1
Smityz Dec 5, 2019
98bad3b
1
Smityz Dec 5, 2019
d5ab8bb
Merge branch 'http' of github.com:Smityz/rdsn into http
Smityz Dec 5, 2019
8d0e46f
format
Smityz Dec 6, 2019
027d3fe
1
Smityz Dec 6, 2019
890b7e0
1
Smityz Dec 6, 2019
2339e6d
Merge branch 'master' into http
Dec 9, 2019
4e6ee91
1
Smityz Dec 10, 2019
097fda0
Merge branch 'http' of github.com:Smityz/rdsn into http
Smityz Dec 10, 2019
eea460b
format
Smityz Dec 10, 2019
d25cf9d
change http status
Smityz Dec 10, 2019
4a804d0
1
Smityz Dec 10, 2019
e59c332
change
Smityz Dec 12, 2019
ed76e91
change
Smityz Dec 12, 2019
5656245
Merge branch 'master' into http
Dec 12, 2019
7825ebb
Merge branch 'master' into http
Smityz Dec 12, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/dist/replication/lib/replica_stub.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2388,7 +2388,7 @@ void replica_stub::create_child_replica(rpc_address primary_address,
if (child_replica != nullptr) {
ddebug_f("create child replica ({}) succeed", child_gpid);
tasking::enqueue(LPC_PARTITION_SPLIT,
&_tracker,
child_replica->tracker(),
std::bind(&replica::child_init_replica,
child_replica,
parent_gpid,
Expand Down
21 changes: 10 additions & 11 deletions src/dist/replication/meta_server/meta_backup_service.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
#include "meta_backup_service.h"

#include <dsn/utility/filesystem.h>
#include <dsn/utility/output_utils.h>
#include <dsn/tool-api/http_server.h>

#include "meta_backup_service.h"
#include "dist/replication/meta_server/meta_service.h"
Expand Down Expand Up @@ -1201,7 +1205,7 @@ void backup_service::start()
start_create_policy_meta_root(after_create_policy_meta_root);
}

void backup_service::add_new_policy(dsn::message_ex *msg)
void backup_service::add_backup_policy(dsn::message_ex *msg)
{
configuration_add_backup_policy_request request;
configuration_add_backup_policy_response response;
Expand Down Expand Up @@ -1366,12 +1370,10 @@ bool backup_service::is_valid_policy_name_unlocked(const std::string &policy_nam
return (iter == _policy_states.end());
}

void backup_service::query_policy(dsn::message_ex *msg)
void backup_service::query_backup_policy(query_backup_policy_rpc rpc)
{
configuration_query_backup_policy_request request;
configuration_query_backup_policy_response response;

::dsn::unmarshall(msg, request);
const configuration_query_backup_policy_request &request = rpc.request();
configuration_query_backup_policy_response &response = rpc.response();

response.err = ERR_OK;

Expand Down Expand Up @@ -1409,7 +1411,7 @@ void backup_service::query_policy(dsn::message_ex *msg)
p_entry.backup_history_count_to_keep = cur_policy.backup_history_count_to_keep;
p_entry.start_time = cur_policy.start_time.to_string();
p_entry.is_disable = cur_policy.is_disable;
response.policys.emplace_back(std::move(p_entry));
response.policys.emplace_back(p_entry);
// acquire backup_infos
std::vector<backup_info> b_infos =
policy_context_ptr->get_backup_infos(request.backup_info_count);
Expand All @@ -1435,12 +1437,9 @@ void backup_service::query_policy(dsn::message_ex *msg)
if (!response.hint_msg.empty()) {
response.__isset.hint_msg = true;
}

_meta_svc->reply_data(msg, response);
msg->release_ref();
}

void backup_service::modify_policy(dsn::message_ex *msg)
void backup_service::modify_backup_policy(dsn::message_ex *msg)
{
configuration_modify_backup_policy_request request;
configuration_modify_backup_policy_response response;
Expand Down
12 changes: 9 additions & 3 deletions src/dist/replication/meta_server/meta_backup_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
#include <sstream>
#include <iomanip> // std::setfill, std::setw
#include <functional>

#include <dsn/dist/block_service.h>
#include <dsn/tool-api/http_server.h>
#include <dsn/perf_counter/perf_counter_wrapper.h>

#include "meta_data.h"
Expand All @@ -18,6 +20,10 @@ class meta_service;
class server_state;
class backup_service;

typedef rpc_holder<configuration_query_backup_policy_request,
configuration_query_backup_policy_response>
query_backup_policy_rpc;

struct backup_info_status
{
enum type
Expand Down Expand Up @@ -314,9 +320,9 @@ class backup_service

const std::string &backup_root() const { return _backup_root; }
const std::string &policy_root() const { return _policy_meta_root; }
void add_new_policy(dsn::message_ex* msg);
void query_policy(dsn::message_ex* msg);
void modify_policy(dsn::message_ex* msg);
void add_backup_policy(dsn::message_ex* msg);
void query_backup_policy(query_backup_policy_rpc rpc);
void modify_backup_policy(dsn::message_ex* msg);

// compose the absolute path(AP) for policy
// input:
Expand Down
65 changes: 63 additions & 2 deletions src/dist/replication/meta_server/meta_http_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@
#include <string>

#include <dsn/c/api_layer1.h>
#include <dsn/cpp/json_helper.h>
#include <dsn/cpp/serialization_helper/dsn.layer2_types.h>
#include <dsn/dist/replication/replication_types.h>
#include <dsn/utility/config_api.h>
#include <dsn/utility/output_utils.h>

#include "server_load_balancer.h"
#include "server_state.h"
#include "meta_http_service.h"
#include "meta_server_failure_detector.h"
#include "server_load_balancer.h"
#include "server_state.h"

namespace dsn {
namespace replication {
Expand Down Expand Up @@ -515,6 +516,66 @@ void meta_http_service::get_app_envs_handler(const http_request &req, http_respo
resp.status_code = http_status_code::ok;
}

std::string set_to_string(const std::set<int32_t> &s)
{
std::stringstream out;
rapidjson::OStreamWrapper wrapper(out);
dsn::json::JsonWriter writer(wrapper);
dsn::json::json_encode(writer, s);
return out.str();
}

void meta_http_service::query_backup_policy_handler(const http_request &req, http_response &resp)
{
if (!redirect_if_not_primary(req, resp))
return;

if (_service->_backup_handler == nullptr) {
resp.body = "cold_backup_disabled";
resp.status_code = http_status_code::not_found;
return;
}
auto request = dsn::make_unique<configuration_query_backup_policy_request>();
std::vector<std::string> policy_names;
for (const auto &p : req.query_args) {
if (p.first == "name") {
policy_names.push_back(p.second);
} else {
resp.body = "Invalid parameter";
resp.status_code = http_status_code::bad_request;
return;
}
}
request->policy_names = std::move(policy_names);
query_backup_policy_rpc http_to_rpc(std::move(request), LPC_DEFAULT_CALLBACK);
_service->_backup_handler->query_backup_policy(http_to_rpc);
auto rpc_return = http_to_rpc.response();

dsn::utils::table_printer tp_query_backup_policy;
tp_query_backup_policy.add_title("name");
tp_query_backup_policy.add_column("backup_provider_type");
tp_query_backup_policy.add_column("backup_interval");
tp_query_backup_policy.add_column("app_ids");
tp_query_backup_policy.add_column("start_time");
tp_query_backup_policy.add_column("status");
tp_query_backup_policy.add_column("backup_history_count");
for (const auto &cur_policy : rpc_return.policys) {
tp_query_backup_policy.add_row(cur_policy.policy_name);
tp_query_backup_policy.append_data(cur_policy.backup_provider_type);
tp_query_backup_policy.append_data(cur_policy.backup_interval_seconds);
tp_query_backup_policy.append_data(set_to_string(cur_policy.app_ids));
tp_query_backup_policy.append_data(cur_policy.start_time);
tp_query_backup_policy.append_data(cur_policy.is_disable ? "disabled" : "enabled");
tp_query_backup_policy.append_data(cur_policy.backup_history_count_to_keep);
}
std::ostringstream out;
tp_query_backup_policy.output(out, dsn::utils::table_printer::output_format::kJsonCompact);
resp.body = out.str();
resp.status_code = http_status_code::ok;

return;
}

bool meta_http_service::redirect_if_not_primary(const http_request &req, http_response &resp)
{
#ifdef DSN_MOCK_TEST
Expand Down
7 changes: 7 additions & 0 deletions src/dist/replication/meta_server/meta_http_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,12 @@ class meta_http_service : public http_service
this,
std::placeholders::_1,
std::placeholders::_2));
// GET ip:port/meta/backup_policy
register_handler("backup_policy",
std::bind(&meta_http_service::query_backup_policy_handler,
this,
std::placeholders::_1,
std::placeholders::_2));
}

std::string path() const override { return "meta"; }
Expand All @@ -56,6 +62,7 @@ class meta_http_service : public http_service
void list_node_handler(const http_request &req, http_response &resp);
void get_cluster_info_handler(const http_request &req, http_response &resp);
void get_app_envs_handler(const http_request &req, http_response &resp);
void query_backup_policy_handler(const http_request &req, http_response &resp);

private:
// set redirect location if current server is not primary
Expand Down
26 changes: 13 additions & 13 deletions src/dist/replication/meta_server/meta_service.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,7 @@ void meta_service::register_rpc_handlers()
register_rpc_handler(RPC_CM_START_RESTORE, "start_restore", &meta_service::on_start_restore);
register_rpc_handler(
RPC_CM_ADD_BACKUP_POLICY, "add_backup_policy", &meta_service::on_add_backup_policy);
register_rpc_handler(
register_rpc_handler_with_rpc_holder(
RPC_CM_QUERY_BACKUP_POLICY, "query_backup_policy", &meta_service::on_query_backup_policy);
register_rpc_handler(RPC_CM_MODIFY_BACKUP_POLICY,
"modify_backup_policy",
Expand Down Expand Up @@ -731,24 +731,23 @@ void meta_service::on_add_backup_policy(dsn::message_ex *req)
req->add_ref();
tasking::enqueue(LPC_DEFAULT_CALLBACK,
nullptr,
std::bind(&backup_service::add_new_policy, _backup_handler.get(), req));
std::bind(&backup_service::add_backup_policy, _backup_handler.get(), req));
}
}

void meta_service::on_query_backup_policy(dsn::message_ex *req)
void meta_service::on_query_backup_policy(query_backup_policy_rpc policy_rpc)
{
configuration_query_backup_policy_response response;
RPC_CHECK_STATUS(req, response);
auto &response = policy_rpc.response();
RPC_CHECK_STATUS(policy_rpc.dsn_request(), response);

if (_backup_handler == nullptr) {
derror("meta doesn't enable backup service");
response.err = ERR_SERVICE_NOT_ACTIVE;
reply(req, response);
} else {
req->add_ref();
tasking::enqueue(LPC_DEFAULT_CALLBACK,
nullptr,
std::bind(&backup_service::query_policy, _backup_handler.get(), req));
tasking::enqueue(
LPC_DEFAULT_CALLBACK,
nullptr,
std::bind(&backup_service::query_backup_policy, _backup_handler.get(), policy_rpc));
}
}

Expand All @@ -763,9 +762,10 @@ void meta_service::on_modify_backup_policy(dsn::message_ex *req)
reply(req, response);
} else {
req->add_ref();
tasking::enqueue(LPC_DEFAULT_CALLBACK,
nullptr,
std::bind(&backup_service::modify_policy, _backup_handler.get(), req));
tasking::enqueue(
LPC_DEFAULT_CALLBACK,
nullptr,
std::bind(&backup_service::modify_backup_policy, _backup_handler.get(), req));
}
}

Expand Down
3 changes: 2 additions & 1 deletion src/dist/replication/meta_server/meta_service.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ class meta_service : public serverlet<meta_service>
void on_start_recovery(dsn::message_ex *req);
void on_start_restore(dsn::message_ex *req);
void on_add_backup_policy(dsn::message_ex *req);
void on_query_backup_policy(dsn::message_ex *req);
void on_query_backup_policy(query_backup_policy_rpc policy_rpc);
void on_modify_backup_policy(dsn::message_ex *req);
void on_report_restore_status(dsn::message_ex *req);
void on_query_restore_status(dsn::message_ex *req);
Expand Down Expand Up @@ -217,6 +217,7 @@ class meta_service : public serverlet<meta_service>
friend class meta_test_base;
friend class meta_duplication_service;
friend class meta_http_service_test;
friend class meta_backup_test_base;
friend class meta_http_service;
std::unique_ptr<meta_duplication_service> _dup_svc;

Expand Down
8 changes: 4 additions & 4 deletions src/dist/replication/test/meta_test/unit_test/backup_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -662,9 +662,9 @@ void meta_service_test_app::backup_service_test()
ASSERT_TRUE(flag);
}

// testing add_new_policy()
// testing add_backup_policy()
{
std::cout << "add_new_policy()..." << std::endl;
std::cout << "add_backup_policy()..." << std::endl;
// create a fake add_backup_policy_request
configuration_add_backup_policy_request req;
req.backup_provider_type = std::string("local_service");
Expand All @@ -679,7 +679,7 @@ void meta_service_test_app::backup_service_test()
auto r = fake_rpc_call(RPC_CM_ADD_BACKUP_POLICY,
LPC_DEFAULT_CALLBACK,
backup_svc,
&backup_service::add_new_policy,
&backup_service::add_backup_policy,
req);
fake_wait_rpc(r, resp);
ASSERT_TRUE(resp.err == ERR_INVALID_PARAMETERS);
Expand All @@ -694,7 +694,7 @@ void meta_service_test_app::backup_service_test()
auto r = fake_rpc_call(RPC_CM_ADD_BACKUP_POLICY,
LPC_DEFAULT_CALLBACK,
backup_svc,
&backup_service::add_new_policy,
&backup_service::add_backup_policy,
req);
fake_wait_rpc(r, resp);
ASSERT_TRUE(resp.err == ERR_OK);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ meta_function_level_on_start = lively
app_balancer_in_turn = false
only_primary_balancer = false
only_move_primary = false
cold_backup_disabled = false

[replication]
cluster_name = master-cluster
Expand Down
Loading