| 1990 | } |
| 1991 | |
| 1992 | void TableImpl::ReadTableMetaCallBack(ErrorCode* ret_err, int32_t retry_times, |
| 1993 | ReadTabletRequest* request, ReadTabletResponse* response, |
| 1994 | bool failed, int error_code) { |
| 1995 | if (failed) { |
| 1996 | if (error_code == sofa::pbrpc::RPC_ERROR_SERVER_SHUTDOWN || |
| 1997 | error_code == sofa::pbrpc::RPC_ERROR_SERVER_UNREACHABLE || |
| 1998 | error_code == sofa::pbrpc::RPC_ERROR_SERVER_UNAVAILABLE) { |
| 1999 | response->set_status(kServerError); |
| 2000 | } else if (error_code == sofa::pbrpc::RPC_ERROR_REQUEST_CANCELED || |
| 2001 | error_code == sofa::pbrpc::RPC_ERROR_SEND_BUFFER_FULL) { |
| 2002 | response->set_status(kClientError); |
| 2003 | } else if (error_code == sofa::pbrpc::RPC_ERROR_CONNECTION_CLOSED || |
| 2004 | error_code == sofa::pbrpc::RPC_ERROR_RESOLVE_ADDRESS) { |
| 2005 | response->set_status(kConnectError); |
| 2006 | } else if (error_code == sofa::pbrpc::RPC_ERROR_REQUEST_TIMEOUT) { |
| 2007 | response->set_status(kRPCTimeout); |
| 2008 | } else { |
| 2009 | response->set_status(kRPCError); |
| 2010 | } |
| 2011 | } |
| 2012 | |
| 2013 | StatusCode err = response->status(); |
| 2014 | if (err == kTabletNodeOk && response->detail().status_size() < 1) { |
| 2015 | err = kKeyNotExist; |
| 2016 | LOG(ERROR) << "read table meta: status size is 0"; |
| 2017 | } |
| 2018 | if (err == kTabletNodeOk) { |
| 2019 | err = response->detail().status(0); |
| 2020 | } |
| 2021 | if (err == kTabletNodeOk && response->detail().row_result_size() < 1) { |
| 2022 | err = kKeyNotExist; |
| 2023 | LOG(ERROR) << "read table meta: row result size is 0"; |
| 2024 | } |
| 2025 | if (err == kTabletNodeOk && response->detail().row_result(0).key_values_size() < 1) { |
| 2026 | err = kKeyNotExist; |
| 2027 | LOG(ERROR) << "read table meta: row result kv size is 0"; |
| 2028 | } |
| 2029 | |
| 2030 | if (err != kTabletNodeOk && err != kKeyNotExist && err != kSnapshotNotExist) { |
| 2031 | VLOG(10) << "fail to read meta table, retry: " << retry_times |
| 2032 | << ", errcode: " << StatusCodeToString(err); |
| 2033 | } |
| 2034 | |
| 2035 | MutexLock lock(&table_meta_mutex_); |
| 2036 | CHECK(table_meta_updating_); |
| 2037 | |
| 2038 | if (err == kTabletNodeOk) { |
| 2039 | TableMeta table_meta; |
| 2040 | const KeyValuePair& kv = response->detail().row_result(0).key_values(0); |
| 2041 | ParseMetaTableKeyValue(kv.key(), kv.value(), &table_meta); |
| 2042 | table_schema_.CopyFrom(table_meta.schema()); |
| 2043 | |
| 2044 | if (table_schema_.has_enable_hash() && table_schema_.enable_hash()) { |
| 2045 | is_hash_table_ = true; |
| 2046 | } else { |
| 2047 | is_hash_table_ = false; |
| 2048 | } |
| 2049 |
no test coverage detected