| 187 | } |
| 188 | |
| 189 | static void TrackMeNow(std::unique_lock<pthread_mutex_t>& mu) { |
| 190 | if (s_trackme_addr == NULL) { |
| 191 | return; |
| 192 | } |
| 193 | if (s_trackme_chan == NULL) { |
| 194 | Channel* chan = new (std::nothrow) Channel; |
| 195 | if (chan == NULL) { |
| 196 | LOG(FATAL) << "Fail to new trackme channel"; |
| 197 | return; |
| 198 | } |
| 199 | ChannelOptions opt; |
| 200 | // keep #connections on server-side low |
| 201 | opt.connection_type = CONNECTION_TYPE_SHORT; |
| 202 | if (chan->Init(FLAGS_trackme_server.c_str(), "c_murmurhash", &opt) != 0) { |
| 203 | LOG(WARNING) << "Fail to connect to " << FLAGS_trackme_server; |
| 204 | delete chan; |
| 205 | return; |
| 206 | } |
| 207 | s_trackme_chan = chan; |
| 208 | } |
| 209 | mu.unlock(); |
| 210 | TrackMeService_Stub stub(s_trackme_chan); |
| 211 | TrackMeRequest req; |
| 212 | req.set_rpc_version(g_rpc_version); |
| 213 | req.set_server_addr(*s_trackme_addr); |
| 214 | TrackMeResponse* res = new TrackMeResponse; |
| 215 | Controller* cntl = new Controller; |
| 216 | cntl->set_request_code(policy::MurmurHash32(s_trackme_addr->data(), s_trackme_addr->size())); |
| 217 | google::protobuf::Closure* done = |
| 218 | ::brpc::NewCallback(&HandleTrackMeResponse, cntl, res); |
| 219 | stub.TrackMe(cntl, &req, res, done); |
| 220 | } |
| 221 | |
| 222 | // Called in global.cpp |
| 223 | // [Thread-safe] supposed to be called in low frequency. |
no test coverage detected