Back to Link Terpusat Apacy
Panduan Alur Kerja Harian mDBMS Apacy
Dokumen ini adalah panduan wajib bagi setiap anggota Super Group Apacy. Karena kita bekerja di satu repositori (monorepo) yang public, kita menggunakan aturan ketat untuk melindungi branch main dan memastikan integrasi berjalan mulus.
Filosofi Inti:
- Branch
mainTERKUNCI. Tidak ada yang bisapushlangsung kemain. - Semua pekerjaan WAJIB dilakukan di feature branch terpisah.
- Semua kode WAJIB masuk ke
mainmelalui Pull Request (PR). - Setiap PR WAJIB di-review dan di-approve oleh pemilik kode (CODEOWNERS).
Diagram Dependensi
graph TD QP["Query Processor"] --> QO["Query Optimizer"]; QP --> SM["Storage Manager"]; QP --> CCM["Concurrency Control"]; QP --> FRM["Failure Recovery"]; QO --> COMMON["common"]; SM --> COMMON; QP --> COMMON; CCM --> COMMON; FRM --> COMMON; FRM --> SM;
DFD
graph TD USER["User (CLI)"] -- "(1) String Query" --> QP[Query Processor] subgraph "Alur Parsing & Optimasi" QP -- "(2) String Query" --> QO[Query Optimizer] QO -- "(3) ParsedQuery" --> QP QP -- "(4) Minta Statistik" --> SM[Storage Manager] SM -- "(5) Statistic" --> QP QP -- "(6) (ParsedQuery, Statistic)" --> QO QO -- "(7) Optimized ParsedQuery" --> QP end subgraph "Alur Transaksi & Eksekusi (Tulis)" QP -- "(8) beginTransaction()" --> CCM[Concurrency Control] CCM -- "(9) txId" --> QP QP -- "(10) logObject(Row)" --> CCM QP -- "(11) validateObject(WRITE)" --> CCM CCM -- "(12) Response(allowed=true)" --> QP QP -- "(13) DataWrite" --> SM SM -- "(14) Menulis Data" --> DATA[(Physical Data Store *.dat)] SM -- "(15) int affectedRows" --> QP QP -- "(16) endTransaction(commit=true)" --> CCM end subgraph "Alur Logging & Recovery" QP -- "(17) ExecutionResult (Sukses)" --> FRM[Failure Recovery] FRM -- "(18) Menulis Log" --> LOG[(Write-Ahead Log *.log)] QP -- "Gagal! -> 17b. recover(criteria)" --> FRM FRM -- "(18b) Membaca Log" --> LOG FRM -- "(19b) Perintah UNDO (DataWrite)" --> SM SM -- "(20b) Menulis Data Lama" --> DATA end QP -- "(19) ExecutionResult (Final)" --> USER
Alur Kerja Langkah-demi-Langkah
Ikuti 8 langkah ini setiap kali Anda memulai tugas baru.
Langkah 1: Sinkronisasi dengan main
Selalu pastikan kode lokal Anda paling update sebelum memulai pekerjaan baru.
# Pindah ke branch utama
git checkout main
# Tarik perubahan terbaru dari GitHub
git pull origin mainLangkah 2: Buat Branch Baru
Buat branch baru dari main untuk tugas Anda. Gunakan format penamaan yang telah disepakati: tipe/<komponen>/<deskripsi-fitur>.
-
Tipe:
feat(fitur baru),fix(perbaikan bug),docs(dokumentasi). -
Komponen:
query-processor,storage-manager,query-optimizer,concurrency-control-manager,failure-recovery-manager, ataucommon.
Contoh untuk Grup “Bash” (QP):
# (dari branch 'main')
git checkout -b feat/query-processor/implement-nested-loop-joinContoh untuk Grup SM:
# (dari branch 'main')
git checkout -b fix/storage-manager/serializer-off-by-oneLangkah 3: Bekerja (Coding, Commit, Test)
Kerjakan tugas Anda di branch ini.
-
Coding: Implementasikan fitur Anda (misal: mengisi
JoinStrategy.java). -
Testing: Jika Anda Grup QP, gunakan Mock Components di
src/test/java/untuk menguji logic Anda secara independen. Jika Anda grup lain, buat unit test di foldersrc/test/modul Anda. -
Commit: Buat commit secara berkala dengan pesan yang jelas.
git add . git commit -m "feat(qp): implement nested loop join logic"
Langkah 4: Push Branch Anda ke GitHub
Saat pekerjaan Anda siap untuk di-review (atau Anda ingin mem-backup pekerjaan Anda), push branch Anda ke repositori organisasi.
# -u akan mengatur 'origin' sebagai upstream untuk branch ini
git push -u origin feat/query-processor/implement-nested-loop-joinLangkah 5: Buat Pull Request (PR)
-
Buka halaman GitHub repositori
mDBMS-Apacy. -
Anda akan melihat banner kuning “Your branch is ready…“. Klik tombol “Compare & pull request”.
-
Judul PR: Buat judul yang jelas, misal:
feat(qp): Implement Nested Loop Join. -
Deskripsi: Jelaskan apa yang Anda kerjakan, apa yang perlu di-review, atau @mention teman satu tim jika perlu.
-
Klik “Create pull request”.
Langkah 6: Proses Review Otomatis (CODEOWNERS)
-
Saat PR dibuat, GitHub akan membaca file
.github/CODEOWNERS. -
Jika Anda mengubah file di
query-processor/, GitHub akan secara otomatis meminta review dari@apacy-mdbms/qp-Bash. -
Jika Anda mengubah file di
common/, GitHub akan secara otomatis meminta review dari SEMUA 5 TIM.
Langkah 7: Diskusi & Revisi (Jika Perlu)
-
Anggota tim Anda (yang di-tag oleh CODEOWNERS) akan me-review kode Anda.
-
Mereka mungkin akan meninggalkan komentar atau meminta perubahan.
-
Untuk melakukan revisi, tetap di branch yang sama. Buat commit baru dan
git pushlagi.Bash
# (Setelah memperbaiki kode) git commit -m "fix(qp): handle empty table in join" git push -
Pull Request Anda akan otomatis ter-update dengan commit baru.
Langkah 8: Merge (Penyelesaian)
-
Setelah PR Anda mendapatkan jumlah approval yang disyaratkan (minimal 1), tombol “Merge” akan berwarna hijau.
-
PIC Tim (atau siapa pun yang bertugas) akan me-merge PR Anda ke
main. -
PENTING: Selalu pilih “Squash and merge” (jika ada banyak commit revisi) atau “Create a merge commit”. JANGAN
pushmanual. -
Setelah di-merge, Anda bisa menghapus branch Anda (GitHub akan memberikan tombolnya).
-
Ulangi dari Langkah 1 untuk tugas berikutnya.
Skenario Khusus: Mengubah common/
Modul common/ adalah dasar kita. Mengubahnya berisiko merusak compile 4 grup lainnya.
-
Stop: Jangan langsung coding.
-
Diskusi: Bicarakan usulan perubahan (misal: “Saya perlu menambah field baru di
Row.java”) dengan PIC dari 5 grup. -
Branch: Buat branch
feat/common/add-getter-to-row. -
PR: Buat PR.
-
Review Wajib: PR ini akan secara otomatis me-request review dari SEMUA 5 TIM.
-
Merge: PR TIDAK BISA di-merge sampai semua 5 PIC Tim setuju.