{
  "test_id": "T96",
  "date": "2026-07-09",
  "env": "Istio 1.30.0 / k8s 1.30.6 (homelab kubeadm, containerd) — dns-gslb-repro-lab 번들 킷 + t96-backends-slow.yaml 오버레이",
  "verdict": "pass",
  "observed": "backend 응답을 300KB @ limit_rate 10k(≈30초)로 늘여 'flip 순간 진행 중인 요청'을 보장한 뒤 GSLB flip(A→B)을 넣었다. STRICT_DNS: flip +12초 시점에 endpoint 목록은 이미 backend-b로 교체됐고(membership_change +1) 그 순간에도 upstream_cx_active=1 — 목록에서 사라진 host의 in-flight 연결이 살아 있었다. 요청은 절단 없이 완주(200, 307200 bytes, 30.04s, rc=0, X-Backend: backend-a)했고, 연결 종료(upstream_cx_destroy_local +1)는 요청 완료 후에 발생했다. upstream_cx_destroy_with_active_rq는 전 구간 0. LOGICAL_DNS: 동일하게 완주했으며 연결은 완료 후에도 종료되지 않고(active=1 유지) 옛 IP에 pin 유지. 두 변형 모두 run 2에서 동일 재현. 사후 체크에서 logical의 pinned 연결이 수 분 뒤 backend nginx keepalive_timeout(65s)에 의해 원격 종료(destroy_remote)되자 신규 요청이 최신 DNS(backend-b)를 따라갔다 — stale pin의 수명은 연결 수명과 같다. 문서(dns-gslb-repro-lab)의 기존 예측('flip 순간 destroy_with_active_rq가 오르며 장수명 요청이 잘린다')은 이 시나리오(HTTP/1.1, 유한 길이 응답)에서 반증됐다 — STRICT의 host 제거 drain은 graceful이다. 경계: 끝나지 않는 스트림(gRPC 서버 스트리밍 등)·HTTP/2 GOAWAY 경로·TCP passthrough(L4)는 미실측.",
  "claims": [
    {
      "cid": "C17",
      "claim": "STRICT_DNS의 host 제거 drain은 graceful — GSLB flip 순간 진행 중(in-flight)이던 HTTP/1.1 요청은 절단되지 않고 완주하며, 연결 종료(destroy_local)는 요청 완료 후로 미뤄진다 (destroy_with_active_rq 0)",
      "empirical": "supports-claim",
      "note": "run 1·run 2 동일 재현. flip +12s에 endpoint는 B로 교체됐는데 A로의 연결이 active=1로 생존, 30초 완주 후 destroy_local +1"
    },
    {
      "cid": "C18",
      "claim": "LOGICAL_DNS도 flip 순간 in-flight 요청은 완주하며, 연결은 완료 후에도 종료되지 않고 옛 IP에 pin이 유지된다",
      "empirical": "supports-claim",
      "note": "완주 후 S3에서 upstream_cx_active=1 유지, destroy 델타 0 — STRICT와의 차이는 '완료 후 연결을 닫느냐'뿐"
    },
    {
      "cid": "C19",
      "claim": "LOGICAL의 stale pin 수명 = 연결 수명 — backend가 유휴 타임아웃 등으로 원격 종료(destroy_remote)하면 다음 요청은 최신 DNS를 따른다",
      "empirical": "supports-claim",
      "note": "nginx keepalive_timeout 65s가 유휴 pinned 연결을 닫은 뒤 신규 요청 3발 전부 backend-b. T92 Mode 3(kill로 pin 해제)의 온건한 변형 — 정상 유휴 종료로도 pin이 풀린다"
    }
  ]
}
