Files
sicabe-core/deploy/output/b3r-hasil-uji.md
T

73 lines
3.9 KiB
Markdown
Raw Normal View History

2026-10-09 02:35:14 +07:00
# Hasil B3 ULANG — Go/No-Go BATCH B pada Image Python 3.11 (review R18)
> **Tanggal**: 2026-10-01 · **Image diuji**: `sicabe/airflow:3.3.2-om203` (ID `a02620e1d0a8`)
> — hasil **B2 revisi** (base Python 3.11), menggantikan image py3.13 yang ditolak.
> **Metode**: sama dengan B3 pertama — stack eksperimen terisolasi + config & DAG produksi
> read-only + container sekali pakai untuk koneksi/dbt. ⚠️ Produksi tidak tersentuh.
---
## 1. VERDICT: 🟢 **GO**
BATCH B boleh dilanjutkan ke B4. Penyebab no-go sebelumnya (dbt mati di Python 3.13)
**teratasi** dengan kembali ke Python 3.11.
---
## 2. Hasil lengkap
| # | Uji | Hasil |
|---|---|---|
| 1 | `airflow version` | ✅ **3.3.2** |
| 2 | **`dbt debug`** | ✅ **"Connection test: OK connection ok" + "All checks passed!"** |
| 3 | **`dbt compile --select orders_silver`** | ✅ compiles (SQL model terbentuk) |
| 4 | DAG produksi `dag_sitomat_gold_build.py` | ✅ impor bersih |
| 5 | DAG produksi `dag_sitomat_gold_build_prod.py` | ✅ impor bersih |
| 6 | DAG `sicabe_dq_gold_native.py` | ✅ dimuat sampai tahap *generate workflow*; gagal hanya karena `openmetadata-server` tidak ter-resolve dari container uji (bukan masalah versi) |
| 7 | `airflow dags list-import-errors` | ✅ kosong |
| 8 | Plugin OM `/pluginsv2/api/v2/openmetadata/health-auth` | ✅ **HTTP 200** |
| 9 | Plugin OM `/pluginsv2/` | ✅ **HTTP 200** |
| 10 | Trino (`TrinoHook`) | ✅ `SELECT 1` → `[[1]]`; bronze: `orders`, `orders_incremental` |
| 11 | MinIO (`S3Hook`) | ✅ bucket `['iceberg-data']`, `check_for_bucket` True |
| 12 | MySQL klien eksternal (`MySqlHook`) | ✅ `('8.0.40', 'asdp')`; tabel `passenger_productions`, `trx_booking` |
| 13 | OPA (aturan bronze `data-engineer`) | ✅ utuh (`bronze_orders`: ddl/select/write) |
Verifikasi dari **build** (step #18–#24): 5 klien DB, `mysqlclient` C termuat +
`libmariadb.so.3`, provider mysql, `dbt + great_expectations`, `flask_appbuilder` +
**plugin OM dapat dimuat** (`RestApiPlugin`), `pip check` bersih.
---
## 3. Ringkasan perjalanan B2 (tiga percobaan)
| Percobaan | Masalah | Penyelesaian |
|---|---|---|
| **1** | Build memakai Python 3.13 → **dbt mati** (mashumaro/Annotated) | Diputuskan pindah ke Python 3.11 (lihat `b3-hasil-uji.md`) |
| **2** | Build py3.11: pip install 62 menit (jaringan PyPI ~60–80 kB/s) lalu gagal di **penjaga regresi yang saya tulis** | Penjaga dipanggil dengan 1 argumen → `TypeError: Annotated[...] should be used with at least two arguments`. Diperbaiki menjadi `te.Annotated[int, 'meta']`. ⚠️ Galat itu justru membuktikan jalur Annotated **ada** di py3.11 |
| **3** | — | ✅ **BERHASIL** (langkah pip ter-cache → selesai cepat) |
Catatan operasional: build percobaan 1 sempat **dibatalkan** karena client `docker build`
ikut mati saat shell pengawas dihentikan (`nohup` tidak cukup — perlu `setsid`).
---
## 4. Konsekuensi & langkah berikutnya
- **Image target BATCH B**: `sicabe/airflow:3.3.2-om203` (ID `a02620e1d0a8`, 3.2 GB).
- Image py3.13 (`3.3.2-om203-py313`) **tidak dipakai** — disimpan sebagai bukti no-go.
- `Dockerfile.332` + `requirements.332.in/.lock` sudah final untuk py3.11; lock hanya
**44 baris** berbeda dari produksi.
- Berikutnya: **B4** — naikkan `AIRFLOW_IMAGE` + `OPENMETADATA_VERSION` di
`environment.defaults.sh` lalu `docker compose up -d`.
- Bukti rollback: `deploy/output/merge-airflow332-rollback.md` (dump sudah diuji pulih).
---
## 5. Kesalahan uji saya pada B3r (agar tidak terulang)
| # | Kesalahan | Akibat |
|---|---|---|
| 1 | Penjaga regresi `Annotated.__class_getitem__((int,))` — argumen kurang satu | **Positif palsu**: build gagal padahal sehat |
| 2 | Uji MinIO hanya meng-`source deploy/.env`, tanpa `environment.defaults.sh` | `MINIO_ROOT_USER` kosong → `NoCredentialsError` (bukan masalah image) |
| 3 | `pgrep -f` mencocokkan perintah saya sendiri | PID yang dilaporkan tidak sahih saat memantau build |