Release Notes/2026.09.1.1

Rilis 2026.09.1.1

Catatan rilis dan panduan pembaruan versi 2026.09.1.1 untuk deployment on-premise AlurKerja. Rilis image tanpa perubahan skema baru, konfigurasi queue processor report-service, dan prasyarat migrasi 2026.08.4.2 & 2026.08.5.5.


Ringkasan

Rilis 2026.09.1.1 adalah pembaruan versi aplikasi yang tidak membawa perubahan skema database baru pada pipeline migrasi publik (public.sql). File migrasi rilis ini bersifat no-op (SELECT 1;) untuk menjaga kesinambungan riwayat rilis migration runner.

Meskipun tidak ada DDL baru di rilis 2026.09.1.1 itu sendiri, ada dua hal krusial yang wajib diperhatikan oleh operator infrastruktur:

  1. Konfigurasi Queue Processor pada report-service: Terdapat lima environment variable baru yang perlu disetel secara eksplisit agar pemrosesan antrean laporan berjalan optimal dan terprediksi.
  2. Prasyarat Migrasi 2026.08.4.2 dan 2026.08.5.5: Sebelum image 2026.09.1.1 dijalankan, database target wajib sudah menerapkan migrasi rilis 2026.08.4.2 dan 2026.08.5.5. Image baru membutuhkan kolom queue_jobs.asynq_* serta bpmn_personalizations.cancellable. Terdapat potensi bloker berupa data duplikat yang harus dibersihkan sebelum indeks unik dibuat.

Bagi deployment yang melompati rilis (misalnya dari 2026.08.4.1 langsung ke 2026.09.1.1), pastikan migrasi database 2026.08.4.2 dan 2026.08.5.5 dieksekusi terlebih dahulu sebelum menaikkan container/pod aplikasi.


Detail yang berubah

1. Konfigurasi report-service

Mulai rilis ini, pemrosesan antrean laporan pada report-service memerlukan penetapan variabel konfigurasi secara eksplisit. Tambahkan atau pastikan lima variabel berikut disetel pada ConfigMap (Kubernetes) atau .env (Docker Compose):

VariableNilai RekomendasiKeterangan
ENABLE_QUEUE_PROCESSORtrueMengaktifkan pemrosesan antrean di report-service.
ENBALE_QUEUE_PROCESSORtrueAlias salah eja (typo) bawaan kode hulu. Variabel ini tetap dibaca oleh service. Wajib disetel sama persis dengan ENABLE_QUEUE_PROCESSOR (jangan dikoreksi ejaannya).
QUEUE_POLLING_INTERVAL5sInterval pengecekan antrean (default kode: 30s, rekomendasi on-premise: 5s).
QUEUE_BATCH_SIZE200Jumlah maksimal job yang diambil dalam satu batch (default kode: 10, rekomendasi: 200).
QUEUE_WORKER_COUNT3Jumlah worker concurrent yang memproses antrean.

Untuk referensi arsitektur antrean berbasis Redis dan Asynq secara menyeluruh, baca dokumentasi Env Konsolidasi Antrean (asynq).


2. Skema Prasyarat (2026.08.4.2 & 2026.08.5.5)

Bila instalasi Anda belum menerapkan migrasi dari minggu-minggu sebelumnya, perubahan berikut harus sudah masuk ke database sebelum container image rilis 2026.09.1.1 dinyalakan:

Rilis 2026.08.4.2

  • Tabel baru:
    • report_schedule_runs: Riwayat eksekusi jadwal ekspor laporan (status, percobaan, link file, log error).
    • tenant_cancellation_policies: Pengaturan izin pembatalan task per tenant.
    • tenant_cancellation_policy_audits: Log audit perubahan kebijakan pembatalan task.
  • Kolom baru:
    • bpmn_personalizations.cancellable (boolean NOT NULL DEFAULT true): Menandai apakah task dalam proses dapat dibatalkan.
    • queue_jobs.available_at (timestamptz): Penanda waktu kapan job siap dieksekusi.

Rilis 2026.08.5.5

  • Kolom baru pada public.queue_jobs:
    • asynq_queue (text)
    • asynq_task_id (text)
    • relayed_at (timestamptz)
    • skip_reason (text)
  • Indeks baru:
    • idx_queue_jobs_pending_relay
    • idx_queue_jobs_relayed_at
    • queue_jobs_pending_task_reminder_unique (UNIQUE INDEX)

Perhatian Bloker Unik: Rilis 2026.08.5.5 menambahkan indeks unik:

