Hi,
I have been exploring to use core.cache and core.memoize in our clojure
app and have found several issues. Those issues should have been directed
to Fogus but just in case anyone has clues.
core.cache (v0.6.0):
1) it appears the cache is "broken" once two entries with a same key with
different values are cache in a row
user> (-> (clojure.core.cache/lru-cache-factory {} :threshold 2)
(assoc :a 1)
(assoc :b 2)
(assoc :b 3)
(assoc :a 4))
{:a 4}
- expects {:a 4 :b 3}
(-> (clojure.core.cache/lru-cache-factory {} :threshold 3)
(assoc :a 1)
(assoc :b 2)
(assoc :b 3)
(assoc :c 4)
(assoc :d 5)
(assoc :e 6))
{:e 6, :d 5}
- expects {:e 6, :d 5, :c 4}
2) I wonder why the miss fn needs eviction case even if the cache has not
reach the threshold limit, this appears to be the cause of the issue 1)
above
(defcache LRUCache [cache lru tick limit]
...
(miss [_ item result]
(let [tick+ (inc tick)]
(if-let [ks (keys lru)]
(let [k (apply min-key lru ks)]
(LRUCache. (-> cache (dissoc k) (assoc item result)) ;; eviction case
(-> lru (dissoc k) (assoc item tick+))
tick+
limit))
(LRUCache. (assoc cache item result) ;; no change case
(assoc lru item tick+)
tick+
limit
core.memoize: it does not work with core.cache with version above 0.5.0
Thanks,
siyu
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en