/* * 빠진 구간을 **언제** 다시 받나 — 세 자리의 규율. * * ``` * 1 재기동 직후 한 번 우리가 내려가 있는 동안 그쪽이 보낸 것 * 2 구멍을 본 그 자리 번호가 비었다는 것을 아는 가장 이른 순간 * 3 10분 그물 위 둘이 다 놓치는 경우 * ``` * * 여기서 확인하는 것은 **두 번 부르지 않는 규율**이다. 밀어 받는 쪽이 구멍 뒤의 봉투를 계속 보내면 * 그때마다 구멍 판정이 나고, 막지 않으면 봉투마다 backfill 이 돈다. * * 실제 조회는 DB 와 어댑터를 물어야 해서 여기서 다루지 않는다. */ import { test } from 'node:test' import assert from 'node:assert/strict' import { FILL_DEBOUNCE_MS, FILL_PERIOD_MS } from '../server/service/reference/fill-cadence.js' test('★ 그물은 10분이다 — 30초가 아니다', () => { /* * 인티그레이션 레인이 측정으로 준 권고다. backfill 은 원본에 조회를 걸고 저널을 읽는다. * 30초마다 돌면 얻는 것 없이 두 쪽을 계속 친다 — 놓친 구간은 10분 뒤에 받아도 사실이 달라지지 않는다. * * 규칙 주기(30초)에 얹지 않은 이유이기도 하다. 얹으면 간격이 그쪽에 묶이고, 나중에 규칙 주기를 * 바꾸면 이쪽이 소리 없이 따라간다. */ assert.equal(FILL_PERIOD_MS, 10 * 60_000) assert.notEqual(FILL_PERIOD_MS, 30_000, '규칙 주기와 같아졌다 — 그러면 하나를 바꿀 때 둘이 움직인다') }) test('★ 같은 단위를 1분 안에 두 번 안 받는다 — 봉투마다 돌면 안 된다', () => { assert.equal(FILL_DEBOUNCE_MS, 60_000) assert.ok(FILL_DEBOUNCE_MS < FILL_PERIOD_MS, '막는 간격이 그물보다 길면 그물이 헛돈다') })