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

Function MetaInternalOp

src/admincli.cc:1308–1359  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1306}
1307
1308CliStatus MetaInternalOp(const std::string& meta_server, common::ThreadPool* thread_pool,
1309 const std::string& op, const std::string& start_key,
1310 const std::string& end_key, const std::string& filename) {
1311 tabletnode::TabletNodeClient meta_client(thread_pool, meta_server);
1312 TableMeta table_meta;
1313 TableSchema table_schema;
1314 TableMetaList table_list;
1315 TabletMetaList tablet_list;
1316 ScanTabletRequest request;
1317 ScanTabletResponse response;
1318 request.set_sequence_id(g_sequence_id++);
1319 request.set_table_name(FLAGS_tera_master_meta_table_name);
1320 request.set_start(start_key);
1321 request.set_end(end_key);
1322 while (meta_client.ScanTablet(&request, &response)) {
1323 StatusCode err = response.status();
1324 if (err != tera::kTabletNodeOk) {
1325 std::cerr << "Read meta table response not kTabletNodeOk!";
1326 return CliStatus::kError;
1327 }
1328
1329 int32_t record_size = response.results().key_values_size();
1330 if (record_size <= 0) {
1331 std::cout << "scan meta table success" << std::endl;
1332 break;
1333 }
1334 std::cout << "recode size = " << record_size << std::endl;
1335 std::string last_record_key;
1336 for (int i = 0; i < record_size; ++i) {
1337 const tera::KeyValuePair& record = response.results().key_values(i);
1338 last_record_key = record.key();
1339 char first_key_char = record.key()[0];
1340 if (first_key_char == '~') {
1341 std::cout << "(user: " << record.key().substr(1) << ")" << std::endl;
1342 } else if (first_key_char == '|') {
1343 // user&passwd&role&permission
1344 } else if (first_key_char == '@') {
1345 ParseMetaTableKeyValue(record.key(), record.value(), table_list.add_meta());
1346 } else if (first_key_char > '@') {
1347 ParseMetaTableKeyValue(record.key(), record.value(), tablet_list.add_meta());
1348 } else {
1349 std::cerr << "invalid record: " << record.key();
1350 }
1351 }
1352 std::string next_record_key = tera::NextKey(last_record_key);
1353 request.set_start(next_record_key);
1354 request.set_end(end_key);
1355 request.set_sequence_id(g_sequence_id++);
1356 response.Clear();
1357 }
1358 return ProcessMeta(op, table_list, tablet_list, "", "", filename);
1359}
1360
1361// diff [table_name|tablet_name] <backup_filename>
1362CliStatus MetaDiffOp(Client* client, int32_t argc, std::string* argv, ErrorCode* err) {

Callers 3

MetaShowOpFunction · 0.85
MetaBackUpOpFunction · 0.85
MetaHealthCheckOpFunction · 0.85

Calls 8

ParseMetaTableKeyValueFunction · 0.85
NextKeyFunction · 0.85
ProcessMetaFunction · 0.85
ScanTabletMethod · 0.45
statusMethod · 0.45
keyMethod · 0.45
valueMethod · 0.45
ClearMethod · 0.45

Tested by

no test coverage detected