如何在Clojure中查看STM中的回滚次数?
答案 0 :(得分:17)
你不能......除非你愿意作弊:
(defmacro spy-dosync [& body]
`(let [retries# (atom -1)
result# (dosync
(swap! retries# inc)
~@body)]
(println "retries count:" @retries#)
result#))
然后用spy-dosync替换你的dosync。
答案 1 :(得分:5)
如果你感觉活泼,你可以破解Clojure源并重建(重建Clojure源easy)。事务重试发生在run()方法中的src / jvm / clojure / lang / LockingTransaction.java中。那里有一个很大的for循环,直到完成或RETRY_LIMIT。循环退出时i的值应为重试计数。
答案 2 :(得分:2)
Chris Houser写的STM-stress test可能很有用