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:

  1. Branch main TERKUNCI. Tidak ada yang bisa push langsung ke main.
  2. Semua pekerjaan WAJIB dilakukan di feature branch terpisah.
  3. Semua kode WAJIB masuk ke main melalui Pull Request (PR).
  4. 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 main

Langkah 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, atau common.

Contoh untuk Grup “Bash” (QP):

# (dari branch 'main')
git checkout -b feat/query-processor/implement-nested-loop-join

Contoh untuk Grup SM:

# (dari branch 'main')
git checkout -b fix/storage-manager/serializer-off-by-one

Langkah 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 folder src/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-join

Langkah 5: Buat Pull Request (PR)

  1. Buka halaman GitHub repositori mDBMS-Apacy.

  2. Anda akan melihat banner kuning “Your branch is ready…“. Klik tombol “Compare & pull request”.

  3. Judul PR: Buat judul yang jelas, misal: feat(qp): Implement Nested Loop Join.

  4. Deskripsi: Jelaskan apa yang Anda kerjakan, apa yang perlu di-review, atau @mention teman satu tim jika perlu.

  5. 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 push lagi.

    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 push manual.

  • 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.

  1. Stop: Jangan langsung coding.

  2. Diskusi: Bicarakan usulan perubahan (misal: “Saya perlu menambah field baru di Row.java”) dengan PIC dari 5 grup.

  3. Branch: Buat branch feat/common/add-getter-to-row.

  4. PR: Buat PR.

  5. Review Wajib: PR ini akan secara otomatis me-request review dari SEMUA 5 TIM.

  6. Merge: PR TIDAK BISA di-merge sampai semua 5 PIC Tim setuju.