Production Cutover Readiness HA/MTDB

Dokumen ini adalah paket readiness setelah cutover gate pilot tenant DB hijau. Dokumen ini bukan approval production cutover dan tidak menjalankan perubahan production.

Kembali ke Knowledge Base ยท Buka Runbook HA/MTDB

Status production: production cutover tetap terkunci. Tenant master kliniktech tetap berada di shared DB apps.ion.net.id. Production cutover hanya boleh berjalan setelah approval eksplisit, window maintenance, rollback owner, dan monitoring owner ditetapkan.

1. Snapshot Pilot Readiness

ItemStatusCatatan
Tenant pilotdemo-kliniktechTenant ID 8, tipe subscriber/demo-pilot.
Tenant DBkt_tenant_pilot_db_onlyStatus metadata schema_migrated, meta pilot true.
Pilot healthok=trueFlag read tenant DB aktif, metadata ada, schema migrated, koneksi OK, demo flow complete.
Reconciliationseverity=okwarning_total=0, error_total=0, blocking_extra_key_total=0.
Write-plandeferred_total=0operation_total=9, ready_total=9; schema ticket_comments dan ticket_attachments tersedia.
Cutover gate pilotpilot_gate_green=trueblocks=[], environment_scope=pilot_only.
Production cutoverproduction_cutover_allowed=falseproduction_approval_status=required_not_granted.

2. Approval Checklist

Semua item berikut wajib terisi sebelum production cutover tenant non-master mana pun.

ApprovalWajib DiisiStatus
Tenant target productionSlug tenant non-master, bukan kliniktech.Belum diberikan.
Approver bisnisNama, role, waktu approve, dan scope tenant.Belum diberikan.
Approver teknisOwner backend/DB yang memegang go/no-go teknis.Belum diberikan.
Window maintenanceTanggal, jam mulai, durasi, zona waktu, dan rencana komunikasi user.Belum diberikan.
Rollback ownerNama operator yang berwenang menjalankan rollback.Belum diberikan.
Monitoring ownerNama operator yang memantau dashboard/log selama cutover.Belum diberikan.

3. Pre-cutover Evidence

  1. Ambil snapshot standar melalui Platform Admin tombol Readiness Snapshot, endpoint GET /api/platform/tenants/{tenant}/provisioning/tenant-db/readiness-snapshot, atau command read-only php artisan tenant-db:readiness demo-kliniktech.
  2. Catat evidence.fingerprint dan evidence.version dari snapshot sebagai ID bukti approval. Untuk CLI cepat, ambil fingerprint saja dengan php artisan tenant-db:readiness demo-kliniktech --fingerprint-only, status singkat dengan --status-only, summary dengan --summary-only, atau semua command helper dengan --commands-only; snapshot JSON juga menyediakan evidence.fingerprint_command, evidence.status_command, evidence.summary_command, dan evidence.commands_command.
  3. Verifikasi ulang fingerprint yang dicatat melalui tombol Verify Fingerprint di Platform Admin, endpoint GET /api/platform/tenants/{tenant}/provisioning/tenant-db/readiness-snapshot/verify?fingerprint={sha256}, command read-only php artisan tenant-db:readiness-verify demo-kliniktech {fingerprint}, atau evidence.verify_command sebelum approval production dibahas. Untuk status singkat, gunakan --status-only atau evidence.verify_status_command; untuk output summary, gunakan --summary-only atau evidence.verify_summary_command; untuk decision singkat, gunakan --decision-only atau evidence.decision_command; untuk instruksi operator singkat, gunakan --operator-action-only atau evidence.operator_action_command.
  4. Simpan output terbaru pilot-health, reconciliation, write-plan, dan cutover-gate untuk tenant target.
  5. Pastikan production_cutover_allowed=false sampai approval eksplisit tercatat.
  6. Pastikan backup shared DB dan tenant DB target tersedia dan terverifikasi.
  7. Pastikan queue worker, scheduler, web server, dan DB connection health dalam kondisi normal.
  8. Pastikan tidak ada migration schema pending yang belum diuji di pilot.
  9. Jika approval lengkap, catat approval dari Platform Admin tombol Approve Production atau command php artisan tenant-db:approve-production demo-kliniktech {fingerprint} --approver="..." --window="..." --rollback-owner="..." --monitoring-owner="..." --reason="...". UI wajib frasa APPROVE TENANT DB PRODUCTION.
  10. Cek Production Status dan simpan approval_id yang dikembalikan.
  11. Jalankan dry-run rollback dulu dari tombol Rollback Dry-run atau command php artisan tenant-db:rollback-production demo-kliniktech --approval-id={approval_id} --dry-run.
  12. Jalankan cutover hanya dengan tombol Cutover Production atau command guarded php artisan tenant-db:cutover-production demo-kliniktech {fingerprint} --approval-id={approval_id} --confirm-production-cutover. UI wajib frasa CUTOVER TENANT DB PRODUCTION.
  13. Rollback aktual wajib tombol Rollback Production dengan frasa ROLLBACK TENANT DB PRODUCTION atau command php artisan tenant-db:rollback-production demo-kliniktech --approval-id={approval_id} --confirm-rollback.

