115 lines
5.7 KiB
Markdown
115 lines
5.7 KiB
Markdown
# 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 |
|