CREATE UNIQUE INDEX queue_jobs_pending_task_reminder_unique
  ON public.queue_jobs (tenant_id, instance_id)
  WHERE status = 'pending' AND topic = 'task.active.reminder';

Bila di database Anda terdapat lebih dari satu baris pending dengan topic task.active.reminder untuk kombinasi (tenant_id, instance_id) yang sama, pembuatan indeks akan gagal dan transaksi migrasi dibatalkan. Data duplikat tersebut harus dibersihkan terlebih dahulu.


Langkah yang harus dilakukan

Prosedur update dilakukan dalam 4 tahap berurutan:

Tahap 1 — Pengecekan & Pembersihan Bloker Duplikat

Sebelum menjalankan migrasi database, periksa apakah ada duplikasi antrean pengingat task pada tabel public.queue_jobs.

1. Periksa duplikat:

SELECT tenant_id, instance_id, count(*) AS jumlah
FROM public.queue_jobs
WHERE status = 'pending' AND topic = 'task.active.reminder'
GROUP BY tenant_id, instance_id
HAVING count(*) > 1;
  • Jika kueri menghasilkan 0 baris: database bersih, langsung lanjut ke Tahap 2.
  • Jika kueri menghasilkan satu atau lebih baris: lakukan pembersihan dengan menyisakan satu entri terbaru (max(id)).

2. Bersihkan baris duplikat (jalankan dalam transaksi):

BEGIN;

-- Hapus duplikat antrean pengingat yang belum terproses
DELETE FROM public.queue_jobs q
WHERE q.status = 'pending' AND q.topic = 'task.active.reminder'
  AND q.id NOT IN (
    SELECT max(id)
    FROM public.queue_jobs
    WHERE status = 'pending' AND topic = 'task.active.reminder'
    GROUP BY tenant_id, instance_id
  );

COMMIT;

Baris yang dihapus hanyalah entri antrean pengingat yang menumpuk. Tindakan ini tidak menghapus data proses atau tugas pengguna itu sendiri.


Tahap 2 — Terapkan Migrasi Skema Prasyarat

Jika database Anda belum berada di posisi 2026.08.5.5, terapkan file migrasi secara berurutan.

Jalankan migrasi lewat client psql yang terhubung ke PostgreSQL cluster:

# Terapkan migrasi 2026.08.4.2
psql -v ON_ERROR_STOP=1 -h <DB_HOST> -U <DB_USER> -d <DB_NAME> \
     -f sql/migrations/2026.08.4.2/20260827090000_create_report_schedule_runs.up.sql
psql -v ON_ERROR_STOP=1 -h <DB_HOST> -U <DB_USER> -d <DB_NAME> \
     -f sql/migrations/2026.08.4.2/20260827090100_create_tenant_tables.up.sql
psql -v ON_ERROR_STOP=1 -h <DB_HOST> -U <DB_USER> -d <DB_NAME> \
     -f sql/migrations/2026.08.4.2/20260827090200_add_columns_to_bpmn_personalizations.up.sql
psql -v ON_ERROR_STOP=1 -h <DB_HOST> -U <DB_USER> -d <DB_NAME> \
     -f sql/migrations/2026.08.4.2/20260827090300_add_columns_to_queue_jobs.up.sql

# Terapkan migrasi 2026.08.5.5
psql -v ON_ERROR_STOP=1 -h <DB_HOST> -U <DB_USER> -d <DB_NAME> \
     -f sql/migrations/2026.08.5.5/20260902090000_add_columns_to_queue_jobs.up.sql

# Terapkan catatan 2026.09.1.1 (no-op)
psql -v ON_ERROR_STOP=1 -h <DB_HOST> -U <DB_USER> -d <DB_NAME> \
     -f sql/migrations/2026.09.1.1/20260903090000_tanpa_perubahan_skema.up.sql

Jalankan migrasi menggunakan container tools atau psql lokal:

docker compose exec alpine-tools psql -h postgres -U postgres -d alur_onprem \
  -f /migrations/public/2026.08.4.2/20260827090200_add_columns_to_bpmn_personalizations.up.sql
docker compose exec alpine-tools psql -h postgres -U postgres -d alur_onprem \
  -f /migrations/public/2026.08.5.5/20260902090000_add_columns_to_queue_jobs.up.sql
docker compose exec alpine-tools psql -h postgres -U postgres -d alur_onprem \
  -f /migrations/public/2026.09.1.1/20260903090000_tanpa_perubahan_skema.up.sql

