Files
sicabe-core/deploy/output/merge-airflow332-rollback.md
T
2026-10-09 02:35:14 +07:00

8.9 KiB

Rollback — Merge Eksperimen airflow332 ke deploy/ (BATCH B / review R18)

Dibuat: 2026-10-01 · Oleh: langkah B1 dari reviews/sicabe-18-merge-airflow332-plan.md Status: 🟢 Backup siap & TERBUKTI DAPAT DIPULIHKAN. BATCH B belum dijalankan. ⚠️ Berkas ini adalah satu-satunya jalan pulang untuk langkah B4 (migrasi OpenMetadata bersifat satu arah — lihat docs/sicabe-install-phases-detail.md §8.11.2).


1. Keadaan yang dibekukan (baseline sebelum BATCH B)

Item Nilai
Tanggal baseline 2026-10-01
Airflow 3.3.1 (sicabe/airflow:3.3.1-om202)
OpenMetadata 2.0.2 (openmetadata/server:2.0.2)
OpenSearch opensearchproject/opensearch:3.8.0
Gate test-verification.sh 60 PASS / 0 FAIL / 2 SKIP
Container produksi 20 (Airflow webserver/scheduler/dag-processor, OM, OpenSearch, dst)

2. Berkas backup

Lokasi: deploy/output/merge-airflow332-backup/ — gitignored (berisi data produksi).

Berkas Isi Ukuran MD5
openmetadata_db.dump dump openmetadata_db (format -Fc) 1.9 MB a8495339165cfbc286ea7e90490c12bb
airflow.dump dump airflow (format -Fc) 248 KB 4a834cc43307b296b58c250909749d2a
environment.defaults.sh.before-B salinan deploy/config/environment.defaults.sh 22 KB 2d341e008af43a7b

Ukuran DB saat baseline: openmetadata_db = 36 MB, airflow = 12 MB.


3. Bukti backup DAPAT DIPULIHKAN (dua kali diuji)

Uji Hasil
Restore openmetadata_db → DB coretan _restorecheck_om 204 tabel asli = 204 tabel hasil restore ✅
Restore airflow → DB coretan _restorecheck_af 5 DAG asli = 5 DAG hasil restore ✅
DB coretan setelah uji dihapus ✅ (produksi tidak tersentuh: 20 container, OM HTTP 200)

Perintah yang dipakai (nilai persis):

# contoh untuk openmetadata_db
docker exec -e PGPASSWORD=<dari deploy/.env> sicabe-postgres \
  psql -U sicabe_admin -d postgres -c "CREATE DATABASE _restorecheck_om OWNER openmetadata;"
docker cp deploy/output/merge-airflow332-backup/openmetadata_db.dump sicabe-postgres:/tmp/check.dump
docker exec -e PGPASSWORD=<…> sicabe-postgres \
  pg_restore -U sicabe_admin -d _restorecheck_om --no-owner --no-privileges /tmp/check.dump
docker exec -e PGPASSWORD=<…> sicabe-postgres \
  psql -U sicabe_admin -d postgres -c "DROP DATABASE _restorecheck_om;"

4. Digest image (untuk kembali ke versi lama)

Image Image ID (sha256, dipotong)
sicabe/airflow:3.3.1-om202 (produksi saat ini) afc0421a0490…
sicabe/airflow:3.3.1-om202-presqlalchemy (tag rollback A1) afc0421a0490… (identik — A1 tidak rebuild)
sicabe/airflow:3.3.2-om203 (target BATCH B — Python 3.11, hasil B2 revisi) a02620e1d0a8… (3.2 GB)
sicabe/airflow:3.3.2-om203-py313 — DITOLAK di B3 (dbt mati di Python 3.13) 33990a6c2b88… (tidak dipakai)
openmetadata/server:2.0.2 3b6f52aeb30f…
openmetadata/server:2.0.3 (target BATCH B) 5f4d52bca2d7…
opensearchproject/opensearch:3.8.0 fafe3fc35870…

5. PROSEDUR ROLLBACK

5.1 Kasus paling umum — B4/B5 gagal, skema OM masih sehat

Cukup kembalikan versi, tanpa menyentuh DB:

cd /home/broto/sicabe-doc/deploy

# (1) kembalikan versi ke baseline
#     AIRFLOW_IMAGE      -> sicabe/airflow:3.3.1-om202
#     OPENMETADATA_VERSION -> 2.0.2
#     (atau pulihkan berkas utuh: cp output/merge-airflow332-backup/environment.defaults.sh.before-B \
#                                        config/environment.defaults.sh)

# (2) jalankan ulang
docker compose up -d airflow-webserver airflow-scheduler airflow-dag-processor \
                      openmetadata-server openmetadata-migrate

# (3) verifikasi
./test-verification.sh        # harapan: 60 PASS / 0 FAIL / 2 SKIP

5.2 Kasus berat — migrasi OM 2.0.3 merusak skema

⚠️ Urutannya penting: OM produksi harus berhenti dulu sebelum restore, kalau tidak koneksi aktif akan mengganggu DROP/CREATE DATABASE.

cd /home/broto/sicabe-doc/deploy

# (1) HENTIKAN OpenMetadata (wajib, sebelum menyentuh DB-nya)
docker stop sicabe-openmetadata

# (2) pulihkan versi image di config (OPENMETADATA_VERSION=2.0.2)
cp output/merge-airflow332-backup/environment.defaults.sh.before-B config/environment.defaults.sh

