Preserve deleted server history
Retain historical server identities, results, and evidence after deletion. Mark archived entries as Deleted and prevent old work from targeting servers that reuse the same name. Fixes #16.
This commit is contained in:
@@ -44,6 +44,31 @@ afterEach(async () => {
|
||||
|
||||
function nextTick() { vi.setSystemTime(Date.now() + 15_000); }
|
||||
|
||||
it('ignores a late restart reply after deletion without changing a replacement recovery slot', async () => {
|
||||
const { db } = await import('../../src/lib/server/db/index.js');
|
||||
const { seedServerRegistry } = await import('../../src/lib/server/fleet/servers.js');
|
||||
const { beginDeployment } = await import('../../src/lib/server/provisioning/history.js');
|
||||
const { restartInRollout } = await import('../../src/lib/server/provisioning/restarts.js');
|
||||
const { komodoRestart } = await import('../../src/lib/server/integrations/komodo.js');
|
||||
let complete!: (value: { ok: true }) => void;
|
||||
vi.mocked(komodoRestart).mockImplementationOnce(() => new Promise(resolve => { complete = resolve; }));
|
||||
const oldOperation = beginDeployment(servers[0], 'restart');
|
||||
const pending = restartInRollout(servers[0], { operationId: oldOperation, action: 'restart' });
|
||||
db().prepare('DELETE FROM servers WHERE name = ?').run(servers[0]);
|
||||
await seedServerRegistry();
|
||||
const replacement = beginDeployment(servers[0], 'restart');
|
||||
const requestedAt = new Date().toISOString();
|
||||
db().prepare('INSERT INTO restart_rollout (server, requested_at, operation_id) VALUES (?, ?, ?)')
|
||||
.run(servers[0], requestedAt, replacement);
|
||||
nextTick();
|
||||
complete({ ok: true });
|
||||
expect(await pending).toMatchObject({ kind: 'failed' });
|
||||
expect(db().prepare('SELECT state, server_deleted_at FROM server_deployments WHERE id = ?').get(oldOperation))
|
||||
.toMatchObject({ state: 'cancelled', server_deleted_at: expect.any(String) });
|
||||
expect(db().prepare('SELECT operation_id, requested_at, error FROM restart_rollout WHERE server = ?').get(servers[0]))
|
||||
.toEqual({ operation_id: replacement, requested_at: requestedAt, error: null });
|
||||
});
|
||||
|
||||
async function deployment(id = 'dep-1', targets = servers, action = 'promote') {
|
||||
const { db } = await import('../../src/lib/server/db/index.js');
|
||||
db().prepare('INSERT INTO deployments (id, action, started_at) VALUES (?, ?, ?)')
|
||||
|
||||
Reference in New Issue
Block a user