Carbonio Chats Tidak Bisa Buat Room? Ini yang Terjadi di Baliknya

Semua service terlihat active running. PostgreSQL hidup. Tidak ada tanda-tanda masalah dari luar.

Tapi setiap kali user mencoba membuka atau membuat chat room baru di Carbonio, yang muncul adalah error. Fitur Chats tidak bisa digunakan sama sekali.

Ini cerita tentang RDBMS pool yang diam-diam tidak pernah terkoneksi ke database, meskipun semua service di atasnya tampak berjalan normal.

Error yang Muncul

Ada dua lapisan error yang perlu dilihat. Dari sisi carbonio-ws-collaboration:

MongooseIm GraphQL error on GraphQL mutation:
[{"path":["muc_light","createRoom"],"message":"Unexpected MUCLightAdminMutation resolver crash","extensions":{"code":"resolver_crash"}}]

Dan dari sisi carbonio-message-dispatcher yang lebih jelas menunjukkan akar masalahnya:

reason={error,{pool_not_started,{rdbms,global,default}}}
sql_execute_failed
graphql_crash
field=createRoom

Kalimat pool_not_started itulah yang jadi petunjuk utama. Bukan query-nya yang salah. Bukan tabel-nya yang hilang. Tapi pool koneksi ke database belum pernah berhasil terbentuk sejak service start.

Investigasi: Semua Terlihat Baik-Baik Saja

Saya cek satu per satu service yang terlibat:

carbonio-message-dispatcher.service          → active running
carbonio-message-dispatcher-db-sidecar.service → active running
carbonio-ws-collaboration.service            → active running
service-discover.service                     → active running
postgresql@16-main.service                   → active running

Semuanya hijau. Tidak ada yang mati.

Langkah selanjutnya, saya cek apakah database dan tabelnya memang tersedia:

sudo -u postgres psql -lqt | awk '{print $1}' | egrep -i 'message|dispatcher|mongoose|chat|carbonio|wsc'

Database carbonio-message-dispatcher-db dan carbonio-ws-collaboration-db ada. Lalu cek tabelnya:

sudo -u postgres psql -d carbonio-message-dispatcher-db -c "dt"

Tabel muc_light_rooms, pin_message, dan rosterusers semua ada. Schema beres. Migration sudah jalan.

Jadi database-nya ada, tabelnya ada, service-nya jalan. Masalahnya di mana?

Ketemu: Pool Koneksi yang Tidak Pernah Terbentuk

Saya cek koneksi aktif ke database dari PostgreSQL side:

sudo -u postgres psql -d carbonio-message-dispatcher-db -c "SELECT datname, usename, application_name, client_addr, state FROM pg_stat_activity WHERE datname='carbonio-message-dispatcher-db';"

Hasilnya hanya terlihat satu koneksi, dari psql saya sendiri. Tidak ada koneksi dari aplikasi carbonio-message-dispatcher.

Di sinilah masalahnya. MongooseIM di dalam Message Dispatcher seharusnya membuka connection pool ke PostgreSQL saat pertama kali start. Tapi pool itu tidak pernah berhasil dibentuk karena ada race condition atau timing issue saat service pertama kali dinyalakan, entah karena database belum sepenuhnya siap, atau service discovery belum memberikan sinyal yang tepat.

Akibatnya semua query yang dijalankan MongooseIM gagal dengan pool_not_started, dan user yang mencoba membuat room mendapat error.

Workaround

Solusinya langsung: restart service terkait supaya MongooseIM melakukan reconnect dan membentuk pool baru:

systemctl restart carbonio-message-dispatcher-db-sidecar
systemctl restart carbonio-message-dispatcher-auth
systemctl restart carbonio-message-dispatcher
systemctl restart carbonio-ws-collaboration

Kalau setelah restart masih belum normal, coba restart dari dependency yang lebih dalam:

systemctl restart postgresql@16-main
systemctl restart service-discover
systemctl restart carbonio-message-dispatcher-db-sidecar
systemctl restart carbonio-message-dispatcher-auth
systemctl restart carbonio-message-dispatcher
systemctl restart carbonio-ws-collaboration

Verifikasi Setelah Workaround

Pertama, pastikan connection pool sudah terbentuk. Jalankan query yang sama tadi:

sudo -u postgres psql -d carbonio-message-dispatcher-db -c "SELECT datname, usename, application_name, client_addr, state FROM pg_stat_activity WHERE datname='carbonio-message-dispatcher-db';"

Kalau berhasil, sekarang koneksi dari aplikasi sudah muncul dengan status idle. Itu normal, artinya pool aktif dan standby menunggu query.

Kedua, pastikan error tidak muncul lagi di log:

journalctl -u carbonio-message-dispatcher --since "10 minutes ago" --no-pager | egrep -i 'pool_not_started|sql_execute_failed|graphql_crash|createRoom|error'

Kalau tidak ada output dari perintah di atas, berarti pool sudah berjalan bersih.

Terakhir, test dari sisi user. Logout dari webmail, clear cache atau pakai incognito, login ulang, lalu coba buat room baru. Kalau berhasil, selesai.

Satu Catatan Tambahan

Kalau setelah restart user masih mendapat error:

reason="Not allowed to enter the room."
can_access_room=false

Itu bukan berarti masalahnya kembali. Kemungkinan client masih mencoba membuka placeholder room lama yang terbentuk saat pool belum aktif. Solusinya cukup logout, clear cache, dan buat room baru dari awal.

Intinya

Issue ini bukan soal database yang rusak atau schema yang salah. Semua data ada dan schema benar. Masalahnya hanya pada connection pool MongooseIM yang tidak berhasil terbentuk saat service pertama kali start.

Kalau Carbonio Chats tiba-tiba tidak bisa membuat room padahal semua service terlihat jalan, jangan langsung reinstall atau cek schema. Cek dulu apakah koneksi dari aplikasi ke database benar-benar ada. Kadang yang perlu dilakukan hanya restart yang tepat di urutan yang benar.

Leave a Reply

Your email address will not be published. Required fields are marked *