Hello,

Thanks for the clarification! That makes sense and answers my question
about the threading. If it sounds okay, I can open a PR to update the
documentation with that? Thought it maybe nice to have it written
somewhere too

Thanks,

Sahith

On Wed, Mar 11, 2026 at 10:03 PM Tsz Wo Sze <[email protected]> wrote:
>
> 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

Reply via email to