tweaks to session entry expiry checks/handling

some performance improvements here ...
This commit is contained in:
Gered 2022-01-02 17:01:21 -05:00
parent 38c6a37d59
commit eb2810652e

View file

@ -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))