| 320 | } |
| 321 | |
| 322 | CliStatus GetMetaValue(const std::string& meta_server, common::ThreadPool* thread_pool, |
| 323 | const std::string& table_name, const std::string& start_key, |
| 324 | TableMeta* table_meta, TabletMeta* tablet_meta) { |
| 325 | tabletnode::TabletNodeClient read_meta_client(thread_pool, meta_server); |
| 326 | ReadTabletRequest read_request; |
| 327 | ReadTabletResponse read_response; |
| 328 | read_request.set_sequence_id(g_sequence_id++); |
| 329 | read_request.set_tablet_name(FLAGS_tera_master_meta_table_name); |
| 330 | RowReaderInfo* row_info = read_request.add_row_info_list(); |
| 331 | MakeMetaTableKey(table_name, start_key, row_info->mutable_key()); |
| 332 | if (!read_meta_client.ReadTablet(&read_request, &read_response)) { |
| 333 | std::cout << "read tablet failed" << std::endl; |
| 334 | return CliStatus::kError; |
| 335 | } |
| 336 | StatusCode err = read_response.status(); |
| 337 | if (err != tera::kTabletNodeOk) { |
| 338 | std::cerr << "Read meta table response not kTabletNodeOk!"; |
| 339 | return CliStatus::kError; |
| 340 | } |
| 341 | if (read_response.detail().row_result_size() <= 0 || |
| 342 | read_response.detail().row_result(0).key_values_size() <= 0) { |
| 343 | std::cout << "Couldn't read table[" << table_name << "] start_key[" << start_key |
| 344 | << "], suitable for put tablet_meta" << std::endl; |
| 345 | return CliStatus::kNotFound; |
| 346 | } |
| 347 | const KeyValuePair& record = read_response.detail().row_result(0).key_values(0); |
| 348 | char first_key_char = record.key()[0]; |
| 349 | if (first_key_char == '~') { |
| 350 | std::cout << "(user: " << record.key().substr(1) << ")" << std::endl; |
| 351 | } else if (first_key_char == '|') { |
| 352 | // user&passwd&role&permission |
| 353 | } else if (first_key_char == '@') { |
| 354 | ParseMetaTableKeyValue(record.key(), record.value(), table_meta); |
| 355 | std::cout << "ok, you find a table meta info" << std::endl; |
| 356 | } else if (first_key_char > '@') { |
| 357 | ParseMetaTableKeyValue(record.key(), record.value(), tablet_meta); |
| 358 | } else { |
| 359 | std::cerr << "invalid record: " << record.key(); |
| 360 | } |
| 361 | |
| 362 | if (first_key_char <= '@') { |
| 363 | std::cout << "couldn't find tablet meta" << std::endl; |
| 364 | return CliStatus::kNotFound; |
| 365 | } |
| 366 | return CliStatus::kOk; |
| 367 | } |
| 368 | |
| 369 | bool Confirm() { |
| 370 | std::cout << "[Y/N] "; |
no test coverage detected