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

Method LoadMetaTable

src/master/master_impl.cc:579–652  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

577}
578
579bool MasterImpl::LoadMetaTable(const std::string &meta_tablet_addr, StatusCode *ret_status) {
580 tablet_manager_->ClearTableList();
581 ScanTabletRequest request;
582 ScanTabletResponse response;
583 request.set_sequence_id(this_sequence_id_.Inc());
584 request.set_table_name(FLAGS_tera_master_meta_table_name);
585 request.set_start("");
586 request.set_end("");
587 TabletNodePtr meta_node = tabletnode_manager_->FindTabletNode(meta_tablet_addr, NULL);
588 meta_tablet_ = tablet_manager_->AddMetaTablet(meta_node, zk_adapter_);
589 access_builder_->BuildInternalGroupRequest(&request);
590 tabletnode::TabletNodeClient meta_node_client(thread_pool_.get(), meta_tablet_addr);
591 while (meta_node_client.ScanTablet(&request, &response)) {
592 if (response.status() != kTabletNodeOk) {
593 SetStatusCode(response.status(), ret_status);
594 LOG(ERROR) << "fail to load meta table: " << StatusCodeToString(response.status());
595 tablet_manager_->ClearTableList();
596 return false;
597 }
598 if (response.results().key_values_size() <= 0) {
599 LOG(INFO) << "load meta table success";
600 return true;
601 }
602 uint32_t record_size = response.results().key_values_size();
603 LOG(INFO) << "load meta table: " << record_size << " records";
604
605 std::string last_record_key;
606 for (uint32_t i = 0; i < record_size; i++) {
607 const KeyValuePair &record = response.results().key_values(i);
608 last_record_key = record.key();
609 char first_key_char = record.key()[0];
610 if (first_key_char == '~') {
611 user_manager_->LoadUserMeta(record.key(), record.value());
612 } else if (first_key_char == '|') {
613 if (record.key().length() < 2) {
614 LOG(ERROR) << "multi tenancy meta key format wrong [key : " << record.key()
615 << ", value : " << record.value() << "]";
616 continue;
617 }
618 char second_key_char = record.key()[1];
619 if (second_key_char == '0') {
620 /* The auth data stores in meta_table
621 * |00User => Passwd, [role1, role2, ...]
622 * |01role1 => [Permission1, Permission2, ...]
623 */
624 access_entry_->GetAccessUpdater().AddRecord(record.key(), record.value());
625 } else if (second_key_char == '1') {
626 // The quota data stores in meta_table
627 // |10TableName => TableQuota (pb format)
628 quota_entry_->AddRecord(record.key(), record.value());
629 } else {
630 LOG(ERROR) << "multi tenancy meta key format wrong [key : " << record.key()
631 << ", value : " << record.value() << "]";
632 continue;
633 }
634 } else if (first_key_char == '@') {
635 tablet_manager_->LoadTableMeta(record.key(), record.value());
636 } else if (first_key_char > '@') {

Callers

nothing calls this directly

Calls 15

StatusCodeToStringFunction · 0.85
NextKeyFunction · 0.85
ClearTableListMethod · 0.80
IncMethod · 0.80
FindTabletNodeMethod · 0.80
AddMetaTabletMethod · 0.80
LoadUserMetaMethod · 0.80
LoadTableMetaMethod · 0.80
LoadTabletMetaMethod · 0.80
SetStatusCodeFunction · 0.50
getMethod · 0.45

Tested by

no test coverage detected