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

Method LoadTabletAsync

src/master/load_tablet_procedure.cc:93–142  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

91}
92
93void LoadTabletProcedure::LoadTabletAsync(TabletNodePtr dest_node) {
94 if (dest_node->NodeDown()) {
95 LOG(WARNING) << "dest node offline, giveup this load try node: " << dest_node->GetAddr();
96 return;
97 }
98
99 tabletnode::TabletNodeClient node_client(thread_pool_, dest_node->GetAddr(),
100 FLAGS_tera_master_load_rpc_timeout);
101 LoadTabletRequest* request = new LoadTabletRequest;
102 LoadTabletResponse* response = new LoadTabletResponse;
103 request->set_tablet_name(tablet_->GetTableName());
104 request->set_sequence_id(MasterEnv().SequenceId().Inc());
105 request->mutable_key_range()->set_key_start(tablet_->GetKeyStart());
106 request->mutable_key_range()->set_key_end(tablet_->GetKeyEnd());
107 request->set_path(tablet_->GetPath());
108 request->mutable_schema()->CopyFrom(tablet_->GetSchema());
109 request->set_session_id(dest_node->uuid_);
110 request->set_create_time(tablet_->CreateTime());
111 request->set_version(tablet_->Version());
112 TablePtr table = tablet_->GetTable();
113 TabletMeta meta;
114 tablet_->ToMeta(&meta);
115 PROC_CHECK(meta.parent_tablets_size() <= 2)
116 << "too many parents tablets: " << meta.parent_tablets_size();
117 for (int32_t i = 0; i < meta.parent_tablets_size(); ++i) {
118 request->add_parent_tablets(meta.parent_tablets(i));
119 }
120
121 std::vector<std::string> ignore_err_lgs;
122 tablet_->GetErrorIgnoredLGs(&ignore_err_lgs);
123 for (uint32_t i = 0; i < ignore_err_lgs.size(); ++i) {
124 PROC_VLOG(6) << "tablet:" << tablet_->GetPath()
125 << " Add ignore err lg to request :" << ignore_err_lgs[i];
126 request->add_ignore_err_lgs(ignore_err_lgs[i]);
127 }
128 tablet_->SetErrorIgnoredLGs(); // clean error lg, only for this request once
129
130 PROC_LOG(INFO) << "LoadTabletAsync id: " << request->sequence_id() << ", " << tablet_;
131 // Bind "dest_node" to the first parameter of LoadTabletCallback as dest_node
132 // may decay to kOffline state
133 // and we initiate RPC to a new started TabletNode on the same IP:PORT before
134 // we apperceive it
135 // under which case we may have a success rpc with status code being
136 // "kIllegalAccess"
137 // NOTICE: explicit cast from shared_ptr to weak_ptr is necessary!
138 LoadClosure done =
139 std::bind(&LoadTabletProcedure::LoadTabletCallbackWrapper,
140 std::weak_ptr<LoadTabletProcedure>(shared_from_this()), dest_node, _1, _2, _3, _4);
141 node_client.LoadTablet(request, response, done);
142}
143
144void LoadTabletProcedure::LoadTabletCallbackWrapper(std::weak_ptr<LoadTabletProcedure> weak_proc,
145 TabletNodePtr node, LoadTabletRequest* request,

Callers 2

TEST_FFunction · 0.80

Calls 12

NodeDownMethod · 0.80
GetTableNameMethod · 0.80
IncMethod · 0.80
GetSchemaMethod · 0.80
ToMetaMethod · 0.80
GetErrorIgnoredLGsMethod · 0.80
SetErrorIgnoredLGsMethod · 0.80
CreateTimeMethod · 0.45
VersionMethod · 0.45
GetTableMethod · 0.45
sizeMethod · 0.45
LoadTabletMethod · 0.45

Tested by 1

TEST_FFunction · 0.64