Skip to content

Commit

Permalink
Implement delete-q! function to delete a single queue
Browse files Browse the repository at this point in the history
This function lets the client delete an individual named queue. It is
useful for deleting corrupted queue files (such as that get created
when the disk fills up).

Closes: clj-commons#17
  • Loading branch information
sundbry authored and vedang committed May 2, 2023
1 parent 00922a3 commit cb2d510
Showing 1 changed file with 13 additions and 3 deletions.
16 changes: 13 additions & 3 deletions src/durable_queue.clj
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,8 @@
(^:private mark-retry! [_ q-name])
(delete! [_]
"Deletes all files associated with the queues.")
(delete-q! [_ q-name]
"Deletes all files associated with a queue.")
(stats [_]
"Returns a map of queue names onto information about the immediate state of the queue.")
(fsync [_]
Expand Down Expand Up @@ -496,9 +498,7 @@

(.mkdirs (io/file directory))

(let [

queue (memoize (fn [_] (LinkedBlockingQueue. (int max-queue-size))))
(let [queue (memoize (fn [_] (LinkedBlockingQueue. (int max-queue-size))))
queue-name->files (directory->queue-name->slab-files directory)

;; core state stores
Expand Down Expand Up @@ -631,6 +631,16 @@
(unmap s)
(delete-slab s)))

(delete-q! [this q-name]
(let [q-name (munge (name q-name))]
(doseq [s (get @queue-name->slabs q-name)]
(unmap s)
(delete-slab s))
(.clear (queue q-name))
(swap! queue-name->stats assoc q-name nil)
(swap! queue-name->slabs assoc q-name nil)
(swap! queue-name->current-slab assoc q-name nil)))

(fsync [_]
(doseq [slab (->> @queue-name->slabs vals (apply concat))]
(sync! slab)))
Expand Down

0 comments on commit cb2d510

Please sign in to comment.