on-expiry now also receives a "reason" parameter when called
This commit is contained in:
parent
01a7a379c6
commit
1384c52d75
|
@ -91,7 +91,7 @@
|
||||||
(get key)
|
(get key)
|
||||||
(get :value))
|
(get :value))
|
||||||
(when on-expiry
|
(when on-expiry
|
||||||
(on-expiry key (:value existing-entry))
|
(on-expiry key (:value existing-entry) :expired)
|
||||||
nil)))))
|
nil)))))
|
||||||
|
|
||||||
(write-session [_ key data]
|
(write-session [_ key data]
|
||||||
|
@ -107,7 +107,7 @@
|
||||||
expired? (entry-expired? ttl existing-entry)]
|
expired? (entry-expired? ttl existing-entry)]
|
||||||
(swap! session-atom process-write-entry key data refresh-on-write)
|
(swap! session-atom process-write-entry key data refresh-on-write)
|
||||||
(if expired?
|
(if expired?
|
||||||
(on-expiry key (:value existing-entry))))
|
(on-expiry key (:value existing-entry) :expired)))
|
||||||
; if there's no on-expiry listener, we can simply process the write
|
; if there's no on-expiry listener, we can simply process the write
|
||||||
(swap! session-atom process-write-entry key data refresh-on-write))
|
(swap! session-atom process-write-entry key data refresh-on-write))
|
||||||
key))
|
key))
|
||||||
|
@ -134,7 +134,9 @@
|
||||||
(when expired-keys
|
(when expired-keys
|
||||||
(future
|
(future
|
||||||
(doseq [expired-key expired-keys]
|
(doseq [expired-key expired-keys]
|
||||||
(on-expiry expired-key (-> old (get expired-key) :value))))))))
|
(on-expiry expired-key
|
||||||
|
(-> old (get expired-key) :value)
|
||||||
|
:expired)))))))
|
||||||
(Thread/sleep sweep-interval)
|
(Thread/sleep sweep-interval)
|
||||||
(recur)))
|
(recur)))
|
||||||
|
|
||||||
|
|
|
@ -238,7 +238,7 @@
|
||||||
|
|
||||||
(deftest expiry-listener-triggered-when-read-session-expires-entry
|
(deftest expiry-listener-triggered-when-read-session-expires-entry
|
||||||
(let [expired (atom nil)
|
(let [expired (atom nil)
|
||||||
as (aging-memory-store 1 {:on-expiry #(reset! expired [%1 %2])})]
|
as (aging-memory-store 1 {:on-expiry #(reset! expired [%1 %2 %3])})]
|
||||||
(testing "before ttl elapses"
|
(testing "before ttl elapses"
|
||||||
(write-session as "foo" {:foo 1})
|
(write-session as "foo" {:foo 1})
|
||||||
(is (= (read-session as "foo") {:foo 1}))
|
(is (= (read-session as "foo") {:foo 1}))
|
||||||
|
@ -247,11 +247,11 @@
|
||||||
(testing "after ttl has elapsed"
|
(testing "after ttl has elapsed"
|
||||||
(is (nil? @expired))
|
(is (nil? @expired))
|
||||||
(is (nil? (read-session as "foo")))
|
(is (nil? (read-session as "foo")))
|
||||||
(is (= ["foo" {:foo 1}] @expired)))))
|
(is (= ["foo" {:foo 1} :expired] @expired)))))
|
||||||
|
|
||||||
(deftest expiry-listener-not-triggered-for-other-read-sessions-even-with-an-expired-entry
|
(deftest expiry-listener-not-triggered-for-other-read-sessions-even-with-an-expired-entry
|
||||||
(let [expired (atom nil)
|
(let [expired (atom nil)
|
||||||
as (aging-memory-store 1 {:on-expiry #(reset! expired [%1 %2])})]
|
as (aging-memory-store 1 {:on-expiry #(reset! expired [%1 %2 %3])})]
|
||||||
(testing "before ttl elapses"
|
(testing "before ttl elapses"
|
||||||
(write-session as "foo" {:foo 1})
|
(write-session as "foo" {:foo 1})
|
||||||
(write-session as "bar" {:bar 1})
|
(write-session as "bar" {:bar 1})
|
||||||
|
@ -272,11 +272,11 @@
|
||||||
(is (nil? @expired))
|
(is (nil? @expired))
|
||||||
(is (nil? (read-session as "foo")))
|
(is (nil? (read-session as "foo")))
|
||||||
(is (= (read-session as "bar") {:bar 1}))
|
(is (= (read-session as "bar") {:bar 1}))
|
||||||
(is (= ["foo" {:foo 1}] @expired)))))
|
(is (= ["foo" {:foo 1} :expired] @expired)))))
|
||||||
|
|
||||||
(deftest expiry-listener-triggered-when-write-session-overwrites-expired-entry
|
(deftest expiry-listener-triggered-when-write-session-overwrites-expired-entry
|
||||||
(let [expired (atom nil)
|
(let [expired (atom nil)
|
||||||
as (aging-memory-store 1 {:on-expiry #(reset! expired [%1 %2])})]
|
as (aging-memory-store 1 {:on-expiry #(reset! expired [%1 %2 %3])})]
|
||||||
(testing "before ttl elapses"
|
(testing "before ttl elapses"
|
||||||
(write-session as "foo" {:foo 1})
|
(write-session as "foo" {:foo 1})
|
||||||
(is (= (read-session as "foo") {:foo 1}))
|
(is (= (read-session as "foo") {:foo 1}))
|
||||||
|
@ -286,13 +286,14 @@
|
||||||
(is (nil? @expired))
|
(is (nil? @expired))
|
||||||
(write-session as "foo" {:foo 2})
|
(write-session as "foo" {:foo 2})
|
||||||
(is (= (read-session as "foo") {:foo 2}))
|
(is (= (read-session as "foo") {:foo 2}))
|
||||||
(is (= ["foo" {:foo 1}] @expired)))))
|
(is (= ["foo" {:foo 1} :expired] @expired)))))
|
||||||
|
|
||||||
(deftest sweeper-thread-triggers-expiry-listeners-for-all-expired-entries
|
(deftest sweeper-thread-triggers-expiry-listeners-for-all-expired-entries
|
||||||
(let [expired (atom {})
|
(let [expired (atom {})
|
||||||
as (aging-memory-store 1 {:sweep-interval 1
|
as (aging-memory-store 1 {:sweep-interval 1
|
||||||
:on-expiry #(swap! expired assoc %1 {:timestamp (System/currentTimeMillis)
|
:on-expiry #(swap! expired assoc %1 {:timestamp (System/currentTimeMillis)
|
||||||
:value %2})})]
|
:value %2
|
||||||
|
:reason %3})})]
|
||||||
(testing "before ttl elapses or sweeper thread runs"
|
(testing "before ttl elapses or sweeper thread runs"
|
||||||
(write-session as "foo" {:foo 1})
|
(write-session as "foo" {:foo 1})
|
||||||
(write-session as "bar" {:bar 1})
|
(write-session as "bar" {:bar 1})
|
||||||
|
@ -309,6 +310,7 @@
|
||||||
(Thread/sleep 3000))
|
(Thread/sleep 3000))
|
||||||
(testing "after ttl elapses and sweeper thread has had enough time to run at least twice"
|
(testing "after ttl elapses and sweeper thread has had enough time to run at least twice"
|
||||||
(is (= 3 (count @expired)))
|
(is (= 3 (count @expired)))
|
||||||
|
(is (every? #(= :expired (:reason %)) (vals @expired)))
|
||||||
(let [foo-bar-time-diff (Math/abs (- (:timestamp (get @expired "foo"))
|
(let [foo-bar-time-diff (Math/abs (- (:timestamp (get @expired "foo"))
|
||||||
(:timestamp (get @expired "bar"))))
|
(:timestamp (get @expired "bar"))))
|
||||||
keep-time-diff (- (:timestamp (get @expired "keep"))
|
keep-time-diff (- (:timestamp (get @expired "keep"))
|
||||||
|
|
Loading…
Reference in a new issue