From a40ce5646aa4d3866e4bbbe7fa6981899e444ca4 Mon Sep 17 00:00:00 2001 From: Amaury Chamayou Date: Mon, 30 Oct 2023 13:35:44 +0000 Subject: [PATCH] Fix the rest of the scenarios for startup at 2.1 --- tests/raft_scenarios/bad_network | 19 +++-- tests/raft_scenarios/check_quorum | 14 ++-- .../election_while_reconfiguration | 12 +-- tests/raft_scenarios/fancy_election.1 | 37 +++++---- tests/raft_scenarios/fancy_election.2 | 28 +++---- tests/raft_scenarios/multi_election | 37 +++++---- tests/raft_scenarios/reconfiguration | 12 +-- tests/raft_scenarios/reconfiguration_new | 12 +-- tests/raft_scenarios/reconnect | 19 +++-- tests/raft_scenarios/reconnect_node | 19 +++-- tests/raft_scenarios/replicate | 15 ++-- tests/raft_scenarios/soft_rollback | 23 +++--- tests/raft_scenarios/suffix_collision.1 | 31 +++---- tests/raft_scenarios/suffix_collision.2 | 43 +++++----- tests/raft_scenarios/suffix_collision.3 | 80 +++++++++---------- 15 files changed, 215 insertions(+), 186 deletions(-) diff --git a/tests/raft_scenarios/bad_network b/tests/raft_scenarios/bad_network index 8b2d2083bc35..f79f022bd1b7 100644 --- a/tests/raft_scenarios/bad_network +++ b/tests/raft_scenarios/bad_network @@ -1,12 +1,12 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +emit_signature,2 periodic_all,10 dispatch_all @@ -14,6 +14,9 @@ dispatch_all periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all + # Three node network is ready assert_is_primary,0 assert_is_backup,1 @@ -21,8 +24,8 @@ assert_is_backup,2 assert_state_sync # An initial entry is written and successfully replicated -replicate,1,helloworld -emit_signature,1 +replicate,2,helloworld +emit_signature,2 periodic_all,10 dispatch_all @@ -34,8 +37,8 @@ state_all assert_state_sync # An additional entry takes much longer to replicate, as it is lost on bad connection between nodes -replicate,1,salutonmondo -emit_signature,1 +replicate,2,salutonmondo +emit_signature,2 periodic_all,10 drop_pending,0 diff --git a/tests/raft_scenarios/check_quorum b/tests/raft_scenarios/check_quorum index d7550fba9b2d..26a0179c21ec 100644 --- a/tests/raft_scenarios/check_quorum +++ b/tests/raft_scenarios/check_quorum @@ -1,13 +1,13 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add three more nodes -trust_node,1,1 -trust_node,1,2 -trust_node,1,3 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +trust_node,2,3 +emit_signature,2 periodic_all,10 dispatch_all @@ -25,8 +25,8 @@ assert_is_backup,3 assert_state_sync # An initial entry is written and successfully replicated -replicate,1,helloworld -emit_signature,1 +replicate,2,helloworld +emit_signature,2 periodic_all,10 dispatch_all diff --git a/tests/raft_scenarios/election_while_reconfiguration b/tests/raft_scenarios/election_while_reconfiguration index da072e46d7ce..2c613fe2faf7 100644 --- a/tests/raft_scenarios/election_while_reconfiguration +++ b/tests/raft_scenarios/election_while_reconfiguration @@ -2,22 +2,22 @@ # quorums when a reconfiguration is in flight # Note: This is a fix for the issue described in https://github.com/microsoft/CCF/issues/3948 start_node -periodic_one,0,110 dispatch_all +emit_signature,2 assert_is_primary,0 #Reconfiguration: add a new node -trust_node,1,1 +trust_node,2,1 -emit_signature,1 +emit_signature,2 periodic_all,10 dispatch_all assert_is_backup,1 # Reconfiguration: add three nodes -trust_nodes,1,2,3,4 # New configuration: C1=[0,1,2,3,4] in term 1 (quorum=3) -emit_signature,1 +trust_nodes,2,2,3,4 # New configuration: C1=[0,1,2,3,4] in term 1 (quorum=3) +emit_signature,2 periodic_all,10 # New nodes first respond with NACKs as they don't have full history @@ -55,7 +55,7 @@ state_all assert_is_primary,2 # New primary appends a new committable entry to confirm its primaryship -emit_signature,2 +emit_signature,3 periodic_all,10 dispatch_all diff --git a/tests/raft_scenarios/fancy_election.1 b/tests/raft_scenarios/fancy_election.1 index aca0a07a5c6c..c9b8161556f2 100644 --- a/tests/raft_scenarios/fancy_election.1 +++ b/tests/raft_scenarios/fancy_election.1 @@ -1,12 +1,12 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +emit_signature,2 periodic_all,10 dispatch_all @@ -14,6 +14,9 @@ dispatch_all periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all + # Three node network is ready assert_is_primary,0 assert_is_backup,1 @@ -24,17 +27,17 @@ assert_state_sync disconnect,0,2 disconnect,1,2 -replicate,1,helloworld -emit_signature,1 +replicate,2,helloworld +emit_signature,2 periodic_all,10 dispatch_all # Build an uncommitted suffix -replicate,1,salutonmondo -replicate,1,hallo -replicate,1,hullo -replicate,1,ahoyhoy -emit_signature,1 +replicate,2,salutonmondo +replicate,2,hallo +replicate,2,hullo +replicate,2,ahoyhoy +emit_signature,2 # Dispatch AppendEntries containing this suffix, which will be received by Node 1, making # it committed (known by a majority of nodes), though its commit status remains unknown @@ -51,10 +54,10 @@ dispatch_one,1 state_all # Build a further suffix which is _not_ shared in time -replicate,1,z -replicate,1,zz -replicate,1,zzz -emit_signature,1 +replicate,2,z +replicate,2,zz +replicate,2,zzz +emit_signature,2 state_all @@ -77,8 +80,8 @@ dispatch_one,1 dispatch_one,2 # Node 1 appends a new committable entry to confirm its primaryship -replicate,3,ConfirmCommit -emit_signature,3 +replicate,4,ConfirmCommit +emit_signature,4 # Node 1 sends an initial AppendEntries probe periodic_one,1,10 diff --git a/tests/raft_scenarios/fancy_election.2 b/tests/raft_scenarios/fancy_election.2 index a37896e39e21..3da7cee83801 100644 --- a/tests/raft_scenarios/fancy_election.2 +++ b/tests/raft_scenarios/fancy_election.2 @@ -1,14 +1,14 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -trust_node,1,3 -trust_node,1,4 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +trust_node,2,3 +trust_node,2,4 +emit_signature,2 periodic_all,10 dispatch_all @@ -36,8 +36,8 @@ disconnect,2,4 disconnect,3,4 # Node 0 appends a single entry, replicates it to all nodes -replicate,1,entry_1 -emit_signature,1 +replicate,2,entry_1 +emit_signature,2 periodic_all,10 dispatch_all @@ -45,8 +45,8 @@ dispatch_all # Node 0 appends a second entry, which only reaches Node 1 disconnect_node,0 connect,0,1 -replicate,1,entry_2 -emit_signature,1 +replicate,2,entry_2 +emit_signature,2 periodic_all,10 dispatch_all @@ -59,8 +59,8 @@ connect,4,2 periodic_one,4,110 dispatch_all -replicate,2,entry_3 -emit_signature,2 +replicate,3,entry_3 +emit_signature,3 state_all @@ -112,8 +112,8 @@ dispatch_all state_all # Not yet! We need node 4 to produce a new entry in its current term -replicate,4,entry_4 -emit_signature,4 +replicate,5,entry_4 +emit_signature,5 periodic_all,10 dispatch_all diff --git a/tests/raft_scenarios/multi_election b/tests/raft_scenarios/multi_election index 3578def46cd2..4b28d4511c50 100644 --- a/tests/raft_scenarios/multi_election +++ b/tests/raft_scenarios/multi_election @@ -1,12 +1,12 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +emit_signature,2 periodic_all,10 dispatch_all @@ -14,19 +14,22 @@ dispatch_all periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all + # Three node network is ready assert_is_primary,0 assert_is_backup,1 assert_is_backup,2 assert_state_sync -replicate,1,helloworld -emit_signature,1 +replicate,2,helloworld +emit_signature,2 periodic_all,10 dispatch_all -replicate,1,salutonmondo -emit_signature,1 +replicate,2,salutonmondo +emit_signature,2 periodic_all,10 dispatch_all @@ -47,8 +50,8 @@ assert_state_sync # NB: Node 1 i now primary in term 2. There is no primary in term 1, # and attempting to replicate in it will produce an error -replicate,2,my world now -emit_signature,2 +replicate,3,my world now +emit_signature,3 periodic_all,10 dispatch_all @@ -58,8 +61,8 @@ dispatch_all state_all assert_state_sync -replicate,2,im in charge -emit_signature,2 +replicate,3,im in charge +emit_signature,3 periodic_all,10 dispatch_all @@ -74,9 +77,9 @@ disconnect,0,1 disconnect,1,2 # While 1 was partitioned, it continued to receive transactions! -replicate,2,i think i am still in charge -replicate,2,i am going to continue like i am the primary -replicate,2,until i am told otherwise +replicate,3,i think i am still in charge +replicate,3,i am going to continue like i am the primary +replicate,3,until i am told otherwise periodic_all,10 dispatch_all @@ -102,8 +105,8 @@ periodic_all,10 dispatch_all # Election has now succeeded, and new primary can replicate in term 3 -replicate,3,look at me i am the primary now -emit_signature,3 +replicate,4,look at me i am the primary now +emit_signature,4 periodic_all,10 dispatch_all diff --git a/tests/raft_scenarios/reconfiguration b/tests/raft_scenarios/reconfiguration index 10affd9d2c66..00272678c7db 100644 --- a/tests/raft_scenarios/reconfiguration +++ b/tests/raft_scenarios/reconfiguration @@ -1,21 +1,21 @@ start_node -periodic_one,0,110 dispatch_all +emit_signature,2 assert_is_primary,0 #Reconfiguration: add a new node -trust_node,1,1 +trust_node,2,1 -emit_signature,1 +emit_signature,2 periodic_all,10 dispatch_all assert_is_backup,1 # Reconfiguration: add two nodes at once that are necessary to # commit reconfiguration entry itself -trust_nodes,1,2,3 # New configuration: [0, 1, 2, 3] in term 1 -emit_signature,1 +trust_nodes,2,2,3 # New configuration: [0, 1, 2, 3] in term 1 +emit_signature,2 periodic_all,10 dispatch_one,0 @@ -32,7 +32,7 @@ dispatch_one,0 # Send a catchup dispatch_one,2 # ACK the cactchup state_all # 1 is now committed as new node 2 has acked -assert_commit_idx,0,4 +assert_commit_idx,0,6 periodic_all,10 dispatch_all diff --git a/tests/raft_scenarios/reconfiguration_new b/tests/raft_scenarios/reconfiguration_new index a20cf9ebc59b..19f33cfc6850 100644 --- a/tests/raft_scenarios/reconfiguration_new +++ b/tests/raft_scenarios/reconfiguration_new @@ -1,13 +1,13 @@ start_node -periodic_one,0,110 dispatch_all +emit_signature,2 assert_is_primary,0 #Reconfiguration: add a new node -trust_node,1,1 +trust_node,2,1 -emit_signature,1 +emit_signature,2 periodic_all,10 dispatch_all assert_is_backup,1 @@ -15,15 +15,17 @@ assert_is_backup,1 # Commit reconfiguration periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all assert_state_sync assert_is_primary,0 assert_is_backup,1 #Reconfiguration: add a new node -trust_node,1,2 +trust_node,2,2 -emit_signature,1 +emit_signature,2 periodic_all,10 dispatch_all assert_is_backup,2 diff --git a/tests/raft_scenarios/reconnect b/tests/raft_scenarios/reconnect index 2bf725e781a2..7425a3ab5cd9 100644 --- a/tests/raft_scenarios/reconnect +++ b/tests/raft_scenarios/reconnect @@ -1,12 +1,12 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +emit_signature,2 periodic_all,10 dispatch_all @@ -14,21 +14,24 @@ dispatch_all periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all + # Three node network is ready assert_is_primary,0 assert_is_backup,1 assert_is_backup,2 assert_state_sync -replicate,1,helloworld -emit_signature,1 +replicate,2,helloworld +emit_signature,2 periodic_all,10 dispatch_all periodic_all,1 state_all disconnect,0,1 -replicate,1,salutonmond -emit_signature,1 +replicate,2,salutonmond +emit_signature,2 dispatch_all reconnect,0,1 dispatch_all diff --git a/tests/raft_scenarios/reconnect_node b/tests/raft_scenarios/reconnect_node index 840dc2bc808c..b57de558f31f 100644 --- a/tests/raft_scenarios/reconnect_node +++ b/tests/raft_scenarios/reconnect_node @@ -1,12 +1,12 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +emit_signature,2 periodic_all,10 dispatch_all @@ -14,21 +14,24 @@ dispatch_all periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all + # Three node network is ready assert_is_primary,0 assert_is_backup,1 assert_is_backup,2 assert_state_sync -replicate,1,helloworld -emit_signature,1 +replicate,2,helloworld +emit_signature,2 periodic_all,10 dispatch_all periodic_all,1 state_all disconnect_node,1 -replicate,1,salutonmondo -emit_signature,1 +replicate,2,salutonmondo +emit_signature,2 dispatch_all reconnect_node,1 dispatch_all diff --git a/tests/raft_scenarios/replicate b/tests/raft_scenarios/replicate index 67aea6c4919b..19492370e1b1 100644 --- a/tests/raft_scenarios/replicate +++ b/tests/raft_scenarios/replicate @@ -1,12 +1,12 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +emit_signature,2 periodic_all,10 dispatch_all @@ -14,14 +14,17 @@ dispatch_all periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all + # Three node network is ready assert_is_primary,0 assert_is_backup,1 assert_is_backup,2 assert_state_sync -replicate,1,helloworld -emit_signature,1 +replicate,2,helloworld +emit_signature,2 periodic_all,10 dispatch_all periodic_all,1 diff --git a/tests/raft_scenarios/soft_rollback b/tests/raft_scenarios/soft_rollback index 2c2c804c2e44..3a61daadd27a 100644 --- a/tests/raft_scenarios/soft_rollback +++ b/tests/raft_scenarios/soft_rollback @@ -1,12 +1,12 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +emit_signature,2 periodic_all,10 dispatch_all @@ -14,6 +14,9 @@ dispatch_all periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all + # Three node network is ready assert_is_primary,0 assert_is_backup,1 @@ -21,8 +24,8 @@ assert_is_backup,2 assert_state_sync # Node 0 emits an entry, and signature -replicate,1,hello world -emit_signature,1 +replicate,2,hello world +emit_signature,2 periodic_all,10 # But only succeeds in replicating this to node 1 @@ -42,8 +45,8 @@ periodic_one,1,110 dispatch_all # Node 1 may do work in this term, but crucially doesn't get as far as emitting a signature -replicate,2,saluton mondo -replicate,2,ah well nevertheless +replicate,3,saluton mondo +replicate,3,ah well nevertheless state_all # Node 2 calls an election, advancing to term 3 @@ -79,8 +82,8 @@ assert_is_primary,1 # Regardless of earlier disagreements, we can all agree now reconnect_node,2 -replicate,4,place trace checker -emit_signature,4 +replicate,5,place trace checker +emit_signature,5 periodic_all,10 dispatch_all periodic_all,10 diff --git a/tests/raft_scenarios/suffix_collision.1 b/tests/raft_scenarios/suffix_collision.1 index e1e44d0d5cd0..9cf6917ab3ac 100644 --- a/tests/raft_scenarios/suffix_collision.1 +++ b/tests/raft_scenarios/suffix_collision.1 @@ -1,12 +1,12 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +emit_signature,2 periodic_all,10 dispatch_all @@ -14,19 +14,22 @@ dispatch_all periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all + # Three node network is ready assert_is_primary,0 assert_is_backup,1 assert_is_backup,2 assert_state_sync -replicate,1,hello world -emit_signature,1 +replicate,2,hello world +emit_signature,2 periodic_all,10 dispatch_all -replicate,1,saluton mondo -emit_signature,1 +replicate,2,saluton mondo +emit_signature,2 periodic_all,10 dispatch_all @@ -39,8 +42,8 @@ state_all disconnect,0,1 disconnect,0,2 -replicate,1,drop me 1 -emit_signature,1 +replicate,2,drop me 1 +emit_signature,2 periodic_all,10 dispatch_all @@ -56,13 +59,13 @@ dispatch_all #< This AppendEntries starts at a point that Node 1 would accept, state_all # Node 1 replicates a new entry, resulting in the same seqno as Node 0 -replicate,2,keep me 1 -emit_signature,2 +replicate,3,keep me 1 +emit_signature,3 periodic_all,10 dispatch_all -replicate,2,keep me 2 -emit_signature,2 +replicate,3,keep me 2 +emit_signature,3 periodic_all,10 dispatch_all diff --git a/tests/raft_scenarios/suffix_collision.2 b/tests/raft_scenarios/suffix_collision.2 index 15d5a4d8bb56..bb05990fc2c0 100644 --- a/tests/raft_scenarios/suffix_collision.2 +++ b/tests/raft_scenarios/suffix_collision.2 @@ -1,12 +1,12 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +emit_signature,2 periodic_all,10 dispatch_all @@ -14,19 +14,22 @@ dispatch_all periodic_all,10 dispatch_all +periodic_all,10 +dispatch_all + # Three node network is ready assert_is_primary,0 assert_is_backup,1 assert_is_backup,2 assert_state_sync -replicate,1,hello world -emit_signature,1 +replicate,2,hello world +emit_signature,2 periodic_all,10 dispatch_all -replicate,1,saluton mondo -emit_signature,1 +replicate,2,saluton mondo +emit_signature,2 periodic_all,10 dispatch_all @@ -41,10 +44,10 @@ assert_state_sync disconnect,0,1 disconnect,0,2 -replicate,1,drop me 1 -replicate,1,drop me 2 -replicate,1,drop me 3 -emit_signature,1 +replicate,2,drop me 1 +replicate,2,drop me 2 +replicate,2,drop me 3 +emit_signature,2 periodic_all,10 dispatch_all @@ -60,13 +63,13 @@ dispatch_all #< This AppendEntries starts at a point that Node 1 would accept, state_all # Node 1 replicates new entries -replicate,2,keep me 1 -emit_signature,2 +replicate,3,keep me 1 +emit_signature,3 periodic_all,10 dispatch_all -replicate,2,keep me 2 -emit_signature,2 +replicate,3,keep me 2 +emit_signature,3 periodic_all,10 dispatch_all @@ -79,8 +82,8 @@ dispatch_all periodic_all,10 dispatch_all -replicate,3,keep me term 3 -emit_signature,3 +replicate,4,keep me term 3 +emit_signature,4 periodic_all,10 dispatch_all @@ -91,8 +94,8 @@ dispatch_all periodic_all,10 dispatch_all -replicate,4,keep me term 4 -emit_signature,4 +replicate,5,keep me term 4 +emit_signature,5 periodic_all,10 dispatch_all diff --git a/tests/raft_scenarios/suffix_collision.3 b/tests/raft_scenarios/suffix_collision.3 index 1de504d40d2a..96b64c561ca7 100644 --- a/tests/raft_scenarios/suffix_collision.3 +++ b/tests/raft_scenarios/suffix_collision.3 @@ -1,14 +1,14 @@ # Node 0 starts first, and wins the first election start_node -periodic_one,0,110 dispatch_all +emit_signature,2 # Add two more nodes -trust_node,1,1 -trust_node,1,2 -trust_node,1,3 -trust_node,1,4 -emit_signature,1 +trust_node,2,1 +trust_node,2,2 +trust_node,2,3 +trust_node,2,4 +emit_signature,2 periodic_all,10 dispatch_all @@ -26,13 +26,13 @@ assert_is_backup,3 assert_is_backup,4 assert_state_sync -replicate,1,hello world -emit_signature,1 +replicate,2,hello world +emit_signature,2 periodic_all,10 dispatch_all -replicate,1,saluton mondo -emit_signature,1 +replicate,2,saluton mondo +emit_signature,2 periodic_all,10 dispatch_all @@ -58,28 +58,28 @@ dispatch_all periodic_all,10 dispatch_all -# Node 0 continues to produce a suffix in term 1 -replicate,1,branch a 0 -emit_signature,1 - -replicate,1,branch a 1 -emit_signature,1 - -replicate,1,branch a 2 -emit_signature,1 - -# Node 2 continues to produce a suffix in term 2 -replicate,2,branch b 0 +# Node 0 continues to produce a suffix in term 2 +replicate,2,branch a 0 emit_signature,2 -replicate,2,branch b 1 +replicate,2,branch a 1 emit_signature,2 -replicate,2,branch b 2 +replicate,2,branch a 2 emit_signature,2 -replicate,2,branch b 3 -emit_signature,2 +# Node 2 continues to produce a suffix in term 3 +replicate,3,branch b 0 +emit_signature,3 + +replicate,3,branch b 1 +emit_signature,3 + +replicate,3,branch b 2 +emit_signature,3 + +replicate,3,branch b 3 +emit_signature,3 # AEs describing these suffices are produced, but lost in transit periodic_all,10 @@ -105,26 +105,26 @@ periodic_one,2,110 dispatch_all disconnect,2,4 -# Node 0 continues to produce a suffix in term 3 -replicate,3,branch a 10 -emit_signature,3 - -replicate,3,branch a 11 -emit_signature,3 - -replicate,3,branch a 12 -emit_signature,3 - -# Node 2 continues to produce a suffix in term 4 -replicate,4,branch b 10 +# Node 0 continues to produce a suffix in term 4 +replicate,4,branch a 10 emit_signature,4 -replicate,4,branch b 11 +replicate,4,branch a 11 emit_signature,4 -replicate,4,branch b 12 +replicate,4,branch a 12 emit_signature,4 +# Node 2 continues to produce a suffix in term 5 +replicate,5,branch b 10 +emit_signature,5 + +replicate,5,branch b 11 +emit_signature,5 + +replicate,5,branch b 12 +emit_signature,5 + # AEs describing these suffices are produced, and delivered, # but due to partition they cannot be committed state_all