# Runbook Rollback — Integrasi OpenMetadata 2.0.2 ke `deploy/` **Dibuat**: 2026-09-16 · **Tugas**: `merge-om20x` (subtask 01) **Tag titik kembali**: `pre-merge-om20x` @ `5627353` Runbook ini adalah dokumen yang ditulis tangan (bukan keluaran uji otomatis), sengaja diletakkan di `deploy/output/` mengikuti penugasan subtask 01. Isinya harus tetap akurat selama integrasi berlangsung. --- ## 1. Kapan runbook ini dipakai Saat integrasi ke OpenMetadata 2.0.2 + OpenSearch 3.x + Airflow ber-plugin gagal dan kita memutuskan kembali ke kondisi 1.13.1 yang stabil (sebelumnya gate Fase 1-6 hijau, `test-verification.sh` = 60 PASS / 0 FAIL / 2 SKIP). ## 2. Kondisi baseline (terverifikasi sebelum perubahan apa pun) | Aspek | Nilai | |---|---| | git HEAD | `5627353` (tag `pre-merge-om20x`) | | OpenMetadata server | **1.13.1** (`openmetadata/server:1.13.1`) | | OpenSearch | **2.19.6** (`opensearchproject/opensearch:2.19.6`) | | Airflow image | **`sicabe/airflow:3.3.1-slim`** (id `15ae04b69228`), Airflow 3.3.1 | | Plugin OpenMetadata di Airflow | **TIDAK ADA** — `/api/v1/openmetadata/health` → 404 | | Data OM | database `openmetadata_db` di volume `sicabe_postgres-data` | | Data OpenSearch | **tidak di volume** — ada di layer container (index derived) | Catatan penting soal "plugin tidak ada": di Airflow deploy, `/pluginsv2/api/v2/openmetadata/health-auth` menjawab **200 tetapi `content-type: text/html`** (HTML aplikasi Airflow) — itu fallback UI, bukan respons plugin. Bukti plugin absen adalah `/api/v1/openmetadata/health` → **404**. Jangan tertipu angka 200 di path `/pluginsv2/`. ## 3. Cara memverifikasi kita benar-benar sudah kembali ke baseline ```bash cd /home/broto/sicabe-doc git rev-parse --short HEAD # harus 5627353 (atau turunannya yg setara) docker inspect sicabe-openmetadata --format '{{.Config.Image}}' # openmetadata/server:1.13.1 docker inspect sicabe-opensearch --format '{{.Config.Image}}' # opensearchproject/opensearch:2.19.6 docker inspect sicabe-airflow-webserver --format '{{.Config.Image}}' # sicabe/airflow:3.3.1-slim curl -s -o /dev/null -w '%{http_code}\n' -u "admin:$AIRFLOW_ADMIN_PASSWORD" \ http://localhost:12082/api/v1/openmetadata/health # harus 404 cd deploy && ./test-verification.sh # harus 60 PASS / 0 FAIL / 2 SKIP ``` ## 4. Langkah rollback ### 4.1 Kembalikan berkas konfigurasi ```bash cd /home/broto/sicabe-doc git checkout pre-merge-om20x -- deploy/ docs/ git status -s # tinjau: hanya berkas deploy/docs yang kembali ``` Jangan `git reset --hard` — commit hasil eksperimen (`f47945d`, `5627353`) dan `experiments/om20x/` tidak perlu ikut hilang. ### 4.2 Nyalakan ulang container lama ```bash cd deploy set -a && . ./.env && set +a docker compose --profile all up -d --force-recreate \ openmetadata-opensearch openmetadata-migrate openmetadata-server \ airflow-init airflow-webserver airflow-scheduler airflow-dag-processor ``` Image lama **tidak boleh dihapus**: `openmetadata/server:1.13.1`, `opensearchproject/opensearch:2.19.6`, `sicabe/airflow:3.3.1-slim`. OpenSearch akan membuat index baru dari nol saat container dibuat ulang (tidak ada volume; index memang derived dan OM akan mem-populasinya kembali). ### 4.3 Bila database OM sudah telanjur dikosongkan (subtask 12) Setelah `openmetadata_db` di-drop, **data katalog OM tidak bisa dipulihkan dari deploy** — tidak ada dump (keputusan sadar: jaring pengaman cukup tag git). Yang bisa dilakukan: membuat ulang database kosong lalu membiarkan OM 1.13.1 membangun skemanya, lalu mengisi ulang katalog dari sumber yang reproducible: ```bash # buat ulang database kosong (pola sama dgn deploy/config/postgres/init/01-create-dbs.sh) docker exec sicabe-postgres psql -U postgres -c "DROP DATABASE IF EXISTS openmetadata_db;" docker exec sicabe-postgres psql -U postgres -c "CREATE DATABASE openmetadata_db OWNER openmetadata;" cd deploy docker compose --profile all up -d --force-recreate openmetadata-migrate # migrate schema 1.13.1 docker compose --profile all up -d openmetadata-server ./scripts/ingest-openmetadata.sh # katalog Trino + lineage dbt # lalu jalankan DAG utk mengirim ulang hasil Great Expectations ``` ## 5. Yang bisa dan tidak bisa dipulihkan (jujur) | Bisa dipulihkan | Tidak bisa dipulihkan | |---|---| | Versi komponen (kembali 1.13.1 / 2.19.6 / image slim) | Isi katalog OM bila DB sudah di-drop (reproducible, bukan mustahil) | | Konfigurasi (`deploy/`, `docs/`) via tag git | Riwayat DQ (test case + hasil) — dibangun ulang oleh DAG | | Lineage dbt | Dashboard/artefak yang hanya ada di OM | Alasan ini dapat diterima: seluruh isi katalog berasal dari `scripts/ingest-openmetadata.sh` + DAG `sicabe_batch_daily`, jadi bisa dibangun ulang. ## 6. Titik tidak-balik (penting) | Setelah subtask | Kondisi | |---|---| | 05 (+07) | Airflow memakai image ber-plugin; rollback = kembalikan 4 baris `AIRFLOW_IMAGE` | | 10 | OpenSearch 3.x; index lama sudah hilang saat container dibuat ulang | | **12** | **`openmetadata_db` di-drop → satu-satunya titik yang kehilangan data** | | 13-15 | OM 2.0.2 jalan dgn password admin dari `.env` |