admission 시점:
committed
+ active reserved
+ pending reconciliation liability
+ new safeUpperBoundCost
가 bucket limit을 위반하지 않음
상태 합계:
active reserved = RESERVED/IN_FLIGHT reservation estimate 합
pending liability = RECONCILIATION_REQUIRED unresolved estimate 합
committed = newly COMMITTED actual 합
검증할 위험
ConcurrentHashMap을 사용한다는 사실만으로 check-and-reserve가 안전해지지는 않는다. 현재getAccumulatedCost() → 판단 → addCost()구조는 각 연산이 안전해도 전체 흐름에는 경쟁 조건이 있다.이 이슈는 production API를 새로 설계하지 않고 #36/#37 구현이 실제 경쟁 상황에서도 상태·금액·통화·idempotency 불변식을 지키는지 검증한다. 동시성 테스트는 수학적 증명이나 선형성 검증기의 대체물이 아니라, 명시된 linearization point와 회계식을 깨뜨리는 회귀를 찾는 결정적 검증이다.
검증할 불변식
RECONCILIATION_REQUIRED는 의도하지 않은 reservation 누수가 아니라 조회 가능한 pending liability다.테스트 구현 원칙
sleep()으로 타이밍을 맞추지 않는다.CountDownLatch,CyclicBarrier또는Phaser로 같은 시작선과 특정 transition 직전 barrier를 만든다.double이 아닌 문자열 기반BigDecimal과 통화를 포함한 Money/Cost로 만든다.필수 시나리오
Acceptance criteria
제외 범위
의존관계와 순서
Source