Domanda

Come posso vedere il numero di rollback nel mio STM in Clojure?

È stato utile?

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
scroll top