Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-02-03 Thread via GitHub


szetszwo merged PR #1338:
URL: https://github.com/apache/ratis/pull/1338


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-02-02 Thread via GitHub


jcshepherd commented on PR #1338:
URL: https://github.com/apache/ratis/pull/1338#issuecomment-3837096197

   "Split-brain" behavior revised as suggested, and squashed all commits to 
this point.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-02-02 Thread via GitHub


jcshepherd commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2755815651


##
ratis-docs/src/site/markdown/concept/operations.md:
##
@@ -0,0 +1,135 @@
+
+# Introduction to Apache Ratis
+
+Previous: [Integration](integration.md) | Top:[Overview of Raft and 
Ratis](index-v2.md)
+
+## Section 4: Operations and Management
+
+* [Snapshots](#snapshots---managing-growth-and-recovery)
+* [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+
+### Snapshots - Managing Growth and Recovery
+
+Snapshots are a point-in-time representation of your state machine's complete 
state, along with
+metadata about which log entries are included in that state. They prevent the 
log from growing
+without bound and enable efficient recovery and catch-up for peers that have 
fallen behind.
+
+The snapshot includes the actual application state, the term-index of the last 
log entry that
+contributed to this state, and the Raft group configuration at the time the 
snapshot was taken.
+
+Without snapshots, the Raft log would grow indefinitely, eventually consuming 
all available
+storage. Crashed peers would need to replay potentially millions of log 
entries to catch up,
+dramatically slowing recovery. New peers joining an established group would 
need to process the
+entire history of the group, which could take hours or days for active systems.
+
+ Creating Snapshots
+
+Snapshots can be created automatically when the log grows beyond a certain 
size, manually
+triggered through the admin API, or sent by the leader to peers that are far 
behind instead of
+replaying thousands of log entries.
+
+When your state machine's `takeSnapshot` method is called, it needs to create 
a consistent view
+of your application state. This might involve pausing writes, creating a 
database transaction,
+or using copy-on-write data structures. The method must serialize state by 
writing it to durable
+storage in a format that can be read back later, record which term-index the 
snapshot represents,
+and return the log index so Ratis can safely discard older log entries.
+
+Different applications will have different strategies for snapshot creation. A 
stop-the-world
+approach pauses all operations while creating the snapshot: simple but impacts 
availability.
+Copy-on-write uses data structures that support efficient point-in-time 
copies. Database
+transactions can create consistent snapshots if your state is in a database. 
Some storage
+engines support checkpointing to leverage native snapshot capabilities.
+
+ Snapshot Installation and Recovery
+
+When a peer needs to catch up using a snapshot, it receives the snapshot data 
from the leader or
+loads it from local storage. The state machine is paused to prevent conflicts 
during restoration,
+the snapshot data is loaded replacing any existing state, and the state 
machine resumes normal
+operation by replaying any log entries that occurred after the snapshot.
+
+Your state machine's `reinitialize` method is responsible for loading 
snapshots during startup by
+loading the latest snapshot if available, with the Raft layer replaying any 
log entries after
+the snapshot.
+
+ Designing Snapshot-Friendly State Machines
+
+When designing your state machine, ensure your state can be efficiently 
serialized and
+deserialized, avoiding complex object graphs that are difficult to serialize. 
For very large
+state machines, consider whether you can implement incremental snapshots that 
only capture
+changes since the last snapshot.
+
+If your state machine maintains state in external systems, ensure your 
snapshot process captures
+this external state consistently. Regularly test your snapshot and recovery 
process to ensure it
+works correctly under various failure scenarios.
+
+### Leadership and Fault Tolerance
+
+Leadership in Ratis is both simpler and more complex than it might initially 
appear. Ratis
+handles all the mechanics of leader election and failover automatically, but 
your application
+needs to handle leadership changes robustly.
+
+ Leadership and Automatic Election
+
+In Raft, the leader is the only server that can accept write requests and 
decide the order of
+operations in the log. This centralized decision-making enables Raft to 
provide strong
+consistency guarantees. Leadership is temporary and can change at any time due 
to failures,
+network partitions, or normal operational events.
+
+When a Raft group starts up, or when the current leader fails, the remaining 
servers
+automatically elect a new leader through a voting process. This process uses 
randomized timeouts
+to prevent split votes and ensures that only servers with up-to-date logs can 
become leaders.
+This happens entirely within Ratis without any intervention from your 
application code.
+
+ Leadership and Client Behavior
+
+From a client perspective, leadership changes are largely transparent. Clients 
can send requests
+to any se

Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-02-02 Thread via GitHub


szetszwo commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2755794405


##
ratis-docs/src/site/markdown/concept/operations.md:
##
@@ -0,0 +1,135 @@
+
+# Introduction to Apache Ratis
+
+Previous: [Integration](integration.md) | Top:[Overview of Raft and 
Ratis](index-v2.md)
+
+## Section 4: Operations and Management
+
+* [Snapshots](#snapshots---managing-growth-and-recovery)
+* [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+
+### Snapshots - Managing Growth and Recovery
+
+Snapshots are a point-in-time representation of your state machine's complete 
state, along with
+metadata about which log entries are included in that state. They prevent the 
log from growing
+without bound and enable efficient recovery and catch-up for peers that have 
fallen behind.
+
+The snapshot includes the actual application state, the term-index of the last 
log entry that
+contributed to this state, and the Raft group configuration at the time the 
snapshot was taken.
+
+Without snapshots, the Raft log would grow indefinitely, eventually consuming 
all available
+storage. Crashed peers would need to replay potentially millions of log 
entries to catch up,
+dramatically slowing recovery. New peers joining an established group would 
need to process the
+entire history of the group, which could take hours or days for active systems.
+
+ Creating Snapshots
+
+Snapshots can be created automatically when the log grows beyond a certain 
size, manually
+triggered through the admin API, or sent by the leader to peers that are far 
behind instead of
+replaying thousands of log entries.
+
+When your state machine's `takeSnapshot` method is called, it needs to create 
a consistent view
+of your application state. This might involve pausing writes, creating a 
database transaction,
+or using copy-on-write data structures. The method must serialize state by 
writing it to durable
+storage in a format that can be read back later, record which term-index the 
snapshot represents,
+and return the log index so Ratis can safely discard older log entries.
+
+Different applications will have different strategies for snapshot creation. A 
stop-the-world
+approach pauses all operations while creating the snapshot: simple but impacts 
availability.
+Copy-on-write uses data structures that support efficient point-in-time 
copies. Database
+transactions can create consistent snapshots if your state is in a database. 
Some storage
+engines support checkpointing to leverage native snapshot capabilities.
+
+ Snapshot Installation and Recovery
+
+When a peer needs to catch up using a snapshot, it receives the snapshot data 
from the leader or
+loads it from local storage. The state machine is paused to prevent conflicts 
during restoration,
+the snapshot data is loaded replacing any existing state, and the state 
machine resumes normal
+operation by replaying any log entries that occurred after the snapshot.
+
+Your state machine's `reinitialize` method is responsible for loading 
snapshots during startup by
+loading the latest snapshot if available, with the Raft layer replaying any 
log entries after
+the snapshot.
+
+ Designing Snapshot-Friendly State Machines
+
+When designing your state machine, ensure your state can be efficiently 
serialized and
+deserialized, avoiding complex object graphs that are difficult to serialize. 
For very large
+state machines, consider whether you can implement incremental snapshots that 
only capture
+changes since the last snapshot.
+
+If your state machine maintains state in external systems, ensure your 
snapshot process captures
+this external state consistently. Regularly test your snapshot and recovery 
process to ensure it
+works correctly under various failure scenarios.
+
+### Leadership and Fault Tolerance
+
+Leadership in Ratis is both simpler and more complex than it might initially 
appear. Ratis
+handles all the mechanics of leader election and failover automatically, but 
your application
+needs to handle leadership changes robustly.
+
+ Leadership and Automatic Election
+
+In Raft, the leader is the only server that can accept write requests and 
decide the order of
+operations in the log. This centralized decision-making enables Raft to 
provide strong
+consistency guarantees. Leadership is temporary and can change at any time due 
to failures,
+network partitions, or normal operational events.
+
+When a Raft group starts up, or when the current leader fails, the remaining 
servers
+automatically elect a new leader through a voting process. This process uses 
randomized timeouts
+to prevent split votes and ensures that only servers with up-to-date logs can 
become leaders.
+This happens entirely within Ratis without any intervention from your 
application code.
+
+ Leadership and Client Behavior
+
+From a client perspective, leadership changes are largely transparent. Clients 
can send requests
+to any serv

Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-02-02 Thread via GitHub


szetszwo commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2755794405


##
ratis-docs/src/site/markdown/concept/operations.md:
##
@@ -0,0 +1,135 @@
+
+# Introduction to Apache Ratis
+
+Previous: [Integration](integration.md) | Top:[Overview of Raft and 
Ratis](index-v2.md)
+
+## Section 4: Operations and Management
+
+* [Snapshots](#snapshots---managing-growth-and-recovery)
+* [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+
+### Snapshots - Managing Growth and Recovery
+
+Snapshots are a point-in-time representation of your state machine's complete 
state, along with
+metadata about which log entries are included in that state. They prevent the 
log from growing
+without bound and enable efficient recovery and catch-up for peers that have 
fallen behind.
+
+The snapshot includes the actual application state, the term-index of the last 
log entry that
+contributed to this state, and the Raft group configuration at the time the 
snapshot was taken.
+
+Without snapshots, the Raft log would grow indefinitely, eventually consuming 
all available
+storage. Crashed peers would need to replay potentially millions of log 
entries to catch up,
+dramatically slowing recovery. New peers joining an established group would 
need to process the
+entire history of the group, which could take hours or days for active systems.
+
+ Creating Snapshots
+
+Snapshots can be created automatically when the log grows beyond a certain 
size, manually
+triggered through the admin API, or sent by the leader to peers that are far 
behind instead of
+replaying thousands of log entries.
+
+When your state machine's `takeSnapshot` method is called, it needs to create 
a consistent view
+of your application state. This might involve pausing writes, creating a 
database transaction,
+or using copy-on-write data structures. The method must serialize state by 
writing it to durable
+storage in a format that can be read back later, record which term-index the 
snapshot represents,
+and return the log index so Ratis can safely discard older log entries.
+
+Different applications will have different strategies for snapshot creation. A 
stop-the-world
+approach pauses all operations while creating the snapshot: simple but impacts 
availability.
+Copy-on-write uses data structures that support efficient point-in-time 
copies. Database
+transactions can create consistent snapshots if your state is in a database. 
Some storage
+engines support checkpointing to leverage native snapshot capabilities.
+
+ Snapshot Installation and Recovery
+
+When a peer needs to catch up using a snapshot, it receives the snapshot data 
from the leader or
+loads it from local storage. The state machine is paused to prevent conflicts 
during restoration,
+the snapshot data is loaded replacing any existing state, and the state 
machine resumes normal
+operation by replaying any log entries that occurred after the snapshot.
+
+Your state machine's `reinitialize` method is responsible for loading 
snapshots during startup by
+loading the latest snapshot if available, with the Raft layer replaying any 
log entries after
+the snapshot.
+
+ Designing Snapshot-Friendly State Machines
+
+When designing your state machine, ensure your state can be efficiently 
serialized and
+deserialized, avoiding complex object graphs that are difficult to serialize. 
For very large
+state machines, consider whether you can implement incremental snapshots that 
only capture
+changes since the last snapshot.
+
+If your state machine maintains state in external systems, ensure your 
snapshot process captures
+this external state consistently. Regularly test your snapshot and recovery 
process to ensure it
+works correctly under various failure scenarios.
+
+### Leadership and Fault Tolerance
+
+Leadership in Ratis is both simpler and more complex than it might initially 
appear. Ratis
+handles all the mechanics of leader election and failover automatically, but 
your application
+needs to handle leadership changes robustly.
+
+ Leadership and Automatic Election
+
+In Raft, the leader is the only server that can accept write requests and 
decide the order of
+operations in the log. This centralized decision-making enables Raft to 
provide strong
+consistency guarantees. Leadership is temporary and can change at any time due 
to failures,
+network partitions, or normal operational events.
+
+When a Raft group starts up, or when the current leader fails, the remaining 
servers
+automatically elect a new leader through a voting process. This process uses 
randomized timeouts
+to prevent split votes and ensures that only servers with up-to-date logs can 
become leaders.
+This happens entirely within Ratis without any intervention from your 
application code.
+
+ Leadership and Client Behavior
+
+From a client perspective, leadership changes are largely transparent. Clients 
can send requests
+to any serv

Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-02-02 Thread via GitHub


jcshepherd commented on PR #1338:
URL: https://github.com/apache/ratis/pull/1338#issuecomment-3837017855

   Thanks. With the exception of my question above 
(https://github.com/apache/ratis/pull/1338#discussion_r2749937107), I've 
incorporated your feedback. I also moved my working copy of index.md to 
index.md and squashed the commits thus far. 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-02-02 Thread via GitHub


jcshepherd commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2755638516


##
ratis-docs/src/site/markdown/concept/operations.md:
##
@@ -0,0 +1,135 @@
+
+# Introduction to Apache Ratis
+
+Previous: [Integration](integration.md) | Top:[Overview of Raft and 
Ratis](index-v2.md)
+
+## Section 4: Operations and Management
+
+* [Snapshots](#snapshots---managing-growth-and-recovery)
+* [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+
+### Snapshots - Managing Growth and Recovery
+
+Snapshots are a point-in-time representation of your state machine's complete 
state, along with
+metadata about which log entries are included in that state. They prevent the 
log from growing
+without bound and enable efficient recovery and catch-up for peers that have 
fallen behind.
+
+The snapshot includes the actual application state, the term-index of the last 
log entry that
+contributed to this state, and the Raft group configuration at the time the 
snapshot was taken.
+
+Without snapshots, the Raft log would grow indefinitely, eventually consuming 
all available
+storage. Crashed peers would need to replay potentially millions of log 
entries to catch up,
+dramatically slowing recovery. New peers joining an established group would 
need to process the
+entire history of the group, which could take hours or days for active systems.
+
+ Creating Snapshots
+
+Snapshots can be created automatically when the log grows beyond a certain 
size, manually
+triggered through the admin API, or sent by the leader to peers that are far 
behind instead of
+replaying thousands of log entries.
+
+When your state machine's `takeSnapshot` method is called, it needs to create 
a consistent view
+of your application state. This might involve pausing writes, creating a 
database transaction,
+or using copy-on-write data structures. The method must serialize state by 
writing it to durable
+storage in a format that can be read back later, record which term-index the 
snapshot represents,
+and return the log index so Ratis can safely discard older log entries.
+
+Different applications will have different strategies for snapshot creation. A 
stop-the-world
+approach pauses all operations while creating the snapshot: simple but impacts 
availability.
+Copy-on-write uses data structures that support efficient point-in-time 
copies. Database
+transactions can create consistent snapshots if your state is in a database. 
Some storage
+engines support checkpointing to leverage native snapshot capabilities.
+
+ Snapshot Installation and Recovery
+
+When a peer needs to catch up using a snapshot, it receives the snapshot data 
from the leader or
+loads it from local storage. The state machine is paused to prevent conflicts 
during restoration,
+the snapshot data is loaded replacing any existing state, and the state 
machine resumes normal
+operation by replaying any log entries that occurred after the snapshot.
+
+Your state machine's `reinitialize` method is responsible for loading 
snapshots during startup by
+loading the latest snapshot if available, with the Raft layer replaying any 
log entries after
+the snapshot.
+
+ Designing Snapshot-Friendly State Machines
+
+When designing your state machine, ensure your state can be efficiently 
serialized and
+deserialized, avoiding complex object graphs that are difficult to serialize. 
For very large
+state machines, consider whether you can implement incremental snapshots that 
only capture
+changes since the last snapshot.
+
+If your state machine maintains state in external systems, ensure your 
snapshot process captures
+this external state consistently. Regularly test your snapshot and recovery 
process to ensure it
+works correctly under various failure scenarios.
+
+### Leadership and Fault Tolerance
+
+Leadership in Ratis is both simpler and more complex than it might initially 
appear. Ratis
+handles all the mechanics of leader election and failover automatically, but 
your application
+needs to handle leadership changes robustly.
+
+ Leadership and Automatic Election
+
+In Raft, the leader is the only server that can accept write requests and 
decide the order of
+operations in the log. This centralized decision-making enables Raft to 
provide strong
+consistency guarantees. Leadership is temporary and can change at any time due 
to failures,
+network partitions, or normal operational events.
+
+When a Raft group starts up, or when the current leader fails, the remaining 
servers
+automatically elect a new leader through a voting process. This process uses 
randomized timeouts
+to prevent split votes and ensures that only servers with up-to-date logs can 
become leaders.
+This happens entirely within Ratis without any intervention from your 
application code.
+
+ Leadership and Client Behavior
+
+From a client perspective, leadership changes are largely transparent. Clients 
can send requests
+to any se

Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-02-02 Thread via GitHub


jcshepherd commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2755586054


##
ratis-docs/src/site/markdown/concept/operations.md:
##
@@ -0,0 +1,135 @@
+
+# Introduction to Apache Ratis
+
+Previous: [Integration](integration.md) | Top:[Overview of Raft and 
Ratis](index-v2.md)
+
+## Section 4: Operations and Management
+
+* [Snapshots](#snapshots---managing-growth-and-recovery)
+* [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+
+### Snapshots - Managing Growth and Recovery
+
+Snapshots are a point-in-time representation of your state machine's complete 
state, along with
+metadata about which log entries are included in that state. They prevent the 
log from growing
+without bound and enable efficient recovery and catch-up for peers that have 
fallen behind.
+
+The snapshot includes the actual application state, the term-index of the last 
log entry that
+contributed to this state, and the Raft group configuration at the time the 
snapshot was taken.
+
+Without snapshots, the Raft log would grow indefinitely, eventually consuming 
all available
+storage. Crashed peers would need to replay potentially millions of log 
entries to catch up,
+dramatically slowing recovery. New peers joining an established group would 
need to process the
+entire history of the group, which could take hours or days for active systems.
+
+ Creating Snapshots
+
+Snapshots can be created automatically when the log grows beyond a certain 
size, manually
+triggered through the admin API, or sent by the leader to peers that are far 
behind instead of
+replaying thousands of log entries.
+
+When your state machine's `takeSnapshot` method is called, it needs to create 
a consistent view
+of your application state. This might involve pausing writes, creating a 
database transaction,
+or using copy-on-write data structures. The method must serialize state by 
writing it to durable
+storage in a format that can be read back later, record which term-index the 
snapshot represents,
+and return the log index so Ratis can safely discard older log entries.
+
+Different applications will have different strategies for snapshot creation. A 
stop-the-world
+approach pauses all operations while creating the snapshot: simple but impacts 
availability.
+Copy-on-write uses data structures that support efficient point-in-time 
copies. Database
+transactions can create consistent snapshots if your state is in a database. 
Some storage
+engines support checkpointing to leverage native snapshot capabilities.
+
+ Snapshot Installation and Recovery
+
+When a peer needs to catch up using a snapshot, it receives the snapshot data 
from the leader or
+loads it from local storage. The state machine is paused to prevent conflicts 
during restoration,
+the snapshot data is loaded replacing any existing state, and the state 
machine resumes normal
+operation by replaying any log entries that occurred after the snapshot.
+
+Your state machine's `reinitialize` method is responsible for loading 
snapshots during startup by
+loading the latest snapshot if available, with the Raft layer replaying any 
log entries after
+the snapshot.
+
+ Designing Snapshot-Friendly State Machines
+
+When designing your state machine, ensure your state can be efficiently 
serialized and
+deserialized, avoiding complex object graphs that are difficult to serialize. 
For very large
+state machines, consider whether you can implement incremental snapshots that 
only capture
+changes since the last snapshot.
+
+If your state machine maintains state in external systems, ensure your 
snapshot process captures
+this external state consistently. Regularly test your snapshot and recovery 
process to ensure it
+works correctly under various failure scenarios.
+
+### Leadership and Fault Tolerance
+
+Leadership in Ratis is both simpler and more complex than it might initially 
appear. Ratis
+handles all the mechanics of leader election and failover automatically, but 
your application
+needs to handle leadership changes robustly.

Review Comment:
   Thanks: I think that's a better phrasing. Before I read your full comment 
just now I was going to raise the scenario of client that strongly prefers 
follower reads needed some kind of application logic to decide what to do if a 
follower is elected leader, but agree the phrasing as written over-states the 
need.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-02-02 Thread via GitHub


jcshepherd commented on PR #1338:
URL: https://github.com/apache/ratis/pull/1338#issuecomment-3836779070

   > BTW, have you used any AI generative tool to create the doc?
   
   Yes, definitely: I've been using Amazon Q CLI to analyze the Ratis and Ozone 
codebases, as well as public documentation, and generate the initial document 
drafts, as well as helping with organization. I've personally reviewed every 
line of documentation and made corrections/adjustments where I felt they were 
needed, so I own any errors.
   
   Reviewing the rest of your feedback now: thanks.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-31 Thread via GitHub


szetszwo commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2749933840


##
ratis-docs/src/site/markdown/concept/operations.md:
##
@@ -0,0 +1,135 @@
+
+# Introduction to Apache Ratis
+
+Previous: [Integration](integration.md) | Top:[Overview of Raft and 
Ratis](index-v2.md)
+
+## Section 4: Operations and Management
+
+* [Snapshots](#snapshots---managing-growth-and-recovery)
+* [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+
+### Snapshots - Managing Growth and Recovery
+
+Snapshots are a point-in-time representation of your state machine's complete 
state, along with
+metadata about which log entries are included in that state. They prevent the 
log from growing
+without bound and enable efficient recovery and catch-up for peers that have 
fallen behind.
+
+The snapshot includes the actual application state, the term-index of the last 
log entry that
+contributed to this state, and the Raft group configuration at the time the 
snapshot was taken.
+
+Without snapshots, the Raft log would grow indefinitely, eventually consuming 
all available
+storage. Crashed peers would need to replay potentially millions of log 
entries to catch up,
+dramatically slowing recovery. New peers joining an established group would 
need to process the
+entire history of the group, which could take hours or days for active systems.
+
+ Creating Snapshots
+
+Snapshots can be created automatically when the log grows beyond a certain 
size, manually
+triggered through the admin API, or sent by the leader to peers that are far 
behind instead of
+replaying thousands of log entries.
+
+When your state machine's `takeSnapshot` method is called, it needs to create 
a consistent view
+of your application state. This might involve pausing writes, creating a 
database transaction,
+or using copy-on-write data structures. The method must serialize state by 
writing it to durable
+storage in a format that can be read back later, record which term-index the 
snapshot represents,
+and return the log index so Ratis can safely discard older log entries.
+
+Different applications will have different strategies for snapshot creation. A 
stop-the-world
+approach pauses all operations while creating the snapshot: simple but impacts 
availability.
+Copy-on-write uses data structures that support efficient point-in-time 
copies. Database
+transactions can create consistent snapshots if your state is in a database. 
Some storage
+engines support checkpointing to leverage native snapshot capabilities.
+
+ Snapshot Installation and Recovery
+
+When a peer needs to catch up using a snapshot, it receives the snapshot data 
from the leader or
+loads it from local storage. The state machine is paused to prevent conflicts 
during restoration,
+the snapshot data is loaded replacing any existing state, and the state 
machine resumes normal
+operation by replaying any log entries that occurred after the snapshot.
+
+Your state machine's `reinitialize` method is responsible for loading 
snapshots during startup by
+loading the latest snapshot if available, with the Raft layer replaying any 
log entries after
+the snapshot.
+
+ Designing Snapshot-Friendly State Machines
+
+When designing your state machine, ensure your state can be efficiently 
serialized and
+deserialized, avoiding complex object graphs that are difficult to serialize. 
For very large
+state machines, consider whether you can implement incremental snapshots that 
only capture
+changes since the last snapshot.
+
+If your state machine maintains state in external systems, ensure your 
snapshot process captures
+this external state consistently. Regularly test your snapshot and recovery 
process to ensure it
+works correctly under various failure scenarios.
+
+### Leadership and Fault Tolerance
+
+Leadership in Ratis is both simpler and more complex than it might initially 
appear. Ratis
+handles all the mechanics of leader election and failover automatically, but 
your application
+needs to handle leadership changes robustly.

Review Comment:
   Why "your application needs to handle leadership changes robustly" ?   Only 
the applications want to know who is the leader need to handle leadership 
changes.  If an application does not care about who is the leader, then it does 
not need to do anything.
   
   The first sentence is a kind of a personal comment.  Let's remove it.
   
   I suggest to rewrite this paragraph as below:
   
   ```md
   Ratis handles all the mechanics of leader election and failover 
automatically.
   If your application does not care about who is the leader, then it does not 
need to do anything.
   Otherwise, your application can optionally observe leadership change and 
react accordingly;
   see [State Machine Leadership Events](#State-Machine-Leadership-Events).
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub 

Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-31 Thread via GitHub


szetszwo commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2749933840


##
ratis-docs/src/site/markdown/concept/operations.md:
##
@@ -0,0 +1,135 @@
+
+# Introduction to Apache Ratis
+
+Previous: [Integration](integration.md) | Top:[Overview of Raft and 
Ratis](index-v2.md)
+
+## Section 4: Operations and Management
+
+* [Snapshots](#snapshots---managing-growth-and-recovery)
+* [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+
+### Snapshots - Managing Growth and Recovery
+
+Snapshots are a point-in-time representation of your state machine's complete 
state, along with
+metadata about which log entries are included in that state. They prevent the 
log from growing
+without bound and enable efficient recovery and catch-up for peers that have 
fallen behind.
+
+The snapshot includes the actual application state, the term-index of the last 
log entry that
+contributed to this state, and the Raft group configuration at the time the 
snapshot was taken.
+
+Without snapshots, the Raft log would grow indefinitely, eventually consuming 
all available
+storage. Crashed peers would need to replay potentially millions of log 
entries to catch up,
+dramatically slowing recovery. New peers joining an established group would 
need to process the
+entire history of the group, which could take hours or days for active systems.
+
+ Creating Snapshots
+
+Snapshots can be created automatically when the log grows beyond a certain 
size, manually
+triggered through the admin API, or sent by the leader to peers that are far 
behind instead of
+replaying thousands of log entries.
+
+When your state machine's `takeSnapshot` method is called, it needs to create 
a consistent view
+of your application state. This might involve pausing writes, creating a 
database transaction,
+or using copy-on-write data structures. The method must serialize state by 
writing it to durable
+storage in a format that can be read back later, record which term-index the 
snapshot represents,
+and return the log index so Ratis can safely discard older log entries.
+
+Different applications will have different strategies for snapshot creation. A 
stop-the-world
+approach pauses all operations while creating the snapshot: simple but impacts 
availability.
+Copy-on-write uses data structures that support efficient point-in-time 
copies. Database
+transactions can create consistent snapshots if your state is in a database. 
Some storage
+engines support checkpointing to leverage native snapshot capabilities.
+
+ Snapshot Installation and Recovery
+
+When a peer needs to catch up using a snapshot, it receives the snapshot data 
from the leader or
+loads it from local storage. The state machine is paused to prevent conflicts 
during restoration,
+the snapshot data is loaded replacing any existing state, and the state 
machine resumes normal
+operation by replaying any log entries that occurred after the snapshot.
+
+Your state machine's `reinitialize` method is responsible for loading 
snapshots during startup by
+loading the latest snapshot if available, with the Raft layer replaying any 
log entries after
+the snapshot.
+
+ Designing Snapshot-Friendly State Machines
+
+When designing your state machine, ensure your state can be efficiently 
serialized and
+deserialized, avoiding complex object graphs that are difficult to serialize. 
For very large
+state machines, consider whether you can implement incremental snapshots that 
only capture
+changes since the last snapshot.
+
+If your state machine maintains state in external systems, ensure your 
snapshot process captures
+this external state consistently. Regularly test your snapshot and recovery 
process to ensure it
+works correctly under various failure scenarios.
+
+### Leadership and Fault Tolerance
+
+Leadership in Ratis is both simpler and more complex than it might initially 
appear. Ratis
+handles all the mechanics of leader election and failover automatically, but 
your application
+needs to handle leadership changes robustly.

Review Comment:
   
   Why "your application needs to handle leadership changes robustly" ?   Only 
the applications want to know who is the leader need to handle leadership 
changes.  If an application does not care about who is the leader, then it does 
not need to do anything.
   
   The first sentence is a kind of a personal comment.  Let's remove it.
   
   I suggest to rewrite this paragraph as below:
   
   > Ratis handles all the mechanics of leader election and failover 
automatically.
   > If your application does not care about who is the leader, then it does 
not need to do anything.
   > Otherwise, your application can optionally observe leadership change and 
react accordingly;
   > see [State Machine Leadership Events](#State-Machine-Leadership-Events).
   



##
ratis-docs/src/site/markdown/concept/operations.md:
##
@@ -0,0 +1,135 @@
+
+# Introduction to 

Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-30 Thread via GitHub


jcshepherd commented on PR #1338:
URL: https://github.com/apache/ratis/pull/1338#issuecomment-3825331603

   Thank you again. :-)  I restructured the read consistency section along the 
lines you suggested and also added a mention and forward reference to the 
discussion about blocking and async APIs. Thanks!


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-30 Thread via GitHub


szetszwo commented on PR #1338:
URL: https://github.com/apache/ratis/pull/1338#issuecomment-3822740055

   > ... I struggled a bit with reworking the section on read consistency. If 
you have any further thoughts on how to make that section clearer or improve 
its flow, please let me know.
   
   I have the following suggestion for the read section:
   ```md
    Read Consistency Options
   
   Ratis provides several read patterns with different consistency and 
performance characteristics.
   Read requests query the state machine of a server directly without going 
through the Raft consensus protocol. 
   The `sendReadOnly()` API sends the request to the leader.
   (When a non-leader server receives such request, it throws a 
`NotLeaderException`
   and then the client will retry other servers.)
   In contrast, the `sendReadOnly(message, serverId)` API sends the request to 
a particular server,
   which may be a leader or a follower.
   
   The server's `raft.server.read.option` configuration affects read behavior:
   
   * **DEFAULT (default setting)**: `sendReadOnly()` performs leader reads for 
efficiency.
 It provides strong consistency under normal conditions.
 *  Split-brain Problem: In case that an old leader has been partitioned 
from the majority
 and a new leader has been elected, reading from the old leader can return 
stale data
 since the old leader does not have the new transactions committed by the 
new leader.
   
   * **LINEARIZABLE**: both `sendReadOnly()` and `sendReadOnly(message, 
serverId)`
 use the ReadIndex protocol to provide linearizable consistency, ensuring 
you always read the most
 up-to-date committed data and won't read stale data as described in the 
"Split-brain Problem" above.  
 * Non-linearizable API: Clients may use `sendReadOnlyNonLinearizable()` to 
read from leader's state machine
   directly without a linearizable guarantee.
   
   Other than the `sendReadOnly(..)` methods mentioned above,
   we have the following read APIs:
   
   **Stale reads with minimum index** let you specify a minimum log index that 
the peer must have applied
   before serving the read.  Call `sendStaleRead()`: if the peer hasn't caught 
up to your minimum index,
   it will throw a `StaleReadException`.
   
   **Asynchronous reads**:
   Ratis supports both blocking reads and asynchronous reads.
   All the blocking read methods are supported by asynchronous reads
   -- the blocking reads return a reply directly while asynchronous reads 
return a future of the reply.
   Asynchronous reads additionally support the following APIs
   
   * **Read-after-write consistency** ensures reads reflect the latest 
successful write by the same client.
   Since write requests go through the Raft consensus protocol but read 
requests do not,
   a read request $R$ may be completed before a write request $W$
   even if $R$ is sent (asynchronously) after $W$.
   Therefore, the reply returned by $R$ may not include the result updated by 
$W$.
   Use `sendReadAfterWrite()` when you need to read your own writes immediately.
   
   * **Unorder reads** let the asynchronous read requests complete in any order.
   The fastest reply is completed first.
   Use `sendReadOnlyUnordered()` when you don't care about the ordering.
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-28 Thread via GitHub


jcshepherd commented on PR #1338:
URL: https://github.com/apache/ratis/pull/1338#issuecomment-3814276924

   Good idea about breaking it apart: thanks. I've broken it into five 
sections/files with navigation between and within sections. You've reviewed the 
content in sections 1, 2 and 4 so far. The discussion on read consistency is 
now in section 2. Sections 3 and 5 probably haven't been looked at.
   It feels like a largish number of sections, but it seems to flow pretty well 
and offers lots of room for future expansion. Let me know what you think.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-28 Thread via GitHub


szetszwo commented on PR #1338:
URL: https://github.com/apache/ratis/pull/1338#issuecomment-3813049407

   @jcshepherd , thanks for the update! 
   
   > ...  I know it's a longish document. ...
   
   How about breaking it to several md files?  We can merge the files 
separately.   It would also be easier to read.
   
   > ... I struggled a bit with reworking the section on read consistency. If 
you have any further thoughts on how to make that section clearer or improve 
its flow, please let me know.
   
   Sure, will continue reviewing it tomorrow.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-27 Thread via GitHub


jcshepherd commented on PR #1338:
URL: https://github.com/apache/ratis/pull/1338#issuecomment-3808047669

   @szetszwo - Thanks very much for taking the time to review: I know it's a 
longish document. I've addressed your feedback. I struggled a bit with 
reworking the section on read consistency. If you have any further thoughts on 
how to make that section clearer or improve its flow, please let me know.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-27 Thread via GitHub


jcshepherd commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2734175536


##
ratis-docs/src/site/markdown/concept/index-v2.md:
##
@@ -0,0 +1,499 @@
+
+# Apache Ratis Concepts
+
+## Table of Contents
+
+1. [Overview of Raft and Apache Ratis](#overview-of-raft-and-apache-ratis)
+2. [Raft Cluster Topology](#raft-cluster-topology)
+3. [The Raft Log - Foundation of 
Consensus](#the-raft-log---foundation-of-consensus)
+4. [The State Machine - Your Application's 
Heart](#the-state-machine---your-applications-heart)
+5. [Consistency Models and Read 
Patterns](#consistency-models-and-read-patterns)
+6. [Snapshots - Managing Growth and 
Recovery](#snapshots---managing-growth-and-recovery)
+7. [Logical Organization of Ratis](#logical-organization-of-ratis)
+8. [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+9. [Scaling with Multi-Raft Groups](#scaling-with-multi-raft-groups)
+
+## Overview of Raft and Apache Ratis
+
+The Raft consensus algorithm solves a fundamental problem in distributed 
systems: how do you get
+multiple computers to agree on a sequence of operations, even when some might 
fail or become
+unreachable? This problem, known as distributed consensus, is at the heart of 
building reliable
+distributed systems.
+
+Raft ensures that a cluster of servers maintains an identical, ordered log of 
operations. Each
+server applies these operations to its local state machine in the same order, 
guaranteeing that
+all servers end up with identical state. This approach, called state machine 
replication,
+provides both consistency and fault tolerance.
+
+You should consider using Raft when your system needs strong consistency 
guarantees across
+multiple servers. This typically applies to systems where correctness is more 
important than
+absolute performance, such as distributed databases, configuration management 
systems, or any
+application where split-brain scenarios would be unacceptable.
+
+Apache Ratis is a Java library that implements the Raft consensus protocol. 
The key word here
+is "library" - Ratis is not a standalone service that you communicate with 
over the network.
+Instead, you embed Ratis directly into your Java application, and it becomes 
part of your
+application's runtime.
+
+This embedded approach creates tight integration between your application and 
the consensus
+mechanism. Your application and Ratis run in the same JVM, sharing memory and 
computational
+resources. Your application provides the business logic (the "state machine" 
in Raft terminology),
+while Ratis handles the distributed consensus mechanics needed to keep 
multiple instances of your
+application synchronized.
+
+## Raft Cluster Topology
+
+Understanding the basic building blocks of a Raft deployment affects both the 
correctness and
+performance of your system.
+
+### Servers, Clusters, and Groups
+
+A Raft server (also known as a "peer") is a single running instance of your 
application with
+Ratis embedded. Each server runs your state machine and participates in the 
consensus protocol.
+
+A Raft cluster is a physical collection of servers that can participate in 
consensus. A Raft
+group is a logical consensus domain that runs across a specific subset of 
peers in the cluster.
+At any given time, one peer in a group acts as the "leader" while the others 
are "followers" or
+"listeners". The leader handles all write requests and replicates operations 
to other peers in
+the group. Both leaders and followers can service read requests, with 
different consistency
+guarantees.
+
+A single cluster can host multiple independent Raft groups, each with its own 
leader election,
+consistency and state replication. Groups typically consist of an odd number 
of peers (3, 5, or
+7 are common) to ensure clear majority decisions.
+
+### Majority-Based Decision-Making
+
+Raft's safety guarantees depend on majority agreement within each group. The 
leader replicates
+each operation to the followers in its group, and operations are committed 
when at least
+(N/2 + 1) peers in that group acknowledge them. This means a group of 3 peers 
can tolerate 1
+failure, a group of five peers can tolerate 2 failures, and so on.
+
+This majority requirement affects both availability and performance. A group 
remains available as
+long as a majority of its peers are reachable and functioning. However, every 
transaction must
+wait for majority acknowledgment, so the slowest server in the majority 
determines your write
+latency.
+
+### Server Placement and Network Considerations
+
+The physical and network placement of your servers impacts both availability 
and performance.
+Placing all servers in the same rack or data center provides the lowest 
latency but risks
+creating a single point of failure. Distributing servers across multiple 
availability zones or
+data centers improves fault tolerance but can increase latency.
+
+A common approach is to place servers acr

Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-27 Thread via GitHub


szetszwo commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2733429957


##
ratis-docs/src/site/markdown/concept/index-v2.md:
##
@@ -0,0 +1,499 @@
+
+# Apache Ratis Concepts
+
+## Table of Contents
+
+1. [Overview of Raft and Apache Ratis](#overview-of-raft-and-apache-ratis)
+2. [Raft Cluster Topology](#raft-cluster-topology)
+3. [The Raft Log - Foundation of 
Consensus](#the-raft-log---foundation-of-consensus)
+4. [The State Machine - Your Application's 
Heart](#the-state-machine---your-applications-heart)
+5. [Consistency Models and Read 
Patterns](#consistency-models-and-read-patterns)
+6. [Snapshots - Managing Growth and 
Recovery](#snapshots---managing-growth-and-recovery)
+7. [Logical Organization of Ratis](#logical-organization-of-ratis)
+8. [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+9. [Scaling with Multi-Raft Groups](#scaling-with-multi-raft-groups)
+
+## Overview of Raft and Apache Ratis
+
+The Raft consensus algorithm solves a fundamental problem in distributed 
systems: how do you get
+multiple computers to agree on a sequence of operations, even when some might 
fail or become
+unreachable? This problem, known as distributed consensus, is at the heart of 
building reliable
+distributed systems.
+
+Raft ensures that a cluster of servers maintains an identical, ordered log of 
operations. Each
+server applies these operations to its local state machine in the same order, 
guaranteeing that
+all servers end up with identical state. This approach, called state machine 
replication,
+provides both consistency and fault tolerance.
+
+You should consider using Raft when your system needs strong consistency 
guarantees across
+multiple servers. This typically applies to systems where correctness is more 
important than
+absolute performance, such as distributed databases, configuration management 
systems, or any
+application where split-brain scenarios would be unacceptable.
+
+Apache Ratis is a Java library that implements the Raft consensus protocol. 
The key word here
+is "library" - Ratis is not a standalone service that you communicate with 
over the network.
+Instead, you embed Ratis directly into your Java application, and it becomes 
part of your
+application's runtime.
+
+This embedded approach creates tight integration between your application and 
the consensus
+mechanism. Your application and Ratis run in the same JVM, sharing memory and 
computational
+resources. Your application provides the business logic (the "state machine" 
in Raft terminology),
+while Ratis handles the distributed consensus mechanics needed to keep 
multiple instances of your
+application synchronized.
+
+## Raft Cluster Topology
+
+Understanding the basic building blocks of a Raft deployment affects both the 
correctness and
+performance of your system.
+
+### Servers, Clusters, and Groups
+
+A Raft server (also known as a "peer") is a single running instance of your 
application with
+Ratis embedded. Each server runs your state machine and participates in the 
consensus protocol.
+
+A Raft cluster is a physical collection of servers that can participate in 
consensus. A Raft
+group is a logical consensus domain that runs across a specific subset of 
peers in the cluster.
+At any given time, one peer in a group acts as the "leader" while the others 
are "followers" or
+"listeners". The leader handles all write requests and replicates operations 
to other peers in
+the group. Both leaders and followers can service read requests, with 
different consistency
+guarantees.
+
+A single cluster can host multiple independent Raft groups, each with its own 
leader election,
+consistency and state replication. Groups typically consist of an odd number 
of peers (3, 5, or
+7 are common) to ensure clear majority decisions.
+
+### Majority-Based Decision-Making
+
+Raft's safety guarantees depend on majority agreement within each group. The 
leader replicates
+each operation to the followers in its group, and operations are committed 
when at least
+(N/2 + 1) peers in that group acknowledge them. This means a group of 3 peers 
can tolerate 1
+failure, a group of five peers can tolerate 2 failures, and so on.
+
+This majority requirement affects both availability and performance. A group 
remains available as
+long as a majority of its peers are reachable and functioning. However, every 
transaction must
+wait for majority acknowledgment, so the slowest server in the majority 
determines your write
+latency.
+
+### Server Placement and Network Considerations
+
+The physical and network placement of your servers impacts both availability 
and performance.
+Placing all servers in the same rack or data center provides the lowest 
latency but risks
+creating a single point of failure. Distributing servers across multiple 
availability zones or
+data centers improves fault tolerance but can increase latency.
+
+A common approach is to place servers acros

Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-27 Thread via GitHub


jcshepherd commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2733376732


##
ratis-docs/src/site/markdown/concept/index-v2.md:
##
@@ -0,0 +1,499 @@
+
+# Apache Ratis Concepts
+
+## Table of Contents
+
+1. [Overview of Raft and Apache Ratis](#overview-of-raft-and-apache-ratis)
+2. [Raft Cluster Topology](#raft-cluster-topology)
+3. [The Raft Log - Foundation of 
Consensus](#the-raft-log---foundation-of-consensus)
+4. [The State Machine - Your Application's 
Heart](#the-state-machine---your-applications-heart)
+5. [Consistency Models and Read 
Patterns](#consistency-models-and-read-patterns)
+6. [Snapshots - Managing Growth and 
Recovery](#snapshots---managing-growth-and-recovery)
+7. [Logical Organization of Ratis](#logical-organization-of-ratis)
+8. [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+9. [Scaling with Multi-Raft Groups](#scaling-with-multi-raft-groups)
+
+## Overview of Raft and Apache Ratis
+
+The Raft consensus algorithm solves a fundamental problem in distributed 
systems: how do you get
+multiple computers to agree on a sequence of operations, even when some might 
fail or become
+unreachable? This problem, known as distributed consensus, is at the heart of 
building reliable
+distributed systems.
+
+Raft ensures that a cluster of servers maintains an identical, ordered log of 
operations. Each
+server applies these operations to its local state machine in the same order, 
guaranteeing that
+all servers end up with identical state. This approach, called state machine 
replication,
+provides both consistency and fault tolerance.
+
+You should consider using Raft when your system needs strong consistency 
guarantees across
+multiple servers. This typically applies to systems where correctness is more 
important than
+absolute performance, such as distributed databases, configuration management 
systems, or any
+application where split-brain scenarios would be unacceptable.
+
+Apache Ratis is a Java library that implements the Raft consensus protocol. 
The key word here
+is "library" - Ratis is not a standalone service that you communicate with 
over the network.
+Instead, you embed Ratis directly into your Java application, and it becomes 
part of your
+application's runtime.
+
+This embedded approach creates tight integration between your application and 
the consensus
+mechanism. Your application and Ratis run in the same JVM, sharing memory and 
computational
+resources. Your application provides the business logic (the "state machine" 
in Raft terminology),
+while Ratis handles the distributed consensus mechanics needed to keep 
multiple instances of your
+application synchronized.
+
+## Raft Cluster Topology
+
+Understanding the basic building blocks of a Raft deployment affects both the 
correctness and
+performance of your system.
+
+### Servers, Clusters, and Groups
+
+A Raft server (also known as a "peer") is a single running instance of your 
application with
+Ratis embedded. Each server runs your state machine and participates in the 
consensus protocol.
+
+A Raft cluster is a physical collection of servers that can participate in 
consensus. A Raft
+group is a logical consensus domain that runs across a specific subset of 
peers in the cluster.
+At any given time, one peer in a group acts as the "leader" while the others 
are "followers" or
+"listeners". The leader handles all write requests and replicates operations 
to other peers in
+the group. Both leaders and followers can service read requests, with 
different consistency
+guarantees.
+
+A single cluster can host multiple independent Raft groups, each with its own 
leader election,
+consistency and state replication. Groups typically consist of an odd number 
of peers (3, 5, or
+7 are common) to ensure clear majority decisions.
+
+### Majority-Based Decision-Making
+
+Raft's safety guarantees depend on majority agreement within each group. The 
leader replicates
+each operation to the followers in its group, and operations are committed 
when at least
+(N/2 + 1) peers in that group acknowledge them. This means a group of 3 peers 
can tolerate 1
+failure, a group of five peers can tolerate 2 failures, and so on.
+
+This majority requirement affects both availability and performance. A group 
remains available as
+long as a majority of its peers are reachable and functioning. However, every 
transaction must
+wait for majority acknowledgment, so the slowest server in the majority 
determines your write
+latency.
+
+### Server Placement and Network Considerations
+
+The physical and network placement of your servers impacts both availability 
and performance.
+Placing all servers in the same rack or data center provides the lowest 
latency but risks
+creating a single point of failure. Distributing servers across multiple 
availability zones or
+data centers improves fault tolerance but can increase latency.
+
+A common approach is to place servers acr

Re: [PR] RATIS-2388 (Further) Enhancing content for concept in ratis-docs [ratis]

2026-01-26 Thread via GitHub


szetszwo commented on code in PR #1338:
URL: https://github.com/apache/ratis/pull/1338#discussion_r2729645047


##
ratis-docs/src/site/markdown/concept/index-v2.md:
##
@@ -0,0 +1,499 @@
+
+# Apache Ratis Concepts
+
+## Table of Contents
+
+1. [Overview of Raft and Apache Ratis](#overview-of-raft-and-apache-ratis)
+2. [Raft Cluster Topology](#raft-cluster-topology)
+3. [The Raft Log - Foundation of 
Consensus](#the-raft-log---foundation-of-consensus)
+4. [The State Machine - Your Application's 
Heart](#the-state-machine---your-applications-heart)
+5. [Consistency Models and Read 
Patterns](#consistency-models-and-read-patterns)
+6. [Snapshots - Managing Growth and 
Recovery](#snapshots---managing-growth-and-recovery)
+7. [Logical Organization of Ratis](#logical-organization-of-ratis)
+8. [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+9. [Scaling with Multi-Raft Groups](#scaling-with-multi-raft-groups)
+
+## Overview of Raft and Apache Ratis
+
+The Raft consensus algorithm solves a fundamental problem in distributed 
systems: how do you get
+multiple computers to agree on a sequence of operations, even when some might 
fail or become
+unreachable? This problem, known as distributed consensus, is at the heart of 
building reliable
+distributed systems.
+
+Raft ensures that a cluster of servers maintains an identical, ordered log of 
operations. Each
+server applies these operations to its local state machine in the same order, 
guaranteeing that
+all servers end up with identical state. This approach, called state machine 
replication,
+provides both consistency and fault tolerance.
+
+You should consider using Raft when your system needs strong consistency 
guarantees across
+multiple servers. This typically applies to systems where correctness is more 
important than
+absolute performance, such as distributed databases, configuration management 
systems, or any
+application where split-brain scenarios would be unacceptable.
+
+Apache Ratis is a Java library that implements the Raft consensus protocol. 
The key word here
+is "library" - Ratis is not a standalone service that you communicate with 
over the network.
+Instead, you embed Ratis directly into your Java application, and it becomes 
part of your
+application's runtime.
+
+This embedded approach creates tight integration between your application and 
the consensus
+mechanism. Your application and Ratis run in the same JVM, sharing memory and 
computational
+resources. Your application provides the business logic (the "state machine" 
in Raft terminology),
+while Ratis handles the distributed consensus mechanics needed to keep 
multiple instances of your
+application synchronized.
+
+## Raft Cluster Topology
+
+Understanding the basic building blocks of a Raft deployment affects both the 
correctness and
+performance of your system.
+
+### Servers, Clusters, and Groups
+
+A Raft server (also known as a "peer") is a single running instance of your 
application with
+Ratis embedded. Each server runs your state machine and participates in the 
consensus protocol.
+
+A Raft cluster is a physical collection of servers that can participate in 
consensus. A Raft
+group is a logical consensus domain that runs across a specific subset of 
peers in the cluster.
+At any given time, one peer in a group acts as the "leader" while the others 
are "followers" or

Review Comment:
   Since a group could temporarily have no leader or more than one leaders (old 
leader not yet timed out), let  remove "At any given time, ", i.e.
   > One of the peers in a group acts as the "leader" ...
   
   



##
ratis-docs/src/site/markdown/concept/index-v2.md:
##
@@ -0,0 +1,499 @@
+
+# Apache Ratis Concepts
+
+## Table of Contents
+
+1. [Overview of Raft and Apache Ratis](#overview-of-raft-and-apache-ratis)
+2. [Raft Cluster Topology](#raft-cluster-topology)
+3. [The Raft Log - Foundation of 
Consensus](#the-raft-log---foundation-of-consensus)
+4. [The State Machine - Your Application's 
Heart](#the-state-machine---your-applications-heart)
+5. [Consistency Models and Read 
Patterns](#consistency-models-and-read-patterns)
+6. [Snapshots - Managing Growth and 
Recovery](#snapshots---managing-growth-and-recovery)
+7. [Logical Organization of Ratis](#logical-organization-of-ratis)
+8. [Leadership and Fault Tolerance](#leadership-and-fault-tolerance)
+9. [Scaling with Multi-Raft Groups](#scaling-with-multi-raft-groups)
+
+## Overview of Raft and Apache Ratis
+
+The Raft consensus algorithm solves a fundamental problem in distributed 
systems: how do you get
+multiple computers to agree on a sequence of operations, even when some might 
fail or become
+unreachable? This problem, known as distributed consensus, is at the heart of 
building reliable
+distributed systems.
+
+Raft ensures that a cluster of servers maintains an identical, ordered log of 
operations. Each
+server applies these operations to its local state machine in the sam