@@ -57,7 +57,9 @@ async def connect(self):
57
57
!= self .client .server_info .compressedFabricId
58
58
):
59
59
self .adapter .logger .warning (
60
- "Connected to a server with a new fabric ID. Resetting data"
60
+ "Connected to a server with a new fabric ID (current: %s, server: %s). Resetting data" ,
61
+ data .get ("compressed_fabric_id" ),
62
+ self .client .server_info .compressedFabricId ,
61
63
)
62
64
data = None
63
65
# TODO can we detect all known nodes to the server and interview them?
@@ -123,7 +125,12 @@ async def _interview_node(self, node_id: int) -> None:
123
125
124
126
self .adapter .delay_save_data (self ._data_to_save )
125
127
126
- await self .adapter .setup_node (self ._nodes [node_id ])
128
+ try :
129
+ await self .adapter .setup_node (self ._nodes [node_id ])
130
+ except Exception : # pylint: disable=broad-except
131
+ self .adapter .logger .exception (
132
+ "Unexptected error setting up node %s" , node_id
133
+ )
127
134
128
135
def _schedule_interview_retry (self , nodes : set [int ], timeout = INTERVIEW_RETRY_TIME ):
129
136
"""Schedule a retry of failed nodes."""
@@ -184,10 +191,19 @@ async def _client_listen(self) -> None:
184
191
async def _handle_driver_ready (self ) -> None :
185
192
"""Handle driver ready."""
186
193
await self .driver_ready .wait ()
187
- tasks = [self .adapter .setup_node (node ) for node in self .get_nodes ()]
194
+ nodes = self .get_nodes ()
195
+ tasks = [self .adapter .setup_node (node ) for node in nodes ]
188
196
189
197
if tasks :
190
- await asyncio .gather (* tasks )
198
+ results = await asyncio .gather (* tasks , return_exceptions = True )
199
+
200
+ for node , result in zip (nodes , results ):
201
+ if isinstance (result , Exception ):
202
+ self .adapter .logger .error (
203
+ "Unexpected error setting up node %s" ,
204
+ node .node_id ,
205
+ exc_info = result ,
206
+ )
191
207
192
208
to_interview = {
193
209
node_id for node_id , info in self ._nodes .items () if info is None
@@ -200,7 +216,7 @@ async def _handle_driver_ready(self) -> None:
200
216
201
217
def _data_to_save (self ) -> dict :
202
218
return {
203
- "compressed_fabric_id" : self .client .driver . compressed_fabric_id ,
219
+ "compressed_fabric_id" : self .client .server_info . compressedFabricId ,
204
220
"next_node_id" : self .next_node_id ,
205
221
"nodes" : {
206
222
node_id : node .raw_data if node else None
0 commit comments