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

Method SendMessageWithRetry

src/proto/rpc_client.h:135–171  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

133
134 template <class Request, class Response, class Callback>
135 bool SendMessageWithRetry(void (ServerType::*func)(google::protobuf::RpcController*,
136 const Request*, Response*,
137 google::protobuf::Closure*),
138 const Request* request, Response* response, Callback closure,
139 const std::string& tips, int32_t rpc_timeout,
140 ThreadPool* thread_pool = 0) {
141 if (NULL == server_client_.get()) {
142 // sync call
143 if (!closure) {
144 return false;
145 }
146
147 // async call
148 ThreadPool::Task callback =
149 std::bind(&RpcClient::template UserCallback<Request, Response, Callback>, request,
150 response, closure, true, (int)sofa::pbrpc::RPC_ERROR_RESOLVE_ADDRESS);
151 thread_pool->AddTask(callback);
152 return true;
153 }
154 sofa::pbrpc::RpcController* rpc_controller = new sofa::pbrpc::RpcController;
155 rpc_controller->SetTimeout(rpc_timeout);
156 RpcCallbackParam<Request, Response, Callback>* param =
157 new RpcCallbackParam<Request, Response, Callback>(rpc_controller, request, response,
158 closure, tips, thread_pool);
159 google::protobuf::Closure* done = google::protobuf::NewCallback(
160 &RpcClient::template RpcCallback<Request, Response, Callback>, this, param);
161 (server_client_.get()->*func)(rpc_controller, request, response, done);
162
163 // sync call
164 if (!closure) {
165 sync_call_event.Wait();
166 return (!sync_call_failed);
167 }
168
169 // async call
170 return true;
171 }
172
173 template <class Request, class Response, class Callback>
174 static void RpcCallback(RpcClient<ServerType>* client,

Callers

nothing calls this directly

Calls 4

AddTaskMethod · 0.80
getMethod · 0.45
SetTimeoutMethod · 0.45
WaitMethod · 0.45

Tested by

no test coverage detected