tweaks to session entry expiry checks/handling
some performance improvements here ...
This commit is contained in:
parent
38c6a37d59
commit
eb2810652e
|
@ -24,24 +24,27 @@
|
||||||
(assoc-in session-map [key :value] data)
|
(assoc-in session-map [key :value] data)
|
||||||
(assoc session-map key (new-entry data))))
|
(assoc session-map key (new-entry data))))
|
||||||
|
|
||||||
(defn- update-entry
|
(defn- entry-expired?
|
||||||
"Update a session entry based on the configured session entry ttl."
|
"Returns true if the given session entry has expired according to its current timestamp and the session store's
|
||||||
[ttl now [k {:keys [timestamp] :as v}]]
|
configured ttl"
|
||||||
(if v
|
[ttl now v]
|
||||||
(if-not (> (- now timestamp) ttl)
|
(and v
|
||||||
[k v])))
|
(> (- now (:timestamp v))
|
||||||
|
ttl)))
|
||||||
|
|
||||||
(defn- sweep-session
|
(defn- sweep-session
|
||||||
"Sweep the session and run all session functions."
|
"Sweep the session and run all session functions."
|
||||||
[session-map now ttl]
|
[session-map now ttl]
|
||||||
(into {} (keep #(update-entry ttl now %) session-map)))
|
(->> session-map
|
||||||
|
(remove #(entry-expired? ttl now (val %)))
|
||||||
|
(into {})))
|
||||||
|
|
||||||
(defn- sweep-entry
|
(defn- sweep-entry
|
||||||
"Sweep a single entry."
|
"Sweep a single entry."
|
||||||
[session-map now ttl key]
|
[session-map now ttl key]
|
||||||
(if-let [existing-entry (get session-map key)]
|
(if-let [existing-entry (get session-map key)]
|
||||||
(if-let [[_ entry] (update-entry ttl now [key existing-entry])]
|
(if-not (entry-expired? ttl now existing-entry)
|
||||||
(assoc session-map key entry)
|
(assoc session-map key existing-entry)
|
||||||
(dissoc session-map key))
|
(dissoc session-map key))
|
||||||
session-map))
|
session-map))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue