api: view_build_statuses: do not use IP from the topology, but translate id to ip using address map instead
This commit is contained in:
@@ -153,8 +153,8 @@ future<> unset_server_sstables_loader(http_context& ctx) {
|
||||
return ctx.http_server.set_routes([&ctx] (routes& r) { unset_sstables_loader(ctx, r); });
|
||||
}
|
||||
|
||||
future<> set_server_view_builder(http_context& ctx, sharded<db::view::view_builder>& vb) {
|
||||
return ctx.http_server.set_routes([&ctx, &vb] (routes& r) { set_view_builder(ctx, r, vb); });
|
||||
future<> set_server_view_builder(http_context& ctx, sharded<db::view::view_builder>& vb, sharded<gms::gossiper>& g) {
|
||||
return ctx.http_server.set_routes([&ctx, &vb, &g] (routes& r) { set_view_builder(ctx, r, vb, g); });
|
||||
}
|
||||
|
||||
future<> unset_server_view_builder(http_context& ctx) {
|
||||
|
||||
@@ -100,7 +100,7 @@ future<> set_server_storage_service(http_context& ctx, sharded<service::storage_
|
||||
future<> unset_server_storage_service(http_context& ctx);
|
||||
future<> set_server_sstables_loader(http_context& ctx, sharded<sstables_loader>& sst_loader);
|
||||
future<> unset_server_sstables_loader(http_context& ctx);
|
||||
future<> set_server_view_builder(http_context& ctx, sharded<db::view::view_builder>& vb);
|
||||
future<> set_server_view_builder(http_context& ctx, sharded<db::view::view_builder>& vb, sharded<gms::gossiper>& g);
|
||||
future<> unset_server_view_builder(http_context& ctx);
|
||||
future<> set_server_repair(http_context& ctx, sharded<repair_service>& repair, sharded<gms::gossip_address_map>& am);
|
||||
future<> unset_server_repair(http_context& ctx);
|
||||
|
||||
@@ -533,11 +533,11 @@ void unset_sstables_loader(http_context& ctx, routes& r) {
|
||||
ss::start_restore.unset(r);
|
||||
}
|
||||
|
||||
void set_view_builder(http_context& ctx, routes& r, sharded<db::view::view_builder>& vb) {
|
||||
ss::view_build_statuses.set(r, [&ctx, &vb] (std::unique_ptr<http::request> req) {
|
||||
void set_view_builder(http_context& ctx, routes& r, sharded<db::view::view_builder>& vb, sharded<gms::gossiper>& g) {
|
||||
ss::view_build_statuses.set(r, [&ctx, &vb, &g] (std::unique_ptr<http::request> req) {
|
||||
auto keyspace = validate_keyspace(ctx, req);
|
||||
auto view = req->get_path_param("view");
|
||||
return vb.local().view_build_statuses(std::move(keyspace), std::move(view)).then([] (std::unordered_map<sstring, sstring> status) {
|
||||
return vb.local().view_build_statuses(std::move(keyspace), std::move(view), g.local()).then([] (std::unordered_map<sstring, sstring> status) {
|
||||
std::vector<storage_service_json::mapper> res;
|
||||
return make_ready_future<json::json_return_type>(map_to_key_value(std::move(status), res));
|
||||
});
|
||||
|
||||
@@ -75,7 +75,7 @@ void set_storage_service(http_context& ctx, httpd::routes& r, sharded<service::s
|
||||
void unset_storage_service(http_context& ctx, httpd::routes& r);
|
||||
void set_sstables_loader(http_context& ctx, httpd::routes& r, sharded<sstables_loader>& sst_loader);
|
||||
void unset_sstables_loader(http_context& ctx, httpd::routes& r);
|
||||
void set_view_builder(http_context& ctx, httpd::routes& r, sharded<db::view::view_builder>& vb);
|
||||
void set_view_builder(http_context& ctx, httpd::routes& r, sharded<db::view::view_builder>& vb, sharded<gms::gossiper>& g);
|
||||
void unset_view_builder(http_context& ctx, httpd::routes& r);
|
||||
void set_repair(http_context& ctx, httpd::routes& r, sharded<repair_service>& repair, sharded<gms::gossip_address_map>& am);
|
||||
void unset_repair(http_context& ctx, httpd::routes& r);
|
||||
|
||||
@@ -2434,14 +2434,14 @@ future<std::unordered_map<locator::host_id, sstring>> view_builder::view_status(
|
||||
}
|
||||
|
||||
future<std::unordered_map<sstring, sstring>>
|
||||
view_builder::view_build_statuses(sstring keyspace, sstring view_name) const {
|
||||
view_builder::view_build_statuses(sstring keyspace, sstring view_name, const gms::gossiper& gossiper) const {
|
||||
std::unordered_map<locator::host_id, sstring> status = co_await view_status(std::move(keyspace), std::move(view_name));
|
||||
std::unordered_map<sstring, sstring> status_map;
|
||||
const auto& topo = _db.get_token_metadata().get_topology();
|
||||
topo.for_each_node([&] (const locator::node& node) {
|
||||
auto it = status.find(node.host_id());
|
||||
auto s = it != status.end() ? std::move(it->second) : "UNKNOWN";
|
||||
status_map.emplace(fmt::to_string(node.endpoint()), std::move(s));
|
||||
status_map.emplace(fmt::to_string(gossiper.get_address_map().get(node.host_id())), std::move(s));
|
||||
});
|
||||
co_return status_map;
|
||||
}
|
||||
|
||||
@@ -235,7 +235,7 @@ public:
|
||||
// For tests
|
||||
future<> wait_until_built(const sstring& ks_name, const sstring& view_name);
|
||||
|
||||
future<std::unordered_map<sstring, sstring>> view_build_statuses(sstring keyspace, sstring view_name) const;
|
||||
future<std::unordered_map<sstring, sstring>> view_build_statuses(sstring keyspace, sstring view_name, const gms::gossiper& g) const;
|
||||
|
||||
// Can only be called on shard-0
|
||||
future<> mark_existing_views_as_built();
|
||||
|
||||
2
main.cc
2
main.cc
@@ -2289,7 +2289,7 @@ To start the scylla server proper, simply invoke as: scylla server (or just scyl
|
||||
view_builder.invoke_on_all(&db::view::view_builder::start, std::ref(mm), utils::cross_shard_barrier()).get();
|
||||
}
|
||||
|
||||
api::set_server_view_builder(ctx, view_builder).get();
|
||||
api::set_server_view_builder(ctx, view_builder, gossiper).get();
|
||||
auto stop_vb_api = defer_verbose_shutdown("view builder API", [&ctx] {
|
||||
api::unset_server_view_builder(ctx).get();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user