merge: 최종 main을 Profile 포괄 권한 제거에 통합
This commit is contained in:
@@ -59,6 +59,11 @@ Gateway 관리자 콘솔은 `/gateway/admin`에서 시작합니다. 공개 로
|
||||
메타가 없거나 유효하지 않으면 기존 시스템 기본값을 사용합니다. 시나리오와
|
||||
예약·가오픈·정식 오픈 시각은 매 실행마다 선택하므로 서버 기본값에 포함하지
|
||||
않습니다.
|
||||
- 같은 화면의 `실행 중 게임 옵션`은 리셋 기본값과 별개로 현재 기수 DB의 턴
|
||||
간격, 장수 생성 제한, 유저 자동턴 제한·동작을 읽어 표시합니다. 세 값은
|
||||
`admin.profiles.runtime:<name>` 권한과 3자 이상의 사유가 있을 때 하나의
|
||||
내구성 런타임 작업으로 적용됩니다. 현재 DB 값을 읽지 못하면 폼을 제출할 수
|
||||
없습니다. 존재하지 않는 설문 오픈 동작은 서버 상태 화면에 노출하지 않습니다.
|
||||
- Gateway 릴리스는 profile 작업과 다른 전역 `admin.releases.manage` 권한을
|
||||
사용하며 외부 release-controller가 실행합니다. 선택한 릴리스 작업의 단계와
|
||||
명령 출력을 관리자 화면이 long polling으로 이어 받아 표시하며, 완료된 이력의
|
||||
@@ -70,7 +75,7 @@ Gateway 관리자 콘솔은 `/gateway/admin`에서 시작합니다. 공개 로
|
||||
|
||||
| capability | 허용 작업 |
|
||||
| -------------------------------- | --------------------------------------------------------- |
|
||||
| `admin.profiles.runtime:<name>` | 시작·정지·일시정지·재개와 시간 조정 |
|
||||
| `admin.profiles.runtime:<name>` | 시작·정지·일시정지·재개, 시간 조정과 현재 기수 게임 옵션 |
|
||||
| `admin.profiles.settings:<name>` | 표시 정보·리셋 기본 옵션·Kakao 미인증 접근/장수 생성 유예 |
|
||||
| `admin.profiles.deploy:<name>` | DB를 유지하는 Git 버전 업데이트, 초기화와 새 버전 결합 |
|
||||
| `admin.scenarios.reset:<name>` | 현재 배포 버전으로 시나리오 초기화 |
|
||||
|
||||
@@ -10,6 +10,11 @@
|
||||
남은 턴 수가 보존됩니다. DateTime 필드는 이전 데이터와 화면을 위한 투영값이며
|
||||
tick 필드가 존재하면 tick이 우선합니다.
|
||||
|
||||
운영 중 턴 간격 변경은 Gateway의 내구성 런타임 작업으로만 수행합니다. 같은
|
||||
transaction에서 `world_state`, 장수·경매·메시지·설문 투영값과 checkpoint를
|
||||
갱신하며 기존 역사/행동 로그의 `created_at`은 다시 쓰지 않습니다. 토너먼트의
|
||||
Redis 투영은 DB commit 뒤 action ID로 멱등 적용됩니다.
|
||||
|
||||
## 실행 모드
|
||||
|
||||
- `GAME_CLOCK_MODE=realtime`: `clock_wall_anchor` 이후의 실제 경과시간을
|
||||
|
||||
@@ -44,7 +44,8 @@ Gateway API는 다음 저장 경계를 사용합니다.
|
||||
- `GatewayProfile`: profile, scenario, port, 상태와 build 결과
|
||||
- `GatewayOperation`: build/reset/open/close 등 실행 요청과 결과
|
||||
- `GatewayReleaseOperation`, `GatewayReleaseState`: Gateway 전체 릴리스 queue와 현재·이전 commit
|
||||
- `GatewayRuntimeAction`: profile별 시간 가속·연기 요청, 부분 적용과 최종 결과
|
||||
- `GatewayRuntimeAction`: profile별 시간 가속·연기와 현재 기수 설정 변경 요청,
|
||||
payload, 부분 적용과 최종 결과
|
||||
- Redis: gateway session, OAuth 임시 상태, KakaoTalk 로그인 challenge, flush channel
|
||||
|
||||
Kakao 로그인은 URL 이름만으로 사용자를 연결하지 않습니다. `account_email`과
|
||||
@@ -116,6 +117,15 @@ DB partial unique index로 한 건만 허용합니다. Turn daemon은 자신의
|
||||
Redis 단계가 실패하면 action은 `PARTIAL`과 backoff 상태로 남고 DB 시간은
|
||||
다시 이동하지 않습니다.
|
||||
|
||||
현재 기수의 턴 간격·장수 생성 제한·유저 자동턴도 같은
|
||||
`GatewayRuntimeAction`/`InputEvent` 경계를 사용합니다. Turn daemon은 세 값을
|
||||
한 transaction에서 `world_state.config`와 `meta`에 저장합니다. 턴 간격이
|
||||
바뀌면 현재 표시 게임 시각과 game tick을 고정한 채 `clock_base_time`, 장수
|
||||
턴·최근 전쟁, checkpoint, 경매·메시지·설문 DateTime 투영값을 새 간격으로
|
||||
다시 계산합니다. 기존 `log_entry.created_at`은 갱신하지 않고 변경을 알리는 새
|
||||
역사 로그만 추가합니다. Redis 토너먼트의 tick 소유 시각도 action ID로 한 번만
|
||||
재투영하며 실패하면 `PARTIAL`에서 재시도합니다.
|
||||
|
||||
Gateway API와 독립 orchestrator의 SIGINT·SIGTERM은
|
||||
`installGatewayShutdownController()`가 하나의 종료 Promise로 합칩니다.
|
||||
Gateway API는 Fastify `app.close()`를 통해 orchestrator task를 drain한 뒤
|
||||
|
||||
Reference in New Issue
Block a user