|
20 | 20 | from v2.nacos.transport.model.server_info import ServerInfo |
21 | 21 | from v2.nacos.transport.nacos_server_connector import NacosServerConnector |
22 | 22 | from v2.nacos.transport.rec_ability_context import RecAbilityContext |
23 | | -from v2.nacos.transport.rpc_client import RpcClient, ConnectionType |
| 23 | +from v2.nacos.transport.rpc_client import RpcClient, RpcClientStatus, ConnectionType |
24 | 24 | from v2.nacos.transport.server_request_handler import SetupAckRequestHandler |
25 | 25 |
|
26 | 26 |
|
@@ -175,16 +175,24 @@ async def _handle_server_request(self, request: Request, grpc_connection: GrpcCo |
175 | 175 | f"{grpc_connection.get_connection_id()} failed to send response:{response.get_response_type()}, ackId:{request.requestId},error:{str(e)}") |
176 | 176 |
|
177 | 177 | async def _server_request_watcher(self, grpc_conn: GrpcConnection): |
178 | | - async for payload in grpc_conn.bi_stream_send(): |
179 | | - try: |
180 | | - self.logger.info("receive stream server request, connection_id:%s, original info: %s" |
181 | | - % (grpc_conn.get_connection_id(), str(payload))) |
182 | | - request = GrpcUtils.parse(payload) |
183 | | - if request: |
184 | | - await self._handle_server_request(request, grpc_conn) |
185 | | - |
186 | | - except Exception as e: |
187 | | - self.logger.error(f"[{grpc_conn.connection_id}] handle server request occur exception: {e}") |
| 178 | + try: |
| 179 | + async for payload in grpc_conn.bi_stream_send(): |
| 180 | + try: |
| 181 | + self.logger.info("receive stream server request, connection_id:%s, original info: %s" |
| 182 | + % (grpc_conn.get_connection_id(), str(payload))) |
| 183 | + request = GrpcUtils.parse(payload) |
| 184 | + if request: |
| 185 | + await self._handle_server_request(request, grpc_conn) |
| 186 | + |
| 187 | + except Exception as e: |
| 188 | + self.logger.error(f"[{grpc_conn.connection_id}] handle server request occur exception: {e}") |
| 189 | + except Exception as e: |
| 190 | + self.logger.warning(f"[{grpc_conn.connection_id}] bi stream broken: {e}") |
| 191 | + if not self.is_shutdown(): |
| 192 | + async with self.lock: |
| 193 | + if self.is_running(): |
| 194 | + self.rpc_client_status = RpcClientStatus.UNHEALTHY |
| 195 | + await self.switch_server_async(None, False) |
188 | 196 |
|
189 | 197 | @staticmethod |
190 | 198 | async def _shunt_down_channel(channel): |
|
0 commit comments