Skip to content

Commit e43da1b

Browse files
committed
fix server connector send discover rquest
1 parent 18e1c94 commit e43da1b

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

polaris/plugin/server_connector/server_connector.cpp

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,13 @@ bool GrpcServerConnector::SendDiscoverRequest(ServiceListener& service_listener)
343343
return false;
344344
}
345345
}
346+
// 已经发送过请求正等待超时
347+
if (service_listener.timeout_task_iter_ != reactor_.TimingTaskEnd()) {
348+
POLARIS_LOG(LOG_WARN, "already discover %s for service[%s/%s]",
349+
DataTypeToStr(service_listener.service_.data_type_), service_key.namespace_.c_str(),
350+
service_key.name_.c_str());
351+
return true;
352+
}
346353
// 组装请求
347354
::v1::DiscoverRequest request;
348355
if (!service_key.namespace_.empty()) {
@@ -366,7 +373,6 @@ bool GrpcServerConnector::SendDiscoverRequest(ServiceListener& service_listener)
366373
DataTypeToStr(service_listener.service_.data_type_), service_key.namespace_.c_str(),
367374
service_key.name_.c_str());
368375
// 设置超时检查任务
369-
POLARIS_ASSERT(service_listener.timeout_task_iter_ == reactor_.TimingTaskEnd());
370376
service_listener.timeout_task_iter_ = reactor_.AddTimingTask(new TimingFuncTask<ServiceListener>(
371377
DiscoverTimoutCheck, &service_listener, message_timeout_.GetTimeout()));
372378
return true;
@@ -518,11 +524,14 @@ ReturnCode GrpcServerConnector::ProcessDiscoverResponse(::v1::DiscoverResponse&
518524
response.info().value().c_str());
519525
}
520526
// 设置下一次的检查任务
521-
listener.discover_task_iter_ = reactor_.AddTimingTask(
522-
new TimingFuncTask<ServiceListener>(TimingDiscover, &listener, listener.sync_interval_));
523-
if (pending_for_connected_.count(&listener) > 0) {
524-
// 清理由于切换失败保留在pending列表里的任务需要
525-
pending_for_connected_.erase(&listener);
527+
// 这里检查,避免发现任务取消又注册后,之前的同步任务遗留的应答导致重复设置定时任务
528+
if (listener.discover_task_iter_ == reactor_.TimingTaskEnd()) {
529+
listener.discover_task_iter_ = reactor_.AddTimingTask(
530+
new TimingFuncTask<ServiceListener>(TimingDiscover, &listener, listener.sync_interval_));
531+
if (pending_for_connected_.count(&listener) > 0) {
532+
// 清理由于切换失败保留在pending列表里的任务需要
533+
pending_for_connected_.erase(&listener);
534+
}
526535
}
527536
return kReturnOk;
528537
}

0 commit comments

Comments
 (0)