1
+ import asyncio
1
2
import logging
2
3
3
4
from server_clients .server import Server
@@ -17,11 +18,44 @@ async def __aenter__(self):
17
18
initialized_servers = []
18
19
for server in self .servers :
19
20
logging .info (f"Starting server: { server .name } " )
20
- server = await server .__aenter__ ()
21
- initialized_servers .append (server )
21
+ initialized_server = await self ._initialize_server_with_retry (server )
22
+ initialized_servers .append (initialized_server )
23
+
22
24
self .servers = initialized_servers
23
25
return self
24
26
27
+ async def _initialize_server_with_retry (
28
+ self , server : Server , retries : int = 3 , delay : float = 1.0
29
+ ) -> Server :
30
+ """Initialize a server with retry mechanism"""
31
+ attempt = 0
32
+ while attempt < retries :
33
+ try :
34
+ return await server .__aenter__ ()
35
+ except Exception as e :
36
+ attempt += 1
37
+ logging .warning (
38
+ f"Error initializing server { server .name } : { e } . Attempt { attempt } of { retries } ."
39
+ )
40
+
41
+ try :
42
+ await server .__aexit__ (None , None , None )
43
+ except Exception as exit_error :
44
+ logging .warning (
45
+ f"Error closing server { server .name } during retry: { exit_error } "
46
+ )
47
+
48
+ if attempt < retries :
49
+ logging .info (f"Retrying in { delay } seconds..." )
50
+ await asyncio .sleep (delay )
51
+ else :
52
+ logging .error (
53
+ f"Max retries reached for server { server .name } . Failing."
54
+ )
55
+ raise Exception (
56
+ f"Error initializing server { server .name } : { str (e )} "
57
+ )
58
+
25
59
async def __aexit__ (self , exc_type , exc_val , exc_tb ):
26
60
logging .info ("Stopping servers" )
27
61
for server in reversed (self .servers ):
0 commit comments