Verifikasi kolom baru sudah tercipta:

SELECT column_name, data_type 
FROM information_schema.columns 
WHERE table_name = 'queue_jobs' 
  AND column_name IN ('asynq_queue', 'asynq_task_id', 'relayed_at', 'available_at');

SELECT column_name, data_type 
FROM information_schema.columns 
WHERE table_name = 'bpmn_personalizations' 
  AND column_name = 'cancellable';

Semua kolom di atas harus terdaftar.


Tahap 3 — Perbarui Konfigurasi Environment

Perbarui konfigurasi pada deployment Anda untuk menyertakan lima environment variable report-service.

Tambahkan ke ConfigMap yang dipasang pada Deployment report-service:

data:
  ENABLE_QUEUE_PROCESSOR: "true"
  ENBALE_QUEUE_PROCESSOR: "true"
  QUEUE_POLLING_INTERVAL: "5s"
  QUEUE_BATCH_SIZE: "200"
  QUEUE_WORKER_COUNT: "3"

Terapkan ConfigMap:

kubectl apply -f configmap-report.yaml

Tambahkan baris berikut ke file .env di direktori deployment Anda:

# Queue Processor Configuration (report-service)
ENABLE_QUEUE_PROCESSOR=true
ENBALE_QUEUE_PROCESSOR=true
QUEUE_POLLING_INTERVAL=5s
QUEUE_BATCH_SIZE=200
QUEUE_WORKER_COUNT=3

Pastikan service onprem-report di docker-compose.yml membaca variabel tersebut melalui env_file: .env atau blok environment:.


Tahap 4 — Pull Image Baru & Restart Layanan

Tarik image rilis 2026.09.1.1 dari container registry dan lakukan rolling update.

Jika menggunakan tag :latest dengan imagePullPolicy: Always:

NS=alurkerja

# Restart bertahap atau per komponen
kubectl -n $NS rollout restart deploy/deployment-report-be
kubectl -n $NS rollout status deploy/deployment-report-be --timeout=300s

Atau lakukan restart menyeluruh sesuai prosedur Runbook Upgrade Kubernetes.

docker compose pull onprem-report
docker compose up -d onprem-report

Kalau gagal — rollback

Rollback Image

Jika pod/container versi 2026.09.1.1 mengalami kendala operasional (misalnya crash atau error startup):

  1. Kembalikan image tag/digest ke rilis sebelumnya (2026.08.4.1 atau 2026.08.5.5).
  2. Jalankan rollout restart pada deployment atau docker compose up -d.

Penanganan Skema Database

Database TIDAK PERLU di-rollback. Perubahan skema dari 2026.08.4.2 dan 2026.08.5.5 bersifat aditif (hanya menambahkan tabel, kolom, dan indeks baru). Image lama tetap kompatibel dan dapat berjalan dengan normal di atas skema baru ini. Kolom baru hanya akan diabaikan oleh aplikasi versi lama.

Rollback Konfigurasi Queue Processor

Jika queue processor pada report-service membebani database:

  1. Ubah ENABLE_QUEUE_PROCESSOR=false dan ENBALE_QUEUE_PROCESSOR=false.
  2. Terapkan ulang ConfigMap atau simpan file .env.
  3. Restart report-service.

Checklist ringkas

Pra-Migrasi & Database

  • Backup database PostgreSQL sudah dibuat (pg_dump).
  • Cek duplikat queue_jobs dengan topic task.active.reminder berstatus pending (HAVING count(*) > 1).
  • Duplikat berhasil dibersihkan jika ditemukan.
  • Migrasi DDL 2026.08.4.2 dan 2026.08.5.5 terpasang tanpa error.
  • Kolom queue_jobs.asynq_queue dan bpmn_personalizations.cancellable terverifikasi ada.

Konfigurasi Environment

  • ENABLE_QUEUE_PROCESSOR=true disetel.
  • ENBALE_QUEUE_PROCESSOR=true (alias typo) ikut disetel.
  • QUEUE_POLLING_INTERVAL, QUEUE_BATCH_SIZE, dan QUEUE_WORKER_COUNT sudah dikonfigurasi.

Deploy & Verifikasi

  • Image baru report-service berhasil ditarik (pull).
  • Service report-service berhasil di-restart dan status pod/container Ready / Running.
  • Log report-service bersih dari error fatal koneksi antrean.
  • Fitur ekspor laporan atau pengingat task berfungsi normal.