@@ -50,6 +50,7 @@ all_tests() ->
5050 snapshot_written_after_installation ,
5151 oldcheckpoints_deleted_after_snapshot_install ,
5252 append_after_snapshot_installation ,
53+ release_cursor_after_snapshot_installation ,
5354 written_event_after_snapshot_installation ,
5455 update_release_cursor ,
5556 update_release_cursor_with_machine_version ,
@@ -1285,6 +1286,57 @@ append_after_snapshot_installation(Config) ->
12851286 {[_ , _ ], _ } = ra_log_take (16 , 17 , Log ),
12861287 ok .
12871288
1289+ release_cursor_after_snapshot_installation (Config ) ->
1290+ Log0 = ra_log_init (Config , #{min_snapshot_interval => 0 }),
1291+ {0 , 0 } = ra_log :last_index_term (Log0 ),
1292+ Log1 = assert_log_events (write_n (1 , 16 , 2 , Log0 ),
1293+ fun (L ) ->
1294+ LW = ra_log :last_written (L ),
1295+ {15 , 2 } == LW
1296+ end ),
1297+
1298+ Log2 = Log1 ,
1299+
1300+ % % create snapshot chunk
1301+ Meta = meta (15 , 2 , [? N1 ]),
1302+ Chunk = create_snapshot_chunk (Config , Meta , [1 , 5 , 10 ], #{}),
1303+ SnapState0 = ra_log :snapshot_state (Log2 ),
1304+ {ok , SnapState1 } = ra_snapshot :begin_accept (Meta , SnapState0 ),
1305+ Machine = {machine , ? MODULE , #{}},
1306+ {SnapState , _ , LiveIndexes , AEffs } = ra_snapshot :complete_accept (Chunk , 1 , Machine ,
1307+ SnapState1 ),
1308+ run_effs (AEffs ),
1309+ {ok , Log3 , Effs4 } = ra_log :install_snapshot ({15 , 2 }, ? MODULE , LiveIndexes ,
1310+ ra_log :set_snapshot_state (SnapState , Log2 )),
1311+
1312+ run_effs (Effs4 ),
1313+ {15 , 2 } = ra_snapshot :current (ra_log :snapshot_state (Log3 )),
1314+
1315+ % % Write some entries
1316+ Log4 = assert_log_events (write_n (16 , 20 , 2 , Log3 ),
1317+ fun (L ) ->
1318+ LW = ra_log :last_written (L ),
1319+ {19 , 2 } == LW
1320+ end ),
1321+
1322+ % % then take a snapshot
1323+ {Log5 , Effs5 } = ra_log :update_release_cursor (19 , #{? N1 => new_peer (),
1324+ ? N2 => new_peer ()},
1325+ ? MODULE , [1 , 5 , 10 , 17 ], Log4 ),
1326+
1327+ run_effs (Effs5 ),
1328+ % % ensure snapshot index has been updated and 1 segment deleted
1329+ Log = assert_log_events (Log5 ,
1330+ fun (L ) ->
1331+ {19 , 2 } == ra_log :snapshot_index_term (L )
1332+ % andalso
1333+ % length(find_segments(Config)) == 1
1334+ end ),
1335+
1336+ ct :pal (" Log ~p " , [Log ]),
1337+
1338+ ok .
1339+
12881340written_event_after_snapshot_installation (Config ) ->
12891341 logger :set_primary_config (level , all ),
12901342 % % simulates scenario where a server receives a written event from the wal
0 commit comments