| 1306 | } |
| 1307 | |
| 1308 | CliStatus 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> |
| 1362 | CliStatus MetaDiffOp(Client* client, int32_t argc, std::string* argv, ErrorCode* err) { |
no test coverage detected