# (3) restore openmetadata_db dari dump
docker exec -e PGPASSWORD=<dari deploy/.env> sicabe-postgres \
  psql -U sicabe_admin -d postgres -c "DROP DATABASE IF EXISTS openmetadata_db;"
docker exec -e PGPASSWORD=<…> sicabe-postgres \
  psql -U sicabe_admin -d postgres -c "CREATE DATABASE openmetadata_db OWNER openmetadata;"
docker cp output/merge-airflow332-backup/openmetadata_db.dump sicabe-postgres:/tmp/om.dump
docker exec -e PGPASSWORD=<…> sicabe-postgres \
  pg_restore -U sicabe_admin -d openmetadata_db --no-owner --no-privileges /tmp/om.dump

# (4) mulai ulang dengan image LAMA
docker compose up -d openmetadata-server

# (5) verifikasi
curl -s http://localhost:12085/api/v1/system/version   # harapan: {"version":"2.0.2",...}

5.3 Bila metadata Airflow perlu dipulihkan (mis. migrasi DB Airflow bermasalah)

docker stop sicabe-airflow-webserver sicabe-airflow-scheduler sicabe-airflow-dag-processor
docker exec -e PGPASSWORD=<…> sicabe-postgres psql -U sicabe_admin -d postgres \
  -c "DROP DATABASE IF EXISTS airflow;" -c "CREATE DATABASE airflow OWNER airflow;"
docker cp output/merge-airflow332-backup/airflow.dump sicabe-postgres:/tmp/af.dump
docker exec -e PGPASSWORD=<…> sicabe-postgres \
  pg_restore -U sicabe_admin -d airflow --no-owner --no-privileges /tmp/af.dump
docker compose up -d airflow-webserver airflow-scheduler airflow-dag-processor

5.4 Yang TIDAK perlu di-rollback

  • OpenSearch — indeksnya derived: OM membangun ulang isinya. Tidak ada dump khusus untuk itu, dan itu memang disengaja.
  • deploy-legacy/ — di luar lingkup (K6).
  • Image — tidak dihapus; dua versi hidup berdampingan, jadi rollback hanya soal menunjuk tag lama.

6. Setelah rollback

  1. Catat penyebab kegagalan di berkas ini (bagian bawah) atau di reviews/sicabe-18….
  2. Jangan jalankan B4 lagi sebelum penyebabnya dipahami.
  3. Indeks/tabel OM hasil migrasi yang tertinggal tidak dibiarkan: pastikan restore benar-benar menggantikan openmetadata_db (bukan menumpuk).

7. Catatan keamanan

⚠️ Berkas dump berisi data produksi (termasuk baris user_entity — hash kredensial, dan mungkin data pribadi). Perlakuan:

  • gitignored (deploy/output/merge-airflow332-backup/) — jangan pernah di-commit;
  • hapus setelah BATCH B dinyatakan stabil (dan simpan hanya bila memang diperlukan sebagai arsip, di lokasi terbatas akses).

Riwayat

Tanggal Kejadian
2026-10-01 B1 dijalankan: dump dibuat, diuji pulih (204=204 tabel; 5=5 DAG), digest & config dicatat, dokumen ini dibuat. BATCH B belum dimulai.
2026-10-01 B2 dijalankan: image sicabe/airflow:3.3.2-om203-py313 dibangun dari deploy/ (berdampingan — Dockerfile.332 + requirements.332.{in,lock}), ID 33990a6c2b88…. Seluruh verifikasi fatal lolos: 5 klien DB, mysqlclient benar-benar termuat, sqlalchemy 2.0.54 (pin A1), plugin OM dapat dimuat, pip check bersih. Produksi tetap 3.3.1-om202 — belum tersentuh.
2026-10-01 B3 (go/no-go) = NO-GO untuk Python 3.13: dbt debug/dbt compile gagal (mashumaro → Annotated.__class_getitem__). Tidak ada versi mashumaro yang memenuhi batas dependensi kita dan berfungsi di 3.13. Bukti: b3-hasil-uji.md
2026-10-01 B2 revisi: base dikembalikan ke Python 3.11; lock di-resolve ulang dengan lock 3.3.1 sebagai constraint tersaring (^apache-airflow, ^openmetadata-, ^collate- dibuang) → hanya 44 baris berbeda dari produksi. Image baru: sicabe/airflow:3.3.2-om203 ID a02620e1d0a8… (3.2 GB)
2026-10-01 B3 ULANG = GO 🟢: dbt debug "All checks passed", dbt compile OK, DAG produksi impor bersih, plugin /pluginsv2/ 200, Trino/MinIO/MySQL OK, OPA utuh. Bukti: b3r-hasil-uji.md. Produksi tetap 3.3.1-om202 — siap untuk B4
2026-10-02 B4 dijalankan (produksi naik): migrasi OM 2.0.3 exit 0; airflow-init (DB migrate 3.3.2) exit 0; OM server + 3 service Airflow di-recreate ke versi baru — semuanya healthy. Image: sicabe/airflow:3.3.2-om203, openmetadata/server:2.0.3
2026-10-02 B5 verifikasi = LOLOS ✅: airflow version 3.3.2; OM API 2.0.3; plugin /pluginsv2/…health-auth 200; 0 error impor DAG; MySQLdb + provider mysql tersedia di produksi; GATE 60 PASS / 0 FAIL / 2 SKIP (identik baseline). B6 (rollback) tidak diperlukan.
— ⚠️ Dump DISIMPAN sampai dinyatakan stabil. Bila beberapa hari produksi berjalan normal: hapus deploy/output/merge-airflow332-backup/ (§7) — atau arsipkan di lokasi terbatas akses