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.mdStatus: 🟢 Backup siap & TERBUKTI DAPAT DIPULIHKAN. BATCH B belum dijalankan. ⚠️ Berkas ini adalah satu-satunya jalan pulang untuk langkah B4 (migrasi OpenMetadata bersifat satu arah — lihatdocs/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 |
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
- Catat penyebab kegagalan di berkas ini (bagian bawah) atau di
reviews/sicabe-18…. - Jangan jalankan B4 lagi sebelum penyebabnya dipahami.
- 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 |