Skip to content

Commit cb2d510

Browse files
sundbryvedang
authored andcommitted
Implement delete-q! function to delete a single queue
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
1 parent 00922a3 commit cb2d510

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/durable_queue.clj

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,8 @@
433433
(^:private mark-retry! [_ q-name])
434434
(delete! [_]
435435
"Deletes all files associated with the queues.")
436+
(delete-q! [_ q-name]
437+
"Deletes all files associated with a queue.")
436438
(stats [_]
437439
"Returns a map of queue names onto information about the immediate state of the queue.")
438440
(fsync [_]
@@ -496,9 +498,7 @@
496498

497499
(.mkdirs (io/file directory))
498500

499-
(let [
500-
501-
queue (memoize (fn [_] (LinkedBlockingQueue. (int max-queue-size))))
501+
(let [queue (memoize (fn [_] (LinkedBlockingQueue. (int max-queue-size))))
502502
queue-name->files (directory->queue-name->slab-files directory)
503503

504504
;; core state stores
@@ -631,6 +631,16 @@
631631
(unmap s)
632632
(delete-slab s)))
633633

634+
(delete-q! [this q-name]
635+
(let [q-name (munge (name q-name))]
636+
(doseq [s (get @queue-name->slabs q-name)]
637+
(unmap s)
638+
(delete-slab s))
639+
(.clear (queue q-name))
640+
(swap! queue-name->stats assoc q-name nil)
641+
(swap! queue-name->slabs assoc q-name nil)
642+
(swap! queue-name->current-slab assoc q-name nil)))
643+
634644
(fsync [_]
635645
(doseq [slab (->> @queue-name->slabs vals (apply concat))]
636646
(sync! slab)))

0 commit comments

Comments
 (0)