Hi Sahith, The StateMachine implementation should have a set of states. - Only the applyTransactionSerial(..) and applyTransaction(..) methods can change the states. - Note that applyTransaction(..) is asynchronous, i.e. the StateMachine may allow multiple calls running in parallel. - The takeSnapshot() method will wait for applyTransactionSerial(..) and applyTransaction(..) to complete, i.e. they won't overlap - The reinitialize() method, which restores snapshots, does not overlap the methods above. - The query(..) and queryStale(..) methods, which read the states, can overlap all the methods above.
A simple read-write lock implementation may have - write-lock: reinitialize(), applyTransactionSerial(..) and applyTransaction(..) - read-lock: takeSnapshot(), query(..) and queryStale(..). Will answer the metrics question later. Tsz-Wo On Mon, Mar 9, 2026 at 1:32 PM Sahith Nallapareddy via user < [email protected]> wrote: > Hello, > > Thanks for helping me out! I have been a lot of progress since then > and have been able to spin up a multi Raft group setup we been trying > out! > > I had a few questions about the threading model. So I have been using > RocksDB in my statemachine and right now I was able to setup > transactions with RocksDB and snapshotting. I ran into a few issues > with concurrency. I saw in the Counter example the state machines use > AtomicInteger, and was wondering should all implemented methods of > state machines be designed for thread safe access, including the > actual state that is being used? To get myself further, I have made > the methods initialize and takeSnapshot marked with synchronized as I > had some File operations that were clashing when they were done > concurrently. I am wondering if I should think more carefully as well > about my applyTransaction method. I am also new to using RocksDB so I > am still learning how that will be affected by this. > > I was also eager to setup metrics, but I wasnt able to easily follow > how to do so. https://jojochuang.github.io/ratis-site/docs/metrics I > found this link that helped me see what metrics were there out of the > box (fantastic!). Do I have to do anything special to turn this on? > and how can I integrate with these as well? My goal is to set up some > sort of visualization and will most likely go through something like > Prometheus/Grafana setup in the end. > > Thanks for your help so far! > > Sahith >
