Come posso vedere il numero di rollback nel mio STM in Clojure?
Domanda
Come posso vedere il numero di rollback nel mio STM in Clojure?
Soluzione
Non è possibile ... a meno che non si è disposti a barare:
(defmacro spy-dosync [& body]
`(let [retries# (atom -1)
result# (dosync
(swap! retries# inc)
~@body)]
(println "retries count:" @retries#)
result#))
e quindi sostituire il vostro dosync da una spia-dosync.
Altri suggerimenti
Se ti senti frisky, si potrebbe incidere la fonte Clojure e ricostruire (è facile per ricostruire la fonte Clojure). tentativi di transazione avvengono in src / JVM / clojure / lang / LockingTransaction.java nel metodo run (). C'è un grande ciclo for lì che va fino a quando fatto o RETRY_LIMIT. Il valore dei quando il ciclo termina dovrebbe essere il numero di tentativi.
C'è STM stress prova scritto da Chris Houser che potrebbe essere utile
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow