3.9 KiB
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(IDa02620e1d0a8) — 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(IDa02620e1d0a8, 3.2 GB). - Image py3.13 (
3.3.2-om203-py313) tidak dipakai — disimpan sebagai bukti no-go. Dockerfile.332+requirements.332.in/.locksudah final untuk py3.11; lock hanya 44 baris berbeda dari produksi.- Berikutnya: B4 — naikkan
AIRFLOW_IMAGE+OPENMETADATA_VERSIONdienvironment.defaults.shlaludocker 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 |