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

Method ScanMetaTableCallBack

src/sdk/table_impl.cc:1639–1722  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1637}
1638
1639void TableImpl::ScanMetaTableCallBack(std::string key_start, std::string key_end,
1640 std::string expand_key_end, int64_t start_time,
1641 ScanTabletRequest* request, ScanTabletResponse* response,
1642 bool failed, int error_code) {
1643 perf_counter_.get_meta.Add(get_micros() - start_time);
1644 perf_counter_.get_meta_cnt.Inc();
1645 if (failed) {
1646 if (error_code == sofa::pbrpc::RPC_ERROR_SERVER_SHUTDOWN ||
1647 error_code == sofa::pbrpc::RPC_ERROR_SERVER_UNREACHABLE ||
1648 error_code == sofa::pbrpc::RPC_ERROR_SERVER_UNAVAILABLE) {
1649 response->set_status(kServerError);
1650 } else if (error_code == sofa::pbrpc::RPC_ERROR_REQUEST_CANCELED ||
1651 error_code == sofa::pbrpc::RPC_ERROR_SEND_BUFFER_FULL) {
1652 response->set_status(kClientError);
1653 } else if (error_code == sofa::pbrpc::RPC_ERROR_CONNECTION_CLOSED ||
1654 error_code == sofa::pbrpc::RPC_ERROR_RESOLVE_ADDRESS) {
1655 response->set_status(kConnectError);
1656 } else if (error_code == sofa::pbrpc::RPC_ERROR_REQUEST_TIMEOUT) {
1657 response->set_status(kRPCTimeout);
1658 } else {
1659 response->set_status(kRPCError);
1660 }
1661 }
1662
1663 StatusCode err = response->status();
1664 if (err != kTabletNodeOk) {
1665 VLOG(10) << "fail to scan meta table [" << request->start() << ", " << request->end()
1666 << "]: " << StatusCodeToString(err);
1667 {
1668 MutexLock lock(&meta_mutex_);
1669 GiveupUpdateTabletMeta(key_start, key_end);
1670 }
1671 ThreadPool::Task retry_task = std::bind(&TableImpl::ScanMetaTableAsyncInLock, this, key_start,
1672 key_end, expand_key_end, true);
1673 thread_pool_->DelayTask(FLAGS_tera_sdk_update_meta_internal, retry_task);
1674 delete request;
1675 delete response;
1676 return;
1677 }
1678
1679 std::string return_start, return_end;
1680 const RowResult& scan_result = response->results();
1681 for (int32_t i = 0; i < scan_result.key_values_size(); i++) {
1682 const KeyValuePair& kv = scan_result.key_values(i);
1683
1684 TabletMeta meta;
1685 ParseMetaTableKeyValue(kv.key(), kv.value(), &meta);
1686
1687 if (i == 0) {
1688 return_start = meta.key_range().key_start();
1689 }
1690 if (i == scan_result.key_values_size() - 1) {
1691 return_end = meta.key_range().key_end();
1692 }
1693
1694 MutexLock lock(&meta_mutex_);
1695 UpdateTabletMetaList(meta);
1696 }

Callers 1

Calls 11

StatusCodeToStringFunction · 0.85
ParseMetaTableKeyValueFunction · 0.85
IncMethod · 0.80
DelayTaskMethod · 0.80
get_microsFunction · 0.50
AddMethod · 0.45
statusMethod · 0.45
keyMethod · 0.45
valueMethod · 0.45
emptyMethod · 0.45
SignalMethod · 0.45

Tested by

no test coverage detected