fix(server): 单台服务器注册失败不再拖垮整个 P2P 栈
问题:data_handle_task_connected 的重连循环中,注册被拒绝 (ResponseMessage::Error)、返回非注册消息、或虚拟网络发生变化时 break 后会调用 task_group.stop(),把包括其他健康服务器连接在内的 整个任务组全部停掉。 修复: - 注册被拒绝/返回错误消息:与连接失败一致,退避 5 秒后重试, 仅影响本服务器的重连。 - 虚拟网络发生变化:只结束本服务器的数据任务,不再 stop 整个任务组。 注:重连循环依赖真实服务器连接,未做端到端测试;全部既有单测通过。
This commit is contained in:
@@ -163,7 +163,6 @@ impl ServerTurnManager {
|
|||||||
initial_response: NetworkAddr,
|
initial_response: NetworkAddr,
|
||||||
) {
|
) {
|
||||||
let data_handler = ServerTurnInboundHandler::new(self.server_id, initial_response, config);
|
let data_handler = ServerTurnInboundHandler::new(self.server_id, initial_response, config);
|
||||||
let task_group_ = task_group.clone();
|
|
||||||
let Some(mut receiver) = self.receiver.take() else {
|
let Some(mut receiver) = self.receiver.take() else {
|
||||||
unreachable!()
|
unreachable!()
|
||||||
};
|
};
|
||||||
@@ -188,7 +187,12 @@ impl ServerTurnManager {
|
|||||||
|| reg.prefix_len != initial_response.prefix_len
|
|| reg.prefix_len != initial_response.prefix_len
|
||||||
|| reg.gateway != initial_response.gateway
|
|| reg.gateway != initial_response.gateway
|
||||||
{
|
{
|
||||||
log::error!("虚拟网络发生变化");
|
// 该服务器分配的虚拟网络与当前不一致,无法重连,
|
||||||
|
// 只结束本服务器的任务,不影响其他服务器
|
||||||
|
log::error!(
|
||||||
|
"服务器{}虚拟网络发生变化,放弃重连",
|
||||||
|
self.config.server_addr
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// 保存服务器版本
|
// 保存服务器版本
|
||||||
@@ -197,12 +201,16 @@ impl ServerTurnManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ResponseMessage::Error(e) => {
|
ResponseMessage::Error(e) => {
|
||||||
log::error!("注册失败 {e:?}");
|
// 单台服务器注册失败只影响本服务器的重连,
|
||||||
break;
|
// 退避后重试,不能拖垮整个任务组
|
||||||
|
log::error!("注册失败 {e:?},5秒后重试");
|
||||||
|
tokio::time::sleep(std::time::Duration::from_secs(5)).await;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
log::error!("错误的注册消息");
|
log::error!("错误的注册消息,5秒后重试");
|
||||||
break;
|
tokio::time::sleep(std::time::Duration::from_secs(5)).await;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -217,7 +225,6 @@ impl ServerTurnManager {
|
|||||||
}
|
}
|
||||||
self.disconnect();
|
self.disconnect();
|
||||||
data_handler.handle_disconnected();
|
data_handler.handle_disconnected();
|
||||||
task_group_.stop();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user