MCPcopy Create free account
hub / github.com/baidu/tera / UpdateTabletSchemaCallback

Method UpdateTabletSchemaCallback

src/master/update_table_procedure.cc:192–256  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

190}
191
192void UpdateTableProcedure::UpdateTabletSchemaCallback(TabletPtr tablet, int32_t retry_times,
193 UpdateRequest* request,
194 UpdateResponse* response, bool rpc_failed,
195 int status_code) {
196 std::unique_ptr<UpdateRequest> request_holder(request);
197 std::unique_ptr<UpdateResponse> response_holder(response);
198 StatusCode status = response_holder->status();
199 TabletNodePtr node = tablet->GetTabletNode();
200 PROC_VLOG(23) << "tablet: " << tablet->GetPath()
201 << ", update schema callback returned, remain cnt: " << tablet_sync_cnt_;
202 if (tablet->GetStatus() == TabletMeta::kTabletOffline ||
203 (!rpc_failed && status == kTabletNodeOk)) {
204 if (tablet->GetStatus() == TabletMeta::kTabletOffline) {
205 offline_tablets_.emplace_back(tablet);
206 }
207 // do not unlock offline tablets' TransitionLock. After all online tablets
208 // UpdateTabletSchema RPC
209 // has been collected, UpdateTableProcedure will issue LoadTabletProcedure
210 // for those offline tablets
211 // and those offline tablets will be locked until their LoadTabletProcedure
212 // finished.
213 else {
214 tablet->UnlockTransition();
215 }
216 if (--tablet_sync_cnt_ == 0) {
217 PROC_VLOG(23) << "sync tablets schema finished";
218 RecoverOfflineTablets();
219 table_->CommitUpdate();
220 EnterPhaseWithResponseStatus(kMasterOk, UpdateTablePhase::kEofPhase);
221 }
222 return;
223 }
224
225 if (rpc_failed || status != kTabletNodeOk) {
226 if (rpc_failed) {
227 PROC_LOG(WARNING) << "[update] fail to update schema: "
228 << sofa::pbrpc::RpcErrorCodeToString(status_code) << ": " << tablet;
229 } else {
230 PROC_LOG(WARNING) << "[update] fail to update schema: " << StatusCodeToString(status) << ": "
231 << tablet;
232 }
233 if (retry_times > FLAGS_tera_master_schema_update_retry_times) {
234 PROC_LOG(ERROR) << "[update] retry " << retry_times << " times, kick "
235 << tablet->GetServerAddr();
236 // we ensure tablet's schema been updated by kickoff the hosting
237 // tabletnode if all
238 // UpdateTabletSchema RPC tries failed
239 tablet->UnlockTransition();
240 MasterEnv().GetMaster()->TryKickTabletNode(tablet->GetServerAddr());
241 if (--tablet_sync_cnt_ == 0) {
242 RecoverOfflineTablets();
243 table_->CommitUpdate();
244 EnterPhaseWithResponseStatus(kMasterOk, UpdateTablePhase::kEofPhase);
245 }
246 } else {
247 UpdateClosure done = std::bind(&UpdateTableProcedure::UpdateTabletSchemaCallback, this,
248 tablet, retry_times + 1, _1, _2, _3, _4);
249 ThreadPool::Task task =

Callers

nothing calls this directly

Calls 10

StatusCodeToStringFunction · 0.85
GetTabletNodeMethod · 0.80
CommitUpdateMethod · 0.80
GetServerAddrMethod · 0.80
TryKickTabletNodeMethod · 0.80
GetMasterMethod · 0.80
DelayTaskMethod · 0.80
statusMethod · 0.45
GetStatusMethod · 0.45
UnlockTransitionMethod · 0.45

Tested by

no test coverage detected