| 2201 | } |
| 2202 | |
| 2203 | void NameServerImpl::SetTablePartition(RpcController* controller, const SetTablePartitionRequest* request, |
| 2204 | GeneralResponse* response, Closure* done) { |
| 2205 | brpc::ClosureGuard done_guard(done); |
| 2206 | if (!running_.load(std::memory_order_acquire) || (mode_.load(std::memory_order_acquire) == kFOLLOWER)) { |
| 2207 | response->set_code(::fedb::base::ReturnCode::kNameserverIsNotLeader); |
| 2208 | response->set_msg("nameserver is not leader"); |
| 2209 | PDLOG(WARNING, "cur nameserver is not leader"); |
| 2210 | return; |
| 2211 | } |
| 2212 | if (auto_failover_.load(std::memory_order_acquire)) { |
| 2213 | response->set_code(::fedb::base::ReturnCode::kAutoFailoverIsEnabled); |
| 2214 | response->set_msg("auto_failover is enabled"); |
| 2215 | PDLOG(WARNING, "auto_failover is enabled"); |
| 2216 | return; |
| 2217 | } |
| 2218 | std::string name = request->name(); |
| 2219 | std::string db = request->db(); |
| 2220 | uint32_t pid = request->table_partition().pid(); |
| 2221 | std::lock_guard<std::mutex> lock(mu_); |
| 2222 | std::shared_ptr<::fedb::nameserver::TableInfo> table_info; |
| 2223 | if (!GetTableInfoUnlock(name, db, &table_info)) { |
| 2224 | PDLOG(WARNING, "table[%s] is not exist", name.c_str()); |
| 2225 | response->set_code(::fedb::base::ReturnCode::kTableIsNotExist); |
| 2226 | response->set_msg("table is not exist"); |
| 2227 | return; |
| 2228 | } |
| 2229 | std::shared_ptr<::fedb::nameserver::TableInfo> cur_table_info(table_info->New()); |
| 2230 | cur_table_info->CopyFrom(*table_info); |
| 2231 | for (int idx = 0; idx < cur_table_info->table_partition_size(); idx++) { |
| 2232 | if (cur_table_info->table_partition(idx).pid() != pid) { |
| 2233 | continue; |
| 2234 | } |
| 2235 | ::fedb::nameserver::TablePartition* table_partition = cur_table_info->mutable_table_partition(idx); |
| 2236 | table_partition->Clear(); |
| 2237 | table_partition->CopyFrom(request->table_partition()); |
| 2238 | if (!UpdateZkTableNode(cur_table_info)) { |
| 2239 | response->set_code(::fedb::base::ReturnCode::kSetZkFailed); |
| 2240 | response->set_msg("set zk failed"); |
| 2241 | return; |
| 2242 | } |
| 2243 | table_info->CopyFrom(*cur_table_info); |
| 2244 | break; |
| 2245 | } |
| 2246 | response->set_code(::fedb::base::ReturnCode::kOk); |
| 2247 | response->set_msg("ok"); |
| 2248 | } |
| 2249 | |
| 2250 | void NameServerImpl::MakeSnapshotNS(RpcController* controller, const MakeSnapshotNSRequest* request, |
| 2251 | GeneralResponse* response, Closure* done) { |