| 234 | RemoteTabletNode::~RemoteTabletNode() {} |
| 235 | |
| 236 | void RemoteTabletNode::LoadTablet(google::protobuf::RpcController* controller, |
| 237 | const LoadTabletRequest* request, LoadTabletResponse* response, |
| 238 | google::protobuf::Closure* done) { |
| 239 | uint64_t id = request->sequence_id(); |
| 240 | response->set_sequence_id(id); |
| 241 | LOG(INFO) << "accept RPC (LoadTablet) id: " << id |
| 242 | << ", src: " << tera::utils::GetRemoteAddress(controller); |
| 243 | const std::string& tablet_path = request->path(); |
| 244 | std::lock_guard<std::mutex> lock(tablets_ctrl_mutex_); |
| 245 | if (tablets_ctrl_status_.find(tablet_path) != tablets_ctrl_status_.end()) { |
| 246 | ThreadPool::Task query_task = std::bind(&RemoteTabletNode::DoQueryTabletLoadStatus, this, |
| 247 | controller, request, response, done); |
| 248 | lightweight_ctrl_thread_pool_->AddTask(query_task); |
| 249 | return; |
| 250 | } |
| 251 | if (ctrl_thread_pool_->PendingNum() > FLAGS_tera_tabletnode_ctrl_thread_num) { |
| 252 | response->set_status(kTabletNodeIsBusy); |
| 253 | done->Run(); |
| 254 | return; |
| 255 | } |
| 256 | |
| 257 | tablets_ctrl_status_[tablet_path] = TabletCtrlStatus::kCtrlWaitLoad; |
| 258 | ThreadPool::Task callback = |
| 259 | std::bind(&RemoteTabletNode::DoLoadTablet, this, controller, request, response, done); |
| 260 | ctrl_thread_pool_->AddTask(callback); |
| 261 | } |
| 262 | |
| 263 | void RemoteTabletNode::UnloadTablet(google::protobuf::RpcController* controller, |
| 264 | const UnloadTabletRequest* request, |
no test coverage detected