fix: refresh reserved turns at execution lease boundary
This commit is contained in:
@@ -354,7 +354,10 @@ export class InMemoryReservedTurnStore {
|
||||
await this.acquireNationLease(nation.nationId, nation.officerLevel);
|
||||
}
|
||||
await Promise.all([
|
||||
this.refreshGeneralTurns(generalId),
|
||||
// A newly acquired lease starts a fresh API/daemon ownership boundary.
|
||||
// Re-read PostgreSQL even if a prior run left a stale dirty marker;
|
||||
// repeated access under the same held lease keeps local mutations.
|
||||
this.refreshGeneralTurns(generalId, !hadGeneralLease),
|
||||
nation ? this.refreshNationTurns(nation.nationId, nation.officerLevel) : Promise.resolve(),
|
||||
]);
|
||||
} catch (error) {
|
||||
@@ -368,8 +371,8 @@ export class InMemoryReservedTurnStore {
|
||||
}
|
||||
}
|
||||
|
||||
async refreshGeneralTurns(generalId: number): Promise<void> {
|
||||
if (this.dirtyGeneralIds.has(generalId)) {
|
||||
async refreshGeneralTurns(generalId: number, force = false): Promise<void> {
|
||||
if (!force && this.dirtyGeneralIds.has(generalId)) {
|
||||
return;
|
||||
}
|
||||
const rows = await this.prisma.generalTurn.findMany({
|
||||
|
||||
@@ -202,6 +202,19 @@ describe('reserved turn daemon lease', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('refreshes a stale dirty cache after acquiring a fresh lease but preserves mutations under the held lease', async () => {
|
||||
const harness = buildHarness();
|
||||
harness.store.setGeneralTurn(7, 0, { action: '휴식', args: {} });
|
||||
|
||||
await harness.store.prepareTurnsForExecution(7);
|
||||
expect(harness.store.getGeneralTurn(7, 0).action).toBe('che_훈련');
|
||||
|
||||
harness.store.setGeneralTurn(7, 0, { action: 'che_사기진작', args: {} });
|
||||
await harness.store.prepareTurnsForExecution(7);
|
||||
expect(harness.store.getGeneralTurn(7, 0).action).toBe('che_사기진작');
|
||||
expect(harness.generalFindMany).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it('rejects an active foreign lease before reading the queue', async () => {
|
||||
const harness = buildHarness({
|
||||
revision: 4,
|
||||
|
||||
Reference in New Issue
Block a user