18 lines
1.3 KiB
Markdown
18 lines
1.3 KiB
Markdown
---
|
|
id: "ac-0030"
|
|
status: active
|
|
---
|
|
|
|
# 데몬 소유자 이전과 기존 배정의 동일 소유자 불변식
|
|
|
|
## Criterion
|
|
|
|
portfolio assignment와 daemon owner transfer의 실행 순서와 관계없이 저장된 non-null assignment는 `daemon.owner_user_id == portfolio.owner_user_id`를 만족해야 하며, 참조 중 daemon의 owner transfer는 HTTP 409로 거부되어 daemon owner, portfolio assignment와 broker credentials를 모두 보존해야 한다.
|
|
|
|
## Verification
|
|
|
|
- 성공 조건: assignment-first에서는 transfer가 409로 실패하고, transfer-first에서는 이전 owner의 assignment가 foreign daemon 404로 실패하며, 미참조 transfer는 성공하고 기존 credential invalidation 정책을 유지한다.
|
|
- 실패·경계 조건: foreign owner 관계가 commit되거나 충돌한 transfer가 owner·assignment·credential 중 일부만 변경하거나 race가 timeout·deadlock으로 끝나면 실패한다.
|
|
- 검사 방법: migration head가 적용된 disposable PostgreSQL에서 순차 참조 transfer, 미참조 transfer와 양방향 race를 별도 connection/thread로 반복 실행한다.
|
|
- 현재 구현 평가: `e90519a`가 daemon `FOR UPDATE` → reference 검사 → credential 삭제 → owner UPDATE 순서를 구현했고 2차 QC에서 integration `12 passed`와 race 반복 `5/5 passed`를 확인했다.
|