Skip to content

Commit 6ac546c

Browse files
committed
fix: For integ tests, add retries for server initialization
1 parent 711fcee commit 6ac546c

File tree

6 files changed

+83
-7
lines changed

6 files changed

+83
-7
lines changed

e2e_tests/python/server_clients/server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ async def execute_tool(
6666
tool_name: str,
6767
tool_use_id: str,
6868
arguments: dict[str, Any],
69-
retries: int = 2,
69+
retries: int = 3,
7070
delay: float = 1.0,
7171
) -> Any:
7272
"""Execute a tool with retry mechanism.

e2e_tests/python/server_clients/servers.py

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import asyncio
12
import logging
23

34
from server_clients.server import Server
@@ -17,11 +18,44 @@ async def __aenter__(self):
1718
initialized_servers = []
1819
for server in self.servers:
1920
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+
2224
self.servers = initialized_servers
2325
return self
2426

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+
2559
async def __aexit__(self, exc_type, exc_val, exc_tb):
2660
logging.info("Stopping servers")
2761
for server in reversed(self.servers):

e2e_tests/typescript/src/server_clients/server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ export abstract class Server {
7878
toolName: string,
7979
toolUseId: string,
8080
args: Record<string, any>,
81-
retries: number = 2,
81+
retries: number = 3,
8282
delay: number = 1.0
8383
): Promise<ToolResultBlock> {
8484
let attempt = 0;

e2e_tests/typescript/src/server_clients/servers.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,49 @@ export class Servers {
2020
logger.info("Starting servers");
2121
for (const server of this.servers) {
2222
logger.info(`Starting server: ${server.name}`);
23-
await server.initialize();
23+
await this.initializeServerWithRetry(server);
24+
}
25+
}
26+
27+
/**
28+
* Initialize a server with retry mechanism
29+
*/
30+
private async initializeServerWithRetry(
31+
server: Server,
32+
retries: number = 3,
33+
delay: number = 1.0
34+
): Promise<void> {
35+
let attempt = 0;
36+
while (attempt < retries) {
37+
try {
38+
await server.initialize();
39+
return;
40+
} catch (e) {
41+
attempt += 1;
42+
logger.warn(
43+
`Error initializing server ${server.name}: ${e}. Attempt ${attempt} of ${retries}.`
44+
);
45+
46+
try {
47+
await server.close();
48+
} catch (closeError) {
49+
logger.warn(
50+
`Error closing server ${server.name} during retry: ${closeError}`
51+
);
52+
}
53+
54+
if (attempt < retries) {
55+
logger.info(`Retrying in ${delay} seconds...`);
56+
await new Promise((resolve) => setTimeout(resolve, delay * 1000));
57+
} else {
58+
logger.error(
59+
`Max retries reached for server ${server.name}. Failing.`
60+
);
61+
throw new Error(
62+
`Error initializing server ${server.name}: ${String(e)}`
63+
);
64+
}
65+
}
2466
}
2567
}
2668

examples/chatbots/python/server_clients/server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ async def execute_tool(
6666
tool_name: str,
6767
tool_use_id: str,
6868
arguments: dict[str, Any],
69-
retries: int = 2,
69+
retries: int = 3,
7070
delay: float = 1.0,
7171
) -> Any:
7272
"""Execute a tool with retry mechanism.

examples/chatbots/typescript/src/server_clients/server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ export abstract class Server {
7979
toolName: string,
8080
toolUseId: string,
8181
args: Record<string, any>,
82-
retries: number = 2,
82+
retries: number = 3,
8383
delay: number = 1.0
8484
): Promise<ToolResultBlock> {
8585
let attempt = 0;

0 commit comments

Comments
 (0)