                                               (second %)
                                               (first %)
                                               false
-                                              nil))))))))
-    true))
+                                              nil))))))))))
+
+(s/defn ^:always-validate refresh-sessions
+  [pool :- SessionPool
+   ids  :- [s/Str]]
+  (let [redis-conn (:redis-conn pool)]
+    (car/wcar redis-conn
+              (debug "Refreshing sessions...")
+              (car/watch session-set-key)
+              (doall
+                (pmap (partial refresh-session pool)
+                      (or ids (view-model-ids pool))))
+              (destroy-unmanaged-sessions! pool)))
+  true)

    (hset-all (session-capabilities-key id) capabilities)))

(s/defn ^:always-validate save-session-diff-to-redis
  [pool :- SessionPool
   id   :- s/Str
   session]
  "For any key present in the session arg, write that value to redis."
  (car/wcar (:redis-conn pool)
    (hset-all
      (session-key id)

          (destroy-session pool id)))))
  true)

(def ^:private unmanaged-session-lock {})

(s/defn ^:always-validate destroy-unmanaged-sessions!
  "Destroy any webdrivers on managed nodes without backing Redis records."
  [pool :- SessionPool]
  (locking unmanaged-session-lock
    (let [redis-conn (:redis-conn pool)
          node-pool (:node-pool pool)]
      (car/wcar redis-conn
        (debug "Destroying unmanaged sessions...")
        (car/watch session-set-key)

        (let [known-webdrivers (->> (view-models pool)
                                    (map :webdriver-id)
                                    (into #{}))]
