본문 바로가기
C.W.K.
Stream
Lesson 04 of 05 · published

다시 내기 전에 reconcile해

~10 min · reconcile, recovery, no-auto-repay

Level 0침묵
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"ambiguous job은 막다른 길이 아니라 질문이야. reconcile은 다시 내기를 누가 꺼내기도 전에, 이미 가진 출처를 다 뒤져."

ambiguous를 답으로 바꾸기

트랙 1이 ambiguous 상태를 줬어. 이건 그게 어떻게 풀리는지고. 실패했거나 ambiguous한 job을 reconcile하는 건, 이미 가졌을 만한 걸 순서대로 훑는 탐색이야. 먼저 캐시. job이 사실 끝났고 오디오가 바로 거기 있을 수도. 그다음 durable chunk lineage. 유료 chunk가 다 저장됐고 로컬 concat만 실패해서, 파일을 공짜로 다시 지을 수도. 그다음 provider history. provider가 네 request ID에 묶어서, 자기가 만든 오디오랑 매긴 청구를 기억하고 있을 수도. 이것들 하나하나가 새 비용 0으로 결과를 되살려.

reconcile이 절대 안 넘는 선

복구를 안전하게 지키는 invariant는 이거야. reconcile은 재사용하지 절대 재구매 안 해. 캐시를 읽고, chunk에서 다시 짓고, provider history를 물어볼 순 있어. 근데 혼자서 새 유료요청은 안 내. 그 출처 어디에도 오디오가 없으면, reconcile은 멈추고 결정이 필요하다고 보고해. 두 번째 유료 시도는 의도적 행위지, 복구 루틴에 숨은 조용한 단계가 절대 아니야.

왜 자동 재결제가 전부를 무너뜨리냐면

reconcile이 '그냥 고치자고' 조용히 다시 낼 수 있으면, 모든 ambiguous 타임아웃이 이중청구 위험이 돼. 정확히 이 트랙 전체가 막으려는 그 결과. reconcile을 엄격히 지출-없음으로 만들면, ambiguous job은 두려움 없이 필요한 만큼 재시도하고 재개하고 복구할 수 있어. 그 경로 어디로도 돈이 나갈 수 없으니까. 지출 결정이 자동 레이어에서 통째로 빠져나가는 거야.

Code

가진 걸 다 뒤지고, 지출 전엔 멈춰·python
def reconcile(job: Job) -> Resolution:
    # 1. Did we already finish? The cache may hold the audio.
    if audio := cache.get(job.identity):
        return Resolution.recovered(audio, cost=0)

    # 2. Are the paid chunks durable? Rebuild the file locally, no new call.
    if chunks := lineage.chunks_for(job.id):
        return Resolution.recovered(ffmpeg_concat(chunks), cost=0)

    # 3. Ask the provider what it has on record for OUR request id.
    if hist := provider.history(job.request_id):
        return Resolution.recovered(lineage.adopt(hist.audio), cost=0)

    # Nothing recovered. Reconcile STOPS here -- it never pays on its own.
    return Resolution.needs_decision(job)

External links

Exercise

네가 아는 시스템의 ambiguous한 결제나 side effect에 대한 reconcile 루틴을 설계해. 두 번째 시도를 고민하기 전에, 결과를 공짜로 되살리려고 확인할 출처를 순서대로 다 나열해. 로컬 기록, 저장된 중간물, 원격 history. 그다음 딱딱한 규칙을 말해. 어느 지점에서 네 루틴이 멈추고 지출 결정을 사람한테 넘겨?
Hint
순서는 제일 싸고 가까운 것부터. 네 캐시, 그다음 네 저장된 조각, 그다음 원격의 기억. 루틴이 할 일은 공짜로 복구하거나 멈추는 거야. 혼자서 다시 낼지는 절대 안 정해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.