fix: address PR review comments for chroma server lifecycle

This commit is contained in:
Alex Newman
2026-02-13 23:39:30 -05:00
parent 1b68c55763
commit c27314f896
6 changed files with 406 additions and 123 deletions
+23 -5
View File
@@ -87,6 +87,12 @@ describe('GracefulShutdown', () => {
})
};
const mockChromaServer = {
stop: mock(async () => {
callOrder.push('chromaServer.stop');
})
};
// Create a PID file so we can verify it's removed
writePidFile({ pid: 12345, port: 37777, startedAt: new Date().toISOString() });
expect(existsSync(PID_FILE)).toBe(true);
@@ -95,16 +101,18 @@ describe('GracefulShutdown', () => {
server: mockServer,
sessionManager: mockSessionManager,
mcpClient: mockMcpClient,
dbManager: mockDbManager
dbManager: mockDbManager,
chromaServer: mockChromaServer
};
await performGracefulShutdown(config);
// Verify order: PID removal happens first (synchronous), then server, then session, then MCP, then DB
// Verify order: PID removal happens first (synchronous), then server, then session, then MCP, then Chroma, then DB
expect(callOrder).toContain('closeAllConnections');
expect(callOrder).toContain('serverClose');
expect(callOrder).toContain('sessionManager.shutdownAll');
expect(callOrder).toContain('mcpClient.close');
expect(callOrder).toContain('chromaServer.stop');
expect(callOrder).toContain('dbManager.close');
// Verify server closes before session manager
@@ -115,6 +123,9 @@ describe('GracefulShutdown', () => {
// Verify MCP closes before database
expect(callOrder.indexOf('mcpClient.close')).toBeLessThan(callOrder.indexOf('dbManager.close'));
// Verify Chroma stops before DB closes
expect(callOrder.indexOf('chromaServer.stop')).toBeLessThan(callOrder.indexOf('dbManager.close'));
});
it('should remove PID file during shutdown', async () => {
@@ -184,7 +195,7 @@ describe('GracefulShutdown', () => {
expect(mockSessionManager.shutdownAll).toHaveBeenCalledTimes(1);
});
it('should close database after MCP client', async () => {
it('should stop chroma server before database close', async () => {
const callOrder: string[] = [];
const mockSessionManager: ShutdownableService = {
@@ -205,16 +216,23 @@ describe('GracefulShutdown', () => {
})
};
const mockChromaServer = {
stop: mock(async () => {
callOrder.push('chromaServer');
})
};
const config: GracefulShutdownConfig = {
server: null,
sessionManager: mockSessionManager,
mcpClient: mockMcpClient,
dbManager: mockDbManager
dbManager: mockDbManager,
chromaServer: mockChromaServer
};
await performGracefulShutdown(config);
expect(callOrder).toEqual(['sessionManager', 'mcpClient', 'dbManager']);
expect(callOrder).toEqual(['sessionManager', 'mcpClient', 'chromaServer', 'dbManager']);
});
it('should handle shutdown when PID file does not exist', async () => {