Files
sicabe-core/deploy/output/b3-hasil-uji.md
T
2026-10-09 02:35:14 +07:00

5.7 KiB

Hasil Uji B3 — Titik Go/No-Go BATCH B (review R18)

Tanggal: 2026-10-01 · Image diuji: sicabe/airflow:3.3.2-om203-py313 (ID 33990a6c2b88) Metode: stack eksperimen terisolasi (airflow332-exp, port 12184/12185) + config & DAG produksi di-mount read-only + uji koneksi/OPA/dbt dari container sekali pakai. ⚠️ Produksi tidak tersentuh sepanjang uji.


1. VERDICT: 🔴 NO-GO untuk Python 3.13

BATCH B tidak boleh dilanjutkan dengan base Python 3.13. Penyebab tunggal: dbt tidak berfungsi di Python 3.13 pada tumpukan dependensi kita — dan dbt adalah tulang punggung lapisan silver/gold.

Yang tetap sahih: seluruh hasil B3 lainnya, serta A1 (pin sqlalchemy<2.1), A2, dan B1. Yang perlu diulang: hanya B2 (build image) dengan base Python 3.11.


2. Yang LOLOS ✅

Uji Hasil
DAG produksi (4 berkas, dari volume produksi) ✅ dag_sitomat_gold_build.py, dag_sitomat_gold_build_prod.py impor bersih. sicabe_dq_gold_native.py berhasil dimuat sampai tahap generate workflow (gagal hanya karena openmetadata-server tidak ter-resolve dari container uji saya — bukan masalah versi)
Plugin OpenMetadata ✅ /pluginsv2/api/v2/openmetadata/health-auth → 200; /pluginsv2/ → 200
Trino ✅ SELECT 1 → [[1]]; SHOW TABLES FROM iceberg.bronze → orders, orders_incremental
MinIO ✅ bucket ['iceberg-data'] via S3Hook
MySQL (klien eksternal) ✅ ('8.0.40', 'asdp') via MySQLdb/MySqlHook
PostgreSQL ✅ Postgres 15.18 via PostgresHook
OPA ✅ aturan bronze utuh (bronze_orders: ddl/select/write) + keputusan INSERT bronze = true
Metadata DB / migrasi ✅ airflow db migrate bersih; OM 2.0.3 (API {"version":"2.0.3"})

3. Yang GAGAL 🔴 — dbt

3.1 Gejala

$ dbt debug --profile trino --target prod
AttributeError: __class_getitem__
  mashumaro/core/meta/helpers.py:624 → typing_extensions.Annotated.__class_getitem__
  /usr/python/lib/python3.13/typing.py:548

dbt compile gagal dengan galat yang sama.

⚠️ dbt --version justru berhasil — sehingga pemeriksaan dangkal (import dbt, dbt --version) tidak menangkap kerusakan ini.

3.2 Akar masalah & tiga versi yang diuji

mashumaro dbt (debug/compile) pip check
3.10 (maksimum yang diizinkan collate-data-diff <3.11) ❌ GAGAL ✅ bersih ← rusak, tapi terlihat sehat
3.17 ✅ debug OK ("All checks passed!") + compile OK (SQL orders_silver ter-compile) ⚠️ melanggar dbt-core <3.15 dan collate-data-diff <3.11
3.23 ✅ berhasil ⚠️ melanggar keduanya

3.3 Kesimpulan teknis

Tidak ada versi mashumaro yang sekaligus (a) memenuhi batas dependensi kita dan (b) berfungsi di Python 3.13. Yang mengikat ketat adalah collate-data-diff (dipakai jalur lineage dbt OpenMetadata) yang menuntut <3.11.0, sedangkan perbaikan kompatibilitas 3.13 berada di versi ≥ ~3.11.

➡️ Jadi masalahnya bukan pilihan paket, melainkan kombinasi Python 3.13 + tumpukan ini.

3.4 Pelajaran metodologis (penting)

pip check bersih pada konfigurasi yang tidak berfungsi. Artinya:

Batas dependensi yang dideklarasikan ≠ kebenaran fungsional.

Uji kelayakan untuk tumpukan ini wajib menjalankan perintah nyata (mis. dbt debug, dbt compile), bukan hanya mengimpor modul atau membaca --version.


4. Koreksi atas rekomendasi K1

Rekomendasi awal saya (K1 = Python 3.13) dinilai salah dan dicabut. Dasarnya waktu itu adalah "artefak eksperimen sudah tervalidasi end-to-end" — padahal validasi itu tidak lengkap: eksperimen memeriksa import dbt dan dbt --version, tetapi tidak pernah menjalankan dbt sungguhan. B3 — yang memang dirancang sebagai gerbang — yang menemukannya.

K1 direvisi menjadi Python 3.11, dengan alasan:

  • tujuan BATCH B adalah Airflow 3.3.2 + OM 2.0.3 + provider MySQL, bukan Python 3.13;
  • openmetadata-ingestion[airflow] 2.0.3.0 mem-pin apache-airflow==3.3.2 terlepas dari Python → 3.3.2 di Python 3.11 tetap koheren;
  • Python 3.11 mempertahankan seluruh dependensi lain di set yang sudah terbukti di produksi → risiko jauh lebih rendah.

5. Langkah berikutnya (B2 revisi)

Sub Isi
B2r.1 Dockerfile.332 → base slim-3.3.2-python3.11 (stage builder mysqlclient disesuaikan dengan kondisi header Python 3.11 pada base itu)
B2r.2 Regenerasi lock 3.3.2/py3.11 dengan lock 3.3.1 sebagai --constraint (platform identik → diff minimal; teknik yang terbukti di A1)
B2r.3 Build ulang image (tag tetap sicabe/airflow:3.3.2-om203-py313, menimpa image yang no-go)
B3r Ulangi B3 dengan dbt debug + dbt compile sebagai syarat WAJIB (bukan opsional)

6. Catatan kesalahan uji saya (agar tidak terulang)

# Kesalahan Akibat
1 Memakai airflow dags list untuk menguji folder yang di-mount dags list membaca metadata DB, bukan folder → uji pertama tidak sah (diperbaiki dengan impor langsung tiap berkas DAG)
2 Menguji DAG dari container yang tidak berada di jaringan yang tepat openmetadata-server tidak ter-resolve → kegagalan palsu
3 Mount dbt read-only dbt perlu menulis logs/ → keluar exit 2 tanpa keluaran sama sekali (menyesatkan)
4 pip install "mashumaro>=3.9,<3.18" tanpa --upgrade pip tidak menaikkan (3.10 sudah memenuhi rentang) → uji sempat tidak konklusif
5 Salah mount point volume config OM kegagalan palsu pada DAG DQ
6 Pemeriksaan awal hanya import dbt / dbt --version kerusakan dbt lolos sampai B3