void meta_service::on_update_configuration(dsn_message_t req) { if (!check_primary(req)) return; if (!_started) { configuration_update_response response; response.err = ERR_SERVICE_NOT_ACTIVE; reply(req, response); return; } std::shared_ptr<configuration_update_request> request(new configuration_update_request); ::unmarshall(req, *request); if (_state->freezed()) { configuration_update_response response; response.err = ERR_STATE_FREEZED; _state->query_configuration_by_gpid(request->config.gpid, response.config); reply(req, response); return; } global_partition_id gpid = request->config.gpid; _state->update_configuration(request, req, [this, gpid](){ if (_started) { tasking::enqueue(LPC_LBM_RUN, this, std::bind(&meta_service::on_config_changed, this, gpid)); } }); }
void meta_service::on_modify_replica_config_explictly(dsn_message_t req) { if (!check_primary(req)) return; // TODO: implement modify config with reply if (!_started) { configuration_query_by_index_response response; response.err = ERR_SERVICE_NOT_ACTIVE; reply(req, response); return; } global_partition_id gpid; rpc_address receiver; config_type type; rpc_address node; ::unmarshall(req, gpid); ::unmarshall(req, receiver); ::unmarshall(req, type); ::unmarshall(req, node); _balancer->explictly_send_proposal(gpid, receiver, type, node); }
void meta_service::on_list_apps(dsn_message_t req) { if (!check_primary(req)) return; if (!_started) { configuration_list_apps_response response; response.err = ERR_SERVICE_NOT_ACTIVE; reply(req, response); return; } _state->list_apps(req); }
void meta_service::on_drop_app(dsn_message_t req) { if (!check_primary(req)) return; if (!_started) { ddebug("drop app request, meta server not active"); configuration_drop_app_response response; response.err = ERR_SERVICE_NOT_ACTIVE; reply(req, response); return; } _state->drop_app(req); }
void meta_service::on_query_configuration_by_index(dsn_message_t msg) { if (!check_primary(msg)) return; if (!_started) { configuration_query_by_index_response response; response.err = ERR_SERVICE_NOT_ACTIVE; reply(msg, response); return; } configuration_query_by_index_response response; configuration_query_by_index_request request; ::unmarshall(msg, request); _state->query_configuration_by_index(request, response); reply(msg, response); }
// partition server & client => meta server void meta_service::on_query_configuration_by_node(dsn_message_t msg) { if (!check_primary(msg)) return; if (!_started) { dinfo("query node configuration request, meta server not active"); configuration_query_by_node_response response; response.err = ERR_SERVICE_NOT_ACTIVE; reply(msg, response); return; } configuration_query_by_node_response response; configuration_query_by_node_request request; ::unmarshall(msg, request); _state->query_configuration_by_node(request, response); reply(msg, response); }