참조
오류 코드
CLI 가 오류 [code] … 로 찍는 code 의 목록입니다. 분기할 값은 code 이고 message 는 사람이 읽는 것이라 바뀝니다.
정본은
cp/internal/public · cp/internal/core · node/internal/front · node/internal/agent 의 Go 소스 입니다. 이 페이지는 빌드할 때 그 코드에서 만들어집니다.읽는 법
실패한 API 응답은 언제나 같은 봉투입니다.
{ "error": { "code": "database_required", "message": "먼저 데이터베이스가 있어야 한다" } }CLI 는 이것을 오류 [database_required] … 로 찍고 종료 코드 1 로 끝냅니다. 스크립트에서 분기할 것은 code 입니다 — message 는 사람이 읽는 것이라 언제든 바뀝니다.
같은 code 가 상황에 따라 다른 상태 코드로 올 수 있습니다. 그런 행은 상태 칸에 둘을 적었습니다.
code 목록 (57)
| code | 상태 | 뜻 |
|---|---|---|
access_denied | 401 | 우회 시크릿이 맞지 않습니다 |
access_exchange_failed | 502 | 로그인 확인에 실패했다 — 잠시 뒤 다시 시도한다 |
access_required | 401 | 이 배포는 접근 제어가 켜져 있어 로그인이 필요합니다 |
access_unavailable | 503 | 접근 제어를 판정할 수 없어 요청을 닫았습니다 |
already_member | 409 | 이미 그 조직의 멤버입니다. 역할 변경은 다른 명령입니다 |
backend | — | — |
backup_failed | 503 | 세대를 뜨지 못했다: … |
bad_request | 400 | 요청이 형식에 맞지 않습니다 |
bundle_too_large | — | 번들이 업로드 상한을 넘었습니다 |
cold | 503 | 프로젝트가 잠들어 있어 깨우는 중입니다. 몇 초 뒤 다시 시도하세요 |
confirm_mismatch | 400 | 확인 문자열이 이름과 다릅니다 |
drain_incomplete | 503 | front …/…가 강제 종료 뒤에도 in-flight를 남겼다 (grant 철회는 완료: …) |
export_failed | 502 · 503 | 키 없이 성공이 왔다 |
forbidden | 403 | 신원은 맞지만 권한이 없습니다 |
front_not_ready | 503 | 최초 맵 동기화가 아직 끝나지 않았다 |
front_unacked | 503 | front …/…가 ACK하지 않았다 (소켓 범위 — grant는 홈 노드가 든다) |
github_token | 502 | GitHub 토큰 교환 실패: … |
github_user | 502 | GitHub 사용자 조회 실패: … |
grant_failed | 500 | grant 철회에 실패했다: … |
hostname_taken | 409 | 그 호스트네임은 이미 다른 프로젝트가 쓰고 있습니다 |
internal | 500 | internal error |
last_admin | 409 | 조직의 마지막 admin 입니다. 내리면 아무도 관리할 수 없습니다 |
no_core | 503 | cp-core 주소 없이 뜬 cp-public 이다 — DNS 존은 cp-core 가 든다 |
no_host | 400 | Host 헤더가 없다 |
no_log_buffer | 503 | 이 admin 표면에 로그 링이 꽂혀 있지 않다 (Admin.SetLogSource) |
no_placement | 503 | 프로젝트가 아직 어느 노드에도 놓이지 않았습니다 |
no_wake | 501 | 이 노드는 주차된 프로젝트를 깨우지 못한다 |
no_writable_state | 501 | 이 노드에는 내보낼 데이터베이스가 없다 |
node_unreachable | 502 | 노드에 닿지 못했습니다. 잠시 뒤 다시 시도하세요 |
not_a_member | 403 | 그 조직의 멤버가 아닙니다 |
not_found | 404 | 그런 조직·프로젝트·배포가 없습니다 |
not_here | 404 | … |
not_ready | 503 | 최초 맵 poll 또는 노드 주소록 로드가 아직 끝나지 않았다 |
op_conflict | 409 | op_id …는 이미 …(…, epoch …)다 — …(…, epoch …)로 재사용할 수 없다 |
op_in_flight | 503 · 409 | 같은 작업이 이미 진행 중입니다 |
org_slug_taken | 409 | 그 조직 slug 는 이미 있습니다 |
project_name_taken | 409 | 그 프로젝트 이름은 이미 있습니다 |
rate_limited | — | — |
reserved_name | 400 | 예약된 이름이라 쓸 수 없습니다 |
restore_busy | 429 | 복원 슬롯이 모두 찼다 (…/…) |
restore_failed | 500 | 최종 세대 복원에 실패했다: … |
restore_stalled | 503 | 복원이 멈춰 있습니다. 지원에 문의하세요 |
restore_too_large | 429 | 복원 예약 …가 이 노드의 복원 예산 …를 넘는다 (객체 …) |
restoring | 503 | 복원 중입니다. 끝나면 다시 응답합니다 |
revoked | 403 | 이 배치의 권한이 회수됐습니다 |
seal_failed | 503 | 최종 세대 봉인에 실패했다: … |
suspended | 403 · 409 | 프로젝트가 정지되어 있습니다 |
unauthorized | 401 | 토큰이 없거나 만료됐습니다. runlot login 을 다시 하세요 |
unknown | — | 서버가 아닌 것이 답했습니다 (프록시의 HTML 502 처럼). CLI 가 붙이는 값입니다 |
unknown_hostname | 404 | 이 노드가 아는 프로젝트 중 …를 쓰는 것이 없다 |
unknown_node | 503 | 홈 노드 주소를 모른다 |
unknown_state | 503 | 모르는 배치 상태 …다 |
unsupported | — | 이 저장소 백엔드가 지원하지 않는 기능입니다 |
upstream_unreachable | — | 워커에 닿지 못했습니다. 배포가 살아 있는지 확인하세요 |
user_not_found | 404 | 그 계정으로 로그인한 적이 없습니다. 초대는 없으므로 먼저 한 번 로그인해야 합니다 |
wake_failed | 503 | … |
workerd_unchecked | 503 · 500 | 커밋 경로가 멎었는지 확인하지 못했다: … |
운영 평면에서 올라오는 것 (50)
배치·복원·lease 처럼 runlot 이 안에서 하는 일이 실패하면 그 code 가 그대로 올라옵니다. 대부분은 잠시 뒤 다시 시도하면 됩니다 — 계속 같은 code 가 나오면 알려 주세요.
| code | 상태 | 뜻 |
|---|---|---|
already_done | 409 | 연산 … 는 이미 끝났다 |
cas_conflict | 409 | — |
cert_generation | 403 | 인증서 세대 …는 폐기됐다 (현재 …) |
claimed | 409 | 다른 곳이 이 데이터베이스를 쥐고 있습니다. 잠시 뒤 다시 시도하세요 |
cname_conflict | 409 | … 에는 CNAME 과 다른 타입이 함께 있을 수 없다 |
database_required | 409 | 먼저 데이터베이스가 있어야 합니다. runlot pg create 를 실행하세요 |
db_rewound | 409 | — |
dek_unwrap_failed | 500 | 프로젝트 … 의 DEK 봉인을 풀지 못했다: … |
dns_not_configured | 503 | 네임서버가 아직 준비되지 않아 도메인을 살 수 없습니다 |
dnssec_off | 409 | 존 … 의 DNSSEC 이 꺼져 있다 — 먼저 켠다 |
domain_taken | 409 | 이미 등록된 도메인입니다 |
domain_unavailable | 409 | 살 수 없는 도메인입니다 |
era_ahead | 409 | 요청의 era …가 CP의 …보다 앞선다 — CP의 era 상태가 유실됐다 |
era_write_failed | 500 | — |
identity_mismatch | 403 | 인증서는 … 인데 본문은 … 다 |
invalid_provider | 400 | 프로바이더 … 를 모른다 — … 중 하나여야 한다 |
last_node_unavailable | 503 | 최종 세대를 들고 있는 노드 … 가 배치 가능한 상태가 아니다 |
lease_alive | 409 | — |
lease_drain_pending | 409 | 기존 lease가 아직 소멸하지 않았다 — … 뒤에 다시 시도하라 (격리 진입 + TTL … + 마진 …) |
lease_quarantine | 409 | — |
lease_seq_ahead | 409 | 요청의 lease_seq …가 CP의 …보다 앞선다 (era …) |
lifecycle_disabled | 503 | 수명주기 연산이 꺼져 있다 — 퇴거를 시작하지 않는다 (cp-core --enable-lifecycle) |
managed_rrset | 409 | runlot 이 관리하는 레코드라 직접 고칠 수 없습니다 |
master_key_version | 503 | 마스터 키 버전 … 를 이 cp-core 가 들고 있지 않다 — |
no_access_key | 503 | cp-core 에 RUNLOT_ACCESS_KEY 가 없다 — 접근 쿠키를 만들 수 없다 |
no_database | 409 | 이 프로젝트에는 데이터베이스가 없습니다 |
no_home_node | 503 · 409 | 프로젝트 …의 홈 노드 주소를 읽지 못했다 |
no_last_node | 503 | 최종 세대를 들고 있던 노드를 모른다 — 로컬 오프사이트는 그 노드에서만 읽을 수 있다 |
no_master_key | 503 | cp-core 에 마스터 키가 없다 — RUNLOT_MASTER_KEY 없이 떴다 |
no_node | 503 | 배치 가능한 노드가 없다 |
no_node_admin | 503 | 노드 admin 경로가 설정되지 않았다 — 진단 export를 보낼 길이 없다 |
no_session_key | 503 | cp-core 에 RUNLOT_SESSION_KEY 가 없다 — 로그인 세션으로 wire 에 붙을 수 없다 |
no_slot | 503 | 빈 자리가 없습니다. 잠시 뒤 다시 시도하세요 |
node_not_active | 409 | 노드 …는 … 상태다 |
not_abortable | 409 | … 연산은 중단할 수 없다 — 되돌릴 수 없는 단계 앞이 없다 |
not_active | 409 | 지금 상태에서는 할 수 없는 일입니다 |
not_cold | 409 | 프로젝트 … 의 배치가 … 다 — 재활성은 cold 에서만 시작한다 |
not_granted | 404 | 프로젝트 … 에 auth 부여가 없다 — 먼저 켠다 |
not_home | 403 · 409 | 노드 … 는 프로젝트 … 의 epoch … 를 들고 있지 않다 |
not_quarantined | 409 | lease 격리 상태가 아니다 — 활성화할 것이 없다 |
not_terminal | 409 | — |
op_stalled | 409 | 프로젝트 … 의 연산 … 가 … 로 멈춰 있다 — 원인을 고치고 resume 해야 한다 |
payment_failed | 402 | 결제가 거절됐습니다. 카드를 확인하세요 |
registrar_error | 502 | 등록기관이 오류를 냈습니다 |
registrar_not_configured | 503 | 도메인 등록기관이 아직 연결되지 않았습니다 |
saga_incomplete | 502 | 구매가 끝나지 않았다 (다시 보내면 그 자리에서 이어 간다): … |
stale_epoch | 409 | 낡은 세대의 요청입니다. 다시 시도하세요 |
user_rrset | 409 | … … 는 사용자가 만든 레코드다 — 관리 레코드로 덮어쓰지 않는다 |
witness_unavailable | 503 | — |
zone_taken | 409 | 그 존은 이미 있습니다 |