4. Interpretasi Verify Fingerprint

HasilArtiTindakan Operator
decision=evidence_verified_pilot_readyEvidence yang dicatat cocok dengan snapshot terbaru untuk pilot. Ini masih bukan approval production.Simpan hasil verify, lanjutkan review approval checklist. Jangan cutover production.
decision=evidence_mismatchEvidence yang dicatat tidak sama dengan readiness snapshot terbaru. Kondisi readiness sudah berubah atau fingerprint salah.Stop pembahasan approval, ambil snapshot baru, ulangi review dari awal.
decision=invalid_fingerprintFormat bukan SHA-256 hex 64 karakter, sehingga bukti tidak bisa diverifikasi.Minta fingerprint dari snapshot resmi, jangan memakai nilai manual yang tidak valid.
decision=evidence_matched_but_blockedFingerprint cocok, tetapi readiness masih blocked seperti pilot_gate_green=false atau ada write operation deferred.Selesaikan block terlebih dahulu, lalu ambil dan verifikasi snapshot baru.
decision=master_shared_db_not_applicableTenant master kliniktech tetap di shared DB dan bukan kandidat cutover tenant DB.No-go permanen untuk cutover tenant DB master. Gunakan tenant non-master untuk readiness.

5. Rollback Drill

Drill rollback wajib dibaca operator sebelum cutover. Jalankan hanya jika rollback benar-benar diperlukan atau dalam simulasi yang disetujui.
  1. Matikan flag granular tenant DB read/write untuk tenant target.
  2. Kembalikan routing modul ke shared DB.
  3. Revoke token pilot tenant DB jika masih ada.
  4. Hentikan dual-write mirror jika aktif dan catat correlation ID terakhir.
  5. Jalankan rollback dual-write atau rollback copy pilot sesuai job sumber bila scope rollback membutuhkannya.
  6. Verifikasi login, customers, invoices, tickets, dan portal kembali membaca shared DB.
  7. Catat waktu rollback, operator, alasan, dan hasil verifikasi.

6. Monitoring Plan

AreaIndikatorAmbang Stop/Rollback
Login/APIHTTP 5xx/401/403 spike, latency p95.Error meningkat beruntun lebih dari 5 menit.
CustomersList/detail/create/update pelanggan.Read/write gagal pada tenant target.
InvoicesList/detail/payment status/mark paid.Status invoice berbeda antara source dan target.
TicketsCreate/update/status/comment/attachment.Komentar/lampiran gagal tersimpan atau hilang dari detail.
Queue/SchedulerQueue failed jobs, scheduler lag.Failed jobs kritikal bertambah setelah cutover.
DatabaseTenant DB connection, slow query, deadlock.Koneksi tenant DB tidak stabil atau deadlock berulang.

7. Go/No-go

Go hanya untuk pilot: pilot gate saat ini hijau untuk demo-kliniktech. Production cutover masih No-go sampai approval dan window maintenance lengkap.
  1. Go production hanya jika approval bisnis dan teknis lengkap, evidence terbaru OK, backup verified, rollback owner siap, dan monitoring aktif.
  2. No-go production jika ada block gate, reconciliation warning/error, write-plan deferred, backup belum verified, atau owner rollback/monitoring belum jelas.
  3. Jika ragu, tetap No-go dan ulangi pilot verification.