Latihan 1 dari materi Connection Pooling di Database — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi class ConnectionPool yang meniru connection pool: koneksi dipinjam dengan acquire() dan dikembalikan dengan release().
constructor(maxSize): simpan maxSize, mulai active dari 0, dan siapkan antrean untuk request yang menunggu (array queue = [] atau angka queued = 0, bebas).
acquire(): kalau active < maxSize, naikkan active lalu kembalikan "ok". Kalau sudah penuh, tambahkan satu ke antrean lalu kembalikan "queued". activegak naik untuk request yang antre.
release(): turunkan active. Kalau ada yang antre, keluarkan satu dari antrean dan naikkan active lagi (request yang antre langsung dapat koneksi).
stats(): kembalikan object { active, queued }, dengan queued = jumlah yang sedang antre.
Baris const pool = new ConnectionPool(2); dan tujuh console.log di kode awal sudah ada, biarkan. Output yang dicek, berurutan:
ok
ok
queued
2
1
2
0
Satu cek lagi memakai new ConnectionPool(3): empat kali acquire() harus menghasilkan "ok", "ok", "ok", "queued", lalu setelah satu release(), stats().active bernilai 3 dan stats().queued bernilai 0.
Hint
Pool punya dua angka: active (koneksi yang sedang dipinjam) dan jumlah yang antre. acquire cuma menaikkan active kalau masih ada tempat; kalau penuh, yang naik antreannya.
Di constructor tulis this.maxSize = maxSize, this.active = 0, this.queued = 0. Di acquire, if (this.active < this.maxSize) naikkan active dan return "ok"; selain itu naikkan queued dan return "queued". Di release, turunkan active, lalu kalau queued > 0, turunkan queued dan naikkan active.