From bf2c3a1a27bde2810a25fde7f75535b4a41a63fe Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Mon, 20 Jan 2025 00:21:28 +0100 Subject: [PATCH] WIP --- storage_broker/spec/modelcheck.sh | 52 ++ storage_broker/spec/modelcheck.sh~ | 52 ++ storage_broker/spec/replicated/replicated.tla | 67 ++- .../Model_1/25-01-19-23-52-40/0 | Bin 0 -> 733008 bytes .../Model_1/25-01-19-23-52-40/1 | Bin 0 -> 733506 bytes .../Model_1/25-01-19-23-52-40/MC-0.st | Bin 0 -> 90112 bytes .../Model_1/25-01-19-23-52-40/MC-1.st | Bin 0 -> 90112 bytes .../Model_1/25-01-19-23-52-40/MC-2.st | Bin 0 -> 90112 bytes .../Model_1/25-01-19-23-52-40/MC-3.st | Bin 0 -> 90112 bytes .../MC.st | 0 .../MC_0.fp | 0 .../MC_1.fp | 0 .../nodes_0 | 0 .../ptrs_0 | 0 .../replicated.toolbox/Model_1/MC.cfg | 19 +- .../replicated.toolbox/Model_1/MC.out | 53 +++ .../replicated.toolbox/Model_1/MC.tla | 20 +- .../replicated.toolbox/Model_1/MC_TE.out | 313 +----------- .../replicated.toolbox/Model_1/replicated.tla | 66 ++- .../Model_1/states/25-01-19-18-52-55/0 | Bin 720007 -> 0 bytes .../Model_1/states/25-01-19-18-52-55/MC-0.st | Bin 270336 -> 0 bytes .../Model_1_SnapShot_1737307595008/MC.cfg | 51 -- .../Model_1_SnapShot_1737307595008/MC.out | 164 ------- .../Model_1_SnapShot_1737307595008/MC.tla | 65 --- .../Model_1_SnapShot_1737307595008/MC_TE.out | 164 ------- .../replicated.tla | 129 ----- .../Model_1_SnapShot_1737307621596/MC.cfg | 51 -- .../Model_1_SnapShot_1737307621596/MC.out | 174 ------- .../Model_1_SnapShot_1737307621596/MC.tla | 65 --- .../Model_1_SnapShot_1737307621596/MC_TE.out | 174 ------- .../replicated.tla | 130 ----- .../Model_1_SnapShot_1737307660221/MC.cfg | 51 -- .../Model_1_SnapShot_1737307660221/MC.out | 203 -------- .../Model_1_SnapShot_1737307660221/MC.tla | 65 --- .../Model_1_SnapShot_1737307660221/MC_TE.out | 203 -------- .../replicated.tla | 131 ----- .../Model_1_SnapShot_1737307704621/MC.cfg | 51 -- .../Model_1_SnapShot_1737307704621/MC.out | 282 ----------- .../Model_1_SnapShot_1737307704621/MC.tla | 65 --- .../Model_1_SnapShot_1737307704621/MC_TE.out | 282 ----------- .../replicated.tla | 131 ----- .../Model_1_SnapShot_1737307769810/MC.cfg | 51 -- .../Model_1_SnapShot_1737307769810/MC.tla | 65 --- .../Model_1_SnapShot_1737307769810/MC_TE.out | 53 --- .../replicated.tla | 130 ----- .../Model_1_SnapShot_1737307828738/MC.cfg | 50 -- .../Model_1_SnapShot_1737307828738/MC.out | 53 --- .../Model_1_SnapShot_1737307828738/MC_TE.out | 53 --- .../replicated.tla | 130 ----- .../Model_1_SnapShot_1737308024914/MC.out | 35 -- .../Model_1_SnapShot_1737308024914/MC_TE.out | 35 -- .../Model_1_SnapShot_1737308183077/MC.out | 52 -- .../Model_1_SnapShot_1737308183077/MC_TE.out | 52 -- .../Model_1_SnapShot_1737308216766/MC.out | 53 --- .../Model_1_SnapShot_1737308355472/MC.out | 354 -------------- .../Model_1_SnapShot_1737308355472/MC.tla | 65 --- .../Model_1_SnapShot_1737308355472/MC_TE.out | 354 -------------- .../MC.cfg | 19 +- .../Model_1_SnapShot_1737323805723/MC.out | 353 ++++++++++++++ .../MC.tla | 20 +- .../Model_1_SnapShot_1737323805723/MC_TE.out | 353 ++++++++++++++ .../replicated.tla | 71 ++- .../MC.cfg | 19 +- .../Model_1_SnapShot_1737323834253/MC.out | 430 +++++++++++++++++ .../MC.tla | 20 +- .../Model_1_SnapShot_1737323834253/MC_TE.out | 430 +++++++++++++++++ .../replicated.tla | 75 ++- .../MC.cfg | 19 +- .../Model_1_SnapShot_1737324141888/MC.out | 368 ++++++++++++++ .../MC.tla | 20 +- .../Model_1_SnapShot_1737324141888/MC_TE.out | 368 ++++++++++++++ .../replicated.tla | 180 +++++++ .../MC.cfg | 19 +- .../Model_1_SnapShot_1737324186169/MC.out | 442 +++++++++++++++++ .../MC.tla | 20 +- .../Model_1_SnapShot_1737324186169/MC_TE.out | 442 +++++++++++++++++ .../replicated.tla | 180 +++++++ .../Model_1_SnapShot_1737324315582/MC.cfg | 54 +++ .../Model_1_SnapShot_1737324315582/MC.out | 324 +++++++++++++ .../Model_1_SnapShot_1737324315582/MC.tla | 65 +++ .../Model_1_SnapShot_1737324315582/MC_TE.out | 324 +++++++++++++ .../replicated.tla | 181 +++++++ .../Model_1_SnapShot_1737326115252/MC.cfg | 54 +++ .../Model_1_SnapShot_1737326115252/MC.out | 312 ++++++++++++ .../Model_1_SnapShot_1737326115252/MC.tla | 65 +++ .../Model_1_SnapShot_1737326115252/MC_TE.out | 312 ++++++++++++ .../replicated.tla | 184 +++++++ .../Model_1_SnapShot_1737326135419/MC.cfg | 54 +++ .../Model_1_SnapShot_1737326135419/MC.out | 358 ++++++++++++++ .../Model_1_SnapShot_1737326135419/MC.tla | 65 +++ .../Model_1_SnapShot_1737326135419/MC_TE.out | 358 ++++++++++++++ .../replicated.tla | 184 +++++++ .../Model_1_SnapShot_1737326274268/MC.cfg | 54 +++ .../Model_1_SnapShot_1737326274268/MC.out | 450 ++++++++++++++++++ .../Model_1_SnapShot_1737326274268/MC.tla | 65 +++ .../Model_1_SnapShot_1737326274268/MC_TE.out | 450 ++++++++++++++++++ .../replicated.tla | 184 +++++++ .../Model_1_SnapShot_1737327144010/MC.cfg | 54 +++ .../Model_1_SnapShot_1737327144010/MC.out | 297 ++++++++++++ .../Model_1_SnapShot_1737327144010/MC.tla | 65 +++ .../Model_1_SnapShot_1737327144010/MC_TE.out | 297 ++++++++++++ .../replicated.tla | 66 ++- .../Model_1_SnapShot_1737327172537/MC.cfg | 54 +++ .../MC.out | 12 +- .../Model_1_SnapShot_1737327172537/MC.tla | 65 +++ .../MC_TE.out | 12 +- .../replicated.tla | 66 ++- .../replicated___Model_1.launch | 3 +- ...ed___Model_1_SnapShot_1737307595008.launch | 58 --- ...ed___Model_1_SnapShot_1737307621596.launch | 58 --- ...ed___Model_1_SnapShot_1737307660221.launch | 58 --- ...ed___Model_1_SnapShot_1737307704621.launch | 58 --- ...ed___Model_1_SnapShot_1737307769810.launch | 58 --- ...ed___Model_1_SnapShot_1737307828738.launch | 58 --- ...d___Model_1_SnapShot_1737323805723.launch} | 5 +- ...d___Model_1_SnapShot_1737323834253.launch} | 5 +- ...d___Model_1_SnapShot_1737324141888.launch} | 5 +- ...d___Model_1_SnapShot_1737324186169.launch} | 5 +- ...ed___Model_1_SnapShot_1737324315582.launch | 61 +++ ...ed___Model_1_SnapShot_1737326115252.launch | 61 +++ ...ed___Model_1_SnapShot_1737326135419.launch | 61 +++ ...ed___Model_1_SnapShot_1737326274268.launch | 61 +++ ...ed___Model_1_SnapShot_1737327144010.launch | 61 +++ ...ed___Model_1_SnapShot_1737327172537.launch | 61 +++ 124 files changed, 9459 insertions(+), 5069 deletions(-) create mode 100755 storage_broker/spec/modelcheck.sh create mode 100755 storage_broker/spec/modelcheck.sh~ create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/0 create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/1 create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-0.st create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-1.st create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-2.st create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-3.st rename storage_broker/spec/replicated/replicated.toolbox/Model_1/{states/25-01-19-18-52-55 => 25-01-19-23-52-40}/MC.st (100%) rename storage_broker/spec/replicated/replicated.toolbox/Model_1/{states/25-01-19-18-52-55 => 25-01-19-23-52-40}/MC_0.fp (100%) rename storage_broker/spec/replicated/replicated.toolbox/Model_1/{states/25-01-19-18-52-55 => 25-01-19-23-52-40}/MC_1.fp (100%) rename storage_broker/spec/replicated/replicated.toolbox/Model_1/{states/25-01-19-18-52-55 => 25-01-19-23-52-40}/nodes_0 (100%) rename storage_broker/spec/replicated/replicated.toolbox/Model_1/{states/25-01-19-18-52-55 => 25-01-19-23-52-40}/ptrs_0 (100%) delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/0 delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/MC-0.st delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.cfg delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC_TE.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/replicated.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.cfg delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC_TE.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/replicated.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.cfg delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC_TE.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/replicated.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.cfg delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC_TE.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/replicated.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.cfg delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC_TE.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/replicated.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.cfg delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC_TE.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/replicated.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC_TE.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC_TE.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.out delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.tla delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC_TE.out rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308024914 => Model_1_SnapShot_1737323805723}/MC.cfg (66%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.out rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737307828738 => Model_1_SnapShot_1737323805723}/MC.tla (67%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC_TE.out rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308183077 => Model_1_SnapShot_1737323805723}/replicated.tla (64%) rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308183077 => Model_1_SnapShot_1737323834253}/MC.cfg (66%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.out rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308024914 => Model_1_SnapShot_1737323834253}/MC.tla (67%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC_TE.out rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308024914 => Model_1_SnapShot_1737323834253}/replicated.tla (62%) rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308216766 => Model_1_SnapShot_1737324141888}/MC.cfg (66%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.out rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308183077 => Model_1_SnapShot_1737324141888}/MC.tla (67%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/replicated.tla rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308355472 => Model_1_SnapShot_1737324186169}/MC.cfg (66%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.out rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308216766 => Model_1_SnapShot_1737324186169}/MC.tla (67%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/replicated.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/replicated.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/replicated.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/replicated.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/replicated.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC_TE.out rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308216766 => Model_1_SnapShot_1737327144010}/replicated.tla (66%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.cfg rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737307769810 => Model_1_SnapShot_1737327172537}/MC.out (79%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.tla rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308216766 => Model_1_SnapShot_1737327172537}/MC_TE.out (79%) rename storage_broker/spec/replicated/replicated.toolbox/{Model_1_SnapShot_1737308355472 => Model_1_SnapShot_1737327172537}/replicated.tla (66%) delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307595008.launch delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307621596.launch delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307660221.launch delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307704621.launch delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307769810.launch delete mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307828738.launch rename storage_broker/spec/replicated/replicated.toolbox/{replicated___Model_1_SnapShot_1737308355472.launch => replicated___Model_1_SnapShot_1737323805723.launch} (96%) rename storage_broker/spec/replicated/replicated.toolbox/{replicated___Model_1_SnapShot_1737308024914.launch => replicated___Model_1_SnapShot_1737323834253.launch} (96%) rename storage_broker/spec/replicated/replicated.toolbox/{replicated___Model_1_SnapShot_1737308183077.launch => replicated___Model_1_SnapShot_1737324141888.launch} (96%) rename storage_broker/spec/replicated/replicated.toolbox/{replicated___Model_1_SnapShot_1737308216766.launch => replicated___Model_1_SnapShot_1737324186169.launch} (96%) create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324315582.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326115252.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326135419.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326274268.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737327144010.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737327172537.launch diff --git a/storage_broker/spec/modelcheck.sh b/storage_broker/spec/modelcheck.sh new file mode 100755 index 0000000000..7b235d8ab9 --- /dev/null +++ b/storage_broker/spec/modelcheck.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Usage: ./modelcheck.sh , e.g. +# ./modelcheck.sh models/MCProposerAcceptorStatic_p2_a3_t3_l3.cfg MCProposerAcceptorStatic.tla +# ./modelcheck.sh models/MCProposerAcceptorReconfig_p2_a3_t3_l3_c3.cfg MCProposerAcceptorReconfig.tla +CONFIG=$1 +SPEC=$2 + +MEM=4G +TOOLSPATH=/Applications/TLA+\ Toolbox.app/Contents/Eclipse/tla2tools.jar + +mkdir -p "tlc-results" +CONFIG_FILE=$(basename -- "$CONFIG") +outfilename="$SPEC-${CONFIG_FILE}-$(date --utc +%Y-%m-%d--%H-%M-%S)".log +outfile="tlc-results/$outfilename" +echo "saving results to $outfile" +touch $outfile + +# Save some info about the run. +GIT_REV=`git rev-parse --short HEAD` +INFO=`uname -a` + +# First for Linux, second for Mac. +CPUNAMELinux=$(lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1') +CPUCORESLinux=`nproc` +CPUNAMEMac=`sysctl -n machdep.cpu.brand_string` +CPUCORESMac=`sysctl -n machdep.cpu.thread_count` + +echo "git revision: $GIT_REV" >> $outfile +echo "Platform: $INFO" >> $outfile +echo "CPU Info Linux: $CPUNAMELinux" >> $outfile +echo "CPU Cores Linux: $CPUCORESLinux" >> $outfile +echo "CPU Info Mac: $CPUNAMEMac" >> $outfile +echo "CPU Cores Mac: $CPUCORESMac" >> $outfile +echo "Spec: $SPEC" >> $outfile +echo "Config: $CONFIG" >> $outfile +echo "----" >> $outfile +cat $CONFIG >> $outfile +echo "" >> $outfile +echo "----" >> $outfile +echo "" >> $outfile + +# see +# https://lamport.azurewebsites.net/tla/current-tools.pdf +# for TLC options. +# OffHeapDiskFPSet is the optimal fingerprint set implementation +# https://docs.tlapl.us/codebase:architecture#fingerprint_sets_fpsets +# +# Add -simulate to run in infinite simulation mode. +# -coverage 1 is useful for profiling (check how many times actions are taken). +java -Xmx$MEM -XX:MaxDirectMemorySize=$MEM -XX:+UseParallelGC -Dtlc2.tool.fp.FPSet.impl=tlc2.tool.fp.OffHeapDiskFPSet \ + -cp "${TOOLSPATH}" tlc2.TLC $SPEC -config $CONFIG -workers auto -gzip | tee -a $outfile diff --git a/storage_broker/spec/modelcheck.sh~ b/storage_broker/spec/modelcheck.sh~ new file mode 100755 index 0000000000..0084a8c638 --- /dev/null +++ b/storage_broker/spec/modelcheck.sh~ @@ -0,0 +1,52 @@ +#!/bin/bash + +# Usage: ./modelcheck.sh , e.g. +# ./modelcheck.sh models/MCProposerAcceptorStatic_p2_a3_t3_l3.cfg MCProposerAcceptorStatic.tla +# ./modelcheck.sh models/MCProposerAcceptorReconfig_p2_a3_t3_l3_c3.cfg MCProposerAcceptorReconfig.tla +CONFIG=$1 +SPEC=$2 + +MEM=7G +TOOLSPATH="/opt/TLA+Toolbox/tla2tools.jar" + +mkdir -p "tlc-results" +CONFIG_FILE=$(basename -- "$CONFIG") +outfilename="$SPEC-${CONFIG_FILE}-$(date --utc +%Y-%m-%d--%H-%M-%S)".log +outfile="tlc-results/$outfilename" +echo "saving results to $outfile" +touch $outfile + +# Save some info about the run. +GIT_REV=`git rev-parse --short HEAD` +INFO=`uname -a` + +# First for Linux, second for Mac. +CPUNAMELinux=$(lscpu | grep 'Model name' | cut -f 2 -d ":" | awk '{$1=$1}1') +CPUCORESLinux=`nproc` +CPUNAMEMac=`sysctl -n machdep.cpu.brand_string` +CPUCORESMac=`sysctl -n machdep.cpu.thread_count` + +echo "git revision: $GIT_REV" >> $outfile +echo "Platform: $INFO" >> $outfile +echo "CPU Info Linux: $CPUNAMELinux" >> $outfile +echo "CPU Cores Linux: $CPUCORESLinux" >> $outfile +echo "CPU Info Mac: $CPUNAMEMac" >> $outfile +echo "CPU Cores Mac: $CPUCORESMac" >> $outfile +echo "Spec: $SPEC" >> $outfile +echo "Config: $CONFIG" >> $outfile +echo "----" >> $outfile +cat $CONFIG >> $outfile +echo "" >> $outfile +echo "----" >> $outfile +echo "" >> $outfile + +# see +# https://lamport.azurewebsites.net/tla/current-tools.pdf +# for TLC options. +# OffHeapDiskFPSet is the optimal fingerprint set implementation +# https://docs.tlapl.us/codebase:architecture#fingerprint_sets_fpsets +# +# Add -simulate to run in infinite simulation mode. +# -coverage 1 is useful for profiling (check how many times actions are taken). +java -Xmx$MEM -XX:MaxDirectMemorySize=$MEM -XX:+UseParallelGC -Dtlc2.tool.fp.FPSet.impl=tlc2.tool.fp.OffHeapDiskFPSet \ + -cp "${TOOLSPATH}" tlc2.TLC $SPEC -config $CONFIG -workers auto -gzip | tee -a $outfile diff --git a/storage_broker/spec/replicated/replicated.tla b/storage_broker/spec/replicated/replicated.tla index 33971e3071..8911d172d9 100644 --- a/storage_broker/spec/replicated/replicated.tla +++ b/storage_broker/spec/replicated/replicated.tla @@ -17,6 +17,20 @@ CONSTANT CONSTANT max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +(* The minimum of a non-empty set of integers *) +MaxOfSet(S) == + CHOOSE x \in S: \A y \in S: x >= y + +\* END HELPERS StateConstraint == /\ \A s \in safekeepers: @@ -25,9 +39,10 @@ StateConstraint == /\ \A s \in DOMAIN broker_state[b].sk: /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] InitOnline == safekeepers \cup brokers \cup pageservers @@ -58,20 +73,21 @@ SkCommit(s1, s2) == SkPeerRecovery(s1,s2) == /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] /\ UNCHANGED <> SkPushToBroker(s,b) == /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] /\ UNCHANGED <> PsRecvBroker(b,p,s) == @@ -86,6 +102,22 @@ PsRecvBroker(b,p,s) == ELSE pageserver_state /\ UNCHANGED <> + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + sk == safekeeper_state[s] + skis == {<>: <> \in {<> \in { <>: b \in sk.rx }: bi # NULL} } + + IN + safekeeper_state' = safekeeper_state + /\ UNCHANGED <> + SksWithNewerWal(p) == LET @@ -105,7 +137,11 @@ Next == \/ \E s1 \in safekeepers: \E s2 \in safekeepers: \/ SkCommit(s1, s2) \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) \/ \E p \in pageservers: PsChooseSk(p) @@ -117,7 +153,12 @@ Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,onl PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn - + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + EventuallyLaggingSkIsNotPreferredSk == <>( LET diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/0 b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/0 new file mode 100644 index 0000000000000000000000000000000000000000..abba549e8c7b73aeef5f8272a54c22ca7d98c8ad GIT binary patch literal 733008 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�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 YoBkqDzQATGg_6)}x&i%K{czO(1F38mvH$=8 literal 0 HcmV?d00001 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-0.st b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-0.st new file mode 100644 index 0000000000000000000000000000000000000000..7d0052f5a8c7d9a973b1b47c43d34229c3c861d9 GIT binary patch literal 90112 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 JP_Qr<_dlziLE``b literal 0 HcmV?d00001 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-1.st b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-1.st new file mode 100644 index 0000000000000000000000000000000000000000..841d483d9194361c4ba7fd19fb74a13d698ead92 GIT binary patch literal 90112 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

LOUZnbhBBEpM-*jJz(`pC<;p1j% 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

h%fDMnq}JnK8mO>MR^*PFfHp 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 literal 0 HcmV?d00001 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-2.st b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-2.st new file mode 100644 index 0000000000000000000000000000000000000000..552f720b5b66118e88aded5948eae3cde9879d2c GIT binary patch literal 90112 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 V;>8_Q7ubaKCqRw@emJx${0Cc^>~;VE literal 0 HcmV?d00001 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-3.st b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC-3.st new file mode 100644 index 0000000000000000000000000000000000000000..17245d331146205a93209d492c76abf923a058b9 GIT binary patch literal 90112 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%0Dr1u+!mJ$WTdpPa#QxD@4FA4Zs0{ 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

Y$A+FUUue_ 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 literal 0 HcmV?d00001 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/MC.st b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC.st similarity index 100% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/MC.st rename to storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC.st diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/MC_0.fp b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC_0.fp similarity index 100% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/MC_0.fp rename to storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC_0.fp diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/MC_1.fp b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC_1.fp similarity index 100% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/MC_1.fp rename to storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/MC_1.fp diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/nodes_0 b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/nodes_0 similarity index 100% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/nodes_0 rename to storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/nodes_0 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/ptrs_0 b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/ptrs_0 similarity index 100% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/ptrs_0 rename to storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-23-52-40/ptrs_0 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.cfg index f7828ba1ce..f1c0cf2115 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.cfg +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.cfg @@ -18,36 +18,37 @@ az2 = az2 az3 = az3 \* MV CONSTANT definitions CONSTANT -brokers <- const_1737309054555163000 +brokers <- const_1737327160682382000 \* CONSTANT declarations CONSTANT NULL = NULL \* MV CONSTANT definitions CONSTANT -safekeepers <- const_1737309054555164000 +safekeepers <- const_1737327160682383000 \* MV CONSTANT definitions CONSTANT -pageservers <- const_1737309054555165000 +pageservers <- const_1737327160682384000 \* MV CONSTANT definitions CONSTANT -azs <- const_1737309054555166000 +azs <- const_1737327160682385000 \* SYMMETRY definition -SYMMETRY symm_1737309054555167000 +SYMMETRY symm_1737327160682386000 \* CONSTANT definitions CONSTANT -max_commit_lsn <- const_1737309054555168000 +max_commit_lsn <- const_1737327160682387000 \* CONSTANT definitions CONSTANT -az_mapping <- const_1737309054555169000 +az_mapping <- const_1737327160682388000 \* CONSTRAINT definition CONSTRAINT -constr_1737309054555170000 +constr_1737327160682389000 \* SPECIFICATION definition SPECIFICATION Spec \* INVARIANT definition INVARIANT PsLagsSk +PeerRecoveryIsPossible \* PROPERTY definition PROPERTY EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:50:54 CET 2025 \ No newline at end of file +\* Generated on Sun Jan 19 23:52:40 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.out index e69de29bb2..9996d5301e 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.out +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.out @@ -0,0 +1,53 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 121 and seed -1130553646976177579 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 25330] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:52:41) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:52:43. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 1627 total distinct states at (2025-01-19 23:52:46) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 23:52:46 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(9) at 2025-01-19 23:52:46: 45.678 states generated (45.678 s/min), 7.117 distinct states found (7.117 ds/min), 5.486 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla index b2245ec002..62ff97b5e7 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla @@ -22,44 +22,44 @@ az1, az2, az3 ---- \* MV CONSTANT definitions brokers -const_1737309054555163000 == +const_1737327160682382000 == {b1, b2, b3} ---- \* MV CONSTANT definitions safekeepers -const_1737309054555164000 == +const_1737327160682383000 == {s1, s2, s3} ---- \* MV CONSTANT definitions pageservers -const_1737309054555165000 == +const_1737327160682384000 == {p1} ---- \* MV CONSTANT definitions azs -const_1737309054555166000 == +const_1737327160682385000 == {az1, az2, az3} ---- \* SYMMETRY definition -symm_1737309054555167000 == -Permutations(const_1737309054555163000) \union Permutations(const_1737309054555164000) \union Permutations(const_1737309054555165000) \union Permutations(const_1737309054555166000) +symm_1737327160682386000 == +Permutations(const_1737327160682382000) \union Permutations(const_1737327160682383000) \union Permutations(const_1737327160682384000) \union Permutations(const_1737327160682385000) ---- \* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_1737309054555168000 == +const_1737327160682387000 == 2 ---- \* CONSTANT definitions @modelParameterConstants:5az_mapping -const_1737309054555169000 == +const_1737327160682388000 == [ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] ---- \* CONSTRAINT definition @modelParameterContraint:0 -constr_1737309054555170000 == +constr_1737327160682389000 == StateConstraint ---- ============================================================================= \* Modification History -\* Created Sun Jan 19 18:50:54 CET 2025 by cs +\* Created Sun Jan 19 23:52:40 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC_TE.out index 72ebe05b45..9996d5301e 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC_TE.out +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC_TE.out @@ -2,7 +2,7 @@ TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) @!@!@ENDMSG 2262 @!@!@ @!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 96 and seed 147884281130356166 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 12007] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +Running breadth-first search Model-Checking with fp 121 and seed -1130553646976177579 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 25330] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). @!@!@ENDMSG 2187 @!@!@ @!@!@STARTMSG 2220:0 @!@!@ Starting SANY... @@ -25,7 +25,7 @@ Semantic processing of module MC SANY finished. @!@!@ENDMSG 2219 @!@!@ @!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:38:05) +Starting... (2025-01-19 23:52:41) @!@!@ENDMSG 2185 @!@!@ @!@!@STARTMSG 2279:3 @!@!@ Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. @@ -40,315 +40,14 @@ Implied-temporal checking--satisfiability problem has 1 branches. Computing initial states... @!@!@ENDMSG 2189 @!@!@ @!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:38:06. +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:52:43. @!@!@ENDMSG 2190 @!@!@ @!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 3861 total distinct states at (2025-01-19 18:38:09) +Checking temporal properties for the current state space with 1627 total distinct states at (2025-01-19 23:52:46) @!@!@ENDMSG 2192 @!@!@ @!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:38:09 +Finished checking temporal properties in 00s at 2025-01-19 23:52:46 @!@!@ENDMSG 2267 @!@!@ @!@!@STARTMSG 2200:0 @!@!@ -Progress(11) at 2025-01-19 18:38:09: 77.856 states generated (77.856 s/min), 8.653 distinct states found (8.653 ds/min), 4.790 states left on queue. +Progress(9) at 2025-01-19 23:52:46: 45.678 states generated (45.678 s/min), 7.117 distinct states found (7.117 ds/min), 5.486 states left on queue. @!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 197257 total distinct states at (2025-01-19 18:39:09) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:39:09 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(20) at 2025-01-19 18:39:09: 3.084.377 states generated (3.006.521 s/min), 204.964 distinct states found (196.311 ds/min), 7.704 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(25) at 2025-01-19 18:39:12: 3.224.329 states generated, 208.868 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the complete state space with 208868 total distinct states at (2025-01-19 18:39:12) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:39:12 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 3.4E-8 - based on the actual fingerprints: val = 6.3E-10 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:39:14 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 1:1 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 14290:208868 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 41, col 8 to line 44, col 44 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 41, col 18 to line 44, col 44 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 42, col 9 to line 44, col 44 of module replicated: 22348876 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 48 of module replicated: 22348876 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 8981324 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 44, col 12 to line 44, col 44 of module replicated: 2924152 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 32 to line 41, col 48 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 45, col 8 to line 45, col 67 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 84:530666 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 48, col 8 to line 48, col 32 of module replicated: 2410478 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 48, col 8 to line 48, col 15 of module replicated: 1879812:4246157 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 48, col 27 to line 48, col 32 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 49, col 8 to line 49, col 14 of module replicated: 1643803 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 8 to line 49, col 9 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 13 to line 49, col 14 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 50, col 8 to line 50, col 72 of module replicated: 1170534 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 8 to line 50, col 38 of module replicated: 639868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 42 to line 50, col 72 of module replicated: 639868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 54, col 13 to line 56, col 50 of module replicated: 530666 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 57, col 8 to line 57, col 58 of module replicated: 530666 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 682:54601 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 8 to line 60, col 32 of module replicated: 1934413 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 60, col 8 to line 60, col 15 of module replicated: 1879812:4246157 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 60, col 27 to line 60, col 32 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 72 of module replicated: 54601 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 8 to line 61, col 38 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 42 to line 61, col 72 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 8 to line 62, col 102 of module replicated: 54601 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 63, col 8 to line 63, col 58 of module replicated: 54601 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 45241:1113137 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 66, col 8 to line 66, col 30 of module replicated: 2992949 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 66, col 8 to line 66, col 13 of module replicated: 1879812:4412756 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 66, col 25 to line 66, col 30 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 67, col 8 to line 74, col 29 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 67, col 24 to line 74, col 29 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 67, col 27 to line 67, col 91 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 70, col 28 to line 70, col 45 of module replicated: 611653 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 71, col 31 to line 71, col 91 of module replicated: 611653 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 73, col 17 to line 73, col 54 of module replicated: 611653 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 74, col 18 to line 74, col 29 of module replicated: 501484 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 75, col 8 to line 75, col 62 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 90643:1113137 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 78, col 8 to line 78, col 31 of module replicated: 2992949 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 78, col 8 to line 78, col 14 of module replicated: 1879812:5525893 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 78, col 26 to line 78, col 31 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 84, col 13 to line 86, col 37 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 84, col 33 to line 86, col 37 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 84, col 36 to line 84, col 66 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 85, col 22 to line 85, col 66 of module replicated: 406880 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 86, col 22 to line 86, col 37 of module replicated: 706257 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 87, col 8 to line 87, col 58 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 57927:203919 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 97, col 8 to line 97, col 27 of module replicated: 412787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 97, col 8 to line 97, col 10 of module replicated: 208868:417736 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 97, col 22 to line 97, col 27 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 98, col 8 to line 98, col 30 of module replicated: 412787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 98, col 8 to line 98, col 25 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 92, col 15 to line 92, col 33 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 94, col 5 to line 94, col 66 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 94, col 26 to line 94, col 65 of module replicated: 626604 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 94, col 12 to line 94, col 23 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 98, col 24 to line 98, col 24 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 98, col 29 to line 98, col 30 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 99, col 8 to line 99, col 109 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 99, col 28 to line 99, col 109 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 29 to line 99, col 44 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 52 to line 99, col 108 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 72 to line 99, col 108 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 99, col 105 to line 99, col 108 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 99, col 85 to line 99, col 102 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 92, col 15 to line 92, col 33 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - ||||line 94, col 5 to line 94, col 66 of module replicated: 203919:203919 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||||line 94, col 26 to line 94, col 65 of module replicated: 611757 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||||line 94, col 12 to line 94, col 23 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 99, col 101 to line 99, col 101 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 8 to line 100, col 58 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2774:0 @!@!@ - -@!@!@ENDMSG 2774 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 118, col 13 to line 119, col 81 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 118, col 35 to line 119, col 81 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 119, col 9 to line 119, col 81 of module replicated: 2208822 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 118, col 44 to line 118, col 72 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 118, col 22 to line 118, col 32 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(25) at 2025-01-19 18:39:14: 3.224.329 states generated (2.761.383 s/min), 208.868 distinct states found (178.878 ds/min), 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -3224329 states generated, 208868 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 25. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2268:0 @!@!@ -The average outdegree of the complete state graph is 1 (minimum is 0, the maximum 9 and the 95th percentile is 3). -@!@!@ENDMSG 2268 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 70074ms at (2025-01-19 18:39:14) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla index 33971e3071..b59645ac75 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla @@ -17,6 +17,20 @@ CONSTANT CONSTANT max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +(* The minimum of a non-empty set of integers *) +MaxOfSet(S) == + CHOOSE x \in S: \A y \in S: x >= y + +\* END HELPERS StateConstraint == /\ \A s \in safekeepers: @@ -25,9 +39,10 @@ StateConstraint == /\ \A s \in DOMAIN broker_state[b].sk: /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] InitOnline == safekeepers \cup brokers \cup pageservers @@ -58,20 +73,21 @@ SkCommit(s1, s2) == SkPeerRecovery(s1,s2) == /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] /\ UNCHANGED <> SkPushToBroker(s,b) == /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] /\ UNCHANGED <> PsRecvBroker(b,p,s) == @@ -86,6 +102,21 @@ PsRecvBroker(b,p,s) == ELSE pageserver_state /\ UNCHANGED <> + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + sk == safekeeper_state[s] + skis == {<>: <> \in {<> \in { <>: b \in sk.rx }: bi # NULL} } + IN + safekeeper_state' = safekeeper_state + /\ UNCHANGED <> + SksWithNewerWal(p) == LET @@ -105,7 +136,11 @@ Next == \/ \E s1 \in safekeepers: \E s2 \in safekeepers: \/ SkCommit(s1, s2) \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) \/ \E p \in pageservers: PsChooseSk(p) @@ -117,7 +152,12 @@ Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,onl PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn - + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + EventuallyLaggingSkIsNotPreferredSk == <>( LET diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/0 b/storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/0 deleted file mode 100644 index 589450a97d72a90bb5a8ea1b0bc6a7a5aeb3901b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 720007 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

D2g()%+kW~35X$1p5LE?U(C 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�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%0Dg2Ue7Veg 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 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/MC-0.st b/storage_broker/spec/replicated/replicated.toolbox/Model_1/states/25-01-19-18-52-55/MC-0.st deleted file mode 100644 index 662525646c0a80016ef9a25c411dc9ddf0f50221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270336 zcmX8bcRbf$7Xa{M@0Go0$Vx~OB9%%M*)t)cB9gsILMgi>Df*F3Nu`pkL?lHaBSc9= zMoB#9d!OgO_v?Io+#lkmyFV0B80$4W1eR?tVWAK(Z(TsVpQQjg2jY>b4GgJOoSXLMwyEynuOXD zyveeAUPGtWfzW{Vv(9O}{rkNL9%vT$4{p9pdCUO15~A$}thg5m^n7l=zg}*@MNshe za*AK~bOpi`MxV+44cHfn~B$3kXk8G8Lh3Hmn{exR|?g#Vtx}mcU5ukKR#@l1BvDZcl1#Jg(;u z*t^tSw)~nJjR*jZgJ;%z7*xRd7HtL!4~K#+5r zzdw%gC?z3hAu7~wzaeXdBjO6kcxvzaG5S0?55bllpZ{x^3PfMU#KN9x9I^#HjX&iSJ)rsHy1c%m@UO&{kbCBR!pc~uM zy{GOYs=|PbM$kb2?TTjC5;cHZs;NgfIounm&NY)h6DmL>zXDqB<2y5aNs~3O|r4eGsF@s z8h*UE)A=qN!3VXDFEa;L#0XLkPJc=~Klp>7fQ9an)=0%ctbSTx>Tx-wd~GK#Fhc## z(430w_7eoho2+TacBt79JgSP_vZ0K>5WxkWfi;=}%};v?Xjq)tA64dKsxTsMbF}v2 ziOgDr7?{)1UKI{{$x869#g!wzmkleCN)h4??dD#uIIBp&bW`%;!-Q>}2raOn-{BCz z-@=2~1q-~~-Yk}x%LsE=d?=k!ac}c)0(z-B+mFrP*a>v`pW26)C*2^BYVUnrUA&tE z;S63;yPqdB8}$0+Q7V&;I>4sp9B9mWuVUBvfpvTN2Pxyh~tplTRUE1BWZ^S zhN7wZG2Tr!Er?i<7HB)mGhiQrNQIw5R@=@ihKeF?LGqJCr;31cVFa4iCqAsJX7eWC zJ65tPGGU!e@Ot}nh*XtJHNkkAS&#H!zA&N`=^ zfA$2y-=6nHJrjwz-RvFP{@9L-EFNpCBG`G5z?w! z*!5UkvIt^R4~tH50!|wvtG&s~HVP*(AqW%owN6R4|0)UWOFhO+Px0djsCmKIz-LFf z5KRgJw|tX^s9tVA!R8ALTP8<6q6nfs|GaX9AsH$vKiOw0G)*am_H>Do6!ny-fm z%=uG|(g%h-5js$wWHQBB$c390VHXroG{wM-jhK2bbP9Y+y( zSJv3)1~;x!2D%r1Hr=Py`!AI;pS|G8cq<{yB6AL51!rwt7uK|fDO0e56Vs&zHZPlB z5hO>of3{M8g4+xuM4V4%UrsB6d9x2P4-8GP2Vo?H+TrH4j)gIT zw4-$jez(Rx6GV=gSw3|v8bbI&T8>Oz!_baN0!F=&g4(@2p#%)&3(0Jm!>U>`+1xm3(jVbt~x(FVtFzGbsv6QWdN8;BGL9lUbOijudFpxeW$ zCsRR9$>mKQhfQG+{+h85x%>x44hda;Kfq>f#w+`RIiDnYNl=!P%7FKQ5i@Oyjv zW|s0)JSY*_Qo5WMxJUOQWTBVW(Ol%`47NeU!*{e_n9TO;Ak<;5=zaxl8aqxKv63jk zu%sxOfzSs&o!o+^f9>i7_y0K{AO*ul3#;m8tg$ykEswVV0#=|>F_9&qbc@ArBRi#38z<(~%%Wvz}NPD5aJ zaQ)A`&E^Cmg`cEan-97nq9J54%V)*m2-X3D{!gCm)qulzVWP&7}UeQp#{1fVvOw(OqjF7!md0?0&gy zy6nbv0!F)IZo?U66ug1xvcuG$LrUclpFnN*13}ioO?c5ngi0mw9&zfzW`}TYPmN+# z5C4St1{G1yZ{B&n{TP9drjz;isJX8MzSGI)6oZZz6Syt!YRt{we-p6?)|Tf?n`n)K z3DQomn!Hf?_=q4X_#^Y4pT83UXlbB+^UW{j#X*EO^fGe4 zbNb>+PK}e?hhgezWsVfOC$O3GU7aJ>*tRA-uvhm0ncx)u-7StF$6zDFWr-E z6s64cJP3XM`^Mz-3(P1&HgrqnkNtn@2~_zRzvZscpGTxX?}^t2uY#685YU?DU7IQ9 z$|tBh`(3v6VxK=E2S#iv43Bf2!%{|^ydhpBeaSMK;P1n$GCm`DpAjWc;%Ted^s5QG zCF1Sb^kyTbuS*0SSybu9C+-~}u-n4@(3GD8ON{n0#FU-YE??87Wb`rYFuoP8r8?C| zuuv9$b(*#f>kT7DrKQy(dG{&5ry2YVZ|*qBe(Mlo7;@JKrFC2jYaH^2RN$~ys`AN>j*XLcahr;9LHQEZr>bl+y7hHUAuXmCQGS6nuqg>}6%bnwE$pMea0Giioh589nJbNF?-nD_dGI@0ibr>t zpsxR#q|&fH76m@0E;I8mx$zZcrbnQ)dEX-m{$oBn_9m%%1A(F~lhcSOdpp6e zt%=Gu>u+MS!=E`k`{RMsNUajVbna0O4j=j!f+pScNk)J1|3l?DZF=)%vqg;fKvUx> zc+C2^fxy=Np-1EO89Ylca`@+?3^|eO*lG|~^S8_b_X$(h)CZoO*`)ILp(SNb%K=ae1ORh zt8J}ms@U-9W}#B)fqi#pY7;^7y3>CB(XX}>boj5taD8cHCID0O?Qh5H-Xm7w+frk_ z-Lr){g36mGtG;Gh#1mZIRPs=KXL1*Tl(jv_)msPe5Zu_Da8~M4P7lHT!3R>OHt4+r zpl1Q`>DrtIW@%>vg(x+u-Kk;hZC^mhzJ~ot~Ep2C06ZgTp2m#PE zys}3u!Z(?K=Zvt6Nai)%KNyL)Q*fxW_7e^VVV%xLGsS}zZWY|uum2R7O9 z<6qb(aHfdg9fJyjw^r;CYOwamXm)7AH;6#FkR|(-q!b>=7_l48`|4ntf{hDdHgSHy zCH4ko1Zoh$S`)4&t&2BE`t7h??XmK6JvVILi2h2MQA^KG2Lh(c8;jrN>f!|hBeL$C zEKv+MuwNrO!?y>Bn4VNX><81O!1C^-dsuvkjgmj^%0&J?M*yu|jDdZ&c>Ti2_dSMz zkLCFB%%Zo2>&2(?`E=>8{U1g`oF!RXDG9NK2PNw(*7UCZB;aTpe0=Cs9%Vj9!L;B= z{Ka^OLW1n!YpgGV10^VBGf@#1Cb$Bd$ZMfz?G1cN5CA3m~Q9 z;AmB}+Y-U$Lmk%ZcL`#NVdQv*S|PrkRfCfF4q*K?FJ%<89Etb}orx#)hA(?#St2suUD!)6UPqb2S9npQ zyuE6h%l{+h{sJ*=)b3c<7-_9#VUGXhLsyg!Yc-3Dz4O?YEN|DyD;Y8FA*ewXjX zsn&QdU?gyl(O`zXZ7aeMVjimQQH<<7N${OZ)z^7{q87nLS-FU7OfTs^2_5R9K?K76lf|9yy9zuAd^X?S z^5yK!g9L}~R8v`*d*SCSh8VbgD843ONj8XJ3tjNo`coXuh-CP5;cM3SO9sCYHzE3N z@3Gp{4Ne5$UOTI#Hu@i;7>eTd${A0OY#`{;sjQ0v2?2twwGz)w|DBX2Sa*$4%eVU? z<@XfBAE8X6TKT5kh)1Ay{V5f5hZJRUkKoSh{myoKSiU2g;BKXG*T7rv8w3YT2PD!S z?4qpc5d6Gf&Obf0i87oa*z3NX-!tGHWduXe73!MXJnYL#@Xb{GmTNrIO@e##%Rh8q zQQ-;5Fa_P_c6xi;|D%-46dd4N&L6#Dc7&if-NTcq^$T7wFftnu!Fb5DhBE3Y7`$n4 z7rqPQu18$CXXwPecbOXT2X?>e{Nl>Rutu;xP~hL2t(!Rs?n{2n%XuzR2Ea%UY2Q}Y z#iWKxBP2lK%a7E~OANsTKCS?_hSUVV5_GJ_E4oc!7_|W&1!?!I7uN_mu)` zak20*6YJC5kzL|gRS2rjEn|9(JH`=45WZ3}(Hs;(d4UmV{m5U*PK@s*D0^a++s<+e z%aYLo;{Elxd*ohDB2GewtE8N9+Z$|yh}aPBp47Q9+!%<=2k$gdW8OJp|sxhL>&gRNXvx<9;@gMZa z<@{}uy}l8Ei5VD*PX9RK8JSBkz3;;O>!upKD`RBI=D>vF!IrZKen{E%yuM)S(I2OpzBJ@COwc*h9^dGn+h@%HLM1K!1=O74L>6{qmypw@2hF_Dp-5=iX#_qyo z124TpF8(s7>LNJXtd*g_c|453!|;&jtOJb?!X5HkZ%;R~{<%*e$IyJnqEsDkolJf( zmKoVElHi0#8{%4q(T~792g-0FA)H%@yJSY)6p;zi|GaOgZL7ac5Pm4y)bK;pD*_sm z-a8&mLzpUjY|pEXFh-|>tB8CkaN5=IqV1*>!Go(ZJDwYEHzs&>P2}`@FI_xknC`<` zSj|m6rQcZbOzrUO6_e!2+@1h}QIFAI;-+b$1lhq)1h+Y~ohLZgy(3a}bDapH4@Py| zm-DEez9sN^akM#_lj%4CcZbu@$*nB2hzVG)@LLEXJEj1bsh~qXB(bz;s+r)9V~0)P z*XRNSJLDWLsC~;nkLM4wF!WPjxNv`<#}gqBoEe9X3|s0vLTrYFr!HLc8RKIFy=ju^ zSO3UdA@~=n1%J{mUPkPIb(%b4W&*Fa5wu4wbcxB)Vku*!_8?1QgkRFU4dFS+2Man?4p?GU&(LJ2M^O(Zp10!3yf}Ul5%8f?6g_SY|Q~QyO zzlcFN-|lsLYb+I(Kl683$;ytpSz!H*z%KOSi8GI1Pa}SVPz-h6`VZeS3Em~jn}ii! zxCFpL2QM>Mm=^*I9wXMlvr2<>_P>wI5aO`PkaOZqv||Fn7WN0{GS<{{5K8d-Zy8(c zSDo(!(n2nc;*#7&h~3~Uq!|^*6+MGE3~n3uomCF{9gYYA-KLm!slm^f1H^6fi;RCV zT=fwb;CQ0#s*~%VVMH3p&ji2JDeTAdhvhc#X7Z_>R2+0hl!1er^IiTZL2M|9`h&W> z#)52&1QNYo+Es>~*!?l$^ir)e$?VDk;tBK~O79zeDAhsWuhw_!z(yxbFGk{o_k7D? z)=ovVK%v{Ug;QakdIYb7Jv;x^2^>argWK?HX0PTxa{^}B^kXu{j{Da~Csz=lbN{5%;PFOWIfUK`mXzc}OfLwu z>_%nGZ63-JbRLf!XO{bfRfUg5;%CmzkBwOI2+0SHhGxZA@sL1lzRgMdG2r1tgd5Pa z_gsGd;VB;P2#uK$`QcNZSXGEmy%Cd-*l9KsG-=u7Ju~ki)<__W%@Hg%r z^sAKKO>o$k-f1Vxk{vy5MA7-_}Io0m7kp^YqbRBJYUltz8#rDM8K8=W9Ux3 zM9Dz}v~9evr!8z;N}w|^pd#IQlrqzckb1gOZb9V-o`9^^fKz_nt(fZ%3qjn=Q-LAb z-FW_BWJ*FX!or~OEdh<+621R9HA>?D18?0TXs!#VB=J8GX5aam?#|nr1hjnTpR($e zn-Yk9-OC`ku2+?*>;;O5YNG4-+RYb{r$fQMz>VP8TG8< zp2NrpZ~Lz5n&dQs?b3g03$1%_|6t?;uY1_6{4>1oASQm*T~681L8-UbaQI)igsx~M zp3aEjbOFC{Phm%b)7lH0e{i-^R<0M42WV+sOl02?*t}Pn)KcHmj2MUAm$H7avu+bc z`~smDM=u}PK!v*m(NXW0Qc5rXhM`>K`XW0l?a0(+`))H7Dd5=&0`!0A)uaq^8R?U;8%nkyfqaS66idH z14SH+cWJ%5Qx#VmVe@0($YP0qFG2(AvNRaJ9b(!^VAbAe`?yuz8_ zK#X~!oDY}FuMBIQ$VxHq2Q)*hV`R_DKAiD6_<#I17n<+HdK5GukCKZG)x z`4U8gJo0oZp~3Bp5wqkAEo@A=SZ|0LZoY>N^HaE;*&3kjr_9mg)Bh?7cDCKld-~4t z0s*f|Tlb)gJSA@p@K3;+KUT~Ti=6T^A_qEq_S9otBgU3|eb4`Jr7Um*I3-;S-jHiU zNpB~danF8YG}A9fz-h6oTcEH$kU*=?aca|nJ}m;P*GV7cua>nF1k05Ng{pC28^jmr z>Kv5g{dAs^g8}$zwni^}=FKmHn+zR3n`J`qEWwDct9k#>K5x9kBAnw+gkG9y{eMIv ze_Gbab89O`CgJn!cz{my_I(6RbpN?pmlX{YOio{Kpk-nCLU7-wKU>R8cLK2l;wxMB z&e|1F>R<_8KWS%O-VmGsz)lOJ2j@x(FMYg%;DWBRm(N^tDYGD`yM6CMSCwik!J%Va z;&=Ty8wi+to4)zSP8=rK|DsGuqI|rOpw~2g_^lDA6haKNH)sa_jo9{+;GcxY&EAGZ zOM-O$0;`g&^jrd-{yhWlOASvEoJs#Y(>cIJ8Ji-koB0u%?AKsIaPph^`uycNyZ~Y( z{LHqr`LR`9f>X1pmgR>p-6inmaGpMUtke*p1vAIq$7ZU8o*`h{|BKf|H3##C5uxa* zI`^ocbMl4639qx+^aPblTPrB_1r;@I@dh}LyTEh zoij%8!h}Dg+s>%6jqA=Pgfm1K^O@=Kjz9He(M49${|1iy`xrj0VH>bM}oF2bMVrT$3JL z+^O?{l7nFQ8}}=AF**4TA{O2|+>OyOq8=mA48Fqu)pqOH2W6!97b;O2^*ZzpASY% zL*K3)Tb|waqD*cYaxC^Jjay{nNsC~je&ko(RfV4$+5f_PJ(Eaus5501{({KnUHxr0 zhj7{)jNo|p_K0pV6)rFbe)Z&|}TLTds?^}t(+BbluPp*J4ng=}|7COD*!&CN@3qtnqa|~!H+-A3e~BiK`L86zM#xBcX1a??pqXH=T;2q&&f_%# zu?0!F|IYhiOT)(&8=ignw=9UOfCx&`bnXniO-~>{yLEWs-7jo*7}@dFh{sUC8w-|0 z2Q=KXYw0#{(Gs{b$2pyC5Pd_CsKaxk@9CL?1W&YB?Gq-KFr)Z0`QCkfg{DKe(K+@) z{7)HI75ObG1iObC9q;$3Q4zFUIxun5J^?!tJ|_G1-J#Q)v#?hoJ~}=>|1zc)myyE? z#N3=qEqA}8%*P5INREGHVa;hLFiuO*d-SZv2;mCXRrkl3S;em)eBo1Y70<#RGfe`9 ziuCCK6Lm*|Vk^%ZM@LVaA;LkKUqkV&ehIcggf#o$wS)PM{RFby>%^wwa&gabBtZ9+ zdz@K`BIWlaK+Qh)iuE~XxCo|#y@Ky4I8ok~0Fjl84l1w<{3Y+mIoqjJDYBSP=w{8EmY zJ8ldF!{5L3VIMeg(;|dib}^{9mgEy`S{r?#6rJ3GXoD3uwyfi$Cb0x`{hGSA8&53| ze9Q5;m+_d2GVL~?7F}$&*?9mrI>$%g9HtuD*!mK$)QAjjtN*0GnpF^lSTiV0MM!QW z5WleJHS^D3l=*xCPXEO{`ZjY93I3*M<@-sWpyc2S2 z6!@57gX3>zdSCoKh`R=_FEswu!;Esug7?oemi&o@SOm5Fu9POy8pD zuo4l{HkW0d9`dC`)WP+|w->&my*O>e!d1Z>iL9UX2z~f7X}Yd}I_Uv{7;oJ0^wC<} zC7gB;!^E+wF6M;$6d`6(el+tykukw?huU3#K`|SG3=7Bsp#V?RxC- zh&idWeZRa8*Ad)OQEb_eZ9tii9b9SR@eI)##>68AzwzBXcAZKQ;Q>k;Yrme{qbW!b z^K(SuL{3x)!HFk}3rd0Os0l8gtk{2WQwCNd=V@3BUO9eH81x7-y&M#`E9%@QU`$pH zx2_q$O^c7E&a<0PpI5+5%NY&)Dd*P<*01ysoK`Z?eK6Uvm0%>~nd_J16BiJdL8)NV zb;pb2*lszqz~u3c*H*`$V2L66XYQrYPo^Xz?!wz+zib7r>#`so0B=c6w~}KFA3=Ay zLd-&cs~-W^QrE95N@MtW0UxV4Kg)WVkFJ=2Zj`=?ey$OBFh*AWGfr4ls8N>j0f^>z zzE@bRrY!vf@Ri&%AJI_OhN#Ee#tq8|ak)H#gVHPQv>zG93HHc!F^4JNdyjYnX)XgM zwJWAS2$};}Q!SiSC@c2~n(h^Mt?EZHBNpM8VZp`xQ_~^@S|caiPp0@_cfm-pqRk*z zv9~UP{mN~JR1Svq5=Q#&5F^S zaXSf;#AH5I)vqfjC>0Y@>2=7)7vN*+6Jq{WcXnZoB1Bjv-_cQx;hsYrtjU(y$^ZBb zf)mzuT@ZG${f9RcM9l0%CQp|;>j+NNo}diW z8x(52uODyNhF5g3!h4Le7XSSRq_NU>AS%!78KsE`sf88A*Osym*n} zIu9;0@pfa6v?wn)4;&jhf6NMI;b(NN6foM6`bVz3fR5mb_$^VL*!PrCr@(JZM$f`; zZZ8RbnW;FYNqSMHkOH4-xcTdbBAKBj$@ffs3`(#J2|7;})UH81UNaF+^dX&g)Wsdn3{zaMm?Bh){t|4rQr{ooczPD`4mh8&PRai6o<|IWq>ryAKX2Yfg0_dE zZUag+js)GV+SM_(dQJqJh6{pDawM1#JXbn+yuAPWa{`4t?^{mlqPB=1@L1xt>oJoU z+>HqCeFxT}DxYj85O1H*>)-sU2(b+Rc1+o^T*${xf!L@KRkS69ol>yNu+$b5=pt-{ z{TiXI^mJNogT^)jncrDD5e^kv0P7e)Bu1f`&+ZHx!Rl=`%le%un+U!gUl%nwf5HL5 z1D;F&SW@br;9{+l1XcRKt_HFx{}K4md;gK1H0dT#`r`hfb7UrkphIHuWR-j2K7 zjQEtD`S2pJ1V4!*O2%)=Y-V!DO}j1+d}T`{oHIW463oTuaBErzRwF84z=!6(`&=Wah^OO=>g-z~0o+dZ>7zr%Q zvQ>pyl_@K?3ZXT*NqY(}QS!D5-LDb{PiS3j0pMnV!Eok@THkI-f=fFrj{28z-$4j~ z*DVA2;DAq61bKzt%@Qp4ZX?#i9>wLy(~B!uA>3-fZub4^pUwij8X|lT+z%h9|9t?l z9iGIh|46wQ{ER?*_38!-Sr;{etulFofA@8DA@;*ib9K^evS>X4-?A$Un4}#wBo9iys?jRzkuJh&r+%A48{=suy$Hp_^{d)JmkeXU*g$D1Az(CHlfI7;{09GyT%$aR2a7 z!<&UM2|n&BtVA9T$mzX!dfn0MSn&v1x19-GyVgx2M4;i~i{v}Uway?kq0zuqu*rV0 z2XPP%iU_FAs{dX`urqL;gTuA;JHinjeNd1z^)#*^C>x9)rp`#KB#1j@Ji1_PMtQX( zoC`S7({j#vnxN#S`I#))Rmuyzz&+BCy)}Rr7Z_2~>R51bPgM-TwY685|ZR3^qgQd-}pI(G#S7a1*d? z*FB5433toxYg`Bq!5xek8WT2Hx2_d0KM1~#mbI;=|0tur30v1MIeRfWd?65U=}W)( z*@y~J4A*}yl^6M`SP-bXFt2p@YCRzkPuT2`-A(zwe&J)%7Wr3I;`Fcy@jQaFw<523 zE$qPJ<7tA)S2}ayLq~)NN{#ikwjLb4iRgkqdt~Llx4YubLR^Z!N}avxzKLKiMz=Ee z`@lEE5FBi*VhgI9K1M*@C-SJme*g~&j3}#p3jgt*(-ScTva$9%^=_DBRU!Ibbx(hM zJBoXb=MPkL77Lve3dO48rH9!@^8-oz#zzp`P*2yK@V<2%HwI!a3|kg_omfLi0Q=GX z!PeDcSbPYJLz?en_P@bh!mAAqnydcTA1W9V6zo$QVFZSs zbT9aI<>BWN#F91JFtc^34M9DZo%pc-v26sKul{-F_hZlxVF7}Tp?sF1LC+Y23a+(7ih4KW=TCjF7(qF!$ zQReno9T5ue6<0Z5B;5Ofhyz)wtd_x#vN{Cx12;l)r(7tLi-Vh7eILGz9ymde`)03* zRqa=OL^`a>w)aZGICdn2G+TF4%jg|$g4u_CGs&HJuu>wj-#^+<`TmthlQmtRl*RCyOmKOxp7u;uTaSFv+RfZF3>8TL01TYzQ|O0k1ur&-fsb zL?A!%g||NZkT<~(fgult*+{H-e8I2RzaRL={Kfky;xJu1JL|JG$_QS8^h5^DvT-m2 zL5n*>m`3%Mt%x3Yx;MsInD;;cft<*L3pZ9I-3Sg^iOw;lCfgBAZ_adhY!E`3LJzzc z%wL%t>)%CSRF+>GGfw%g6z?d+A9pW#=wo${fM#2AWo)D#KS8On!S&Lqy)OvP-ipv( z-TSo>@e{gR+O~wT43-ik&D~-Cvs+u6z{329B`>>yFhS^J$A#U+!(xbkP~~=-oAHUs zYXT{?7!w;^H>@2#X3()wKJ9gK6W&k|uPS)eGU^oeBly9vGn!5JZs$0`(8QRG2xmTy z03(0v>ekVxK7NRhf&Ti_ieYh_*9lD0Vgi)dx5^+kLB6e3aN*6@xL63ev`wG4ZKucd zA~Xlrj_NX4#~}2e{T%Z{&h?(u1b0jKo5e@+EfWN!8sAkEqdJ5z2Fv8NWHY+E5d;k{ zIo?p6i^g5TX9LqgH0KhhOfXgW^)0&PlodlR8r+S1kr1JKxblNV6E%ZMG zAqZY`LmRV*I4l>wOTa;`BhA|WNELzKcM`zvaqw9c~=*ab_(fBU22g6IQ(Hd@H z@@*@?#3PubUw>UW!7WXYt#f1Q%%OdlQH=a&6s-I4FN;5cLF3pjwbJK@2@W-M$K`+9 zkGaOj!sI9A7xw?a8$Lpr_UqvIH0wcxJUCVloW3h#M0uM$sPEtZ(y>nWAHmU5TR!QT zYk1Yg$b@EfwtcTDGh#CczW-;^I_>_E;KQ4@Ob;{S@p#9G`)FO0yvi+Zf=@K9Ija?0 zu&MIzfU(F>_l)XUOcmn7i~Hf)HyiK>MQ~j;l=c#sTtOUwQxDHPY*AuQ`#-K~aBMmE zb{)Z+`HI^Y%(NK^hQ+T?y`RrwBiMaF@!`EmRV-zG2e7Q*+^P&6xITyw`;D0q|M|Ef zj)8#Y)}eB>9NfW(O7+C0msTOT(GfR4-m^~o)gOpB0|l#VQNK6s!_`JK>TkJbAsB=e zf-vWM*-V>bh84np4!##NYB4c0dBjSjuLz+I;N;mH$_Qe5kwEtJoz)kc@^;%x)r;2(9z*4RoU(1Z^Ct>pzbl@g}fo&cBI&pV&>{EptC*Qi$?xI{cX@sZKM|m#_E| za7tc2e^9&?+d4)9j`LqM(}+JsV0S@Ykvdr(cQ8g&Z(0pi*;QmBzC%<}n>V}L`RxR* zzxr-$s}`qJ?{~QRPunh!z7-ojf_2$2q3h>=558j3ept1eOSr!j0S7 z_VhU**1^y|1`qY2IGh~fx;$vQd%Wen-StL@YPvc#rPo)fwk5mYn>C% zUIGa}r(nxXcd&Nwu}8H6@7L)i;9?=JTFRX^$Wp{nBf4Y7Sli!eG$WM2U%X4ZZ-7Oc zz+wK!_4uG7$_TcCf}`II?`t&yg5jQt=>Ntz_zB+Vew17^D8s#gkChavFQ$()KOs1` zgVn0p$fFjq8%Aapvho_A)exM1OxN^lM;a~S5VX^_Zu{vX@|?ilT-*KD#AYhQVQ9%EZV}a=miu^Ax^R6EJO*1UjqPQyb_7Bo zGT?^UDLn%tg8tF0bC7uEJi$EU9qB{zAEFQ!z%cxX={k>9JWmnU@zm0a5@D|iUJT8J zhvr-2ZWKs^mik;(Rh>l26w)B*i0-+d^8>F4rZw6JEI1^>WF!C(&WhUCI@Jf;Mmz>S^HYKpx}oDd@*b76EPN@EkYG=Uj7 zTzpiF*2(G+LA+=(?R~cA`1wa*1)}LI47e%>9s>ySK}^5UxdYopejrq#?y+`_@`4^_ zM{pnf$4cGN{`o8(V2J*8b~4|74PdSjnwL0pl4v?{KMPvJZ#QF|hr>_$32GG5i`X4a z?h$0W#tdK0)sL)y5f>pxZ>af1X3aRknK=1ReXWOF5!WD<%}|OeRtNim;D2ypu+HOP;N z_Lz9Y{_-Ar2}k-y#4lKwZ+v8~q!Ek%trs@<@4$NT%Rd`1J3>Oh{3&CUtt1#HhhS`9 z+`i+g%ock@8==A3A%)+;>^6bD-fRe zH9#+#;^u!h365t@zy5LcilU!mn|T-FtWL&?K6BG2)Fr$m&m zJUXaVx`sVb=myM|o%M5R-h7%M@pjEl=9w+u5QRWL635m^{TI&#gs05gnzwm2%ZO@F zQ{6VS;j;}MU_uRG;S-i39_oduLdYN9dFQmb=K!J;oazD(Zu>&{uTTh0!joMhWy6JY z^N1yQ$S_+v(Bq0nDB_i1q0yg4oihN!v>-BPr+6kl=q>^Kwrxd>RK1vMjQDBL+;Ele z$1Wz!1-|QD^_93|Z3$Qv?9Ui!$KWami@`&Oz&kFP#<*z_MrHfUr_nK>R z38F9Yet@{U^(EJ5jV3HHVJ(<6Hrir%I5iUC3>(x_Iin8*Y7Yl1<$#OopKn4+B0-AS);8h1By7>bu`qHvQ;5!6E1clcy}DA) z)~t9$DqOSYXoQt`ow^A=2I6=^hWYc!!VzCxPgWvR#J@5gWnS z|7ZE}OY@j(#L155CV0c`Cj@CtT&~jhx2_VD|2*Lm z+oyk=;CH*kk8@($PZ4`TutPh~B6G(m!9~%*d!xn$&j@mum>0a#FW_Q{SOLw4_o>a( zlax_gfzOR^+SH%zF^PyfI%k&NtgH$lTw&8jPYv#~emVpd3XF>;gBfcCHP>uZ%~W zWp?ky1s2tZ=FHF3ABWiSmx|hf(U!BG8@^Ox^G1ldMTjkpwV4s91-%(<{wJ7#@PH3Z z3!D>!Y5j=PFtB02sd1kfJ;9UxcNl+UM&r)HNY5ARkJKwOzKCd$p?l3d+j0#18{!A+ z_}JZQ23!Tv%aB(2!oP!UZ$9EK%oO~I-m)RakwCWWozF?@$vub%_-WDE-qNN}kAPuw z@~1OdcQRBac2--KLsoEFaz?+a* z2@LIjH!={TgY}8Pzo~ysdwLP8SL`vE-KwCjD0_bx(F}Fx$3EG;?Zd@Fs6Vu(lHc=5 z5b+MyrBd;PoXQU(`0GE%_WqMA?naD+S=!|Jbkbcy48w)6)@{!hT(CmKet^}iq_V)1 zn2Q9@xw@@a(R%+9G7BbK2-Y?69lyWs-hjs@=vrXTlhjed!cgk%3@qz>=q zGbPx<5@wKGWFbqiq2RpS^#;-87w1{tawjpL)2{}Q~*K4EpR;i@Hp zrU3oji&uW{M(ly5aVgbR$&yRJ_Ew_$Dy`Y=cua}U!jPTJ60`qKRRa2c z<-}N{Emj26KPnFlYB}Hr#K*)nm?zIy@y`()jaLpI<*>yrCcX++`V{&23Ro=&oMu~= zl6V5~et;1!*Lz4_D1k;#w!4I>+t&$kr)JUL6iA~9IX z>a_(+OhOHcW4>P!IV2uUuyymuOmI#swhfH@dPp_1YZ`EyA=vmeh2OZuOArXsj5zFm zUdT(ZXvQkz67GyMmDmnE?~dHEDfospikMb@KFx3U)Q;ebWKr)`u@Nj-j7VwTbQb68qt!psV)NlGnH-2<@xJydNbu>JenbNIy8tUvZ7V{o2+Xv7Pqk z5w>7FWbNuqi+?Jl;A~HLB7F$u7AwNxVtpzzk;_LXff>k0e}G-%!DzMex=!9R%@y2qvi$%q$FptkGkDSiHCf^DDU zE1v(}g*yu)mb&j;devUxmOR9JAl zs2BH|#dPxgDjA2BIUaEr^dMaI0>7~u#O zZ%^?^N!`LvZIWJ~H?Uda)C~81g4fK49kP;R-3h4fmK|!-GR;N=g6-;y_hQP8_Xsvg zzgA*7c7pPPKqv^%@w1=Vc?=N)YcEwdZBYKiLGbM2&sS&0-OnPDf!)AWf37|Rmr=49 zsQ%;>?e2URM^IbF7fUU(9SY3d`rE~)w7%^j=m~MdKWo&55}X+> zIc!;6?T=`J)s)P%fwsg*f~D;uPI|xBmI#<$pASv%WLqZqeP6CGNS6I7q6?lyE;_7T z(83!Rf|;*Er3`p>5!}$%_g#(E#e+q12r>sdtKYxG^`+qSnNRof|5&*pra-0Moci1* zZXbf3Nx}L}zt>ad^9R(aq}fuR8b1Y)qKDW$5&~xHm~fXMx^J0{eBR#MNMN{l`)TFl zpCJftm}i*a>iWrvi-q`LyZ>*^3(7Z{r6geUY4IJ_#WdJdrLNxf z)k>PB$!QD10uD(2Df>MtKm9`r1zrKG2!%g>X+E=a2K0q*% zoj6RTJ#>}<<8;TL4{Y-p&|$f6qc_e2Hnt6a;sJTcj>7a<(6E^?pd9UuQ6$$_)VuZ&MySclrtkC?26pe<{sJ|}{RwGTM+>j1EW%|tVDsjZNbZ%p z{{Y{S_jM8pemZqnb^(s-3GW*szBvN65vTOMLHi%A4-w*_Mov=V8lyELEdXAm#(QP7 zz5^bALcpc)$GKL{4(JCwl1Q=6K7b_lIz8YtdL1NX?|VlMRwjTOAKQ=He{P+`_*AQZ zS4VlG45Q=$qt98f=dkSZIHU4V*AVj_??V_yMvuru6w`{l}n;ZSxaAPoHs{_V@N zu}mCw7!vD`3u%94WhJJh3dLC-)6+Nc^u#Er44LCx>$-qp#jDtR`eUv=pb2e0U}L=#BI9e?DM}VU<~%;=~aM z*HsW1U$5GEYbr(zZwI0+wTT{28lVIWp@|ot8QX+@5lJzGm_PkANPDV8oWc;w)L{JM z^|}hm8BkR!Y^?0CA1=%QWl?v3tXst8VlYU2zh1@X^a?PIlyCWnUU{<*mR-QHwG|bv z%}@gjclNd{U)#~+7$Jgh%C%-$;5r00%W`y6&Mq0|11uw2+s*I0Xyu|Ysu_6r9NH|1 znOjDiPg@HA-533Y5HATjbn4Uma`3me7$0r6$jZp#`vA0vTe~kR8Roa z4VlT#>iiuw~s*A)C$fCgS)M-ImyP`Xf8)28&2iYv{0m z!;Diei|I*S0Fm(coEW7?=T3)WJYByLYN=L4oKGYwOI9xJx^M!T9l+M(gtCueGqf~- z_w`Gehvyu_G01|&Bt^*X6=A$MLf0SE`27JO5q+C#reRK75yIFCFdr@(RMp1VcjK@g z-F7W8jfsfMkz?-IX=Z4H03WHq!?kWY#G57}DZdOa3n?qeUfwKZQ*nad#F3OZ?JP9i z@bbp-h+*QWv(P)U2mv$_2$=F~ifZtDAnUgaCaxV=WtA5uPE*mHyiV|z)e zHq^JO5YU6Z^RwCiF^sDCRD70+ zbeTuoA+^3cecDQZb%b>3jUs1kpJO;~3?3J6azBN!QZC3GrlUQF5FZ)R-#;}I;@kn% z2pH00ek$^P;ul~)x}V3UdF*>h14g#p?5yTqPbg{8;bx%q;1Z2V&Kq&eHeXc zp6N!$Rp`BZI_UgM-ubvXN@|R)`HwYUR1a4JOwomgG>zaJU9ippBHvid&^_z@0kB7Y zG$C4j?%8A*G)%mY*Fs-GVeomNiP!Pj=NjfpFn&ucEE#RM1!B0kz^6UKG+F^cX!J{; zDXH~)Xd8h45_tBS4vjSfqESUKw~5ey?LHWEd(N7AUH#MqNJTGlZblcy=@$c@BMpP~ z{n5F5VPOIM;|dWYfB0k-!()d1X^4Ab6$a;QiWyr!j~|A;qxGc*=XI!Hh^#EQ))^+yUd4!f%G%M)6LJ#J zk32~DzU*TnIxHZg?Eyvg?i^y~`q7n*Z+;6sTIConycArrdSY)dvPBBo6VsZa0pC#W z2VRYN4xe`zzb3M>?skkrVL-(2qRm!t81cv|09}~4|4Y`(j(}f?RZqMiuA8|MV z;wQRZ$V7gBK!?MfEmSK zrRwr7*fGQSW`DI!x?Ro#BUQX8E82PnRwmf&ZV9dR@W4GtB*66b1QHgzbLIdZ)bioT zSBeSej~Iu4k{I;;4WGgI61P7y<`O$JA=pfghvV+1Ug$M|1p2(E-lq4rCzK|jw(bu@ zWJn3IHx*=kOtw?K{SF)Ef zI$~1>#RRB1|MimNiO*2mfM-AaYZST)BQY)+*44YYcmxBSknnaryIltD35*zqL!bAY z8c@UNJ7O$T6#pR;<116dnS5C$R)9CsdOh@}ME;~CMsKoE#(IV8EkG!`&J>^*nsas+ z#yj^ZuKqe5CqNupsm*)ZF?;~}0YIPH<9O#zBJ_hJcj2yj#x(d-eFvZtJr>vd!a9D5 z82CnXhUwGC6m{xP7#8$7`wus&CSja%B|DJ*iTG~Ck#;m?7JPj>PmUg=#Q5Ahi8LF? z9f*X8mK>R0o_vcz@AcQe@JoFP#yM8ATlea25<3_~R2AnHhL3+H4s;M5h%1%|dHfPm z46sysuIrWc7BM=5=vngALXh8gEsVc?_A-;3F z6R=fXeBk`EN>7ZKngf~rGp9^3^0VMS`76Fd-+|3GOiKGs3jKiWN$y-2#Rw5jNtU}Q#*T45BgajWVHU0i`S}suySE&F7Xt<{Sif8`^iNqQj({JT z4YrfzQe1^80kqsww)zwPpbsE}78Kvw1*Ee~VZvyyc@5A&YyF~UA9~yt#rRbB zYB9c}*%fdSsqw8<8~(Wi83Op8I(cE@4kvUZek-()etxZE%l#<^#Z=0Xb?1dzjEDj1 z+N`2sm|)l}faLHw$6~VzfE!x>cV;**fn5iq@`ywK1C`t|jJNcUvc5Fk7r+pHc0c{W zzh-@a9}4?Z)VkMJJ|BbkVp813^BW9+2&DWz*CB;`u?XV>ci7U`z|hBlTj=U|%s!_y zvo{z6cC`Y5Ihu`tOw<+1-&@mBe;UKQaEtBO1tus!h4ub1;#3eHEs9UXD~ zaUp_yH;kJ=APV{YUG?}!or@Upy9Q)P7XBCkt|KqD$7da;55WWrq@b{~w&yp;lVDu{ z+~zUq@n(@5!`N=>v`pqY3N1A_>-Y)ifD`o7W|V;^H)_+rs6LyZ681LB+SdO}vgW-hMB zMUqsyeq*d~)wD+VJ|d1y9F3RShg|JsxsKt*Q*%pJ`ymt{MAYBKio1+aKg5`+r+M4m zN(WUUsEqnHg-+8Qc~%Md4_PRemD0>wz!eH$i;ijiSmc3PfH^8*@SRTLxC`9{P%mM~ z{N)2VG&`5I3kjq@s3>#OzIfU*NhwQ ztrpv0*jDupNM=)$mS}EfvEw{J+a>_m6C0gq(|cnMN_M0l0`{pTtP2x6u$2 zd=YWp<65|>xepQvko5kcd45+dtR;ZmrXT7q9Q+ZA;i*@nKho=$f)ReeO6D(Jq!{1| zik(J>cB^hLVx&9G{EL^jAI4a4wg{4TxlRn#6=W9n{^aH7dq^-cBPL}_3e=_nu_*S^ zTI_{K?}*usMQ7!Pn>glG$uKS*ttifXB%Oeo`2H%abAlD|N1@^yJx+}KHasI76fg1s11QBdMep&!L(mTZ2drvtk0`N!0!$)1 zm4nYjohL72kWo4^{>zae#$XX0qHZvG_2$k9UrO$BN`WK0yu~m zM((xvp0$Mg1;Dkq^I1F-7h3^G&@F-M=Jn%yV4VX5tCF8cG&3^*NTb;7H<|SheVzc+ z(N)Is%X_SBPGK->+8wbTxdc~SLI%j}hqU%Q*FKnfz|5NT?_ci5_5fEj-r^;^5YE|y zu}U9k^xiE4P7Wf+BgObw3x5-ba|!K_cGIOKISq>hplHu&u8UFTQ0RaZy?vwi?kDfZ zaB6>ag;JHz3J{J8BBhOT@tPBoe z$X9%=<{Xxuz=&PWTmD$9$qL9o!*tJ&rBhfsU|8nxP+1NxDq<*>$WUY-wHm;n(>UX7 zB%G!JC_&dQKJ0#O`5$ovHOS)n`}zU3doZVfjgx8JT`sbd80W9A9k0n{x{uMNcZ(%Q zqFM`MDV2R##Dn1+pc$24xqI+*-=RVbAM>k5l@fMGG49Ny%{(`AtHP))`$b}>X`zO3 zf8mz+Jn1YkI?X8HNkYb*d_>Gb7kUtt{QOHhai0ZX&FDE-#Z}RPu{wHnD&*-aA}P91 z8wrDG*St#@U>Kg0Wpp`vWc>z4jA_N6_tQ!LhcnAqD7p7I3yyrwC=}dBwkxm zPL$_@%LoAT%2Mb*Spft%ga+g#+&f;BWne5k@65hfy$VAGkv7IXS<&aD|HHVnFnyHm z+*uC{6Z_ZRTaVtTVr^-7Fa5B{`8-hRb^K}IEi+iRp=3Pb1{rL6L0HhF+N;;cBq zO;`9HRwe+`_nWUv53R#RBjEfMIWkdp5xDdKOo+W~L`kW-7+WRx*ydNxf5l)CqH*G* zCU-Z2=lJb9lOQ7yD2tLtJKe{2Wiy6{iy?xBJ27z>gASj5jAgM5R{yzKu*CQ0cL z%^_mf z#z=UjBR=I}G2}JCRqnFOk$?gy3}IU|sdl)}$L;C=;d`zpf%|6;)VA;iYCYr zYv|In%iA4}G-B$nq08c@hPh?@p&9|JA)_w)o^?Vs0#a!2@#MUfzk#uIueVHCCbQyF)%=@ly2XJw>SUy7qohRAG)BB>GO{-_ONk;G&jD6;Hk4?o}iSv1ec;9ij8F%~*0=z|+E+rW!#^?E99I~NLuRL*! zD2%sAgQab_=I>1?TH!wQn7gn4@n|Ys9{@J0NgGV~1c;OCLzWi;nOjCYhym$Cl_$Qn z1@}l2Xf0!D~+UG zc#l!znX3Noq(>*-H8S zzUIZzAD22|P9d^oLhI-MG@u5cgbdG~te+SB4#Nu=lxdiFUfxCtfZw_(7$^&PItUp8 zcro#3m(Ae=^#C&z72_UQUSqnBp}4N@b~dg0Ip8cJ)1nzyVN55*X#3UC&H0g94?{~g zn!j`+4l)Eb3-j6J+n2Bi=?@r}_Evn+xCm1Mc*hkd`|Af!0!Gw#)zLGOT*MK0p{XQ; z(;6m+gfY?-b0b~Fr-(7|LX4NotIMywzK2m+s4V~Rr;{W`Orp9hZ8UMq1DoxdlE2!t z;SaM77-8|xOwK(H3njpZ5z(v64|)g6r9u9yjBb04E8k&^-Jg)N`JCYoIDi&Ls-6#>+=NyGh`Bl$^mjg#AA^S5 z@4pnG{^I~X^xgLmWzCrgazJtT~REO+~-8UTvXe;)3f{o_u~7%v(H$9bvkp@%@^lY7%|X!n0H z#@q(vUtSBh!sv>ePW#El1?ewZjmCHv{|27rW5aN6?J!(z>>%E>8pX#CCe~WmL52YG zU8f`_7XPhc+`YT^vuaEjbTNno8=Uae?ArVZc!jJ<4Jp<>)-z*t-}m|$TqtlGLvcQs z=BPpa4-96c_3+#b+YH9yiHWysM({B~Vh1jtSG?$gb%{jkMA|m8=0X7#&oRESid3P~ zvrs<}k)!+mF|yF+A;!VY;Y;1{m}U%~sb^6qent{U(1~WELi<%#cOd;mzo6B^QuT;$ z6~wN;pxbO`Pm8rh5_$avks2hEhw7ISc|C*bf7`5I@#2R51`sJKD-xY0z8omJf*yC6 zG07^(kYiklEjLmY;+dp>dwG;?7rJiNJtH?cVM&50YjzWq76QPAgb%<9Sko_Gsh6! zOBF#ec4aR>4oSVJ8FLzb#sfHprZlu}=L^PoU>tMXr%!U0vKwQSc6~YK`g^$MgU$A4 zyNM3IR#V1^Y=2t)r#AlyzzEs0K3ds&BU*;>Y1m5oPVS2+Ej!P(OfKI?Gu5*z6KO9Wr(+ zE8P_Sk%{q@);mtY*#&A2{-fs4(TB}HWOShx0Hx#0EURD5VliIZ(*Ab-WZsCuA9wt} zgNeOqfL=5&HX(ZWwI19D0~pnFRDPfKuEfaYOB?fV7!JYcqH1DO(lsN_v=@zi+j;Kx zZJC(HUPPar7Z%5y0SgP@+ODck?kX+&0Hdh3`K6l?m6ICAhn4Wu3g>R9EQtJW+P=fM z=K-u3fTqRMuOrGUq5A`V9dvc-p=N+}0U+0-B`TLUlZQcLtl+NkBzPXMfacC#+r81R z?u9WrZq}#p{5LV83+PwRnbyLIe07XHyV*kr^Waa^vihArl zVnjDk<6x%fVhytv|Rz#9-Ac@C)aTy=} zenCi_9F?rIOm25IOJZ=T4lV4m%!f0Dh&CgMQ(&q)EY$!TI`MoGhe7Dq;tZ&2wf@rO z?8r`xhBxO}ukhO(2XLWqbFPV&Cw!I|h>RwT+aY5LqfhhCQNjJ%u-1!~KZ>TQTpz3mu}oqt$45S5f~xbyr^ngWNH{y*}X=an!-cTaf0N_%}OS41Gb_6Ph92 zn;5f`28?b$yg4!6()v^@9q(qvh#EQ3UW>YZ0d63F&7u~bGg*5vxV57H-lzS|fU&o{ z?#$9dV`yCBw^1-Tzql9YdtyXyqv)8@>$e>Iaxf|qDm6ysmsK&cT@uFQlg*ScwijLG zeo3k%WAq-hyz?S86Ovp!4<%DvNTpK0`47W(X~NT7AQ4g-A{u8-26^Wg-kL!6O7Nl!jfaG8R$Ie*Dj|vXlmuG+6#c!3 zk!@jfr)XP=9-xZ!gJXqR(*3zHPT!i-5&OElgz?zJ*j)T08}tL%taFg{KOJ~4olw^7ojUuTW`DBPz3@rd$iZSLLx;r}pZ>GwQvzEs}?s6wG%17AP38qmQ| z@>LoPI9NlRX%*7;aFjNsnY)N_VL7VviO4r1(ga__w{#M|nyZZQ#ggRazT|%e7^=hP zFMj-*R14@pL&xq^n*RL?O%)(iQC7#=d=6?(VhEioUolbbCO)7gF^#0%STp+zKmQ+1 zXC7!2EB8PblUPRMp*yEm$R3hnP-gEjuqyE+CTkhpsw?_FRzSIikR%DZlq3@@5$=8k zK#L05M?KQIVjz(K`dcEG6wm5I(E`kVPPl$uQ|$(@A&DhMO_LKRZvq66=M9=0uXP={ z0GdcXt(|M@n-W}@0W#iAma$%okj3b$qk8vFlN{PDM9PYcxfhHqdjW>XIwf6surS00 ze>$`JaXq|rlehrPkz`gWG4rG2B(voAT`%pv)k`rFo$@%ZiN{(L^)~Ps$&+|k&!!gM~}-`e86yB zv@)LyBpz@fS&BR(J;nDgSkq!y&?q;P%eA&+NSNNH-#gW1j=@=1T48(4(-cGa=0&ZK zR|+BHVF%W&{HF}*0_y>_$mnL3@sZ(J8;tjQPrugeZjHy7%8dz~%5{ms$dhUCo=}K` z!hqLAdcVDk#H(Q`kbI4{tH|;bf|Rx}bpMSw|7t|Y!! z2re)HB%Dn;{g1SusY;2Uxh!KvHe>1z06Z^XTAc;H1aS?ccjLgefHUnOfDZb#d5@Cy zfh{cW0EcR`!%iiO-!V?woe!7aYf9`|2kF%EG}3yiK}(Y|g|EKf^>7urMZCro-94`S zAU8bC9wQ@}(w6oI?^S?3x^nRl-EO&g7!W{pp!`3Z86%fB&Jt6Yv}fJ}{in>7VS!7-9*&!58Hii?O*xJ>0Z;UJ7GO>{rY| zdjtzVyr$=iJ%@YV2&A&qJ9y6Fq2e#YbqW~I0yp@M@sU6QLlfkEpL-pi9k zcLmUoW{Z0!b{DX{$KbrfEn(?2+JwPwIGeXljqU=zp_ry#PpWULp@3h=LeYs+(QR87 zL-N%9`LH_^Re&v|{i-uSxbwt+7{wE_6Fc4Iei%;#S0z8&8^M4`Qz5_NOC0_8^kLV4 z7msa!$4_u40GN^Wd99K%{@n;eIkNKS>AcZk01tAu4o~(Ep&v+xBAe#wjN7*ZnE`R=!MZ>yy9@=i8bHC8 zgURC$(sLNav74uv^Nvyh?xM(>eWbf@I_<|WJlG%J!(h;c;dejW<%fUoCk(Z_wA$u& z9fKGtaW0cT&zXb)3ejF(eW9O=oOpX7lq%QPf+`2w|Fj{(d4WJTv95cNCy;{=) z(1@lGnNK+Vb?8Wd1g|3*6iOfLG0r`-Hc~bsevDhX9fdAe`rRy+BF3#9$%w>+Tw}Q< zfl*d^=Mq!>}Xzo;j^P1FHck%P*4dgBkBa0)Uq$Yt$ay2KWW0-Qv3c}h>zxou!X z0VH3xlcq}Cq2U9<-V_Em*F&lh_)fYZd@4fuHNXl!Q~!}2b@dBi^xcbJ-*va4spIP>Hih}=RBQTDNqnhl`80j?Nb3L2nfP{T-d zKizKRZhi}piF|GvM4YKj&%t;e?dneYek~U80L_y}@!q(36fPEIo}$*f4L04rEW~L) zMKvy!W>-b*O)%~yB&_tsyt2SB=((lwSWrL<&;mc8I$JGeTP%X{{mAcUZ%C&q0Nse} z_2gRDfM700dq>y7J4L$HfDyFs+QGTA12>ZabEr?7=_jSG{6B5-YTH;rPiQ7J}@ zknqyp&EV4*MXwl5ZEc5aFl7GaJzqUAqzK?ZrAN$2&hy+qkD;c=7r|$Aw;LnSp_}D$>F}}R7)9)fDzFGv4tC!>B1}pvR0d^?r&e^TE z|1P*;l&4e)$Fh8G1h^xEoa6g*u986`mJLM4U3*Ry{<%qkvE{<@LwwJX7{GO;G47Es zx)TE#E_)wwG}JQiQgp&J%GM(t;VxnQce<$P{*X@6(D3b5<<#d~2aa1HOcp zRb6+O8O2~yJ==K9;-D4aBO2R!ee%2)@s%vVniTIp{gJm&3$o*gzFYE%4mlOE>v1$N z$Y#rV*%dNG_9yZ$m7zO28v?7d>?R8ONS}M-&hH|GWrsh%7!#R8MTxj3=^82lEWa8JEuJ;zNHEH4}}RxmT#-%L$8v9-)zuNx@TB? zlo8{=WGv5{Gs)1ARlWvrSsi#pJG_JK1k*^gQ)ovH-6r%||aN zka7Uh&}7=^i>F-I;YvuZ0HtS%O_Q$0GGPRJm3?XrP|yZ6AkkKR_sJGk>q8)wp8p+n%p$Ut?+q$Rn$N z3B?@eZ+BoQA1!WN8yDEXXe+*$(9!nW2t!OwIl|2{#Sz0u>W-v^zVLH^7FzV-Oh|A& zpoH=L)-&d(!!dA`29behN4*c#X3k;!W1?W0aFeCNxbI%8p#4!e8sk<}!1e*(DOhC` zj8XL8(;V;w8dz8W5tcmky3#G*F=o_lCjYEk(E@By_wQ$6*=4`XFkA*0(~Hv8xG?(s z4o{y-;?4wIKv@?xo~=xNfV>9G#O3hBF-F5|0~RGLX`fs_L`>raw5O#>nC)g^8k3Q!&qkN?la~^J97N~I)9ve7c?N?% zk-1cXx)o9xBJatdl72Zw03IRxDi7+z9(2U$JVNtNPxPA@(w70Ap-0`*8+r6Ia7h4I zoyuVH$JI>k@ek$hE+=oDi|V1#u%0D{<`i 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�gNb6E^!;IE?#;h+%^bJZ$j8XF4YLwh&x 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⪙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νQITk=z*6~u*7`J5Yg{urU#2}AOQh$Cbz8p6!T$? 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�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с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 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.cfg deleted file mode 100644 index d030d28ac1..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.cfg +++ /dev/null @@ -1,51 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -b1 = b1 -b2 = b2 -b3 = b3 -\* MV CONSTANT declarations -CONSTANTS -s1 = s1 -s2 = s2 -s3 = s3 -\* MV CONSTANT declarations -CONSTANTS -p1 = p1 -p2 = p2 -\* MV CONSTANT declarations -CONSTANTS -az1 = az1 -az2 = az2 -az3 = az3 -\* MV CONSTANT definitions -CONSTANT -brokers <- const_17373075907692000 -\* CONSTANT declarations -CONSTANT NULL = NULL -\* MV CONSTANT definitions -CONSTANT -safekeepers <- const_17373075907703000 -\* MV CONSTANT definitions -CONSTANT -pageservers <- const_17373075907704000 -\* MV CONSTANT definitions -CONSTANT -azs <- const_17373075907705000 -\* SYMMETRY definition -SYMMETRY symm_17373075907706000 -\* CONSTANT definitions -CONSTANT -max_commit_lsn <- const_17373075907707000 -\* CONSTANT definitions -CONSTANT -az_mapping <- const_17373075907708000 -\* CONSTRAINT definition -CONSTRAINT -constr_17373075907709000 -\* SPECIFICATION definition -SPECIFICATION -Spec -\* PROPERTY definition -PROPERTY -EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:26:30 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.out deleted file mode 100644 index cfe6177fe8..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.out +++ /dev/null @@ -1,164 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 44 and seed -6447714091281296951 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11418] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:26:32) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2140:3 @!@!@ -The subscript of the next-state relation specified by the specification -does not seem to contain the state variable online -@!@!@ENDMSG 2140 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:26:33. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2109:1 @!@!@ -Successor state is not completely specified by action NodeOnlineOffline of the next-state relation. The following variables are not assigned: broker_state, pageserver_state, safekeeper_state. - -@!@!@ENDMSG 2109 @!@!@ -@!@!@STARTMSG 2121:1 @!@!@ -The behavior up to this point is: -@!@!@ENDMSG 2121 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -1: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -2: -/\ pageserver_state = null -/\ broker_state = null -/\ online = {b1, b2, s1, s2, p1, p2} -/\ safekeeper_state = null - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:26:33 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 1:1 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:2 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 40, col 22 to line 43, col 44 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 40, col 32 to line 43, col 44 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 9 to line 43, col 44 of module replicated: 464 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 41, col 12 to line 41, col 48 of module replicated: 464 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 44 of module replicated: 208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 86 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 40, col 46 to line 40, col 62 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 52, col 13 to line 54, col 50 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 55, col 8 to line 55, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 8 to line 60, col 102 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 65, col 8 to line 72, col 29 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 73, col 8 to line 73, col 55 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 82, col 13 to line 84, col 37 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 85, col 8 to line 85, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 98, col 8 to line 98, col 109 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 99, col 8 to line 99, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(1) at 2025-01-19 18:26:33: 2 states generated (45 s/min), 1 distinct states found (22 ds/min), 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -2 states generated, 1 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 1. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2685ms at (2025-01-19 18:26:33) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.tla deleted file mode 100644 index be5c82d29b..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC.tla +++ /dev/null @@ -1,65 +0,0 @@ ----- MODULE MC ---- -EXTENDS replicated, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -b1, b2, b3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -s1, s2, s3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -p1, p2 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -az1, az2, az3 ----- - -\* MV CONSTANT definitions brokers -const_17373075907692000 == -{b1, b2, b3} ----- - -\* MV CONSTANT definitions safekeepers -const_17373075907703000 == -{s1, s2, s3} ----- - -\* MV CONSTANT definitions pageservers -const_17373075907704000 == -{p1, p2} ----- - -\* MV CONSTANT definitions azs -const_17373075907705000 == -{az1, az2, az3} ----- - -\* SYMMETRY definition -symm_17373075907706000 == -Permutations(const_17373075907692000) \union Permutations(const_17373075907703000) \union Permutations(const_17373075907704000) \union Permutations(const_17373075907705000) ----- - -\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_17373075907707000 == -2 ----- - -\* CONSTANT definitions @modelParameterConstants:5az_mapping -const_17373075907708000 == -[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] ----- - -\* CONSTRAINT definition @modelParameterContraint:0 -constr_17373075907709000 == -StateConstraint ----- -============================================================================= -\* Modification History -\* Created Sun Jan 19 18:26:30 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC_TE.out deleted file mode 100644 index cfe6177fe8..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/MC_TE.out +++ /dev/null @@ -1,164 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 44 and seed -6447714091281296951 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11418] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:26:32) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2140:3 @!@!@ -The subscript of the next-state relation specified by the specification -does not seem to contain the state variable online -@!@!@ENDMSG 2140 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:26:33. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2109:1 @!@!@ -Successor state is not completely specified by action NodeOnlineOffline of the next-state relation. The following variables are not assigned: broker_state, pageserver_state, safekeeper_state. - -@!@!@ENDMSG 2109 @!@!@ -@!@!@STARTMSG 2121:1 @!@!@ -The behavior up to this point is: -@!@!@ENDMSG 2121 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -1: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -2: -/\ pageserver_state = null -/\ broker_state = null -/\ online = {b1, b2, s1, s2, p1, p2} -/\ safekeeper_state = null - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:26:33 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 1:1 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:2 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 40, col 22 to line 43, col 44 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 40, col 32 to line 43, col 44 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 9 to line 43, col 44 of module replicated: 464 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 41, col 12 to line 41, col 48 of module replicated: 464 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 44 of module replicated: 208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 86 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 40, col 46 to line 40, col 62 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 52, col 13 to line 54, col 50 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 55, col 8 to line 55, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 8 to line 60, col 102 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 65, col 8 to line 72, col 29 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 73, col 8 to line 73, col 55 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 82, col 13 to line 84, col 37 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 85, col 8 to line 85, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 98, col 8 to line 98, col 109 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 99, col 8 to line 99, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(1) at 2025-01-19 18:26:33: 2 states generated (45 s/min), 1 distinct states found (22 ds/min), 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -2 states generated, 1 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 1. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2685ms at (2025-01-19 18:26:33) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/replicated.tla deleted file mode 100644 index 0bd0ed6d91..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307595008/replicated.tla +++ /dev/null @@ -1,129 +0,0 @@ ----- MODULE replicated ---- - -EXTENDS Integers, FiniteSets - -VARIABLES broker_state, safekeeper_state, pageserver_state, online - - -CONSTANT - brokers, - safekeepers, - pageservers, - azs, - az_mapping - -CONSTANT - NULL - -CONSTANT - max_commit_lsn - -StateConstraint == - /\ \A s \in safekeepers: - /\ safekeeper_state[s].commit_lsn <= max_commit_lsn - /\ \A b \in brokers: - /\ \A s \in DOMAIN broker_state[b].sk: - /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn - - -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitOnline == safekeepers \cup brokers \cup pageservers - -Init == - /\ broker_state = [b \in brokers |-> InitBroker] - /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] - /\ pageserver_state = [p \in pageservers |-> InitPageserver] - /\ online = InitOnline - -NodeOnlineOffline == online' = CHOOSE ss \in SUBSET InitOnline: - /\ Cardinality(ss \cap safekeepers) >= 2 - /\ Cardinality(ss \cap brokers) >= 2 - /\ ss \cap pageservers = pageservers \* assume no PS failures for now - -SkCommit(s1, s2) == - /\ {s1, s2} \subseteq online - /\ s1 # s2 - /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn - /\ LET - new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 - IN - safekeeper_state' = [safekeeper_state EXCEPT - ![s1].commit_lsn = new_commit_lsn, - ![s2].commit_lsn = new_commit_lsn] - /\ UNCHANGED <> - -SkPeerRecovery(s1,s2) == - /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn - /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] - /\ UNCHANGED <> - -SkPushToBroker(s,b) == - /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state - /\ UNCHANGED <> - -PsRecvBroker(b,p,s) == - /\ {b,p,s} \subseteq online - /\ LET - bsk == broker_state[b].sk[s] - psk == pageserver_state[p].sk[s] - updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] - IN - pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn - THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] - ELSE pageserver_state - /\ UNCHANGED <> - - -SksWithNewerWal(p) == - /\ {p} \subseteq online - /\ - LET - ps == pageserver_state[p] - IN - {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} - -PsChooseSk(p) == - /\ SksWithNewerWal(p) # {} - /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] - /\ UNCHANGED <> - - -Next == - \/ NodeOnlineOffline - \/ \E s1 \in safekeepers: \E s2 \in safekeepers: - \/ SkCommit(s1, s2) - \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) - \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) - \/ \E p \in pageservers: PsChooseSk(p) - - -Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state >> - - -\* invariants - -EventuallyLaggingSkIsNotPreferredSk == <>( - LET - sks == safekeeper_state - lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } - preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} - IN - preferred_sks \cap lagging_sks = {} - - ) - - - -==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.cfg deleted file mode 100644 index c3df677c50..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.cfg +++ /dev/null @@ -1,51 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -b1 = b1 -b2 = b2 -b3 = b3 -\* MV CONSTANT declarations -CONSTANTS -s1 = s1 -s2 = s2 -s3 = s3 -\* MV CONSTANT declarations -CONSTANTS -p1 = p1 -p2 = p2 -\* MV CONSTANT declarations -CONSTANTS -az1 = az1 -az2 = az2 -az3 = az3 -\* MV CONSTANT definitions -CONSTANT -brokers <- const_173730761739711000 -\* CONSTANT declarations -CONSTANT NULL = NULL -\* MV CONSTANT definitions -CONSTANT -safekeepers <- const_173730761739712000 -\* MV CONSTANT definitions -CONSTANT -pageservers <- const_173730761739713000 -\* MV CONSTANT definitions -CONSTANT -azs <- const_173730761739714000 -\* SYMMETRY definition -SYMMETRY symm_173730761739715000 -\* CONSTANT definitions -CONSTANT -max_commit_lsn <- const_173730761739716000 -\* CONSTANT definitions -CONSTANT -az_mapping <- const_173730761739717000 -\* CONSTRAINT definition -CONSTRAINT -constr_173730761739718000 -\* SPECIFICATION definition -SPECIFICATION -Spec -\* PROPERTY definition -PROPERTY -EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:26:57 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.out deleted file mode 100644 index a6e6eeecc3..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.out +++ /dev/null @@ -1,174 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 92 and seed -7531418498003009516 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11444] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:26:58) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2140:3 @!@!@ -The subscript of the next-state relation specified by the specification -does not seem to contain the state variable online -@!@!@ENDMSG 2140 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:27:00. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 1000:1 @!@!@ -TLC threw an unexpected exception. -This was probably caused by an error in the spec or model. -See the User Output or TLC Console for clues to what happened. -The exception was a java.lang.RuntimeException -: @!@!@STARTMSG 2280:0 @!@!@ -In evaluation, the identifier safekeeper_state is either undefined or not an operator. -line 44, col 24 to line 44, col 39 of module replicated -@!@!@ENDMSG 2280 @!@!@ -@!@!@ENDMSG 1000 @!@!@ -@!@!@STARTMSG 2121:1 @!@!@ -The behavior up to this point is: -@!@!@ENDMSG 2121 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -1: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2103:1 @!@!@ -The error occurred when TLC was evaluating the nested -expressions at the following positions: -0. Line 40, column 22 to line 44, column 71 in replicated -1. Line 40, column 32 to line 44, column 71 in replicated -2. Line 41, column 9 to line 44, column 71 in replicated -3. Line 44, column 12 to line 44, column 71 in replicated -4. Line 44, column 22 to line 44, column 71 in replicated -5. Line 44, column 24 to line 44, column 39 in replicated - - -@!@!@ENDMSG 2103 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:27:00 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 1:1 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 40, col 22 to line 44, col 71 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 40, col 32 to line 44, col 71 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 9 to line 44, col 71 of module replicated: 464 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 41, col 12 to line 41, col 48 of module replicated: 464 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 44 of module replicated: 208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 86 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 44, col 12 to line 44, col 71 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 40, col 46 to line 40, col 62 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 53, col 13 to line 55, col 50 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 56, col 8 to line 56, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 102 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 8 to line 62, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 66, col 8 to line 73, col 29 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 74, col 8 to line 74, col 55 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 83, col 13 to line 85, col 37 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 86, col 8 to line 86, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 99, col 8 to line 99, col 109 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 8 to line 100, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(1) at 2025-01-19 18:27:00: 1 states generated (24 s/min), 1 distinct states found (24 ds/min), 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -1 states generated, 1 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2483ms at (2025-01-19 18:27:00) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.tla deleted file mode 100644 index 2e29df8219..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC.tla +++ /dev/null @@ -1,65 +0,0 @@ ----- MODULE MC ---- -EXTENDS replicated, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -b1, b2, b3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -s1, s2, s3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -p1, p2 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -az1, az2, az3 ----- - -\* MV CONSTANT definitions brokers -const_173730761739711000 == -{b1, b2, b3} ----- - -\* MV CONSTANT definitions safekeepers -const_173730761739712000 == -{s1, s2, s3} ----- - -\* MV CONSTANT definitions pageservers -const_173730761739713000 == -{p1, p2} ----- - -\* MV CONSTANT definitions azs -const_173730761739714000 == -{az1, az2, az3} ----- - -\* SYMMETRY definition -symm_173730761739715000 == -Permutations(const_173730761739711000) \union Permutations(const_173730761739712000) \union Permutations(const_173730761739713000) \union Permutations(const_173730761739714000) ----- - -\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_173730761739716000 == -2 ----- - -\* CONSTANT definitions @modelParameterConstants:5az_mapping -const_173730761739717000 == -[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] ----- - -\* CONSTRAINT definition @modelParameterContraint:0 -constr_173730761739718000 == -StateConstraint ----- -============================================================================= -\* Modification History -\* Created Sun Jan 19 18:26:57 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC_TE.out deleted file mode 100644 index a6e6eeecc3..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/MC_TE.out +++ /dev/null @@ -1,174 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 92 and seed -7531418498003009516 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11444] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:26:58) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2140:3 @!@!@ -The subscript of the next-state relation specified by the specification -does not seem to contain the state variable online -@!@!@ENDMSG 2140 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:27:00. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 1000:1 @!@!@ -TLC threw an unexpected exception. -This was probably caused by an error in the spec or model. -See the User Output or TLC Console for clues to what happened. -The exception was a java.lang.RuntimeException -: @!@!@STARTMSG 2280:0 @!@!@ -In evaluation, the identifier safekeeper_state is either undefined or not an operator. -line 44, col 24 to line 44, col 39 of module replicated -@!@!@ENDMSG 2280 @!@!@ -@!@!@ENDMSG 1000 @!@!@ -@!@!@STARTMSG 2121:1 @!@!@ -The behavior up to this point is: -@!@!@ENDMSG 2121 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -1: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2103:1 @!@!@ -The error occurred when TLC was evaluating the nested -expressions at the following positions: -0. Line 40, column 22 to line 44, column 71 in replicated -1. Line 40, column 32 to line 44, column 71 in replicated -2. Line 41, column 9 to line 44, column 71 in replicated -3. Line 44, column 12 to line 44, column 71 in replicated -4. Line 44, column 22 to line 44, column 71 in replicated -5. Line 44, column 24 to line 44, column 39 in replicated - - -@!@!@ENDMSG 2103 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:27:00 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 1:1 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 40, col 22 to line 44, col 71 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 40, col 32 to line 44, col 71 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 9 to line 44, col 71 of module replicated: 464 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 41, col 12 to line 41, col 48 of module replicated: 464 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 44 of module replicated: 208 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 86 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 44, col 12 to line 44, col 71 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 40, col 46 to line 40, col 62 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 53, col 13 to line 55, col 50 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 56, col 8 to line 56, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 102 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 8 to line 62, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 66, col 8 to line 73, col 29 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 74, col 8 to line 74, col 55 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 83, col 13 to line 85, col 37 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 86, col 8 to line 86, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 99, col 8 to line 99, col 109 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 8 to line 100, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(1) at 2025-01-19 18:27:00: 1 states generated (24 s/min), 1 distinct states found (24 ds/min), 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -1 states generated, 1 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2483ms at (2025-01-19 18:27:00) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/replicated.tla deleted file mode 100644 index 2b7501f8a1..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307621596/replicated.tla +++ /dev/null @@ -1,130 +0,0 @@ ----- MODULE replicated ---- - -EXTENDS Integers, FiniteSets - -VARIABLES broker_state, safekeeper_state, pageserver_state, online - - -CONSTANT - brokers, - safekeepers, - pageservers, - azs, - az_mapping - -CONSTANT - NULL - -CONSTANT - max_commit_lsn - -StateConstraint == - /\ \A s \in safekeepers: - /\ safekeeper_state[s].commit_lsn <= max_commit_lsn - /\ \A b \in brokers: - /\ \A s \in DOMAIN broker_state[b].sk: - /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn - - -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitOnline == safekeepers \cup brokers \cup pageservers - -Init == - /\ broker_state = [b \in brokers |-> InitBroker] - /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] - /\ pageserver_state = [p \in pageservers |-> InitPageserver] - /\ online = InitOnline - -NodeOnlineOffline == online' = CHOOSE ss \in SUBSET InitOnline: - /\ Cardinality(ss \cap safekeepers) >= 2 - /\ Cardinality(ss \cap brokers) >= 2 - /\ ss \cap pageservers = pageservers \* assume no PS failures for now - /\ UNCHANGED <> - -SkCommit(s1, s2) == - /\ {s1, s2} \subseteq online - /\ s1 # s2 - /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn - /\ LET - new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 - IN - safekeeper_state' = [safekeeper_state EXCEPT - ![s1].commit_lsn = new_commit_lsn, - ![s2].commit_lsn = new_commit_lsn] - /\ UNCHANGED <> - -SkPeerRecovery(s1,s2) == - /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn - /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] - /\ UNCHANGED <> - -SkPushToBroker(s,b) == - /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state - /\ UNCHANGED <> - -PsRecvBroker(b,p,s) == - /\ {b,p,s} \subseteq online - /\ LET - bsk == broker_state[b].sk[s] - psk == pageserver_state[p].sk[s] - updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] - IN - pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn - THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] - ELSE pageserver_state - /\ UNCHANGED <> - - -SksWithNewerWal(p) == - /\ {p} \subseteq online - /\ - LET - ps == pageserver_state[p] - IN - {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} - -PsChooseSk(p) == - /\ SksWithNewerWal(p) # {} - /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] - /\ UNCHANGED <> - - -Next == - \/ NodeOnlineOffline - \/ \E s1 \in safekeepers: \E s2 \in safekeepers: - \/ SkCommit(s1, s2) - \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) - \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) - \/ \E p \in pageservers: PsChooseSk(p) - - -Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state >> - - -\* invariants - -EventuallyLaggingSkIsNotPreferredSk == <>( - LET - sks == safekeeper_state - lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } - preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} - IN - preferred_sks \cap lagging_sks = {} - - ) - - - -==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.cfg deleted file mode 100644 index d73d7b9017..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.cfg +++ /dev/null @@ -1,51 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -b1 = b1 -b2 = b2 -b3 = b3 -\* MV CONSTANT declarations -CONSTANTS -s1 = s1 -s2 = s2 -s3 = s3 -\* MV CONSTANT declarations -CONSTANTS -p1 = p1 -p2 = p2 -\* MV CONSTANT declarations -CONSTANTS -az1 = az1 -az2 = az2 -az3 = az3 -\* MV CONSTANT definitions -CONSTANT -brokers <- const_173730765610820000 -\* CONSTANT declarations -CONSTANT NULL = NULL -\* MV CONSTANT definitions -CONSTANT -safekeepers <- const_173730765610821000 -\* MV CONSTANT definitions -CONSTANT -pageservers <- const_173730765610822000 -\* MV CONSTANT definitions -CONSTANT -azs <- const_173730765610823000 -\* SYMMETRY definition -SYMMETRY symm_173730765610824000 -\* CONSTANT definitions -CONSTANT -max_commit_lsn <- const_173730765610825000 -\* CONSTANT definitions -CONSTANT -az_mapping <- const_173730765610826000 -\* CONSTRAINT definition -CONSTRAINT -constr_173730765610827000 -\* SPECIFICATION definition -SPECIFICATION -Spec -\* PROPERTY definition -PROPERTY -EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:27:36 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.out deleted file mode 100644 index 43fc616158..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.out +++ /dev/null @@ -1,203 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 70 and seed -383534902230932382 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11483] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:27:37) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2140:3 @!@!@ -The subscript of the next-state relation specified by the specification -does not seem to contain the state variable online -@!@!@ENDMSG 2140 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:27:38. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2109:1 @!@!@ -Successor state is not completely specified by action SkCommit of the next-state relation. The following variable is not assigned: online. - -@!@!@ENDMSG 2109 @!@!@ -@!@!@STARTMSG 2121:1 @!@!@ -The behavior up to this point is: -@!@!@ENDMSG 2121 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -1: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -2: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = null -/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 1, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:27:38 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 1:1 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 1:3 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 41, col 8 to line 44, col 44 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 41, col 18 to line 44, col 44 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 42, col 9 to line 44, col 44 of module replicated: 696 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 48 of module replicated: 696 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 312 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 44, col 12 to line 44, col 44 of module replicated: 129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 32 to line 41, col 48 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 45, col 8 to line 45, col 67 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:3 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 48, col 8 to line 48, col 32 of module replicated: 7 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 48, col 8 to line 48, col 15 of module replicated: 6:15 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 48, col 27 to line 48, col 32 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 49, col 8 to line 49, col 14 of module replicated: 7 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 8 to line 49, col 9 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 13 to line 49, col 14 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 50, col 8 to line 50, col 72 of module replicated: 4 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 8 to line 50, col 38 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 42 to line 50, col 72 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 54, col 13 to line 56, col 50 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 54, col 33 to line 56, col 50 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 57, col 8 to line 57, col 51 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 8 to line 60, col 32 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 72 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 8 to line 62, col 102 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 63, col 8 to line 63, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 67, col 8 to line 74, col 29 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 75, col 8 to line 75, col 55 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 84, col 13 to line 86, col 37 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 87, col 8 to line 87, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 8 to line 100, col 109 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 101, col 8 to line 101, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(2) at 2025-01-19 18:27:38: 5 states generated (121 s/min), 2 distinct states found (48 ds/min), 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -5 states generated, 2 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 2. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2493ms at (2025-01-19 18:27:38) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.tla deleted file mode 100644 index c30666e0ea..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC.tla +++ /dev/null @@ -1,65 +0,0 @@ ----- MODULE MC ---- -EXTENDS replicated, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -b1, b2, b3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -s1, s2, s3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -p1, p2 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -az1, az2, az3 ----- - -\* MV CONSTANT definitions brokers -const_173730765610820000 == -{b1, b2, b3} ----- - -\* MV CONSTANT definitions safekeepers -const_173730765610821000 == -{s1, s2, s3} ----- - -\* MV CONSTANT definitions pageservers -const_173730765610822000 == -{p1, p2} ----- - -\* MV CONSTANT definitions azs -const_173730765610823000 == -{az1, az2, az3} ----- - -\* SYMMETRY definition -symm_173730765610824000 == -Permutations(const_173730765610820000) \union Permutations(const_173730765610821000) \union Permutations(const_173730765610822000) \union Permutations(const_173730765610823000) ----- - -\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_173730765610825000 == -2 ----- - -\* CONSTANT definitions @modelParameterConstants:5az_mapping -const_173730765610826000 == -[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] ----- - -\* CONSTRAINT definition @modelParameterContraint:0 -constr_173730765610827000 == -StateConstraint ----- -============================================================================= -\* Modification History -\* Created Sun Jan 19 18:27:36 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC_TE.out deleted file mode 100644 index 43fc616158..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/MC_TE.out +++ /dev/null @@ -1,203 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 70 and seed -383534902230932382 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11483] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:27:37) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2140:3 @!@!@ -The subscript of the next-state relation specified by the specification -does not seem to contain the state variable online -@!@!@ENDMSG 2140 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:27:38. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2109:1 @!@!@ -Successor state is not completely specified by action SkCommit of the next-state relation. The following variable is not assigned: online. - -@!@!@ENDMSG 2109 @!@!@ -@!@!@STARTMSG 2121:1 @!@!@ -The behavior up to this point is: -@!@!@ENDMSG 2121 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -1: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -2: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = null -/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 1, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:27:38 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 1:1 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 1:3 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 41, col 8 to line 44, col 44 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 41, col 18 to line 44, col 44 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 42, col 9 to line 44, col 44 of module replicated: 696 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 48 of module replicated: 696 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 312 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 44, col 12 to line 44, col 44 of module replicated: 129 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 32 to line 41, col 48 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 45, col 8 to line 45, col 67 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:3 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 48, col 8 to line 48, col 32 of module replicated: 7 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 48, col 8 to line 48, col 15 of module replicated: 6:15 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 48, col 27 to line 48, col 32 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 49, col 8 to line 49, col 14 of module replicated: 7 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 8 to line 49, col 9 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 13 to line 49, col 14 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 50, col 8 to line 50, col 72 of module replicated: 4 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 8 to line 50, col 38 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 42 to line 50, col 72 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 54, col 13 to line 56, col 50 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 54, col 33 to line 56, col 50 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 57, col 8 to line 57, col 51 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 8 to line 60, col 32 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 72 of module replicated: 3 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 8 to line 62, col 102 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 63, col 8 to line 63, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 67, col 8 to line 74, col 29 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 75, col 8 to line 75, col 55 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 84, col 13 to line 86, col 37 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 87, col 8 to line 87, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 8 to line 100, col 109 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 101, col 8 to line 101, col 51 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(2) at 2025-01-19 18:27:38: 5 states generated (121 s/min), 2 distinct states found (48 ds/min), 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -5 states generated, 2 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 2. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2493ms at (2025-01-19 18:27:38) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/replicated.tla deleted file mode 100644 index 861110267e..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307660221/replicated.tla +++ /dev/null @@ -1,131 +0,0 @@ ----- MODULE replicated ---- - -EXTENDS Integers, FiniteSets - -VARIABLES broker_state, safekeeper_state, pageserver_state, online - - -CONSTANT - brokers, - safekeepers, - pageservers, - azs, - az_mapping - -CONSTANT - NULL - -CONSTANT - max_commit_lsn - -StateConstraint == - /\ \A s \in safekeepers: - /\ safekeeper_state[s].commit_lsn <= max_commit_lsn - /\ \A b \in brokers: - /\ \A s \in DOMAIN broker_state[b].sk: - /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn - - -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitOnline == safekeepers \cup brokers \cup pageservers - -Init == - /\ broker_state = [b \in brokers |-> InitBroker] - /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] - /\ pageserver_state = [p \in pageservers |-> InitPageserver] - /\ online = InitOnline - -NodeOnlineOffline == - /\ online' = CHOOSE ss \in SUBSET InitOnline: - /\ Cardinality(ss \cap safekeepers) >= 2 - /\ Cardinality(ss \cap brokers) >= 2 - /\ ss \cap pageservers = pageservers \* assume no PS failures for now - /\ UNCHANGED <> - -SkCommit(s1, s2) == - /\ {s1, s2} \subseteq online - /\ s1 # s2 - /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn - /\ LET - new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 - IN - safekeeper_state' = [safekeeper_state EXCEPT - ![s1].commit_lsn = new_commit_lsn, - ![s2].commit_lsn = new_commit_lsn] - /\ UNCHANGED <> - -SkPeerRecovery(s1,s2) == - /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn - /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] - /\ UNCHANGED <> - -SkPushToBroker(s,b) == - /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state - /\ UNCHANGED <> - -PsRecvBroker(b,p,s) == - /\ {b,p,s} \subseteq online - /\ LET - bsk == broker_state[b].sk[s] - psk == pageserver_state[p].sk[s] - updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] - IN - pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn - THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] - ELSE pageserver_state - /\ UNCHANGED <> - - -SksWithNewerWal(p) == - /\ {p} \subseteq online - /\ - LET - ps == pageserver_state[p] - IN - {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} - -PsChooseSk(p) == - /\ SksWithNewerWal(p) # {} - /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] - /\ UNCHANGED <> - - -Next == - \/ NodeOnlineOffline - \/ \E s1 \in safekeepers: \E s2 \in safekeepers: - \/ SkCommit(s1, s2) - \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) - \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) - \/ \E p \in pageservers: PsChooseSk(p) - - -Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state >> - - -\* invariants - -EventuallyLaggingSkIsNotPreferredSk == <>( - LET - sks == safekeeper_state - lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } - preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} - IN - preferred_sks \cap lagging_sks = {} - - ) - - - -==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.cfg deleted file mode 100644 index 17ae6b83c8..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.cfg +++ /dev/null @@ -1,51 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -b1 = b1 -b2 = b2 -b3 = b3 -\* MV CONSTANT declarations -CONSTANTS -s1 = s1 -s2 = s2 -s3 = s3 -\* MV CONSTANT declarations -CONSTANTS -p1 = p1 -p2 = p2 -\* MV CONSTANT declarations -CONSTANTS -az1 = az1 -az2 = az2 -az3 = az3 -\* MV CONSTANT definitions -CONSTANT -brokers <- const_173730770045629000 -\* CONSTANT declarations -CONSTANT NULL = NULL -\* MV CONSTANT definitions -CONSTANT -safekeepers <- const_173730770045630000 -\* MV CONSTANT definitions -CONSTANT -pageservers <- const_173730770045731000 -\* MV CONSTANT definitions -CONSTANT -azs <- const_173730770045732000 -\* SYMMETRY definition -SYMMETRY symm_173730770045733000 -\* CONSTANT definitions -CONSTANT -max_commit_lsn <- const_173730770045734000 -\* CONSTANT definitions -CONSTANT -az_mapping <- const_173730770045735000 -\* CONSTRAINT definition -CONSTRAINT -constr_173730770045736000 -\* SPECIFICATION definition -SPECIFICATION -Spec -\* PROPERTY definition -PROPERTY -EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:28:20 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.out deleted file mode 100644 index 2e22ced64d..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.out +++ /dev/null @@ -1,282 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 128 and seed -4991617861993001241 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11510] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:28:21) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:28:23. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 1000:1 @!@!@ -TLC threw an unexpected exception. -This was probably caused by an error in the spec or model. -See the User Output or TLC Console for clues to what happened. -The exception was a java.lang.RuntimeException -: A non-boolean expression (a set of the form {e1, ... ,eN}) was used as a formula in a conjunction. -line 93, col 9 to line 96, col 70 of module replicated -@!@!@ENDMSG 1000 @!@!@ -@!@!@STARTMSG 2121:1 @!@!@ -The behavior up to this point is: -@!@!@ENDMSG 2121 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -1: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -2: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, s1, s2, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2103:1 @!@!@ -The error occurred when TLC was evaluating the nested -expressions at the following positions: -0. Line 99, column 5 to line 101, column 58 in replicated -1. Line 99, column 8 to line 99, column 30 in replicated -2. Line 99, column 8 to line 99, column 25 in replicated -3. Line 91, column 5 to line 96, column 70 in replicated - - -@!@!@ENDMSG 2103 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:28:23 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 2:2 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 1:6 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 41, col 8 to line 44, col 44 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 41, col 18 to line 44, col 44 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 42, col 9 to line 44, col 44 of module replicated: 1392 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 48 of module replicated: 1392 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 624 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 44, col 12 to line 44, col 44 of module replicated: 258 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 32 to line 41, col 48 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 45, col 8 to line 45, col 67 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 4:14 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 48, col 8 to line 48, col 32 of module replicated: 59 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 48, col 8 to line 48, col 15 of module replicated: 45:105 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 48, col 27 to line 48, col 32 of module replicated: 45 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 49, col 8 to line 49, col 14 of module replicated: 44 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 8 to line 49, col 9 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 13 to line 49, col 14 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 50, col 8 to line 50, col 72 of module replicated: 32 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 8 to line 50, col 38 of module replicated: 18 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 42 to line 50, col 72 of module replicated: 18 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 54, col 13 to line 56, col 50 of module replicated: 14 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 57, col 8 to line 57, col 58 of module replicated: 14 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 1:2 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 8 to line 60, col 32 of module replicated: 47 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 60, col 8 to line 60, col 15 of module replicated: 45:105 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 60, col 27 to line 60, col 32 of module replicated: 45 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 72 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 8 to line 61, col 38 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 42 to line 61, col 72 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 8 to line 62, col 102 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 63, col 8 to line 63, col 58 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 2:30 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 66, col 8 to line 66, col 30 of module replicated: 75 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 66, col 8 to line 66, col 13 of module replicated: 45:111 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 66, col 25 to line 66, col 30 of module replicated: 45 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 67, col 8 to line 74, col 29 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 67, col 24 to line 74, col 29 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 67, col 27 to line 67, col 91 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 70, col 28 to line 70, col 45 of module replicated: 10 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 71, col 31 to line 71, col 91 of module replicated: 10 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 73, col 17 to line 73, col 54 of module replicated: 10 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 74, col 18 to line 74, col 29 of module replicated: 20 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 75, col 8 to line 75, col 62 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:60 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 78, col 8 to line 78, col 31 of module replicated: 150 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 78, col 8 to line 78, col 14 of module replicated: 90:282 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 78, col 26 to line 78, col 31 of module replicated: 90 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 84, col 13 to line 86, col 37 of module replicated: 60 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 87, col 8 to line 87, col 58 of module replicated: 60 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 99, col 8 to line 99, col 30 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 99, col 8 to line 99, col 25 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 91, col 5 to line 96, col 70 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 91, col 8 to line 91, col 27 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 94, col 19 to line 94, col 37 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 96, col 9 to line 96, col 70 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 96, col 30 to line 96, col 69 of module replicated: 15 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 96, col 16 to line 96, col 27 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 24 to line 99, col 24 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 8 to line 100, col 109 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 101, col 8 to line 101, col 58 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(4) at 2025-01-19 18:28:23: 97 states generated (2.165 s/min), 9 distinct states found (200 ds/min), 5 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -97 states generated, 9 distinct states found, 5 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2701ms at (2025-01-19 18:28:23) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.tla deleted file mode 100644 index 683a638594..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC.tla +++ /dev/null @@ -1,65 +0,0 @@ ----- MODULE MC ---- -EXTENDS replicated, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -b1, b2, b3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -s1, s2, s3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -p1, p2 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -az1, az2, az3 ----- - -\* MV CONSTANT definitions brokers -const_173730770045629000 == -{b1, b2, b3} ----- - -\* MV CONSTANT definitions safekeepers -const_173730770045630000 == -{s1, s2, s3} ----- - -\* MV CONSTANT definitions pageservers -const_173730770045731000 == -{p1, p2} ----- - -\* MV CONSTANT definitions azs -const_173730770045732000 == -{az1, az2, az3} ----- - -\* SYMMETRY definition -symm_173730770045733000 == -Permutations(const_173730770045629000) \union Permutations(const_173730770045630000) \union Permutations(const_173730770045731000) \union Permutations(const_173730770045732000) ----- - -\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_173730770045734000 == -2 ----- - -\* CONSTANT definitions @modelParameterConstants:5az_mapping -const_173730770045735000 == -[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] ----- - -\* CONSTRAINT definition @modelParameterContraint:0 -constr_173730770045736000 == -StateConstraint ----- -============================================================================= -\* Modification History -\* Created Sun Jan 19 18:28:20 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC_TE.out deleted file mode 100644 index 2e22ced64d..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/MC_TE.out +++ /dev/null @@ -1,282 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 128 and seed -4991617861993001241 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11510] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:28:21) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:28:23. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 1000:1 @!@!@ -TLC threw an unexpected exception. -This was probably caused by an error in the spec or model. -See the User Output or TLC Console for clues to what happened. -The exception was a java.lang.RuntimeException -: A non-boolean expression (a set of the form {e1, ... ,eN}) was used as a formula in a conjunction. -line 93, col 9 to line 96, col 70 of module replicated -@!@!@ENDMSG 1000 @!@!@ -@!@!@STARTMSG 2121:1 @!@!@ -The behavior up to this point is: -@!@!@ENDMSG 2121 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -1: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2217:4 @!@!@ -2: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL] @@ p2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, s1, s2, p1, p2} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2217 @!@!@ -@!@!@STARTMSG 2103:1 @!@!@ -The error occurred when TLC was evaluating the nested -expressions at the following positions: -0. Line 99, column 5 to line 101, column 58 in replicated -1. Line 99, column 8 to line 99, column 30 in replicated -2. Line 99, column 8 to line 99, column 25 in replicated -3. Line 91, column 5 to line 96, column 70 in replicated - - -@!@!@ENDMSG 2103 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:28:23 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 2:2 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 1:6 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 41, col 8 to line 44, col 44 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 41, col 18 to line 44, col 44 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 42, col 9 to line 44, col 44 of module replicated: 1392 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 48 of module replicated: 1392 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 624 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 44, col 12 to line 44, col 44 of module replicated: 258 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 32 to line 41, col 48 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 45, col 8 to line 45, col 67 of module replicated: 6 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 4:14 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 48, col 8 to line 48, col 32 of module replicated: 59 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 48, col 8 to line 48, col 15 of module replicated: 45:105 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 48, col 27 to line 48, col 32 of module replicated: 45 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 49, col 8 to line 49, col 14 of module replicated: 44 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 8 to line 49, col 9 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 13 to line 49, col 14 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 50, col 8 to line 50, col 72 of module replicated: 32 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 8 to line 50, col 38 of module replicated: 18 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 42 to line 50, col 72 of module replicated: 18 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 54, col 13 to line 56, col 50 of module replicated: 14 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 57, col 8 to line 57, col 58 of module replicated: 14 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 1:2 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 8 to line 60, col 32 of module replicated: 47 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 60, col 8 to line 60, col 15 of module replicated: 45:105 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 60, col 27 to line 60, col 32 of module replicated: 45 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 72 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 8 to line 61, col 38 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 42 to line 61, col 72 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 8 to line 62, col 102 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 63, col 8 to line 63, col 58 of module replicated: 2 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 2:30 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 66, col 8 to line 66, col 30 of module replicated: 75 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 66, col 8 to line 66, col 13 of module replicated: 45:111 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 66, col 25 to line 66, col 30 of module replicated: 45 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 67, col 8 to line 74, col 29 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 67, col 24 to line 74, col 29 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 67, col 27 to line 67, col 91 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 70, col 28 to line 70, col 45 of module replicated: 10 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 71, col 31 to line 71, col 91 of module replicated: 10 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 73, col 17 to line 73, col 54 of module replicated: 10 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 74, col 18 to line 74, col 29 of module replicated: 20 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 75, col 8 to line 75, col 62 of module replicated: 30 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:60 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 78, col 8 to line 78, col 31 of module replicated: 150 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 78, col 8 to line 78, col 14 of module replicated: 90:282 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 78, col 26 to line 78, col 31 of module replicated: 90 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 84, col 13 to line 86, col 37 of module replicated: 60 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 87, col 8 to line 87, col 58 of module replicated: 60 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 0:0 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 99, col 8 to line 99, col 30 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 99, col 8 to line 99, col 25 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 91, col 5 to line 96, col 70 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 91, col 8 to line 91, col 27 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 94, col 19 to line 94, col 37 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 96, col 9 to line 96, col 70 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 96, col 30 to line 96, col 69 of module replicated: 15 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 96, col 16 to line 96, col 27 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 24 to line 99, col 24 of module replicated: 5 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 8 to line 100, col 109 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 101, col 8 to line 101, col 58 of module replicated: 0 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(4) at 2025-01-19 18:28:23: 97 states generated (2.165 s/min), 9 distinct states found (200 ds/min), 5 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -97 states generated, 9 distinct states found, 5 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2701ms at (2025-01-19 18:28:23) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/replicated.tla deleted file mode 100644 index a9b14acae2..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307704621/replicated.tla +++ /dev/null @@ -1,131 +0,0 @@ ----- MODULE replicated ---- - -EXTENDS Integers, FiniteSets - -VARIABLES broker_state, safekeeper_state, pageserver_state, online - - -CONSTANT - brokers, - safekeepers, - pageservers, - azs, - az_mapping - -CONSTANT - NULL - -CONSTANT - max_commit_lsn - -StateConstraint == - /\ \A s \in safekeepers: - /\ safekeeper_state[s].commit_lsn <= max_commit_lsn - /\ \A b \in brokers: - /\ \A s \in DOMAIN broker_state[b].sk: - /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn - - -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitOnline == safekeepers \cup brokers \cup pageservers - -Init == - /\ broker_state = [b \in brokers |-> InitBroker] - /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] - /\ pageserver_state = [p \in pageservers |-> InitPageserver] - /\ online = InitOnline - -NodeOnlineOffline == - /\ online' = CHOOSE ss \in SUBSET InitOnline: - /\ Cardinality(ss \cap safekeepers) >= 2 - /\ Cardinality(ss \cap brokers) >= 2 - /\ ss \cap pageservers = pageservers \* assume no PS failures for now - /\ UNCHANGED <> - -SkCommit(s1, s2) == - /\ {s1, s2} \subseteq online - /\ s1 # s2 - /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn - /\ LET - new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 - IN - safekeeper_state' = [safekeeper_state EXCEPT - ![s1].commit_lsn = new_commit_lsn, - ![s2].commit_lsn = new_commit_lsn] - /\ UNCHANGED <> - -SkPeerRecovery(s1,s2) == - /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn - /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] - /\ UNCHANGED <> - -SkPushToBroker(s,b) == - /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state - /\ UNCHANGED <> - -PsRecvBroker(b,p,s) == - /\ {b,p,s} \subseteq online - /\ LET - bsk == broker_state[b].sk[s] - psk == pageserver_state[p].sk[s] - updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] - IN - pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn - THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] - ELSE pageserver_state - /\ UNCHANGED <> - - -SksWithNewerWal(p) == - /\ {p} \subseteq online - /\ - LET - ps == pageserver_state[p] - IN - {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} - -PsChooseSk(p) == - /\ SksWithNewerWal(p) # {} - /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] - /\ UNCHANGED <> - - -Next == - \/ NodeOnlineOffline - \/ \E s1 \in safekeepers: \E s2 \in safekeepers: - \/ SkCommit(s1, s2) - \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) - \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) - \/ \E p \in pageservers: PsChooseSk(p) - - -Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,online>> - - -\* invariants - -EventuallyLaggingSkIsNotPreferredSk == <>( - LET - sks == safekeeper_state - lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } - preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} - IN - preferred_sks \cap lagging_sks = {} - - ) - - - -==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.cfg deleted file mode 100644 index d1470337f9..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.cfg +++ /dev/null @@ -1,51 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -b1 = b1 -b2 = b2 -b3 = b3 -\* MV CONSTANT declarations -CONSTANTS -s1 = s1 -s2 = s2 -s3 = s3 -\* MV CONSTANT declarations -CONSTANTS -p1 = p1 -p2 = p2 -\* MV CONSTANT declarations -CONSTANTS -az1 = az1 -az2 = az2 -az3 = az3 -\* MV CONSTANT definitions -CONSTANT -brokers <- const_173730775393038000 -\* CONSTANT declarations -CONSTANT NULL = NULL -\* MV CONSTANT definitions -CONSTANT -safekeepers <- const_173730775393039000 -\* MV CONSTANT definitions -CONSTANT -pageservers <- const_173730775393040000 -\* MV CONSTANT definitions -CONSTANT -azs <- const_173730775393041000 -\* SYMMETRY definition -SYMMETRY symm_173730775393042000 -\* CONSTANT definitions -CONSTANT -max_commit_lsn <- const_173730775393043000 -\* CONSTANT definitions -CONSTANT -az_mapping <- const_173730775393044000 -\* CONSTRAINT definition -CONSTRAINT -constr_173730775393045000 -\* SPECIFICATION definition -SPECIFICATION -Spec -\* PROPERTY definition -PROPERTY -EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:29:13 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.tla deleted file mode 100644 index 8b1824f370..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.tla +++ /dev/null @@ -1,65 +0,0 @@ ----- MODULE MC ---- -EXTENDS replicated, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -b1, b2, b3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -s1, s2, s3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -p1, p2 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -az1, az2, az3 ----- - -\* MV CONSTANT definitions brokers -const_173730775393038000 == -{b1, b2, b3} ----- - -\* MV CONSTANT definitions safekeepers -const_173730775393039000 == -{s1, s2, s3} ----- - -\* MV CONSTANT definitions pageservers -const_173730775393040000 == -{p1, p2} ----- - -\* MV CONSTANT definitions azs -const_173730775393041000 == -{az1, az2, az3} ----- - -\* SYMMETRY definition -symm_173730775393042000 == -Permutations(const_173730775393038000) \union Permutations(const_173730775393039000) \union Permutations(const_173730775393040000) \union Permutations(const_173730775393041000) ----- - -\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_173730775393043000 == -2 ----- - -\* CONSTANT definitions @modelParameterConstants:5az_mapping -const_173730775393044000 == -[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] ----- - -\* CONSTRAINT definition @modelParameterContraint:0 -constr_173730775393045000 == -StateConstraint ----- -============================================================================= -\* Modification History -\* Created Sun Jan 19 18:29:13 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC_TE.out deleted file mode 100644 index 21638f26fe..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC_TE.out +++ /dev/null @@ -1,53 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 19 and seed -4959290627086969114 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11541] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:29:15) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:29:16. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 1431 total distinct states at (2025-01-19 18:29:19) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:29:19 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(10) at 2025-01-19 18:29:19: 38.274 states generated (38.274 s/min), 4.060 distinct states found (4.060 ds/min), 2.625 states left on queue. -@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/replicated.tla deleted file mode 100644 index fca339edab..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/replicated.tla +++ /dev/null @@ -1,130 +0,0 @@ ----- MODULE replicated ---- - -EXTENDS Integers, FiniteSets - -VARIABLES broker_state, safekeeper_state, pageserver_state, online - - -CONSTANT - brokers, - safekeepers, - pageservers, - azs, - az_mapping - -CONSTANT - NULL - -CONSTANT - max_commit_lsn - -StateConstraint == - /\ \A s \in safekeepers: - /\ safekeeper_state[s].commit_lsn <= max_commit_lsn - /\ \A b \in brokers: - /\ \A s \in DOMAIN broker_state[b].sk: - /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn - - -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitOnline == safekeepers \cup brokers \cup pageservers - -Init == - /\ broker_state = [b \in brokers |-> InitBroker] - /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] - /\ pageserver_state = [p \in pageservers |-> InitPageserver] - /\ online = InitOnline - -NodeOnlineOffline == - /\ online' = CHOOSE ss \in SUBSET InitOnline: - /\ Cardinality(ss \cap safekeepers) >= 2 - /\ Cardinality(ss \cap brokers) >= 2 - /\ ss \cap pageservers = pageservers \* assume no PS failures for now - /\ UNCHANGED <> - -SkCommit(s1, s2) == - /\ {s1, s2} \subseteq online - /\ s1 # s2 - /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn - /\ LET - new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 - IN - safekeeper_state' = [safekeeper_state EXCEPT - ![s1].commit_lsn = new_commit_lsn, - ![s2].commit_lsn = new_commit_lsn] - /\ UNCHANGED <> - -SkPeerRecovery(s1,s2) == - /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn - /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] - /\ UNCHANGED <> - -SkPushToBroker(s,b) == - /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state - /\ UNCHANGED <> - -PsRecvBroker(b,p,s) == - /\ {b,p,s} \subseteq online - /\ LET - bsk == broker_state[b].sk[s] - psk == pageserver_state[p].sk[s] - updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] - IN - pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn - THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] - ELSE pageserver_state - /\ UNCHANGED <> - - -SksWithNewerWal(p) == - LET - ps == pageserver_state[p] - IN - {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} - -PsChooseSk(p) == - /\ {p} \subseteq online - /\ SksWithNewerWal(p) # {} - /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] - /\ UNCHANGED <> - - -Next == - \/ NodeOnlineOffline - \/ \E s1 \in safekeepers: \E s2 \in safekeepers: - \/ SkCommit(s1, s2) - \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) - \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) - \/ \E p \in pageservers: PsChooseSk(p) - - -Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,online>> - - -\* invariants - -EventuallyLaggingSkIsNotPreferredSk == <>( - LET - sks == safekeeper_state - lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } - preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} - IN - preferred_sks \cap lagging_sks = {} - - ) - - - -==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.cfg deleted file mode 100644 index ff576a1795..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.cfg +++ /dev/null @@ -1,50 +0,0 @@ -\* MV CONSTANT declarations -CONSTANTS -b1 = b1 -b2 = b2 -b3 = b3 -\* MV CONSTANT declarations -CONSTANTS -s1 = s1 -s2 = s2 -s3 = s3 -\* MV CONSTANT declarations -CONSTANTS -p1 = p1 -\* MV CONSTANT declarations -CONSTANTS -az1 = az1 -az2 = az2 -az3 = az3 -\* MV CONSTANT definitions -CONSTANT -brokers <- const_173730781391774000 -\* CONSTANT declarations -CONSTANT NULL = NULL -\* MV CONSTANT definitions -CONSTANT -safekeepers <- const_173730781391775000 -\* MV CONSTANT definitions -CONSTANT -pageservers <- const_173730781391776000 -\* MV CONSTANT definitions -CONSTANT -azs <- const_173730781391777000 -\* SYMMETRY definition -SYMMETRY symm_173730781391778000 -\* CONSTANT definitions -CONSTANT -max_commit_lsn <- const_173730781391779000 -\* CONSTANT definitions -CONSTANT -az_mapping <- const_173730781391780000 -\* CONSTRAINT definition -CONSTRAINT -constr_173730781391781000 -\* SPECIFICATION definition -SPECIFICATION -Spec -\* PROPERTY definition -PROPERTY -EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:30:13 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.out deleted file mode 100644 index f1349ccb01..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.out +++ /dev/null @@ -1,53 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 24 and seed -1042781833563910669 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11591] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:30:15) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:30:16. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 3889 total distinct states at (2025-01-19 18:30:19) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:30:19 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(11) at 2025-01-19 18:30:19: 78.397 states generated (78.397 s/min), 8.627 distinct states found (8.627 ds/min), 4.735 states left on queue. -@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC_TE.out deleted file mode 100644 index f1349ccb01..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC_TE.out +++ /dev/null @@ -1,53 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 24 and seed -1042781833563910669 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11591] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:30:15) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:30:16. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 3889 total distinct states at (2025-01-19 18:30:19) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:30:19 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(11) at 2025-01-19 18:30:19: 78.397 states generated (78.397 s/min), 8.627 distinct states found (8.627 ds/min), 4.735 states left on queue. -@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/replicated.tla deleted file mode 100644 index fca339edab..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/replicated.tla +++ /dev/null @@ -1,130 +0,0 @@ ----- MODULE replicated ---- - -EXTENDS Integers, FiniteSets - -VARIABLES broker_state, safekeeper_state, pageserver_state, online - - -CONSTANT - brokers, - safekeepers, - pageservers, - azs, - az_mapping - -CONSTANT - NULL - -CONSTANT - max_commit_lsn - -StateConstraint == - /\ \A s \in safekeepers: - /\ safekeeper_state[s].commit_lsn <= max_commit_lsn - /\ \A b \in brokers: - /\ \A s \in DOMAIN broker_state[b].sk: - /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn - - -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] -InitOnline == safekeepers \cup brokers \cup pageservers - -Init == - /\ broker_state = [b \in brokers |-> InitBroker] - /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] - /\ pageserver_state = [p \in pageservers |-> InitPageserver] - /\ online = InitOnline - -NodeOnlineOffline == - /\ online' = CHOOSE ss \in SUBSET InitOnline: - /\ Cardinality(ss \cap safekeepers) >= 2 - /\ Cardinality(ss \cap brokers) >= 2 - /\ ss \cap pageservers = pageservers \* assume no PS failures for now - /\ UNCHANGED <> - -SkCommit(s1, s2) == - /\ {s1, s2} \subseteq online - /\ s1 # s2 - /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn - /\ LET - new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 - IN - safekeeper_state' = [safekeeper_state EXCEPT - ![s1].commit_lsn = new_commit_lsn, - ![s2].commit_lsn = new_commit_lsn] - /\ UNCHANGED <> - -SkPeerRecovery(s1,s2) == - /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn - /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] - /\ UNCHANGED <> - -SkPushToBroker(s,b) == - /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state - /\ UNCHANGED <> - -PsRecvBroker(b,p,s) == - /\ {b,p,s} \subseteq online - /\ LET - bsk == broker_state[b].sk[s] - psk == pageserver_state[p].sk[s] - updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] - IN - pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn - THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] - ELSE pageserver_state - /\ UNCHANGED <> - - -SksWithNewerWal(p) == - LET - ps == pageserver_state[p] - IN - {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} - -PsChooseSk(p) == - /\ {p} \subseteq online - /\ SksWithNewerWal(p) # {} - /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] - /\ UNCHANGED <> - - -Next == - \/ NodeOnlineOffline - \/ \E s1 \in safekeepers: \E s2 \in safekeepers: - \/ SkCommit(s1, s2) - \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) - \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) - \/ \E p \in pageservers: PsChooseSk(p) - - -Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,online>> - - -\* invariants - -EventuallyLaggingSkIsNotPreferredSk == <>( - LET - sks == safekeeper_state - lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } - preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} - IN - preferred_sks \cap lagging_sks = {} - - ) - - - -==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.out deleted file mode 100644 index 59da3df845..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.out +++ /dev/null @@ -1,35 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 95 and seed 5720921755138129000 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11738] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:33:43) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2146:1 @!@!@ -The invariant PsLagsSk is not a state predicate (one with no primes or temporal operators). -@!@!@ENDMSG 2146 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 1009ms at (2025-01-19 18:33:43) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC_TE.out deleted file mode 100644 index 59da3df845..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC_TE.out +++ /dev/null @@ -1,35 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 95 and seed 5720921755138129000 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11738] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:33:43) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2146:1 @!@!@ -The invariant PsLagsSk is not a state predicate (one with no primes or temporal operators). -@!@!@ENDMSG 2146 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 1009ms at (2025-01-19 18:33:43) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.out deleted file mode 100644 index 00a833e2f0..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.out +++ /dev/null @@ -1,52 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 92 and seed -5681728403679829533 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11930] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:36:20) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2107:1 @!@!@ -Invariant PsLagsSk is violated by the initial state: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2107 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2710ms at (2025-01-19 18:36:21) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC_TE.out deleted file mode 100644 index 00a833e2f0..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC_TE.out +++ /dev/null @@ -1,52 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 92 and seed -5681728403679829533 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11930] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:36:20) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2107:1 @!@!@ -Invariant PsLagsSk is violated by the initial state: -/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) -/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0])]) -/\ online = {b1, b2, b3, s1, s2, s3, p1} -/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) - -@!@!@ENDMSG 2107 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 2710ms at (2025-01-19 18:36:21) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.out deleted file mode 100644 index 366883d749..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.out +++ /dev/null @@ -1,53 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 39 and seed -9180611051874563891 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11941] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:36:40) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:36:41. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 3587 total distinct states at (2025-01-19 18:36:44) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:36:44 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(11) at 2025-01-19 18:36:44: 73.018 states generated (73.018 s/min), 8.206 distinct states found (8.206 ds/min), 4.615 states left on queue. -@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.out deleted file mode 100644 index 72ebe05b45..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.out +++ /dev/null @@ -1,354 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 96 and seed 147884281130356166 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 12007] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:38:05) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:38:06. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 3861 total distinct states at (2025-01-19 18:38:09) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:38:09 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(11) at 2025-01-19 18:38:09: 77.856 states generated (77.856 s/min), 8.653 distinct states found (8.653 ds/min), 4.790 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 197257 total distinct states at (2025-01-19 18:39:09) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:39:09 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(20) at 2025-01-19 18:39:09: 3.084.377 states generated (3.006.521 s/min), 204.964 distinct states found (196.311 ds/min), 7.704 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(25) at 2025-01-19 18:39:12: 3.224.329 states generated, 208.868 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the complete state space with 208868 total distinct states at (2025-01-19 18:39:12) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:39:12 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 3.4E-8 - based on the actual fingerprints: val = 6.3E-10 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:39:14 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 1:1 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 14290:208868 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 41, col 8 to line 44, col 44 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 41, col 18 to line 44, col 44 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 42, col 9 to line 44, col 44 of module replicated: 22348876 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 48 of module replicated: 22348876 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 8981324 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 44, col 12 to line 44, col 44 of module replicated: 2924152 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 32 to line 41, col 48 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 45, col 8 to line 45, col 67 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 84:530666 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 48, col 8 to line 48, col 32 of module replicated: 2410478 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 48, col 8 to line 48, col 15 of module replicated: 1879812:4246157 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 48, col 27 to line 48, col 32 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 49, col 8 to line 49, col 14 of module replicated: 1643803 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 8 to line 49, col 9 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 13 to line 49, col 14 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 50, col 8 to line 50, col 72 of module replicated: 1170534 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 8 to line 50, col 38 of module replicated: 639868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 42 to line 50, col 72 of module replicated: 639868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 54, col 13 to line 56, col 50 of module replicated: 530666 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 57, col 8 to line 57, col 58 of module replicated: 530666 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 682:54601 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 8 to line 60, col 32 of module replicated: 1934413 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 60, col 8 to line 60, col 15 of module replicated: 1879812:4246157 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 60, col 27 to line 60, col 32 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 72 of module replicated: 54601 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 8 to line 61, col 38 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 42 to line 61, col 72 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 8 to line 62, col 102 of module replicated: 54601 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 63, col 8 to line 63, col 58 of module replicated: 54601 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 45241:1113137 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 66, col 8 to line 66, col 30 of module replicated: 2992949 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 66, col 8 to line 66, col 13 of module replicated: 1879812:4412756 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 66, col 25 to line 66, col 30 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 67, col 8 to line 74, col 29 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 67, col 24 to line 74, col 29 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 67, col 27 to line 67, col 91 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 70, col 28 to line 70, col 45 of module replicated: 611653 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 71, col 31 to line 71, col 91 of module replicated: 611653 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 73, col 17 to line 73, col 54 of module replicated: 611653 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 74, col 18 to line 74, col 29 of module replicated: 501484 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 75, col 8 to line 75, col 62 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 90643:1113137 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 78, col 8 to line 78, col 31 of module replicated: 2992949 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 78, col 8 to line 78, col 14 of module replicated: 1879812:5525893 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 78, col 26 to line 78, col 31 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 84, col 13 to line 86, col 37 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 84, col 33 to line 86, col 37 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 84, col 36 to line 84, col 66 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 85, col 22 to line 85, col 66 of module replicated: 406880 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 86, col 22 to line 86, col 37 of module replicated: 706257 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 87, col 8 to line 87, col 58 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 57927:203919 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 97, col 8 to line 97, col 27 of module replicated: 412787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 97, col 8 to line 97, col 10 of module replicated: 208868:417736 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 97, col 22 to line 97, col 27 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 98, col 8 to line 98, col 30 of module replicated: 412787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 98, col 8 to line 98, col 25 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 92, col 15 to line 92, col 33 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 94, col 5 to line 94, col 66 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 94, col 26 to line 94, col 65 of module replicated: 626604 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 94, col 12 to line 94, col 23 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 98, col 24 to line 98, col 24 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 98, col 29 to line 98, col 30 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 99, col 8 to line 99, col 109 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 99, col 28 to line 99, col 109 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 29 to line 99, col 44 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 52 to line 99, col 108 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 72 to line 99, col 108 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 99, col 105 to line 99, col 108 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 99, col 85 to line 99, col 102 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 92, col 15 to line 92, col 33 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - ||||line 94, col 5 to line 94, col 66 of module replicated: 203919:203919 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||||line 94, col 26 to line 94, col 65 of module replicated: 611757 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||||line 94, col 12 to line 94, col 23 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 99, col 101 to line 99, col 101 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 8 to line 100, col 58 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2774:0 @!@!@ - -@!@!@ENDMSG 2774 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 118, col 13 to line 119, col 81 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 118, col 35 to line 119, col 81 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 119, col 9 to line 119, col 81 of module replicated: 2208822 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 118, col 44 to line 118, col 72 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 118, col 22 to line 118, col 32 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(25) at 2025-01-19 18:39:14: 3.224.329 states generated (2.761.383 s/min), 208.868 distinct states found (178.878 ds/min), 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -3224329 states generated, 208868 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 25. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2268:0 @!@!@ -The average outdegree of the complete state graph is 1 (minimum is 0, the maximum 9 and the 95th percentile is 3). -@!@!@ENDMSG 2268 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 70074ms at (2025-01-19 18:39:14) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.tla deleted file mode 100644 index 434bbc3bd0..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.tla +++ /dev/null @@ -1,65 +0,0 @@ ----- MODULE MC ---- -EXTENDS replicated, TLC - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -b1, b2, b3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -s1, s2, s3 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -p1 ----- - -\* MV CONSTANT declarations@modelParameterConstants -CONSTANTS -az1, az2, az3 ----- - -\* MV CONSTANT definitions brokers -const_1737308284086143000 == -{b1, b2, b3} ----- - -\* MV CONSTANT definitions safekeepers -const_1737308284086144000 == -{s1, s2, s3} ----- - -\* MV CONSTANT definitions pageservers -const_1737308284086145000 == -{p1} ----- - -\* MV CONSTANT definitions azs -const_1737308284086146000 == -{az1, az2, az3} ----- - -\* SYMMETRY definition -symm_1737308284086147000 == -Permutations(const_1737308284086143000) \union Permutations(const_1737308284086144000) \union Permutations(const_1737308284086145000) \union Permutations(const_1737308284086146000) ----- - -\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_1737308284086148000 == -2 ----- - -\* CONSTANT definitions @modelParameterConstants:5az_mapping -const_1737308284086149000 == -[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] ----- - -\* CONSTRAINT definition @modelParameterContraint:0 -constr_1737308284086150000 == -StateConstraint ----- -============================================================================= -\* Modification History -\* Created Sun Jan 19 18:38:04 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC_TE.out deleted file mode 100644 index 72ebe05b45..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC_TE.out +++ /dev/null @@ -1,354 +0,0 @@ -@!@!@STARTMSG 2262:0 @!@!@ -TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) -@!@!@ENDMSG 2262 @!@!@ -@!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 96 and seed 147884281130356166 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 12007] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). -@!@!@ENDMSG 2187 @!@!@ -@!@!@STARTMSG 2220:0 @!@!@ -Starting SANY... -@!@!@ENDMSG 2220 @!@!@ -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla -Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla -Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla -Semantic processing of module Naturals -Semantic processing of module Integers -Semantic processing of module Sequences -Semantic processing of module FiniteSets -Semantic processing of module replicated -Semantic processing of module TLC -Semantic processing of module MC -@!@!@STARTMSG 2219:0 @!@!@ -SANY finished. -@!@!@ENDMSG 2219 @!@!@ -@!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:38:05) -@!@!@ENDMSG 2185 @!@!@ -@!@!@STARTMSG 2279:3 @!@!@ -Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. -@!@!@ENDMSG 2279 @!@!@ -@!@!@STARTMSG 2284:3 @!@!@ -Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. -@!@!@ENDMSG 2284 @!@!@ -@!@!@STARTMSG 2212:0 @!@!@ -Implied-temporal checking--satisfiability problem has 1 branches. -@!@!@ENDMSG 2212 @!@!@ -@!@!@STARTMSG 2189:0 @!@!@ -Computing initial states... -@!@!@ENDMSG 2189 @!@!@ -@!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:38:06. -@!@!@ENDMSG 2190 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 3861 total distinct states at (2025-01-19 18:38:09) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:38:09 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(11) at 2025-01-19 18:38:09: 77.856 states generated (77.856 s/min), 8.653 distinct states found (8.653 ds/min), 4.790 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 197257 total distinct states at (2025-01-19 18:39:09) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:39:09 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(20) at 2025-01-19 18:39:09: 3.084.377 states generated (3.006.521 s/min), 204.964 distinct states found (196.311 ds/min), 7.704 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(25) at 2025-01-19 18:39:12: 3.224.329 states generated, 208.868 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the complete state space with 208868 total distinct states at (2025-01-19 18:39:12) -@!@!@ENDMSG 2192 @!@!@ -@!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:39:12 -@!@!@ENDMSG 2267 @!@!@ -@!@!@STARTMSG 2193:0 @!@!@ -Model checking completed. No error has been found. - Estimates of the probability that TLC did not check all reachable states - because two distinct states had the same fingerprint: - calculated (optimistic): val = 3.4E-8 - based on the actual fingerprints: val = 6.3E-10 -@!@!@ENDMSG 2193 @!@!@ -@!@!@STARTMSG 2201:0 @!@!@ -The coverage statistics at 2025-01-19 18:39:14 -@!@!@ENDMSG 2201 @!@!@ -@!@!@STARTMSG 2773:0 @!@!@ -: 1:1 -@!@!@ENDMSG 2773 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 35, col 5 to line 38, col 26 of module replicated: 1 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 14290:208868 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 41, col 8 to line 44, col 44 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 41, col 18 to line 44, col 44 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 42, col 9 to line 44, col 44 of module replicated: 22348876 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 42, col 12 to line 42, col 48 of module replicated: 22348876 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 43, col 12 to line 43, col 44 of module replicated: 8981324 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 44, col 12 to line 44, col 44 of module replicated: 2924152 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 41, col 32 to line 41, col 48 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 45, col 8 to line 45, col 67 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 84:530666 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 48, col 8 to line 48, col 32 of module replicated: 2410478 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 48, col 8 to line 48, col 15 of module replicated: 1879812:4246157 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 48, col 27 to line 48, col 32 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 49, col 8 to line 49, col 14 of module replicated: 1643803 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 8 to line 49, col 9 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 49, col 13 to line 49, col 14 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 50, col 8 to line 50, col 72 of module replicated: 1170534 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 8 to line 50, col 38 of module replicated: 639868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 50, col 42 to line 50, col 72 of module replicated: 639868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 54, col 13 to line 56, col 50 of module replicated: 530666 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 57, col 8 to line 57, col 58 of module replicated: 530666 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 682:54601 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 60, col 8 to line 60, col 32 of module replicated: 1934413 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 60, col 8 to line 60, col 15 of module replicated: 1879812:4246157 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 60, col 27 to line 60, col 32 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 61, col 8 to line 61, col 72 of module replicated: 54601 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 8 to line 61, col 38 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 61, col 42 to line 61, col 72 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 62, col 8 to line 62, col 102 of module replicated: 54601 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 63, col 8 to line 63, col 58 of module replicated: 54601 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 45241:1113137 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 66, col 8 to line 66, col 30 of module replicated: 2992949 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 66, col 8 to line 66, col 13 of module replicated: 1879812:4412756 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 66, col 25 to line 66, col 30 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 67, col 8 to line 74, col 29 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 67, col 24 to line 74, col 29 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 67, col 27 to line 67, col 91 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 70, col 28 to line 70, col 45 of module replicated: 611653 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 71, col 31 to line 71, col 91 of module replicated: 611653 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 73, col 17 to line 73, col 54 of module replicated: 611653 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 74, col 18 to line 74, col 29 of module replicated: 501484 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 75, col 8 to line 75, col 62 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 90643:1113137 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 78, col 8 to line 78, col 31 of module replicated: 2992949 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 78, col 8 to line 78, col 14 of module replicated: 1879812:5525893 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 78, col 26 to line 78, col 31 of module replicated: 1879812 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 84, col 13 to line 86, col 37 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 84, col 33 to line 86, col 37 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 84, col 36 to line 84, col 66 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 85, col 22 to line 85, col 66 of module replicated: 406880 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 86, col 22 to line 86, col 37 of module replicated: 706257 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 87, col 8 to line 87, col 58 of module replicated: 1113137 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2772:0 @!@!@ -: 57927:203919 -@!@!@ENDMSG 2772 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 97, col 8 to line 97, col 27 of module replicated: 412787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - |line 97, col 8 to line 97, col 10 of module replicated: 208868:417736 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 97, col 22 to line 97, col 27 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 98, col 8 to line 98, col 30 of module replicated: 412787 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 98, col 8 to line 98, col 25 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 92, col 15 to line 92, col 33 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 94, col 5 to line 94, col 66 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 94, col 26 to line 94, col 65 of module replicated: 626604 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 94, col 12 to line 94, col 23 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 98, col 24 to line 98, col 24 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 98, col 29 to line 98, col 30 of module replicated: 208868 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 99, col 8 to line 99, col 109 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 99, col 28 to line 99, col 109 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 29 to line 99, col 44 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 52 to line 99, col 108 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 99, col 72 to line 99, col 108 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 99, col 105 to line 99, col 108 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||line 99, col 85 to line 99, col 102 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 92, col 15 to line 92, col 33 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2775:0 @!@!@ - ||||line 94, col 5 to line 94, col 66 of module replicated: 203919:203919 -@!@!@ENDMSG 2775 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||||line 94, col 26 to line 94, col 65 of module replicated: 611757 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |||||line 94, col 12 to line 94, col 23 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||||line 99, col 101 to line 99, col 101 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 100, col 8 to line 100, col 58 of module replicated: 203919 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2774:0 @!@!@ - -@!@!@ENDMSG 2774 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - line 118, col 13 to line 119, col 81 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 118, col 35 to line 119, col 81 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 119, col 9 to line 119, col 81 of module replicated: 2208822 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - ||line 118, col 44 to line 118, col 72 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2221:0 @!@!@ - |line 118, col 22 to line 118, col 32 of module replicated: 736274 -@!@!@ENDMSG 2221 @!@!@ -@!@!@STARTMSG 2202:0 @!@!@ -End of statistics. -@!@!@ENDMSG 2202 @!@!@ -@!@!@STARTMSG 2200:0 @!@!@ -Progress(25) at 2025-01-19 18:39:14: 3.224.329 states generated (2.761.383 s/min), 208.868 distinct states found (178.878 ds/min), 0 states left on queue. -@!@!@ENDMSG 2200 @!@!@ -@!@!@STARTMSG 2199:0 @!@!@ -3224329 states generated, 208868 distinct states found, 0 states left on queue. -@!@!@ENDMSG 2199 @!@!@ -@!@!@STARTMSG 2194:0 @!@!@ -The depth of the complete state graph search is 25. -@!@!@ENDMSG 2194 @!@!@ -@!@!@STARTMSG 2268:0 @!@!@ -The average outdegree of the complete state graph is 1 (minimum is 0, the maximum 9 and the 95th percentile is 3). -@!@!@ENDMSG 2268 @!@!@ -@!@!@STARTMSG 2186:0 @!@!@ -Finished in 70074ms at (2025-01-19 18:39:14) -@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.cfg similarity index 66% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.cfg rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.cfg index 8dd1d266c3..32dbea163c 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.cfg +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.cfg @@ -18,36 +18,37 @@ az2 = az2 az3 = az3 \* MV CONSTANT definitions CONSTANT -brokers <- const_1737308022622113000 +brokers <- const_1737323801657283000 \* CONSTANT declarations CONSTANT NULL = NULL \* MV CONSTANT definitions CONSTANT -safekeepers <- const_1737308022622114000 +safekeepers <- const_1737323801657284000 \* MV CONSTANT definitions CONSTANT -pageservers <- const_1737308022622115000 +pageservers <- const_1737323801657285000 \* MV CONSTANT definitions CONSTANT -azs <- const_1737308022622116000 +azs <- const_1737323801657286000 \* SYMMETRY definition -SYMMETRY symm_1737308022622117000 +SYMMETRY symm_1737323801657287000 \* CONSTANT definitions CONSTANT -max_commit_lsn <- const_1737308022622118000 +max_commit_lsn <- const_1737323801657288000 \* CONSTANT definitions CONSTANT -az_mapping <- const_1737308022622119000 +az_mapping <- const_1737323801657289000 \* CONSTRAINT definition CONSTRAINT -constr_1737308022622120000 +constr_1737323801657290000 \* SPECIFICATION definition SPECIFICATION Spec \* INVARIANT definition INVARIANT PsLagsSk +PeerRecoveryIsPossible \* PROPERTY definition PROPERTY EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:33:42 CET 2025 \ No newline at end of file +\* Generated on Sun Jan 19 22:56:41 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.out new file mode 100644 index 0000000000..b9873c84f2 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.out @@ -0,0 +1,353 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 8 and seed -3590178470709523625 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 22966] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 22:56:42) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 22:56:44. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2109:1 @!@!@ +Successor state is not completely specified by action SkPrune of the next-state relation. The following variables are not assigned: broker_state, online, pageserver_state. + +@!@!@ENDMSG 2109 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: +/\ pageserver_state = null +/\ broker_state = null +/\ online = null +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 1, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 22:56:44 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:7 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 301 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 98 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:15 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 62 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 47:110 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 46 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:5 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 108, col 8 to line 108, col 10 of module replicated: 5:10 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 108, col 22 to line 108, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 121, col 9 to line 121, col 80 of module replicated: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 121, col 29 to line 121, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 30 to line 121, col 45 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 54 to line 121, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 71 to line 121, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 119, col 22 to line 119, col 42 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 119, col 31 to line 119, col 41 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||line 118, col 24 to line 118, col 49 of module replicated: 5:15 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 25 to line 118, col 36 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 45 to line 118, col 48 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 111, col 13 to line 117, col 18 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 112, col 17 to line 114, col 84 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 112, col 17 to line 112, col 37 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||line 114, col 17 to line 114, col 84 of module replicated: 5:10 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 114, col 18 to line 114, col 43 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 114, col 54 to line 114, col 82 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 117, col 13 to line 117, col 18 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 133, col 8 to line 133, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 134, col 8 to line 134, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 156, col 13 to line 157, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 156, col 35 to line 157, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 157, col 9 to line 157, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 156, col 44 to line 156, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 156, col 22 to line 156, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 160, col 5 to line 162, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 160, col 47 to line 162, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 161, col 9 to line 162, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 161, col 12 to line 162, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 161, col 13 to line 161, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 162, col 16 to line 162, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 160, col 61 to line 160, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 160, col 21 to line 160, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 22:56:44: 73 states generated (1.752 s/min), 13 distinct states found (312 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +73 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 4. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2516ms at (2025-01-19 22:56:44) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.tla similarity index 67% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.tla rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.tla index 0079b64427..02b378bbb1 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307828738/MC.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC.tla @@ -22,44 +22,44 @@ az1, az2, az3 ---- \* MV CONSTANT definitions brokers -const_173730781391774000 == +const_1737323801657283000 == {b1, b2, b3} ---- \* MV CONSTANT definitions safekeepers -const_173730781391775000 == +const_1737323801657284000 == {s1, s2, s3} ---- \* MV CONSTANT definitions pageservers -const_173730781391776000 == +const_1737323801657285000 == {p1} ---- \* MV CONSTANT definitions azs -const_173730781391777000 == +const_1737323801657286000 == {az1, az2, az3} ---- \* SYMMETRY definition -symm_173730781391778000 == -Permutations(const_173730781391774000) \union Permutations(const_173730781391775000) \union Permutations(const_173730781391776000) \union Permutations(const_173730781391777000) +symm_1737323801657287000 == +Permutations(const_1737323801657283000) \union Permutations(const_1737323801657284000) \union Permutations(const_1737323801657285000) \union Permutations(const_1737323801657286000) ---- \* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_173730781391779000 == +const_1737323801657288000 == 2 ---- \* CONSTANT definitions @modelParameterConstants:5az_mapping -const_173730781391780000 == +const_1737323801657289000 == [ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] ---- \* CONSTRAINT definition @modelParameterContraint:0 -constr_173730781391781000 == +constr_1737323801657290000 == StateConstraint ---- ============================================================================= \* Modification History -\* Created Sun Jan 19 18:30:13 CET 2025 by cs +\* Created Sun Jan 19 22:56:41 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC_TE.out new file mode 100644 index 0000000000..b9873c84f2 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/MC_TE.out @@ -0,0 +1,353 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 8 and seed -3590178470709523625 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 22966] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 22:56:42) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 22:56:44. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2109:1 @!@!@ +Successor state is not completely specified by action SkPrune of the next-state relation. The following variables are not assigned: broker_state, online, pageserver_state. + +@!@!@ENDMSG 2109 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: +/\ pageserver_state = null +/\ broker_state = null +/\ online = null +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 1, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 22:56:44 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:7 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 301 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 98 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:15 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 62 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 47:110 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 46 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:5 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 108, col 8 to line 108, col 10 of module replicated: 5:10 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 108, col 22 to line 108, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 121, col 9 to line 121, col 80 of module replicated: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 121, col 29 to line 121, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 30 to line 121, col 45 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 54 to line 121, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 71 to line 121, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 119, col 22 to line 119, col 42 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 119, col 31 to line 119, col 41 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||line 118, col 24 to line 118, col 49 of module replicated: 5:15 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 25 to line 118, col 36 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 45 to line 118, col 48 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 111, col 13 to line 117, col 18 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 112, col 17 to line 114, col 84 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 112, col 17 to line 112, col 37 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||line 114, col 17 to line 114, col 84 of module replicated: 5:10 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 114, col 18 to line 114, col 43 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 114, col 54 to line 114, col 82 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 117, col 13 to line 117, col 18 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 133, col 8 to line 133, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 134, col 8 to line 134, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 156, col 13 to line 157, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 156, col 35 to line 157, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 157, col 9 to line 157, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 156, col 44 to line 156, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 156, col 22 to line 156, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 160, col 5 to line 162, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 160, col 47 to line 162, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 161, col 9 to line 162, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 161, col 12 to line 162, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 161, col 13 to line 161, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 162, col 16 to line 162, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 160, col 61 to line 160, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 160, col 21 to line 160, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 22:56:44: 73 states generated (1.752 s/min), 13 distinct states found (312 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +73 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 4. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2516ms at (2025-01-19 22:56:44) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/replicated.tla similarity index 64% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/replicated.tla rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/replicated.tla index 6ec5ff3f0f..79540e1c4d 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/replicated.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323805723/replicated.tla @@ -17,6 +17,16 @@ CONSTANT CONSTANT max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +\* END HELPERS StateConstraint == /\ \A s \in safekeepers: @@ -25,9 +35,10 @@ StateConstraint == /\ \A s \in DOMAIN broker_state[b].sk: /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] InitOnline == safekeepers \cup brokers \cup pageservers @@ -58,20 +69,21 @@ SkCommit(s1, s2) == SkPeerRecovery(s1,s2) == /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] /\ UNCHANGED <> SkPushToBroker(s,b) == /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] /\ UNCHANGED <> PsRecvBroker(b,p,s) == @@ -86,6 +98,28 @@ PsRecvBroker(b,p,s) == ELSE pageserver_state /\ UNCHANGED <> + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + info == + ( + {safekeeper_state[s]} + \cup + {safekeeper_state[s].rx[s2]: s2 \in (DOMAIN safekeeper_state[s].rx)} + ) + \ + {NULL} + commit_lsns == {i.commit_lsn: i \in info} + prune_lsn == MinOfSet(commit_lsns) + IN + safekeeper_state' = [safekeeper_state EXCEPT ![s].prune_lsn = prune_lsn] + SksWithNewerWal(p) == LET @@ -105,7 +139,11 @@ Next == \/ \E s1 \in safekeepers: \E s2 \in safekeepers: \/ SkCommit(s1, s2) \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) \/ \E p \in pageservers: PsChooseSk(p) @@ -116,8 +154,13 @@ Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,onl \* invariants PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: - /\ pageserver_state[p].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - + /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + EventuallyLaggingSkIsNotPreferredSk == <>( LET diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.cfg similarity index 66% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.cfg rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.cfg index 886ee705a5..7ed78b95cd 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.cfg +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.cfg @@ -18,36 +18,37 @@ az2 = az2 az3 = az3 \* MV CONSTANT definitions CONSTANT -brokers <- const_1737308178999123000 +brokers <- const_1737323830205294000 \* CONSTANT declarations CONSTANT NULL = NULL \* MV CONSTANT definitions CONSTANT -safekeepers <- const_1737308178999124000 +safekeepers <- const_1737323830205295000 \* MV CONSTANT definitions CONSTANT -pageservers <- const_1737308178999125000 +pageservers <- const_1737323830205296000 \* MV CONSTANT definitions CONSTANT -azs <- const_1737308178999126000 +azs <- const_1737323830205297000 \* SYMMETRY definition -SYMMETRY symm_1737308178999127000 +SYMMETRY symm_1737323830205298000 \* CONSTANT definitions CONSTANT -max_commit_lsn <- const_1737308178999128000 +max_commit_lsn <- const_1737323830205299000 \* CONSTANT definitions CONSTANT -az_mapping <- const_1737308178999129000 +az_mapping <- const_1737323830205300000 \* CONSTRAINT definition CONSTRAINT -constr_1737308178999130000 +constr_1737323830205301000 \* SPECIFICATION definition SPECIFICATION Spec \* INVARIANT definition INVARIANT PsLagsSk +PeerRecoveryIsPossible \* PROPERTY definition PROPERTY EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:36:19 CET 2025 \ No newline at end of file +\* Generated on Sun Jan 19 22:57:10 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.out new file mode 100644 index 0000000000..4c5f79f791 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.out @@ -0,0 +1,430 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 103 and seed 5725447841858367243 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 22986] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 22:57:11) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 22:57:12. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select nonexistent field "commit_lsn" from the record +[sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] +line 118, col 25 to line 118, col 36 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 108, column 5 to line 122, column 57 in replicated +1. Line 108, column 8 to line 108, column 27 in replicated +2. Line 109, column 8 to line 121, column 80 in replicated +3. Line 121, column 9 to line 121, column 80 in replicated +4. Line 121, column 29 to line 121, column 80 in replicated +5. Line 121, column 71 to line 121, column 79 in replicated +6. Line 119, column 22 to line 119, column 42 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated +8. Line 27, column 16 to line 27, column 16 in replicated +9. Line 119, column 31 to line 119, column 41 in replicated +10. Line 118, column 24 to line 118, column 49 in replicated +11. Line 118, column 25 to line 118, column 36 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 22:57:12 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:16 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 16 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 16 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 1712 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 1712 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 688 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 224 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 16 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 16 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 6:37 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 165 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 128:301 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 125 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 88 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 88 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 90 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 53 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 53 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 37 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 37 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 127 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 87 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 15:83 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 201 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 118:298 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 118 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 83 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 83 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:52 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 90, col 8 to line 90, col 31 of module replicated: 124 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 90, col 8 to line 90, col 14 of module replicated: 72:236 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 90, col 26 to line 90, col 31 of module replicated: 72 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 96, col 33 to line 98, col 37 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 96, col 36 to line 96, col 66 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 97, col 22 to line 97, col 66 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 98, col 22 to line 98, col 37 of module replicated: 50 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 31:83 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 201 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 118:298 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 118 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 83 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 83 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 8:20 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 49 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 108, col 8 to line 108, col 10 of module replicated: 29:54 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 108, col 22 to line 108, col 27 of module replicated: 29 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 121, col 9 to line 121, col 80 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 121, col 29 to line 121, col 80 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 30 to line 121, col 45 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 54 to line 121, col 79 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 71 to line 121, col 79 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 119, col 22 to line 119, col 42 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 27, col 19 to line 27, col 36 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 27, col 16 to line 27, col 16 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 119, col 31 to line 119, col 41 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||line 118, col 24 to line 118, col 49 of module replicated: 25:60 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 25 to line 118, col 36 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 45 to line 118, col 48 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 111, col 13 to line 117, col 18 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 112, col 17 to line 114, col 84 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 112, col 17 to line 112, col 37 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||line 114, col 17 to line 114, col 84 of module replicated: 25:55 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 114, col 18 to line 114, col 43 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 114, col 54 to line 114, col 82 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 117, col 13 to line 117, col 18 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 122, col 8 to line 122, col 57 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 132, col 8 to line 132, col 27 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 133, col 8 to line 133, col 30 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 133, col 8 to line 133, col 25 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 15 to line 127, col 33 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 129, col 5 to line 129, col 66 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 129, col 26 to line 129, col 65 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 129, col 12 to line 129, col 23 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 133, col 24 to line 133, col 24 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 133, col 29 to line 133, col 30 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 134, col 8 to line 134, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 135, col 8 to line 135, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 157, col 13 to line 158, col 81 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 157, col 35 to line 158, col 81 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 158, col 9 to line 158, col 81 of module replicated: 204 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 157, col 44 to line 157, col 72 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 157, col 22 to line 157, col 32 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 161, col 5 to line 163, col 88 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 161, col 47 to line 163, col 88 of module replicated: 173 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 162, col 9 to line 163, col 88 of module replicated: 176 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 162, col 12 to line 163, col 88 of module replicated: 176 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 162, col 13 to line 162, col 85 of module replicated: 176 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 163, col 16 to line 163, col 88 of module replicated: 35 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 161, col 61 to line 161, col 83 of module replicated: 173 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 161, col 21 to line 161, col 43 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(5) at 2025-01-19 22:57:12: 273 states generated (6.319 s/min), 64 distinct states found (1.481 ds/min), 52 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +273 states generated, 64 distinct states found, 52 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2610ms at (2025-01-19 22:57:12) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.tla similarity index 67% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.tla rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.tla index caea6ac31c..5e43f06dc5 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/MC.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC.tla @@ -22,44 +22,44 @@ az1, az2, az3 ---- \* MV CONSTANT definitions brokers -const_1737308022622113000 == +const_1737323830205294000 == {b1, b2, b3} ---- \* MV CONSTANT definitions safekeepers -const_1737308022622114000 == +const_1737323830205295000 == {s1, s2, s3} ---- \* MV CONSTANT definitions pageservers -const_1737308022622115000 == +const_1737323830205296000 == {p1} ---- \* MV CONSTANT definitions azs -const_1737308022622116000 == +const_1737323830205297000 == {az1, az2, az3} ---- \* SYMMETRY definition -symm_1737308022622117000 == -Permutations(const_1737308022622113000) \union Permutations(const_1737308022622114000) \union Permutations(const_1737308022622115000) \union Permutations(const_1737308022622116000) +symm_1737323830205298000 == +Permutations(const_1737323830205294000) \union Permutations(const_1737323830205295000) \union Permutations(const_1737323830205296000) \union Permutations(const_1737323830205297000) ---- \* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_1737308022622118000 == +const_1737323830205299000 == 2 ---- \* CONSTANT definitions @modelParameterConstants:5az_mapping -const_1737308022622119000 == +const_1737323830205300000 == [ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] ---- \* CONSTRAINT definition @modelParameterContraint:0 -constr_1737308022622120000 == +constr_1737323830205301000 == StateConstraint ---- ============================================================================= \* Modification History -\* Created Sun Jan 19 18:33:42 CET 2025 by cs +\* Created Sun Jan 19 22:57:10 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC_TE.out new file mode 100644 index 0000000000..4c5f79f791 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/MC_TE.out @@ -0,0 +1,430 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 103 and seed 5725447841858367243 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 22986] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 22:57:11) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 22:57:12. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select nonexistent field "commit_lsn" from the record +[sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] +line 118, col 25 to line 118, col 36 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 108, column 5 to line 122, column 57 in replicated +1. Line 108, column 8 to line 108, column 27 in replicated +2. Line 109, column 8 to line 121, column 80 in replicated +3. Line 121, column 9 to line 121, column 80 in replicated +4. Line 121, column 29 to line 121, column 80 in replicated +5. Line 121, column 71 to line 121, column 79 in replicated +6. Line 119, column 22 to line 119, column 42 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated +8. Line 27, column 16 to line 27, column 16 in replicated +9. Line 119, column 31 to line 119, column 41 in replicated +10. Line 118, column 24 to line 118, column 49 in replicated +11. Line 118, column 25 to line 118, column 36 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 22:57:12 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:16 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 16 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 16 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 1712 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 1712 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 688 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 224 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 16 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 16 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 6:37 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 165 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 128:301 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 128 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 125 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 88 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 88 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 90 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 53 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 53 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 37 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 37 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 127 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 87 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 15:83 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 201 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 118:298 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 118 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 83 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 83 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:52 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 90, col 8 to line 90, col 31 of module replicated: 124 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 90, col 8 to line 90, col 14 of module replicated: 72:236 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 90, col 26 to line 90, col 31 of module replicated: 72 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 96, col 33 to line 98, col 37 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 96, col 36 to line 96, col 66 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 97, col 22 to line 97, col 66 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 98, col 22 to line 98, col 37 of module replicated: 50 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 31:83 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 201 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 118:298 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 118 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 83 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 83 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 8:20 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 49 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 108, col 8 to line 108, col 10 of module replicated: 29:54 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 108, col 22 to line 108, col 27 of module replicated: 29 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 121, col 9 to line 121, col 80 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 121, col 29 to line 121, col 80 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 30 to line 121, col 45 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 54 to line 121, col 79 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 121, col 71 to line 121, col 79 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 119, col 22 to line 119, col 42 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 27, col 19 to line 27, col 36 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 27, col 16 to line 27, col 16 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 119, col 31 to line 119, col 41 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||line 118, col 24 to line 118, col 49 of module replicated: 25:60 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 25 to line 118, col 36 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 45 to line 118, col 48 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 111, col 13 to line 117, col 18 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 112, col 17 to line 114, col 84 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 112, col 17 to line 112, col 37 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||line 114, col 17 to line 114, col 84 of module replicated: 25:55 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 114, col 18 to line 114, col 43 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 114, col 54 to line 114, col 82 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 117, col 13 to line 117, col 18 of module replicated: 25 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 122, col 8 to line 122, col 57 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 132, col 8 to line 132, col 27 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 133, col 8 to line 133, col 30 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 133, col 8 to line 133, col 25 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 15 to line 127, col 33 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 129, col 5 to line 129, col 66 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 129, col 26 to line 129, col 65 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 129, col 12 to line 129, col 23 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 133, col 24 to line 133, col 24 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 133, col 29 to line 133, col 30 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 134, col 8 to line 134, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 135, col 8 to line 135, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 157, col 13 to line 158, col 81 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 157, col 35 to line 158, col 81 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 158, col 9 to line 158, col 81 of module replicated: 204 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 157, col 44 to line 157, col 72 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 157, col 22 to line 157, col 32 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 161, col 5 to line 163, col 88 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 161, col 47 to line 163, col 88 of module replicated: 173 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 162, col 9 to line 163, col 88 of module replicated: 176 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 162, col 12 to line 163, col 88 of module replicated: 176 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 162, col 13 to line 162, col 85 of module replicated: 176 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 163, col 16 to line 163, col 88 of module replicated: 35 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 161, col 61 to line 161, col 83 of module replicated: 173 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 161, col 21 to line 161, col 43 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(5) at 2025-01-19 22:57:12: 273 states generated (6.319 s/min), 64 distinct states found (1.481 ds/min), 52 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +273 states generated, 64 distinct states found, 52 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2610ms at (2025-01-19 22:57:12) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/replicated.tla similarity index 62% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/replicated.tla rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/replicated.tla index 36db18ecc3..f86f2ff288 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308024914/replicated.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737323834253/replicated.tla @@ -17,6 +17,16 @@ CONSTANT CONSTANT max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +\* END HELPERS StateConstraint == /\ \A s \in safekeepers: @@ -25,9 +35,10 @@ StateConstraint == /\ \A s \in DOMAIN broker_state[b].sk: /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] InitOnline == safekeepers \cup brokers \cup pageservers @@ -58,20 +69,21 @@ SkCommit(s1, s2) == SkPeerRecovery(s1,s2) == /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] /\ UNCHANGED <> SkPushToBroker(s,b) == /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] /\ UNCHANGED <> PsRecvBroker(b,p,s) == @@ -86,6 +98,29 @@ PsRecvBroker(b,p,s) == ELSE pageserver_state /\ UNCHANGED <> + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + info == + ( + {safekeeper_state[s]} + \cup + {safekeeper_state[s].rx[s2]: s2 \in (DOMAIN safekeeper_state[s].rx)} + ) + \ + {NULL} + commit_lsns == {i.commit_lsn: i \in info} + prune_lsn == MinOfSet(commit_lsns) + IN + safekeeper_state' = [safekeeper_state EXCEPT ![s].prune_lsn = prune_lsn] + /\ UNCHANGED <> + SksWithNewerWal(p) == LET @@ -105,7 +140,11 @@ Next == \/ \E s1 \in safekeepers: \E s2 \in safekeepers: \/ SkCommit(s1, s2) \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) \/ \E p \in pageservers: PsChooseSk(p) @@ -115,10 +154,14 @@ Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,onl \* invariants -PsLagsSk == []( - \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: - /\ pageserver_state[p].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - ) +PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: + /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + EventuallyLaggingSkIsNotPreferredSk == <>( LET diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.cfg similarity index 66% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.cfg rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.cfg index a3527c1e04..7b7ca53121 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.cfg +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.cfg @@ -18,36 +18,37 @@ az2 = az2 az3 = az3 \* MV CONSTANT definitions CONSTANT -brokers <- const_1737308198937133000 +brokers <- const_1737324137833305000 \* CONSTANT declarations CONSTANT NULL = NULL \* MV CONSTANT definitions CONSTANT -safekeepers <- const_1737308198937134000 +safekeepers <- const_1737324137833306000 \* MV CONSTANT definitions CONSTANT -pageservers <- const_1737308198937135000 +pageservers <- const_1737324137833307000 \* MV CONSTANT definitions CONSTANT -azs <- const_1737308198937136000 +azs <- const_1737324137833308000 \* SYMMETRY definition -SYMMETRY symm_1737308198937137000 +SYMMETRY symm_1737324137833309000 \* CONSTANT definitions CONSTANT -max_commit_lsn <- const_1737308198937138000 +max_commit_lsn <- const_1737324137833310000 \* CONSTANT definitions CONSTANT -az_mapping <- const_1737308198937139000 +az_mapping <- const_1737324137833311000 \* CONSTRAINT definition CONSTRAINT -constr_1737308198937140000 +constr_1737324137833312000 \* SPECIFICATION definition SPECIFICATION Spec \* INVARIANT definition INVARIANT PsLagsSk +PeerRecoveryIsPossible \* PROPERTY definition PROPERTY EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:36:38 CET 2025 \ No newline at end of file +\* Generated on Sun Jan 19 23:02:17 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.out new file mode 100644 index 0000000000..08f209eeda --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.out @@ -0,0 +1,368 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 60 and seed 1436414801931403111 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 23214] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:02:19) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:02:20. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select field "sk" from a non-record value NULL +line 111, col 36 to line 111, col 40 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 108, column 5 to line 124, column 57 in replicated +1. Line 108, column 8 to line 108, column 27 in replicated +2. Line 109, column 8 to line 123, column 80 in replicated +3. Line 123, column 9 to line 123, column 80 in replicated +4. Line 123, column 29 to line 123, column 80 in replicated +5. Line 123, column 71 to line 123, column 79 in replicated +6. Line 121, column 22 to line 121, column 42 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated +8. Line 27, column 16 to line 27, column 16 in replicated +9. Line 121, column 31 to line 121, column 41 in replicated +10. Line 120, column 24 to line 120, column 49 in replicated +11. Line 120, column 45 to line 120, column 48 in replicated +12. Line 113, column 13 to line 119, column 18 in replicated +13. Line 114, column 17 to line 116, column 32 in replicated +14. Line 116, column 17 to line 116, column 32 in replicated +15. Line 111, column 29 to line 111, column 62 in replicated +16. Line 111, column 35 to line 111, column 62 in replicated +17. Line 111, column 36 to line 111, column 40 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:02:20 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:6 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 258 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 84 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:14 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 59 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 45:105 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 44 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 123, col 9 to line 123, col 80 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 123, col 29 to line 123, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 30 to line 123, col 45 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 54 to line 123, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 71 to line 123, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 121, col 22 to line 121, col 42 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 121, col 31 to line 121, col 41 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 120, col 24 to line 120, col 49 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 120, col 45 to line 120, col 48 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 113, col 13 to line 119, col 18 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 114, col 17 to line 116, col 32 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 114, col 17 to line 114, col 37 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 116, col 17 to line 116, col 32 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 111, col 29 to line 111, col 62 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 111, col 35 to line 111, col 62 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 111, col 36 to line 111, col 40 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 111, col 50 to line 111, col 61 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||||||line 110, col 25 to line 110, col 90 of module replicated: 5:10 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||||line 110, col 26 to line 110, col 50 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||||line 110, col 60 to line 110, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 124, col 8 to line 124, col 57 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 136, col 8 to line 136, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 137, col 8 to line 137, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 159, col 13 to line 160, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 159, col 35 to line 160, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 160, col 9 to line 160, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 159, col 44 to line 159, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 159, col 22 to line 159, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 5 to line 165, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 47 to line 165, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 165, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 164, col 12 to line 165, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 164, col 13 to line 164, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 165, col 16 to line 165, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 61 to line 163, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 21 to line 163, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:02:20: 69 states generated (1.718 s/min), 13 distinct states found (323 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +69 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2426ms at (2025-01-19 23:02:20) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.tla similarity index 67% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.tla rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.tla index 675b27fd4b..06ff5bfce9 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308183077/MC.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC.tla @@ -22,44 +22,44 @@ az1, az2, az3 ---- \* MV CONSTANT definitions brokers -const_1737308178999123000 == +const_1737324137833305000 == {b1, b2, b3} ---- \* MV CONSTANT definitions safekeepers -const_1737308178999124000 == +const_1737324137833306000 == {s1, s2, s3} ---- \* MV CONSTANT definitions pageservers -const_1737308178999125000 == +const_1737324137833307000 == {p1} ---- \* MV CONSTANT definitions azs -const_1737308178999126000 == +const_1737324137833308000 == {az1, az2, az3} ---- \* SYMMETRY definition -symm_1737308178999127000 == -Permutations(const_1737308178999123000) \union Permutations(const_1737308178999124000) \union Permutations(const_1737308178999125000) \union Permutations(const_1737308178999126000) +symm_1737324137833309000 == +Permutations(const_1737324137833305000) \union Permutations(const_1737324137833306000) \union Permutations(const_1737324137833307000) \union Permutations(const_1737324137833308000) ---- \* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_1737308178999128000 == +const_1737324137833310000 == 2 ---- \* CONSTANT definitions @modelParameterConstants:5az_mapping -const_1737308178999129000 == +const_1737324137833311000 == [ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] ---- \* CONSTRAINT definition @modelParameterContraint:0 -constr_1737308178999130000 == +constr_1737324137833312000 == StateConstraint ---- ============================================================================= \* Modification History -\* Created Sun Jan 19 18:36:19 CET 2025 by cs +\* Created Sun Jan 19 23:02:17 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC_TE.out new file mode 100644 index 0000000000..08f209eeda --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/MC_TE.out @@ -0,0 +1,368 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 60 and seed 1436414801931403111 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 23214] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:02:19) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:02:20. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select field "sk" from a non-record value NULL +line 111, col 36 to line 111, col 40 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 108, column 5 to line 124, column 57 in replicated +1. Line 108, column 8 to line 108, column 27 in replicated +2. Line 109, column 8 to line 123, column 80 in replicated +3. Line 123, column 9 to line 123, column 80 in replicated +4. Line 123, column 29 to line 123, column 80 in replicated +5. Line 123, column 71 to line 123, column 79 in replicated +6. Line 121, column 22 to line 121, column 42 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated +8. Line 27, column 16 to line 27, column 16 in replicated +9. Line 121, column 31 to line 121, column 41 in replicated +10. Line 120, column 24 to line 120, column 49 in replicated +11. Line 120, column 45 to line 120, column 48 in replicated +12. Line 113, column 13 to line 119, column 18 in replicated +13. Line 114, column 17 to line 116, column 32 in replicated +14. Line 116, column 17 to line 116, column 32 in replicated +15. Line 111, column 29 to line 111, column 62 in replicated +16. Line 111, column 35 to line 111, column 62 in replicated +17. Line 111, column 36 to line 111, column 40 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:02:20 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:6 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 258 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 84 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:14 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 59 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 45:105 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 44 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 123, col 9 to line 123, col 80 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 123, col 29 to line 123, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 30 to line 123, col 45 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 54 to line 123, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 71 to line 123, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 121, col 22 to line 121, col 42 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 121, col 31 to line 121, col 41 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 120, col 24 to line 120, col 49 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 120, col 45 to line 120, col 48 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 113, col 13 to line 119, col 18 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 114, col 17 to line 116, col 32 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 114, col 17 to line 114, col 37 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 116, col 17 to line 116, col 32 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 111, col 29 to line 111, col 62 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 111, col 35 to line 111, col 62 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 111, col 36 to line 111, col 40 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 111, col 50 to line 111, col 61 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||||||line 110, col 25 to line 110, col 90 of module replicated: 5:10 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||||line 110, col 26 to line 110, col 50 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||||line 110, col 60 to line 110, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 124, col 8 to line 124, col 57 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 136, col 8 to line 136, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 137, col 8 to line 137, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 159, col 13 to line 160, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 159, col 35 to line 160, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 160, col 9 to line 160, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 159, col 44 to line 159, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 159, col 22 to line 159, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 5 to line 165, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 47 to line 165, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 165, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 164, col 12 to line 165, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 164, col 13 to line 164, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 165, col 16 to line 165, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 61 to line 163, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 21 to line 163, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:02:20: 69 states generated (1.718 s/min), 13 distinct states found (323 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +69 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2426ms at (2025-01-19 23:02:20) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/replicated.tla new file mode 100644 index 0000000000..3862e7e0aa --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324141888/replicated.tla @@ -0,0 +1,180 @@ +---- MODULE replicated ---- + +EXTENDS Integers, FiniteSets + +VARIABLES broker_state, safekeeper_state, pageserver_state, online + + +CONSTANT + brokers, + safekeepers, + pageservers, + azs, + az_mapping + +CONSTANT + NULL + +CONSTANT + max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +\* END HELPERS + +StateConstraint == + /\ \A s \in safekeepers: + /\ safekeeper_state[s].commit_lsn <= max_commit_lsn + /\ \A b \in brokers: + /\ \A s \in DOMAIN broker_state[b].sk: + /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + + + +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] +InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitOnline == safekeepers \cup brokers \cup pageservers + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + /\ online = InitOnline + +NodeOnlineOffline == + /\ online' = CHOOSE ss \in SUBSET InitOnline: + /\ Cardinality(ss \cap safekeepers) >= 2 + /\ Cardinality(ss \cap brokers) >= 2 + /\ ss \cap pageservers = pageservers \* assume no PS failures for now + /\ UNCHANGED <> + +SkCommit(s1, s2) == + /\ {s1, s2} \subseteq online + /\ s1 # s2 + /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn + /\ LET + new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 + IN + safekeeper_state' = [safekeeper_state EXCEPT + ![s1].commit_lsn = new_commit_lsn, + ![s2].commit_lsn = new_commit_lsn] + /\ UNCHANGED <> + +SkPeerRecovery(s1,s2) == + /\ {s1, s2} \subseteq online + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL + /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] + /\ UNCHANGED <> + +SkPushToBroker(s,b) == + /\ {s, b} \subseteq online + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] + /\ UNCHANGED <> + +PsRecvBroker(b,p,s) == + /\ {b,p,s} \subseteq online + /\ LET + bsk == broker_state[b].sk[s] + psk == pageserver_state[p].sk[s] + updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] + IN + pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn + THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] + ELSE pageserver_state + /\ UNCHANGED <> + + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + broker_infos == {safekeeper_state[s].rx[b]: b \in (DOMAIN safekeeper_state[s].rx)} + broker_infos_sks == UNION {bi.sk: bi \in broker_infos} + info == + ( + {safekeeper_state[s]} + \cup + broker_infos_sks + ) + \ + {NULL} + commit_lsns == {i.commit_lsn: i \in info} + prune_lsn == MinOfSet(commit_lsns) + IN + safekeeper_state' = [safekeeper_state EXCEPT ![s].prune_lsn = prune_lsn] + /\ UNCHANGED <> + + +SksWithNewerWal(p) == + LET + ps == pageserver_state[p] + IN + {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} + +PsChooseSk(p) == + /\ {p} \subseteq online + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +Next == + \/ NodeOnlineOffline + \/ \E s1 \in safekeepers: \E s2 \in safekeepers: + \/ SkCommit(s1, s2) + \/ SkPeerRecovery(s1, s2) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) + \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) + \/ \E p \in pageservers: PsChooseSk(p) + + +Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,online>> + + +\* invariants + +PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: + /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + + +EventuallyLaggingSkIsNotPreferredSk == <>( + LET + sks == safekeeper_state + lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } + preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} + IN + preferred_sks \cap lagging_sks = {} + + ) + + + +==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.cfg similarity index 66% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.cfg rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.cfg index 8159238beb..9e51a20b42 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/MC.cfg +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.cfg @@ -18,36 +18,37 @@ az2 = az2 az3 = az3 \* MV CONSTANT definitions CONSTANT -brokers <- const_1737308284086143000 +brokers <- const_1737324182115316000 \* CONSTANT declarations CONSTANT NULL = NULL \* MV CONSTANT definitions CONSTANT -safekeepers <- const_1737308284086144000 +safekeepers <- const_1737324182115317000 \* MV CONSTANT definitions CONSTANT -pageservers <- const_1737308284086145000 +pageservers <- const_1737324182115318000 \* MV CONSTANT definitions CONSTANT -azs <- const_1737308284086146000 +azs <- const_1737324182115319000 \* SYMMETRY definition -SYMMETRY symm_1737308284086147000 +SYMMETRY symm_1737324182115320000 \* CONSTANT definitions CONSTANT -max_commit_lsn <- const_1737308284086148000 +max_commit_lsn <- const_1737324182115321000 \* CONSTANT definitions CONSTANT -az_mapping <- const_1737308284086149000 +az_mapping <- const_1737324182115322000 \* CONSTRAINT definition CONSTRAINT -constr_1737308284086150000 +constr_1737324182115323000 \* SPECIFICATION definition SPECIFICATION Spec \* INVARIANT definition INVARIANT PsLagsSk +PeerRecoveryIsPossible \* PROPERTY definition PROPERTY EventuallyLaggingSkIsNotPreferredSk -\* Generated on Sun Jan 19 18:38:04 CET 2025 \ No newline at end of file +\* Generated on Sun Jan 19 23:03:02 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.out new file mode 100644 index 0000000000..a056909998 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.out @@ -0,0 +1,442 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 58 and seed 2509155719358048991 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 23239] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:03:03) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:03:04. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to enumerate UNION(s), but some element of s is nonenumerable. +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2147:1 @!@!@ +TLC was unable to fingerprint. + +Fingerprint Stack Trace: +2) line 111, col 29 to line 111, col 74 of module replicated +1) line 114, col 17 to line 116, col 32 of module replicated +0) line 113, col 13 to line 119, col 18 of module replicated + +Reason: +Attempted to enumerate UNION(s), but some element of s is nonenumerable. +@!@!@ENDMSG 2147 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:03:04 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:15 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 1605 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 1605 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 645 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 210 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 6:31 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 150 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 119:277 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 119 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 110 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 79 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 79 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 78 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 118 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 78 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 16:74 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 183 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 109:271 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 109 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 74 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 74 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:52 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 90, col 8 to line 90, col 31 of module replicated: 124 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 90, col 8 to line 90, col 14 of module replicated: 72:236 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 90, col 26 to line 90, col 31 of module replicated: 72 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 96, col 33 to line 98, col 37 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 96, col 36 to line 96, col 66 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 97, col 22 to line 97, col 66 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 98, col 22 to line 98, col 37 of module replicated: 50 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 27:74 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 183 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 109:271 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 109 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 74 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 74 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 8:20 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 108, col 8 to line 108, col 10 of module replicated: 28:52 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 108, col 22 to line 108, col 27 of module replicated: 28 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 123, col 9 to line 123, col 80 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 123, col 29 to line 123, col 80 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 30 to line 123, col 45 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 54 to line 123, col 79 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 71 to line 123, col 79 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 121, col 22 to line 121, col 42 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 27, col 19 to line 27, col 36 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 27, col 16 to line 27, col 16 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 121, col 31 to line 121, col 41 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||line 120, col 24 to line 120, col 49 of module replicated: 24:60 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 120, col 25 to line 120, col 36 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 120, col 45 to line 120, col 48 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 113, col 13 to line 119, col 18 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 114, col 17 to line 116, col 32 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 114, col 17 to line 114, col 37 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 116, col 17 to line 116, col 32 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 111, col 29 to line 111, col 74 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||||line 111, col 35 to line 111, col 74 of module replicated: 24:24 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 111, col 36 to line 111, col 40 of module replicated: 4 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 111, col 51 to line 111, col 71 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||line 111, col 51 to line 111, col 62 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + ||||||||||||||line 110, col 25 to line 110, col 90 of module replicated: 24:28 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||||line 110, col 26 to line 110, col 50 of module replicated: 72 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||||line 110, col 60 to line 110, col 88 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||line 111, col 66 to line 111, col 71 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 119, col 13 to line 119, col 18 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 124, col 8 to line 124, col 57 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 134, col 8 to line 134, col 27 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 135, col 8 to line 135, col 30 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 135, col 8 to line 135, col 25 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 129, col 15 to line 129, col 33 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 131, col 5 to line 131, col 66 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 131, col 26 to line 131, col 65 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 131, col 12 to line 131, col 23 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 135, col 24 to line 135, col 24 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 135, col 29 to line 135, col 30 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 136, col 8 to line 136, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 137, col 8 to line 137, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 159, col 13 to line 160, col 81 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 159, col 35 to line 160, col 81 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 160, col 9 to line 160, col 81 of module replicated: 195 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 159, col 44 to line 159, col 72 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 159, col 22 to line 159, col 32 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 5 to line 165, col 88 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 47 to line 165, col 88 of module replicated: 164 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 165, col 88 of module replicated: 167 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 164, col 12 to line 165, col 88 of module replicated: 167 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 164, col 13 to line 164, col 85 of module replicated: 167 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 165, col 16 to line 165, col 88 of module replicated: 35 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 61 to line 163, col 83 of module replicated: 164 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 21 to line 163, col 43 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(5) at 2025-01-19 23:03:04: 248 states generated (5.740 s/min), 61 distinct states found (1.412 ds/min), 50 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +248 states generated, 61 distinct states found, 50 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2611ms at (2025-01-19 23:03:04) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.tla similarity index 67% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.tla rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.tla index 060f5935bc..df3a585d29 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC.tla @@ -22,44 +22,44 @@ az1, az2, az3 ---- \* MV CONSTANT definitions brokers -const_1737308198937133000 == +const_1737324182115316000 == {b1, b2, b3} ---- \* MV CONSTANT definitions safekeepers -const_1737308198937134000 == +const_1737324182115317000 == {s1, s2, s3} ---- \* MV CONSTANT definitions pageservers -const_1737308198937135000 == +const_1737324182115318000 == {p1} ---- \* MV CONSTANT definitions azs -const_1737308198937136000 == +const_1737324182115319000 == {az1, az2, az3} ---- \* SYMMETRY definition -symm_1737308198937137000 == -Permutations(const_1737308198937133000) \union Permutations(const_1737308198937134000) \union Permutations(const_1737308198937135000) \union Permutations(const_1737308198937136000) +symm_1737324182115320000 == +Permutations(const_1737324182115316000) \union Permutations(const_1737324182115317000) \union Permutations(const_1737324182115318000) \union Permutations(const_1737324182115319000) ---- \* CONSTANT definitions @modelParameterConstants:4max_commit_lsn -const_1737308198937138000 == +const_1737324182115321000 == 2 ---- \* CONSTANT definitions @modelParameterConstants:5az_mapping -const_1737308198937139000 == +const_1737324182115322000 == [ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] ---- \* CONSTRAINT definition @modelParameterContraint:0 -constr_1737308198937140000 == +constr_1737324182115323000 == StateConstraint ---- ============================================================================= \* Modification History -\* Created Sun Jan 19 18:36:38 CET 2025 by cs +\* Created Sun Jan 19 23:03:02 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC_TE.out new file mode 100644 index 0000000000..a056909998 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/MC_TE.out @@ -0,0 +1,442 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 58 and seed 2509155719358048991 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 23239] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:03:03) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:03:04. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to enumerate UNION(s), but some element of s is nonenumerable. +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2147:1 @!@!@ +TLC was unable to fingerprint. + +Fingerprint Stack Trace: +2) line 111, col 29 to line 111, col 74 of module replicated +1) line 114, col 17 to line 116, col 32 of module replicated +0) line 113, col 13 to line 119, col 18 of module replicated + +Reason: +Attempted to enumerate UNION(s), but some element of s is nonenumerable. +@!@!@ENDMSG 2147 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:03:04 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:15 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 1605 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 1605 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 645 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 210 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 6:31 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 150 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 119:277 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 119 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 110 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 79 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 79 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 78 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 118 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 78 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 16:74 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 183 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 109:271 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 109 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 74 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 74 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:52 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 90, col 8 to line 90, col 31 of module replicated: 124 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 90, col 8 to line 90, col 14 of module replicated: 72:236 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 90, col 26 to line 90, col 31 of module replicated: 72 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 96, col 33 to line 98, col 37 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 96, col 36 to line 96, col 66 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 97, col 22 to line 97, col 66 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 98, col 22 to line 98, col 37 of module replicated: 50 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 52 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 27:74 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 183 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 109:271 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 109 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 74 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 74 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 8:20 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 108, col 8 to line 108, col 10 of module replicated: 28:52 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 108, col 22 to line 108, col 27 of module replicated: 28 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 123, col 9 to line 123, col 80 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 123, col 29 to line 123, col 80 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 30 to line 123, col 45 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 54 to line 123, col 79 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 123, col 71 to line 123, col 79 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 121, col 22 to line 121, col 42 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 27, col 19 to line 27, col 36 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 27, col 16 to line 27, col 16 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 121, col 31 to line 121, col 41 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||line 120, col 24 to line 120, col 49 of module replicated: 24:60 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 120, col 25 to line 120, col 36 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 120, col 45 to line 120, col 48 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 113, col 13 to line 119, col 18 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 114, col 17 to line 116, col 32 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 114, col 17 to line 114, col 37 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 116, col 17 to line 116, col 32 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 111, col 29 to line 111, col 74 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||||line 111, col 35 to line 111, col 74 of module replicated: 24:24 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 111, col 36 to line 111, col 40 of module replicated: 4 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 111, col 51 to line 111, col 71 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||line 111, col 51 to line 111, col 62 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + ||||||||||||||line 110, col 25 to line 110, col 90 of module replicated: 24:28 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||||line 110, col 26 to line 110, col 50 of module replicated: 72 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||||line 110, col 60 to line 110, col 88 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||line 111, col 66 to line 111, col 71 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 119, col 13 to line 119, col 18 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 124, col 8 to line 124, col 57 of module replicated: 20 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 134, col 8 to line 134, col 27 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 135, col 8 to line 135, col 30 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 135, col 8 to line 135, col 25 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 129, col 15 to line 129, col 33 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 131, col 5 to line 131, col 66 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 131, col 26 to line 131, col 65 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 131, col 12 to line 131, col 23 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 135, col 24 to line 135, col 24 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 135, col 29 to line 135, col 30 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 136, col 8 to line 136, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 137, col 8 to line 137, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 159, col 13 to line 160, col 81 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 159, col 35 to line 160, col 81 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 160, col 9 to line 160, col 81 of module replicated: 195 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 159, col 44 to line 159, col 72 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 159, col 22 to line 159, col 32 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 5 to line 165, col 88 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 47 to line 165, col 88 of module replicated: 164 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 165, col 88 of module replicated: 167 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 164, col 12 to line 165, col 88 of module replicated: 167 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 164, col 13 to line 164, col 85 of module replicated: 167 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 165, col 16 to line 165, col 88 of module replicated: 35 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 61 to line 163, col 83 of module replicated: 164 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 21 to line 163, col 43 of module replicated: 65 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(5) at 2025-01-19 23:03:04: 248 states generated (5.740 s/min), 61 distinct states found (1.412 ds/min), 50 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +248 states generated, 61 distinct states found, 50 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2611ms at (2025-01-19 23:03:04) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/replicated.tla new file mode 100644 index 0000000000..88031dae56 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324186169/replicated.tla @@ -0,0 +1,180 @@ +---- MODULE replicated ---- + +EXTENDS Integers, FiniteSets + +VARIABLES broker_state, safekeeper_state, pageserver_state, online + + +CONSTANT + brokers, + safekeepers, + pageservers, + azs, + az_mapping + +CONSTANT + NULL + +CONSTANT + max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +\* END HELPERS + +StateConstraint == + /\ \A s \in safekeepers: + /\ safekeeper_state[s].commit_lsn <= max_commit_lsn + /\ \A b \in brokers: + /\ \A s \in DOMAIN broker_state[b].sk: + /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + + + +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] +InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitOnline == safekeepers \cup brokers \cup pageservers + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + /\ online = InitOnline + +NodeOnlineOffline == + /\ online' = CHOOSE ss \in SUBSET InitOnline: + /\ Cardinality(ss \cap safekeepers) >= 2 + /\ Cardinality(ss \cap brokers) >= 2 + /\ ss \cap pageservers = pageservers \* assume no PS failures for now + /\ UNCHANGED <> + +SkCommit(s1, s2) == + /\ {s1, s2} \subseteq online + /\ s1 # s2 + /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn + /\ LET + new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 + IN + safekeeper_state' = [safekeeper_state EXCEPT + ![s1].commit_lsn = new_commit_lsn, + ![s2].commit_lsn = new_commit_lsn] + /\ UNCHANGED <> + +SkPeerRecovery(s1,s2) == + /\ {s1, s2} \subseteq online + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL + /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] + /\ UNCHANGED <> + +SkPushToBroker(s,b) == + /\ {s, b} \subseteq online + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] + /\ UNCHANGED <> + +PsRecvBroker(b,p,s) == + /\ {b,p,s} \subseteq online + /\ LET + bsk == broker_state[b].sk[s] + psk == pageserver_state[p].sk[s] + updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] + IN + pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn + THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] + ELSE pageserver_state + /\ UNCHANGED <> + + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + broker_infos == {safekeeper_state[s].rx[b]: b \in (DOMAIN safekeeper_state[s].rx)} + broker_infos_sks == UNION {bi.sk: bi \in (broker_infos \ {NULL}) } + info == + ( + {safekeeper_state[s]} + \cup + broker_infos_sks + ) + \ + {NULL} + commit_lsns == {i.commit_lsn: i \in info} + prune_lsn == MinOfSet(commit_lsns) + IN + safekeeper_state' = [safekeeper_state EXCEPT ![s].prune_lsn = prune_lsn] + /\ UNCHANGED <> + + +SksWithNewerWal(p) == + LET + ps == pageserver_state[p] + IN + {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} + +PsChooseSk(p) == + /\ {p} \subseteq online + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +Next == + \/ NodeOnlineOffline + \/ \E s1 \in safekeepers: \E s2 \in safekeepers: + \/ SkCommit(s1, s2) + \/ SkPeerRecovery(s1, s2) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) + \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) + \/ \E p \in pageservers: PsChooseSk(p) + + +Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,online>> + + +\* invariants + +PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: + /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + + +EventuallyLaggingSkIsNotPreferredSk == <>( + LET + sks == safekeeper_state + lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } + preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} + IN + preferred_sks \cap lagging_sks = {} + + ) + + + +==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.cfg new file mode 100644 index 0000000000..17312b22c7 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.cfg @@ -0,0 +1,54 @@ +\* MV CONSTANT declarations +CONSTANTS +b1 = b1 +b2 = b2 +b3 = b3 +\* MV CONSTANT declarations +CONSTANTS +s1 = s1 +s2 = s2 +s3 = s3 +\* MV CONSTANT declarations +CONSTANTS +p1 = p1 +\* MV CONSTANT declarations +CONSTANTS +az1 = az1 +az2 = az2 +az3 = az3 +\* MV CONSTANT definitions +CONSTANT +brokers <- const_1737324311514327000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737324311514328000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737324311514329000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737324311514330000 +\* SYMMETRY definition +SYMMETRY symm_1737324311514331000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737324311514332000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737324311514333000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737324311514334000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* INVARIANT definition +INVARIANT +PsLagsSk +PeerRecoveryIsPossible +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 23:05:11 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.out new file mode 100644 index 0000000000..03d45e4f9c --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.out @@ -0,0 +1,324 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 120 and seed -4351583933909868251 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 23327] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:05:12) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:05:13. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select field "rx" from a non-record value s1 +line 111, col 50 to line 111, col 53 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 108, column 5 to line 125, column 57 in replicated +1. Line 108, column 8 to line 108, column 27 in replicated +2. Line 109, column 8 to line 124, column 80 in replicated +3. Line 124, column 9 to line 124, column 80 in replicated +4. Line 124, column 29 to line 124, column 80 in replicated +5. Line 124, column 71 to line 124, column 79 in replicated +6. Line 122, column 22 to line 122, column 42 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated +8. Line 27, column 16 to line 27, column 16 in replicated +9. Line 122, column 31 to line 122, column 41 in replicated +10. Line 121, column 24 to line 121, column 49 in replicated +11. Line 121, column 45 to line 121, column 48 in replicated +12. Line 114, column 13 to line 120, column 18 in replicated +13. Line 115, column 17 to line 117, column 32 in replicated +14. Line 117, column 17 to line 117, column 32 in replicated +15. Line 112, column 29 to line 112, column 74 in replicated +16. Line 112, column 35 to line 112, column 74 in replicated +17. Line 112, column 51 to line 112, column 71 in replicated +18. Line 112, column 51 to line 112, column 62 in replicated +19. Line 111, column 25 to line 111, column 64 in replicated +20. Line 111, column 25 to line 111, column 55 in replicated +21. Line 111, column 43 to line 111, column 53 in replicated +22. Line 111, column 50 to line 111, column 53 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:05:14 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:7 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 301 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 98 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:15 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 62 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 47:110 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 46 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 124, col 9 to line 124, col 80 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 124, col 29 to line 124, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 125, col 8 to line 125, col 57 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 137, col 8 to line 137, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 138, col 8 to line 138, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 160, col 13 to line 161, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 160, col 35 to line 161, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 161, col 9 to line 161, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 160, col 44 to line 160, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 160, col 22 to line 160, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 164, col 5 to line 166, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 164, col 47 to line 166, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 165, col 9 to line 166, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 165, col 12 to line 166, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 165, col 13 to line 165, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 166, col 16 to line 166, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 61 to line 164, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 164, col 21 to line 164, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:05:14: 69 states generated (1.732 s/min), 13 distinct states found (326 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +69 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2406ms at (2025-01-19 23:05:14) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.tla new file mode 100644 index 0000000000..19f485fc1e --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS replicated, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +b1, b2, b3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +s1, s2, s3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +p1 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +az1, az2, az3 +---- + +\* MV CONSTANT definitions brokers +const_1737324311514327000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737324311514328000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737324311514329000 == +{p1} +---- + +\* MV CONSTANT definitions azs +const_1737324311514330000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737324311514331000 == +Permutations(const_1737324311514327000) \union Permutations(const_1737324311514328000) \union Permutations(const_1737324311514329000) \union Permutations(const_1737324311514330000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737324311514332000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737324311514333000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737324311514334000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 23:05:11 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC_TE.out new file mode 100644 index 0000000000..03d45e4f9c --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/MC_TE.out @@ -0,0 +1,324 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 120 and seed -4351583933909868251 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 23327] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:05:12) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:05:13. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select field "rx" from a non-record value s1 +line 111, col 50 to line 111, col 53 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 108, column 5 to line 125, column 57 in replicated +1. Line 108, column 8 to line 108, column 27 in replicated +2. Line 109, column 8 to line 124, column 80 in replicated +3. Line 124, column 9 to line 124, column 80 in replicated +4. Line 124, column 29 to line 124, column 80 in replicated +5. Line 124, column 71 to line 124, column 79 in replicated +6. Line 122, column 22 to line 122, column 42 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated +8. Line 27, column 16 to line 27, column 16 in replicated +9. Line 122, column 31 to line 122, column 41 in replicated +10. Line 121, column 24 to line 121, column 49 in replicated +11. Line 121, column 45 to line 121, column 48 in replicated +12. Line 114, column 13 to line 120, column 18 in replicated +13. Line 115, column 17 to line 117, column 32 in replicated +14. Line 117, column 17 to line 117, column 32 in replicated +15. Line 112, column 29 to line 112, column 74 in replicated +16. Line 112, column 35 to line 112, column 74 in replicated +17. Line 112, column 51 to line 112, column 71 in replicated +18. Line 112, column 51 to line 112, column 62 in replicated +19. Line 111, column 25 to line 111, column 64 in replicated +20. Line 111, column 25 to line 111, column 55 in replicated +21. Line 111, column 43 to line 111, column 53 in replicated +22. Line 111, column 50 to line 111, column 53 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:05:14 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 46, col 5 to line 49, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:7 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 55, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 18 to line 55, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 53, col 9 to line 55, col 44 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 53, col 12 to line 53, col 48 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 54, col 12 to line 54, col 44 of module replicated: 301 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 55, col 12 to line 55, col 44 of module replicated: 98 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 52, col 32 to line 52, col 48 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 56, col 67 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:15 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 59, col 8 to line 59, col 32 of module replicated: 62 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 59, col 8 to line 59, col 15 of module replicated: 47:110 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 59, col 27 to line 59, col 32 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 14 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 8 to line 60, col 9 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 60, col 13 to line 60, col 14 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 61, col 8 to line 61, col 72 of module replicated: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 8 to line 61, col 38 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 61, col 42 to line 61, col 72 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 13 to line 67, col 50 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 68, col 8 to line 68, col 58 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 8 to line 71, col 32 of module replicated: 46 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 72 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 78, col 8 to line 78, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 78, col 25 to line 78, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 86, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 96, col 13 to line 98, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 99, col 8 to line 99, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 103, col 8 to line 103, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 103, col 24 to line 103, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 104, col 8 to line 104, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 105, col 8 to line 105, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 124, col 9 to line 124, col 80 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 124, col 29 to line 124, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 125, col 8 to line 125, col 57 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 137, col 8 to line 137, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 138, col 8 to line 138, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 160, col 13 to line 161, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 160, col 35 to line 161, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 161, col 9 to line 161, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 160, col 44 to line 160, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 160, col 22 to line 160, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 164, col 5 to line 166, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 164, col 47 to line 166, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 165, col 9 to line 166, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 165, col 12 to line 166, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 165, col 13 to line 165, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 166, col 16 to line 166, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 61 to line 164, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 164, col 21 to line 164, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:05:14: 69 states generated (1.732 s/min), 13 distinct states found (326 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +69 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2406ms at (2025-01-19 23:05:14) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/replicated.tla new file mode 100644 index 0000000000..cab5c1023b --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737324315582/replicated.tla @@ -0,0 +1,181 @@ +---- MODULE replicated ---- + +EXTENDS Integers, FiniteSets + +VARIABLES broker_state, safekeeper_state, pageserver_state, online + + +CONSTANT + brokers, + safekeepers, + pageservers, + azs, + az_mapping + +CONSTANT + NULL + +CONSTANT + max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +\* END HELPERS + +StateConstraint == + /\ \A s \in safekeepers: + /\ safekeeper_state[s].commit_lsn <= max_commit_lsn + /\ \A b \in brokers: + /\ \A s \in DOMAIN broker_state[b].sk: + /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + + + +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] +InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitOnline == safekeepers \cup brokers \cup pageservers + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + /\ online = InitOnline + +NodeOnlineOffline == + /\ online' = CHOOSE ss \in SUBSET InitOnline: + /\ Cardinality(ss \cap safekeepers) >= 2 + /\ Cardinality(ss \cap brokers) >= 2 + /\ ss \cap pageservers = pageservers \* assume no PS failures for now + /\ UNCHANGED <> + +SkCommit(s1, s2) == + /\ {s1, s2} \subseteq online + /\ s1 # s2 + /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn + /\ LET + new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 + IN + safekeeper_state' = [safekeeper_state EXCEPT + ![s1].commit_lsn = new_commit_lsn, + ![s2].commit_lsn = new_commit_lsn] + /\ UNCHANGED <> + +SkPeerRecovery(s1,s2) == + /\ {s1, s2} \subseteq online + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL + /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] + /\ UNCHANGED <> + +SkPushToBroker(s,b) == + /\ {s, b} \subseteq online + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] + /\ UNCHANGED <> + +PsRecvBroker(b,p,s) == + /\ {b,p,s} \subseteq online + /\ LET + bsk == broker_state[b].sk[s] + psk == pageserver_state[p].sk[s] + updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] + IN + pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn + THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] + ELSE pageserver_state + /\ UNCHANGED <> + + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + sk == safekeeper_state[s] + broker_infos == {sk.rx[b]: b \in (DOMAIN s.rx)} \ {NULL} + broker_infos_sks == UNION {bi.sk: bi \in (broker_infos \ {NULL}) } + info == + ( + {safekeeper_state[s]} + \cup + broker_infos_sks + ) + \ + {NULL} + commit_lsns == {i.commit_lsn: i \in info} + prune_lsn == MinOfSet(commit_lsns) + IN + safekeeper_state' = [safekeeper_state EXCEPT ![s].prune_lsn = prune_lsn] + /\ UNCHANGED <> + + +SksWithNewerWal(p) == + LET + ps == pageserver_state[p] + IN + {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} + +PsChooseSk(p) == + /\ {p} \subseteq online + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +Next == + \/ NodeOnlineOffline + \/ \E s1 \in safekeepers: \E s2 \in safekeepers: + \/ SkCommit(s1, s2) + \/ SkPeerRecovery(s1, s2) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) + \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) + \/ \E p \in pageservers: PsChooseSk(p) + + +Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,online>> + + +\* invariants + +PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: + /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + + +EventuallyLaggingSkIsNotPreferredSk == <>( + LET + sks == safekeeper_state + lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } + preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} + IN + preferred_sks \cap lagging_sks = {} + + ) + + + +==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.cfg new file mode 100644 index 0000000000..b73f653f76 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.cfg @@ -0,0 +1,54 @@ +\* MV CONSTANT declarations +CONSTANTS +b1 = b1 +b2 = b2 +b3 = b3 +\* MV CONSTANT declarations +CONSTANTS +s1 = s1 +s2 = s2 +s3 = s3 +\* MV CONSTANT declarations +CONSTANTS +p1 = p1 +\* MV CONSTANT declarations +CONSTANTS +az1 = az1 +az2 = az2 +az3 = az3 +\* MV CONSTANT definitions +CONSTANT +brokers <- const_1737326111193338000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737326111193339000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737326111193340000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737326111193341000 +\* SYMMETRY definition +SYMMETRY symm_1737326111193342000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737326111193343000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737326111193344000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737326111193345000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* INVARIANT definition +INVARIANT +PsLagsSk +PeerRecoveryIsPossible +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 23:35:11 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.out new file mode 100644 index 0000000000..32eb0a04a9 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.out @@ -0,0 +1,312 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 75 and seed 8173044349253312442 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 24585] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:35:12) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:35:13. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select field "rx" from a non-record value s1 +line 116, col 50 to line 116, col 53 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 112, column 5 to line 128, column 57 in replicated +1. Line 112, column 8 to line 112, column 27 in replicated +2. Line 113, column 8 to line 127, column 80 in replicated +3. Line 127, column 9 to line 127, column 80 in replicated +4. Line 127, column 29 to line 127, column 80 in replicated +5. Line 127, column 71 to line 127, column 79 in replicated +6. Line 125, column 22 to line 125, column 46 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated +8. Line 27, column 16 to line 27, column 16 in replicated +9. Line 125, column 31 to line 125, column 45 in replicated +10. Line 118, column 28 to line 124, column 13 in replicated +11. Line 123, column 27 to line 123, column 35 in replicated +12. Line 117, column 22 to line 117, column 64 in replicated +13. Line 117, column 29 to line 117, column 63 in replicated +14. Line 117, column 51 to line 117, column 62 in replicated +15. Line 116, column 25 to line 116, column 64 in replicated +16. Line 116, column 25 to line 116, column 55 in replicated +17. Line 116, column 43 to line 116, column 53 in replicated +18. Line 116, column 50 to line 116, column 53 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:35:14 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 5 to line 53, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:6 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 59, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 18 to line 59, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 57, col 9 to line 59, col 44 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 57, col 12 to line 57, col 48 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 58, col 12 to line 58, col 44 of module replicated: 258 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 12 to line 59, col 44 of module replicated: 84 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 32 to line 56, col 48 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 67 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:14 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 32 of module replicated: 59 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 63, col 8 to line 63, col 15 of module replicated: 45:105 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 63, col 27 to line 63, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 14 of module replicated: 44 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 8 to line 64, col 9 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 13 to line 64, col 14 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 8 to line 65, col 72 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 8 to line 65, col 38 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 42 to line 65, col 72 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 69, col 13 to line 71, col 50 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 58 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 76, col 8 to line 76, col 72 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 77, col 8 to line 77, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 79, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 82, col 8 to line 82, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 82, col 8 to line 82, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 82, col 25 to line 82, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 90, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 91, col 8 to line 91, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 100, col 13 to line 102, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 107, col 8 to line 107, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 107, col 8 to line 107, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 107, col 24 to line 107, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 109, col 8 to line 109, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 112, col 8 to line 112, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 127, col 9 to line 127, col 80 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 127, col 29 to line 127, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 8 to line 128, col 57 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 140, col 8 to line 140, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 141, col 8 to line 141, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 13 to line 164, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 35 to line 164, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 164, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 44 to line 163, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 22 to line 163, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 167, col 5 to line 169, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 47 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 168, col 9 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 168, col 12 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 168, col 13 to line 168, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 169, col 16 to line 169, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 167, col 61 to line 167, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 21 to line 167, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:35:14: 69 states generated (1.538 s/min), 13 distinct states found (289 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +69 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2708ms at (2025-01-19 23:35:14) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.tla new file mode 100644 index 0000000000..00d9fe44a4 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS replicated, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +b1, b2, b3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +s1, s2, s3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +p1 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +az1, az2, az3 +---- + +\* MV CONSTANT definitions brokers +const_1737326111193338000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737326111193339000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737326111193340000 == +{p1} +---- + +\* MV CONSTANT definitions azs +const_1737326111193341000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737326111193342000 == +Permutations(const_1737326111193338000) \union Permutations(const_1737326111193339000) \union Permutations(const_1737326111193340000) \union Permutations(const_1737326111193341000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737326111193343000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737326111193344000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737326111193345000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 23:35:11 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC_TE.out new file mode 100644 index 0000000000..32eb0a04a9 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/MC_TE.out @@ -0,0 +1,312 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 75 and seed 8173044349253312442 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 24585] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:35:12) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:35:13. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select field "rx" from a non-record value s1 +line 116, col 50 to line 116, col 53 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 112, column 5 to line 128, column 57 in replicated +1. Line 112, column 8 to line 112, column 27 in replicated +2. Line 113, column 8 to line 127, column 80 in replicated +3. Line 127, column 9 to line 127, column 80 in replicated +4. Line 127, column 29 to line 127, column 80 in replicated +5. Line 127, column 71 to line 127, column 79 in replicated +6. Line 125, column 22 to line 125, column 46 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated +8. Line 27, column 16 to line 27, column 16 in replicated +9. Line 125, column 31 to line 125, column 45 in replicated +10. Line 118, column 28 to line 124, column 13 in replicated +11. Line 123, column 27 to line 123, column 35 in replicated +12. Line 117, column 22 to line 117, column 64 in replicated +13. Line 117, column 29 to line 117, column 63 in replicated +14. Line 117, column 51 to line 117, column 62 in replicated +15. Line 116, column 25 to line 116, column 64 in replicated +16. Line 116, column 25 to line 116, column 55 in replicated +17. Line 116, column 43 to line 116, column 53 in replicated +18. Line 116, column 50 to line 116, column 53 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:35:14 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 5 to line 53, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:6 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 59, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 18 to line 59, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 57, col 9 to line 59, col 44 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 57, col 12 to line 57, col 48 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 58, col 12 to line 58, col 44 of module replicated: 258 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 12 to line 59, col 44 of module replicated: 84 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 32 to line 56, col 48 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 67 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:14 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 32 of module replicated: 59 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 63, col 8 to line 63, col 15 of module replicated: 45:105 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 63, col 27 to line 63, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 14 of module replicated: 44 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 8 to line 64, col 9 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 13 to line 64, col 14 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 8 to line 65, col 72 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 8 to line 65, col 38 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 42 to line 65, col 72 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 69, col 13 to line 71, col 50 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 58 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 76, col 8 to line 76, col 72 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 77, col 8 to line 77, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 79, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 82, col 8 to line 82, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 82, col 8 to line 82, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 82, col 25 to line 82, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 90, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 91, col 8 to line 91, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 100, col 13 to line 102, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 107, col 8 to line 107, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 107, col 8 to line 107, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 107, col 24 to line 107, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 109, col 8 to line 109, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 112, col 8 to line 112, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 127, col 9 to line 127, col 80 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 127, col 29 to line 127, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 8 to line 128, col 57 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 140, col 8 to line 140, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 141, col 8 to line 141, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 13 to line 164, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 35 to line 164, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 164, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 44 to line 163, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 22 to line 163, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 167, col 5 to line 169, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 47 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 168, col 9 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 168, col 12 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 168, col 13 to line 168, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 169, col 16 to line 169, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 167, col 61 to line 167, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 21 to line 167, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:35:14: 69 states generated (1.538 s/min), 13 distinct states found (289 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +69 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2708ms at (2025-01-19 23:35:14) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/replicated.tla new file mode 100644 index 0000000000..0f91f2abba --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326115252/replicated.tla @@ -0,0 +1,184 @@ +---- MODULE replicated ---- + +EXTENDS Integers, FiniteSets + +VARIABLES broker_state, safekeeper_state, pageserver_state, online + + +CONSTANT + brokers, + safekeepers, + pageservers, + azs, + az_mapping + +CONSTANT + NULL + +CONSTANT + max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +(* The minimum of a non-empty set of integers *) +MaxOfSet(S) == + CHOOSE x \in S: \A y \in S: x >= y + +\* END HELPERS + +StateConstraint == + /\ \A s \in safekeepers: + /\ safekeeper_state[s].commit_lsn <= max_commit_lsn + /\ \A b \in brokers: + /\ \A s \in DOMAIN broker_state[b].sk: + /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + + + +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] +InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitOnline == safekeepers \cup brokers \cup pageservers + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + /\ online = InitOnline + +NodeOnlineOffline == + /\ online' = CHOOSE ss \in SUBSET InitOnline: + /\ Cardinality(ss \cap safekeepers) >= 2 + /\ Cardinality(ss \cap brokers) >= 2 + /\ ss \cap pageservers = pageservers \* assume no PS failures for now + /\ UNCHANGED <> + +SkCommit(s1, s2) == + /\ {s1, s2} \subseteq online + /\ s1 # s2 + /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn + /\ LET + new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 + IN + safekeeper_state' = [safekeeper_state EXCEPT + ![s1].commit_lsn = new_commit_lsn, + ![s2].commit_lsn = new_commit_lsn] + /\ UNCHANGED <> + +SkPeerRecovery(s1,s2) == + /\ {s1, s2} \subseteq online + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL + /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] + /\ UNCHANGED <> + +SkPushToBroker(s,b) == + /\ {s, b} \subseteq online + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] + /\ UNCHANGED <> + +PsRecvBroker(b,p,s) == + /\ {b,p,s} \subseteq online + /\ LET + bsk == broker_state[b].sk[s] + psk == pageserver_state[p].sk[s] + updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] + IN + pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn + THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] + ELSE pageserver_state + /\ UNCHANGED <> + + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + sk == safekeeper_state[s] + + broker_infos == {sk.rx[b]: b \in (DOMAIN s.rx)} \ {NULL} + known_sks == UNION ({DOMAIN bi.sk: bi \in broker_infos}) + max_commit_lsns == { + MaxOfSet( + { + sk.rx[b].sk[s2].commit_lsn: b \in DOMAIN sk.rx + } + ): s2 \in known_sks + } + prune_lsn == MinOfSet(max_commit_lsns) + IN + safekeeper_state' = [safekeeper_state EXCEPT ![s].prune_lsn = prune_lsn] + /\ UNCHANGED <> + + +SksWithNewerWal(p) == + LET + ps == pageserver_state[p] + IN + {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} + +PsChooseSk(p) == + /\ {p} \subseteq online + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +Next == + \/ NodeOnlineOffline + \/ \E s1 \in safekeepers: \E s2 \in safekeepers: + \/ SkCommit(s1, s2) + \/ SkPeerRecovery(s1, s2) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) + \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) + \/ \E p \in pageservers: PsChooseSk(p) + + +Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,online>> + + +\* invariants + +PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: + /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + + +EventuallyLaggingSkIsNotPreferredSk == <>( + LET + sks == safekeeper_state + lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } + preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} + IN + preferred_sks \cap lagging_sks = {} + + ) + + + +==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.cfg new file mode 100644 index 0000000000..8c3ce0b94d --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.cfg @@ -0,0 +1,54 @@ +\* MV CONSTANT declarations +CONSTANTS +b1 = b1 +b2 = b2 +b3 = b3 +\* MV CONSTANT declarations +CONSTANTS +s1 = s1 +s2 = s2 +s3 = s3 +\* MV CONSTANT declarations +CONSTANTS +p1 = p1 +\* MV CONSTANT declarations +CONSTANTS +az1 = az1 +az2 = az2 +az3 = az3 +\* MV CONSTANT definitions +CONSTANT +brokers <- const_1737326131354349000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737326131354350000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737326131354351000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737326131354352000 +\* SYMMETRY definition +SYMMETRY symm_1737326131354353000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737326131354354000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737326131354355000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737326131354356000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* INVARIANT definition +INVARIANT +PsLagsSk +PeerRecoveryIsPossible +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 23:35:31 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.out new file mode 100644 index 0000000000..8faf336b8d --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.out @@ -0,0 +1,358 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 0 and seed 849358144369345749 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 24597] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:35:32) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:35:33. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to compute the value of an expression of form +CHOOSE x \in S: P, but no element of S satisfied P. +line 27, col 3 to line 27, col 36 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 112, column 5 to line 128, column 57 in replicated +1. Line 112, column 8 to line 112, column 27 in replicated +2. Line 113, column 8 to line 127, column 80 in replicated +3. Line 127, column 9 to line 127, column 80 in replicated +4. Line 127, column 29 to line 127, column 80 in replicated +5. Line 127, column 71 to line 127, column 79 in replicated +6. Line 125, column 22 to line 125, column 46 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:35:33 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 5 to line 53, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:7 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 59, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 18 to line 59, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 57, col 9 to line 59, col 44 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 57, col 12 to line 57, col 48 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 58, col 12 to line 58, col 44 of module replicated: 301 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 12 to line 59, col 44 of module replicated: 98 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 32 to line 56, col 48 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 67 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:15 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 32 of module replicated: 62 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 63, col 8 to line 63, col 15 of module replicated: 47:110 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 63, col 27 to line 63, col 32 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 14 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 8 to line 64, col 9 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 13 to line 64, col 14 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 8 to line 65, col 72 of module replicated: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 8 to line 65, col 38 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 42 to line 65, col 72 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 69, col 13 to line 71, col 50 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 58 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 32 of module replicated: 46 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 76, col 8 to line 76, col 72 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 77, col 8 to line 77, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 79, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 82, col 8 to line 82, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 82, col 8 to line 82, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 82, col 25 to line 82, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 90, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 91, col 8 to line 91, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 100, col 13 to line 102, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 107, col 8 to line 107, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 107, col 8 to line 107, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 107, col 24 to line 107, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 109, col 8 to line 109, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 112, col 8 to line 112, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 127, col 9 to line 127, col 80 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 127, col 29 to line 127, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 30 to line 127, col 45 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 54 to line 127, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 71 to line 127, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 125, col 22 to line 125, col 46 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 125, col 31 to line 125, col 45 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||line 118, col 28 to line 124, col 13 of module replicated: 5:5 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 123, col 27 to line 123, col 35 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 117, col 22 to line 117, col 64 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + ||||||||line 117, col 29 to line 117, col 63 of module replicated: 5:5 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 117, col 51 to line 117, col 62 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 116, col 25 to line 116, col 65 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||||line 116, col 25 to line 116, col 56 of module replicated: 5:5 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 116, col 26 to line 116, col 33 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 116, col 43 to line 116, col 54 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 116, col 60 to line 116, col 65 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 8 to line 128, col 57 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 140, col 8 to line 140, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 141, col 8 to line 141, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 13 to line 164, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 35 to line 164, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 164, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 44 to line 163, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 22 to line 163, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 167, col 5 to line 169, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 47 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 168, col 9 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 168, col 12 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 168, col 13 to line 168, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 169, col 16 to line 169, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 167, col 61 to line 167, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 21 to line 167, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:35:33: 69 states generated (1.712 s/min), 13 distinct states found (322 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +69 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2433ms at (2025-01-19 23:35:33) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.tla new file mode 100644 index 0000000000..0fea15b859 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS replicated, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +b1, b2, b3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +s1, s2, s3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +p1 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +az1, az2, az3 +---- + +\* MV CONSTANT definitions brokers +const_1737326131354349000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737326131354350000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737326131354351000 == +{p1} +---- + +\* MV CONSTANT definitions azs +const_1737326131354352000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737326131354353000 == +Permutations(const_1737326131354349000) \union Permutations(const_1737326131354350000) \union Permutations(const_1737326131354351000) \union Permutations(const_1737326131354352000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737326131354354000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737326131354355000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737326131354356000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 23:35:31 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC_TE.out new file mode 100644 index 0000000000..8faf336b8d --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/MC_TE.out @@ -0,0 +1,358 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 0 and seed 849358144369345749 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 24597] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:35:32) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:35:33. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to compute the value of an expression of form +CHOOSE x \in S: P, but no element of S satisfied P. +line 27, col 3 to line 27, col 36 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 1, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 112, column 5 to line 128, column 57 in replicated +1. Line 112, column 8 to line 112, column 27 in replicated +2. Line 113, column 8 to line 127, column 80 in replicated +3. Line 127, column 9 to line 127, column 80 in replicated +4. Line 127, column 29 to line 127, column 80 in replicated +5. Line 127, column 71 to line 127, column 79 in replicated +6. Line 125, column 22 to line 125, column 46 in replicated +7. Line 27, column 3 to line 27, column 36 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:35:33 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 5 to line 53, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:7 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 59, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 18 to line 59, col 44 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 57, col 9 to line 59, col 44 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 57, col 12 to line 57, col 48 of module replicated: 749 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 58, col 12 to line 58, col 44 of module replicated: 301 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 12 to line 59, col 44 of module replicated: 98 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 32 to line 56, col 48 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 67 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:15 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 32 of module replicated: 62 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 63, col 8 to line 63, col 15 of module replicated: 47:110 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 63, col 27 to line 63, col 32 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 14 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 8 to line 64, col 9 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 13 to line 64, col 14 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 8 to line 65, col 72 of module replicated: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 8 to line 65, col 38 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 42 to line 65, col 72 of module replicated: 19 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 69, col 13 to line 71, col 50 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 58 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 32 of module replicated: 46 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 76, col 8 to line 76, col 72 of module replicated: 31 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 77, col 8 to line 77, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 79, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 82, col 8 to line 82, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 82, col 8 to line 82, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 82, col 25 to line 82, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 90, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 91, col 8 to line 91, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 100, col 13 to line 102, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 107, col 8 to line 107, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 107, col 8 to line 107, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 107, col 24 to line 107, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 109, col 8 to line 109, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 112, col 8 to line 112, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 127, col 9 to line 127, col 80 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 127, col 29 to line 127, col 80 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 30 to line 127, col 45 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 54 to line 127, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 71 to line 127, col 79 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 125, col 22 to line 125, col 46 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 27, col 3 to line 27, col 36 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 125, col 31 to line 125, col 45 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||line 118, col 28 to line 124, col 13 of module replicated: 5:5 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 123, col 27 to line 123, col 35 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 117, col 22 to line 117, col 64 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + ||||||||line 117, col 29 to line 117, col 63 of module replicated: 5:5 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 117, col 51 to line 117, col 62 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 116, col 25 to line 116, col 65 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||||line 116, col 25 to line 116, col 56 of module replicated: 5:5 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 116, col 26 to line 116, col 33 of module replicated: 15 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 116, col 43 to line 116, col 54 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 116, col 60 to line 116, col 65 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 8 to line 128, col 57 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 140, col 8 to line 140, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 141, col 8 to line 141, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 13 to line 164, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 35 to line 164, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 164, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 44 to line 163, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 22 to line 163, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 167, col 5 to line 169, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 47 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 168, col 9 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 168, col 12 to line 169, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 168, col 13 to line 168, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 169, col 16 to line 169, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 167, col 61 to line 167, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 21 to line 167, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:35:33: 69 states generated (1.712 s/min), 13 distinct states found (322 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +69 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2433ms at (2025-01-19 23:35:33) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/replicated.tla new file mode 100644 index 0000000000..122e04e235 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326135419/replicated.tla @@ -0,0 +1,184 @@ +---- MODULE replicated ---- + +EXTENDS Integers, FiniteSets + +VARIABLES broker_state, safekeeper_state, pageserver_state, online + + +CONSTANT + brokers, + safekeepers, + pageservers, + azs, + az_mapping + +CONSTANT + NULL + +CONSTANT + max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +(* The minimum of a non-empty set of integers *) +MaxOfSet(S) == + CHOOSE x \in S: \A y \in S: x >= y + +\* END HELPERS + +StateConstraint == + /\ \A s \in safekeepers: + /\ safekeeper_state[s].commit_lsn <= max_commit_lsn + /\ \A b \in brokers: + /\ \A s \in DOMAIN broker_state[b].sk: + /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + + + +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] +InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitOnline == safekeepers \cup brokers \cup pageservers + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + /\ online = InitOnline + +NodeOnlineOffline == + /\ online' = CHOOSE ss \in SUBSET InitOnline: + /\ Cardinality(ss \cap safekeepers) >= 2 + /\ Cardinality(ss \cap brokers) >= 2 + /\ ss \cap pageservers = pageservers \* assume no PS failures for now + /\ UNCHANGED <> + +SkCommit(s1, s2) == + /\ {s1, s2} \subseteq online + /\ s1 # s2 + /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn + /\ LET + new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 + IN + safekeeper_state' = [safekeeper_state EXCEPT + ![s1].commit_lsn = new_commit_lsn, + ![s2].commit_lsn = new_commit_lsn] + /\ UNCHANGED <> + +SkPeerRecovery(s1,s2) == + /\ {s1, s2} \subseteq online + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL + /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] + /\ UNCHANGED <> + +SkPushToBroker(s,b) == + /\ {s, b} \subseteq online + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] + /\ UNCHANGED <> + +PsRecvBroker(b,p,s) == + /\ {b,p,s} \subseteq online + /\ LET + bsk == broker_state[b].sk[s] + psk == pageserver_state[p].sk[s] + updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] + IN + pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn + THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] + ELSE pageserver_state + /\ UNCHANGED <> + + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + sk == safekeeper_state[s] + + broker_infos == {sk.rx[b]: b \in (DOMAIN sk.rx)} \ {NULL} + known_sks == UNION ({DOMAIN bi.sk: bi \in broker_infos}) + max_commit_lsns == { + MaxOfSet( + { + sk.rx[b].sk[s2].commit_lsn: b \in DOMAIN sk.rx + } + ): s2 \in known_sks + } + prune_lsn == MinOfSet(max_commit_lsns) + IN + safekeeper_state' = [safekeeper_state EXCEPT ![s].prune_lsn = prune_lsn] + /\ UNCHANGED <> + + +SksWithNewerWal(p) == + LET + ps == pageserver_state[p] + IN + {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} + +PsChooseSk(p) == + /\ {p} \subseteq online + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +Next == + \/ NodeOnlineOffline + \/ \E s1 \in safekeepers: \E s2 \in safekeepers: + \/ SkCommit(s1, s2) + \/ SkPeerRecovery(s1, s2) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) + \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) + \/ \E p \in pageservers: PsChooseSk(p) + + +Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,online>> + + +\* invariants + +PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: + /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + + +EventuallyLaggingSkIsNotPreferredSk == <>( + LET + sks == safekeeper_state + lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } + preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} + IN + preferred_sks \cap lagging_sks = {} + + ) + + + +==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.cfg new file mode 100644 index 0000000000..0e18809f3a --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.cfg @@ -0,0 +1,54 @@ +\* MV CONSTANT declarations +CONSTANTS +b1 = b1 +b2 = b2 +b3 = b3 +\* MV CONSTANT declarations +CONSTANTS +s1 = s1 +s2 = s2 +s3 = s3 +\* MV CONSTANT declarations +CONSTANTS +p1 = p1 +\* MV CONSTANT declarations +CONSTANTS +az1 = az1 +az2 = az2 +az3 = az3 +\* MV CONSTANT definitions +CONSTANT +brokers <- const_1737326270219360000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737326270219361000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737326270219362000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737326270219363000 +\* SYMMETRY definition +SYMMETRY symm_1737326270219364000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737326270219365000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737326270219366000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737326270219367000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* INVARIANT definition +INVARIANT +PsLagsSk +PeerRecoveryIsPossible +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 23:37:50 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.out new file mode 100644 index 0000000000..c00d69a3e2 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.out @@ -0,0 +1,450 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 125 and seed -2645522394156634911 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 24715] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:37:51) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:37:52. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select field "sk" from a non-record value NULL +line 121, col 25 to line 121, col 35 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 112, column 5 to line 128, column 57 in replicated +1. Line 112, column 8 to line 112, column 27 in replicated +2. Line 113, column 8 to line 127, column 80 in replicated +3. Line 127, column 9 to line 127, column 80 in replicated +4. Line 127, column 29 to line 127, column 80 in replicated +5. Line 127, column 71 to line 127, column 79 in replicated +6. Line 125, column 22 to line 125, column 82 in replicated +7. Line 125, column 25 to line 125, column 44 in replicated +8. Line 125, column 25 to line 125, column 39 in replicated +9. Line 118, column 28 to line 124, column 13 in replicated +10. Line 119, column 17 to line 123, column 17 in replicated +11. Line 31, column 3 to line 31, column 36 in replicated +12. Line 31, column 16 to line 31, column 16 in replicated +13. Line 120, column 21 to line 122, column 21 in replicated +14. Line 121, column 25 to line 121, column 50 in replicated +15. Line 121, column 25 to line 121, column 39 in replicated +16. Line 121, column 25 to line 121, column 35 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:37:53 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 5 to line 53, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:12 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 59, col 44 of module replicated: 12 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 18 to line 59, col 44 of module replicated: 12 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 57, col 9 to line 59, col 44 of module replicated: 1284 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 57, col 12 to line 57, col 48 of module replicated: 1284 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 58, col 12 to line 58, col 44 of module replicated: 516 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 12 to line 59, col 44 of module replicated: 168 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 32 to line 56, col 48 of module replicated: 12 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 67 of module replicated: 12 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:26 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 32 of module replicated: 125 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 63, col 8 to line 63, col 15 of module replicated: 99:234 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 63, col 27 to line 63, col 32 of module replicated: 99 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 14 of module replicated: 95 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 8 to line 64, col 9 of module replicated: 69 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 13 to line 64, col 14 of module replicated: 69 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 8 to line 65, col 72 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 8 to line 65, col 38 of module replicated: 42 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 42 to line 65, col 72 of module replicated: 42 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 69, col 13 to line 71, col 50 of module replicated: 26 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 58 of module replicated: 26 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 32 of module replicated: 99 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 76, col 8 to line 76, col 72 of module replicated: 69 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 77, col 8 to line 77, col 71 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 79, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 9:66 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 82, col 8 to line 82, col 30 of module replicated: 157 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 82, col 8 to line 82, col 13 of module replicated: 91:233 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 82, col 25 to line 82, col 30 of module replicated: 91 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 90, col 52 of module replicated: 66 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 91, col 8 to line 91, col 62 of module replicated: 66 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:48 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 94, col 8 to line 94, col 31 of module replicated: 111 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 94, col 8 to line 94, col 14 of module replicated: 63:213 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 94, col 26 to line 94, col 31 of module replicated: 63 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 100, col 13 to line 102, col 37 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 100, col 33 to line 102, col 37 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 100, col 36 to line 100, col 66 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 101, col 22 to line 101, col 66 of module replicated: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 102, col 22 to line 102, col 37 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 58 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 22:66 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 107, col 8 to line 107, col 29 of module replicated: 157 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 107, col 8 to line 107, col 12 of module replicated: 91:233 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 107, col 24 to line 107, col 29 of module replicated: 91 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 81 of module replicated: 66 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 109, col 8 to line 109, col 57 of module replicated: 66 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:18 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 112, col 8 to line 112, col 27 of module replicated: 42 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 112, col 8 to line 112, col 10 of module replicated: 24:45 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 112, col 22 to line 112, col 27 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 127, col 9 to line 127, col 80 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 127, col 29 to line 127, col 80 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 30 to line 127, col 45 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 54 to line 127, col 79 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 71 to line 127, col 79 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 125, col 22 to line 125, col 82 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 125, col 25 to line 125, col 44 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 125, col 25 to line 125, col 39 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 28 to line 124, col 13 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 119, col 17 to line 123, col 17 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 31, col 3 to line 31, col 36 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 120, col 21 to line 122, col 21 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 121, col 25 to line 121, col 50 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 121, col 25 to line 121, col 39 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 121, col 25 to line 121, col 35 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 121, col 37 to line 121, col 38 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 121, col 59 to line 121, col 70 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 123, col 27 to line 123, col 35 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 117, col 22 to line 117, col 64 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||line 117, col 29 to line 117, col 63 of module replicated: 21:24 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 117, col 30 to line 117, col 41 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 117, col 51 to line 117, col 62 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 116, col 25 to line 116, col 65 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + ||||||||||||line 116, col 25 to line 116, col 56 of module replicated: 21:24 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||line 116, col 26 to line 116, col 33 of module replicated: 63 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||line 116, col 43 to line 116, col 54 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 116, col 60 to line 116, col 65 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 125, col 43 to line 125, col 44 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 8 to line 128, col 57 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 138, col 8 to line 138, col 27 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 139, col 8 to line 139, col 30 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 139, col 8 to line 139, col 25 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 133, col 15 to line 133, col 33 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 135, col 5 to line 135, col 66 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 135, col 26 to line 135, col 65 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 135, col 12 to line 135, col 23 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 139, col 24 to line 139, col 24 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 139, col 29 to line 139, col 30 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 140, col 8 to line 140, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 141, col 8 to line 141, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 13 to line 164, col 81 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 35 to line 164, col 81 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 164, col 81 of module replicated: 129 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 44 to line 163, col 72 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 22 to line 163, col 32 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 167, col 5 to line 169, col 88 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 47 to line 169, col 88 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 168, col 9 to line 169, col 88 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 168, col 12 to line 169, col 88 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 168, col 13 to line 168, col 85 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 169, col 16 to line 169, col 88 of module replicated: 28 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 167, col 61 to line 167, col 83 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 21 to line 167, col 43 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(5) at 2025-01-19 23:37:53: 220 states generated (4.929 s/min), 39 distinct states found (873 ds/min), 30 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +220 states generated, 39 distinct states found, 30 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2693ms at (2025-01-19 23:37:53) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.tla new file mode 100644 index 0000000000..e344ee6da8 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS replicated, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +b1, b2, b3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +s1, s2, s3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +p1 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +az1, az2, az3 +---- + +\* MV CONSTANT definitions brokers +const_1737326270219360000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737326270219361000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737326270219362000 == +{p1} +---- + +\* MV CONSTANT definitions azs +const_1737326270219363000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737326270219364000 == +Permutations(const_1737326270219360000) \union Permutations(const_1737326270219361000) \union Permutations(const_1737326270219362000) \union Permutations(const_1737326270219363000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737326270219365000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737326270219366000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737326270219367000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 23:37:50 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC_TE.out new file mode 100644 index 0000000000..c00d69a3e2 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/MC_TE.out @@ -0,0 +1,450 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 125 and seed -2645522394156634911 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 24715] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:37:51) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:37:52. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 1000:1 @!@!@ +TLC threw an unexpected exception. +This was probably caused by an error in the spec or model. +See the User Output or TLC Console for clues to what happened. +The exception was a java.lang.RuntimeException +: Attempted to select field "sk" from a non-record value NULL +line 121, col 25 to line 121, col 35 of module replicated +@!@!@ENDMSG 1000 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2103:1 @!@!@ +The error occurred when TLC was evaluating the nested +expressions at the following positions: +0. Line 112, column 5 to line 128, column 57 in replicated +1. Line 112, column 8 to line 112, column 27 in replicated +2. Line 113, column 8 to line 127, column 80 in replicated +3. Line 127, column 9 to line 127, column 80 in replicated +4. Line 127, column 29 to line 127, column 80 in replicated +5. Line 127, column 71 to line 127, column 79 in replicated +6. Line 125, column 22 to line 125, column 82 in replicated +7. Line 125, column 25 to line 125, column 44 in replicated +8. Line 125, column 25 to line 125, column 39 in replicated +9. Line 118, column 28 to line 124, column 13 in replicated +10. Line 119, column 17 to line 123, column 17 in replicated +11. Line 31, column 3 to line 31, column 36 in replicated +12. Line 31, column 16 to line 31, column 16 in replicated +13. Line 120, column 21 to line 122, column 21 in replicated +14. Line 121, column 25 to line 121, column 50 in replicated +15. Line 121, column 25 to line 121, column 39 in replicated +16. Line 121, column 25 to line 121, column 35 in replicated + + +@!@!@ENDMSG 2103 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:37:53 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 5 to line 53, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:12 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 59, col 44 of module replicated: 12 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 18 to line 59, col 44 of module replicated: 12 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 57, col 9 to line 59, col 44 of module replicated: 1284 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 57, col 12 to line 57, col 48 of module replicated: 1284 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 58, col 12 to line 58, col 44 of module replicated: 516 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 12 to line 59, col 44 of module replicated: 168 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 32 to line 56, col 48 of module replicated: 12 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 67 of module replicated: 12 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:26 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 32 of module replicated: 125 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 63, col 8 to line 63, col 15 of module replicated: 99:234 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 63, col 27 to line 63, col 32 of module replicated: 99 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 14 of module replicated: 95 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 8 to line 64, col 9 of module replicated: 69 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 13 to line 64, col 14 of module replicated: 69 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 8 to line 65, col 72 of module replicated: 68 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 8 to line 65, col 38 of module replicated: 42 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 42 to line 65, col 72 of module replicated: 42 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 69, col 13 to line 71, col 50 of module replicated: 26 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 58 of module replicated: 26 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 32 of module replicated: 99 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 76, col 8 to line 76, col 72 of module replicated: 69 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 77, col 8 to line 77, col 71 of module replicated: 8 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 79, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 9:66 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 82, col 8 to line 82, col 30 of module replicated: 157 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 82, col 8 to line 82, col 13 of module replicated: 91:233 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 82, col 25 to line 82, col 30 of module replicated: 91 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 90, col 52 of module replicated: 66 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 91, col 8 to line 91, col 62 of module replicated: 66 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:48 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 94, col 8 to line 94, col 31 of module replicated: 111 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 94, col 8 to line 94, col 14 of module replicated: 63:213 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 94, col 26 to line 94, col 31 of module replicated: 63 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 100, col 13 to line 102, col 37 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 100, col 33 to line 102, col 37 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 100, col 36 to line 100, col 66 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 101, col 22 to line 101, col 66 of module replicated: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 102, col 22 to line 102, col 37 of module replicated: 47 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 58 of module replicated: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 22:66 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 107, col 8 to line 107, col 29 of module replicated: 157 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 107, col 8 to line 107, col 12 of module replicated: 91:233 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 107, col 24 to line 107, col 29 of module replicated: 91 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 81 of module replicated: 66 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 109, col 8 to line 109, col 57 of module replicated: 66 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:18 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 112, col 8 to line 112, col 27 of module replicated: 42 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 112, col 8 to line 112, col 10 of module replicated: 24:45 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 112, col 22 to line 112, col 27 of module replicated: 24 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 127, col 9 to line 127, col 80 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 127, col 29 to line 127, col 80 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 30 to line 127, col 45 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 54 to line 127, col 79 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 127, col 71 to line 127, col 79 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 125, col 22 to line 125, col 82 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 125, col 25 to line 125, col 44 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 125, col 25 to line 125, col 39 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 118, col 28 to line 124, col 13 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 119, col 17 to line 123, col 17 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 31, col 3 to line 31, col 36 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 120, col 21 to line 122, col 21 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 121, col 25 to line 121, col 50 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 121, col 25 to line 121, col 39 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 121, col 25 to line 121, col 35 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 121, col 37 to line 121, col 38 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||line 121, col 59 to line 121, col 70 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 123, col 27 to line 123, col 35 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||line 117, col 22 to line 117, col 64 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |||||||||line 117, col 29 to line 117, col 63 of module replicated: 21:24 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 117, col 30 to line 117, col 41 of module replicated: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||line 117, col 51 to line 117, col 62 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||line 116, col 25 to line 116, col 65 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + ||||||||||||line 116, col 25 to line 116, col 56 of module replicated: 21:24 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||line 116, col 26 to line 116, col 33 of module replicated: 63 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||||||||line 116, col 43 to line 116, col 54 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||||||||line 116, col 60 to line 116, col 65 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 125, col 43 to line 125, col 44 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 128, col 8 to line 128, col 57 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 138, col 8 to line 138, col 27 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 139, col 8 to line 139, col 30 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 139, col 8 to line 139, col 25 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 133, col 15 to line 133, col 33 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 135, col 5 to line 135, col 66 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 135, col 26 to line 135, col 65 of module replicated: 21 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 135, col 12 to line 135, col 23 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 139, col 24 to line 139, col 24 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 139, col 29 to line 139, col 30 of module replicated: 7 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 140, col 8 to line 140, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 141, col 8 to line 141, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 163, col 13 to line 164, col 81 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 35 to line 164, col 81 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 164, col 9 to line 164, col 81 of module replicated: 129 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 163, col 44 to line 163, col 72 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 163, col 22 to line 163, col 32 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 167, col 5 to line 169, col 88 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 47 to line 169, col 88 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 168, col 9 to line 169, col 88 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 168, col 12 to line 169, col 88 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 168, col 13 to line 168, col 85 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 169, col 16 to line 169, col 88 of module replicated: 28 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 167, col 61 to line 167, col 83 of module replicated: 116 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 167, col 21 to line 167, col 43 of module replicated: 43 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(5) at 2025-01-19 23:37:53: 220 states generated (4.929 s/min), 39 distinct states found (873 ds/min), 30 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +220 states generated, 39 distinct states found, 30 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2693ms at (2025-01-19 23:37:53) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/replicated.tla new file mode 100644 index 0000000000..210d322139 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737326274268/replicated.tla @@ -0,0 +1,184 @@ +---- MODULE replicated ---- + +EXTENDS Integers, FiniteSets + +VARIABLES broker_state, safekeeper_state, pageserver_state, online + + +CONSTANT + brokers, + safekeepers, + pageservers, + azs, + az_mapping + +CONSTANT + NULL + +CONSTANT + max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +(* The minimum of a non-empty set of integers *) +MaxOfSet(S) == + CHOOSE x \in S: \A y \in S: x >= y + +\* END HELPERS + +StateConstraint == + /\ \A s \in safekeepers: + /\ safekeeper_state[s].commit_lsn <= max_commit_lsn + /\ \A b \in brokers: + /\ \A s \in DOMAIN broker_state[b].sk: + /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + + + +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] +InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitOnline == safekeepers \cup brokers \cup pageservers + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + /\ online = InitOnline + +NodeOnlineOffline == + /\ online' = CHOOSE ss \in SUBSET InitOnline: + /\ Cardinality(ss \cap safekeepers) >= 2 + /\ Cardinality(ss \cap brokers) >= 2 + /\ ss \cap pageservers = pageservers \* assume no PS failures for now + /\ UNCHANGED <> + +SkCommit(s1, s2) == + /\ {s1, s2} \subseteq online + /\ s1 # s2 + /\ safekeeper_state[s1].commit_lsn = safekeeper_state[s2].commit_lsn + /\ LET + new_commit_lsn == safekeeper_state[s1].commit_lsn + 1 + IN + safekeeper_state' = [safekeeper_state EXCEPT + ![s1].commit_lsn = new_commit_lsn, + ![s2].commit_lsn = new_commit_lsn] + /\ UNCHANGED <> + +SkPeerRecovery(s1,s2) == + /\ {s1, s2} \subseteq online + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL + /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] + /\ UNCHANGED <> + +SkPushToBroker(s,b) == + /\ {s, b} \subseteq online + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] + /\ UNCHANGED <> + +PsRecvBroker(b,p,s) == + /\ {b,p,s} \subseteq online + /\ LET + bsk == broker_state[b].sk[s] + psk == pageserver_state[p].sk[s] + updpsk == [psk EXCEPT !["commit_lsn"] = bsk.commit_lsn] + IN + pageserver_state' = IF bsk.commit_lsn > psk.commit_lsn + THEN [pageserver_state EXCEPT ![p].sk[s] = updpsk] + ELSE pageserver_state + /\ UNCHANGED <> + + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + sk == safekeeper_state[s] + + broker_infos == {sk.rx[b]: b \in (DOMAIN sk.rx)} \ {NULL} + known_sks == UNION ({DOMAIN bi.sk: bi \in broker_infos}) + max_commit_lsns == { + MaxOfSet( + { + sk.rx[b].sk[s2].commit_lsn: b \in DOMAIN sk.rx + } + ): s2 \in known_sks + } + prune_lsn == IF max_commit_lsns # {} THEN MinOfSet(max_commit_lsns) ELSE 0 + IN + safekeeper_state' = [safekeeper_state EXCEPT ![s].prune_lsn = prune_lsn] + /\ UNCHANGED <> + + +SksWithNewerWal(p) == + LET + ps == pageserver_state[p] + IN + {s \in DOMAIN ps.sk: ps.sk[s].commit_lsn > ps.last_record_lsn} + +PsChooseSk(p) == + /\ {p} \subseteq online + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +Next == + \/ NodeOnlineOffline + \/ \E s1 \in safekeepers: \E s2 \in safekeepers: + \/ SkCommit(s1, s2) + \/ SkPeerRecovery(s1, s2) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) + \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) + \/ \E p \in pageservers: PsChooseSk(p) + + +Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,online>> + + +\* invariants + +PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: + /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + + +EventuallyLaggingSkIsNotPreferredSk == <>( + LET + sks == safekeeper_state + lagging_sks == { s \in safekeepers: \A s2 \in safekeepers: sks[s].commit_lsn <= sks[s2].commit_lsn } + preferred_sks == {pageserver_state[p].preferred_sk: p \in pageservers} + IN + preferred_sks \cap lagging_sks = {} + + ) + + + +==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.cfg new file mode 100644 index 0000000000..bdb96f6768 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.cfg @@ -0,0 +1,54 @@ +\* MV CONSTANT declarations +CONSTANTS +b1 = b1 +b2 = b2 +b3 = b3 +\* MV CONSTANT declarations +CONSTANTS +s1 = s1 +s2 = s2 +s3 = s3 +\* MV CONSTANT declarations +CONSTANTS +p1 = p1 +\* MV CONSTANT declarations +CONSTANTS +az1 = az1 +az2 = az2 +az3 = az3 +\* MV CONSTANT definitions +CONSTANT +brokers <- const_1737327139928371000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737327139928372000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737327139928373000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737327139928374000 +\* SYMMETRY definition +SYMMETRY symm_1737327139928375000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737327139928376000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737327139928377000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737327139928378000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* INVARIANT definition +INVARIANT +PsLagsSk +PeerRecoveryIsPossible +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 23:52:19 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.out new file mode 100644 index 0000000000..8dc89d4c05 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.out @@ -0,0 +1,297 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 19 and seed -4531850586577240157 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 25317] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:52:21) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:52:22. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2109:1 @!@!@ +Successor state is not completely specified by action SkPrune of the next-state relation. The following variable is not assigned: safekeeper_state. + +@!@!@ENDMSG 2109 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = null + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:52:22 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 5 to line 53, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:6 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 59, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 18 to line 59, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 57, col 9 to line 59, col 44 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 57, col 12 to line 57, col 48 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 58, col 12 to line 58, col 44 of module replicated: 258 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 12 to line 59, col 44 of module replicated: 84 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 32 to line 56, col 48 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 67 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:14 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 32 of module replicated: 59 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 63, col 8 to line 63, col 15 of module replicated: 45:105 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 63, col 27 to line 63, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 14 of module replicated: 44 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 8 to line 64, col 9 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 13 to line 64, col 14 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 8 to line 65, col 72 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 8 to line 65, col 38 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 42 to line 65, col 72 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 69, col 13 to line 71, col 50 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 58 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 76, col 8 to line 76, col 72 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 77, col 8 to line 77, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 79, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 82, col 8 to line 82, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 82, col 8 to line 82, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 82, col 25 to line 82, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 90, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 91, col 8 to line 91, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 100, col 13 to line 102, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 107, col 8 to line 107, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 107, col 8 to line 107, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 107, col 24 to line 107, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 109, col 8 to line 109, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:5 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 112, col 8 to line 112, col 27 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 112, col 8 to line 112, col 10 of module replicated: 5:10 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 112, col 22 to line 112, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 117, col 9 to line 117, col 12 of module replicated: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 118, col 8 to line 118, col 57 of module replicated: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 130, col 8 to line 130, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 131, col 8 to line 131, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 153, col 13 to line 154, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 153, col 35 to line 154, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 154, col 9 to line 154, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 153, col 44 to line 153, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 153, col 22 to line 153, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 157, col 5 to line 159, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 157, col 47 to line 159, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 158, col 9 to line 159, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 158, col 12 to line 159, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 158, col 13 to line 158, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 159, col 16 to line 159, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 157, col 61 to line 157, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 157, col 21 to line 157, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:52:22: 73 states generated (1.649 s/min), 13 distinct states found (293 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +73 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 4. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2670ms at (2025-01-19 23:52:22) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.tla new file mode 100644 index 0000000000..a512c4d9d5 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS replicated, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +b1, b2, b3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +s1, s2, s3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +p1 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +az1, az2, az3 +---- + +\* MV CONSTANT definitions brokers +const_1737327139928371000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737327139928372000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737327139928373000 == +{p1} +---- + +\* MV CONSTANT definitions azs +const_1737327139928374000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737327139928375000 == +Permutations(const_1737327139928371000) \union Permutations(const_1737327139928372000) \union Permutations(const_1737327139928373000) \union Permutations(const_1737327139928374000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737327139928376000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737327139928377000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737327139928378000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 23:52:19 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC_TE.out new file mode 100644 index 0000000000..8dc89d4c05 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/MC_TE.out @@ -0,0 +1,297 @@ +@!@!@STARTMSG 2262:0 @!@!@ +TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) +@!@!@ENDMSG 2262 @!@!@ +@!@!@STARTMSG 2187:0 @!@!@ +Running breadth-first search Model-Checking with fp 19 and seed -4531850586577240157 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 25317] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +@!@!@ENDMSG 2187 @!@!@ +@!@!@STARTMSG 2220:0 @!@!@ +Starting SANY... +@!@!@ENDMSG 2220 @!@!@ +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla +Parsing file /Users/cs/src/neon/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/TLC.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Integers.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module replicated +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 23:52:21) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2279:3 @!@!@ +Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. +@!@!@ENDMSG 2279 @!@!@ +@!@!@STARTMSG 2284:3 @!@!@ +Declaring state or action constraints during liveness checking is dangerous: Please read section 14.3.5 on page 247 of Specifying Systems (https://lamport.azurewebsites.net/tla/book.html) and optionally the discussion at https://discuss.tlapl.us/msg00994.html for more details. +@!@!@ENDMSG 2284 @!@!@ +@!@!@STARTMSG 2212:0 @!@!@ +Implied-temporal checking--satisfiability problem has 1 branches. +@!@!@ENDMSG 2212 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:52:22. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2109:1 @!@!@ +Successor state is not completely specified by action SkPrune of the next-state relation. The following variable is not assigned: safekeeper_state. + +@!@!@ENDMSG 2109 @!@!@ +@!@!@STARTMSG 2121:1 @!@!@ +The behavior up to this point is: +@!@!@ENDMSG 2121 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +1: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, b3, s1, s2, s3, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +2: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0, rx |-> (b1 :> NULL @@ b2 :> NULL @@ b3 :> NULL)]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = (p1 :> [sk |-> (s1 :> [commit_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0]), last_record_lsn |-> 0, preferred_sk |-> NULL]) +/\ broker_state = (b1 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b2 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])] @@ b3 :> [sk |-> (s1 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, prune_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, prune_lsn |-> 0])]) +/\ online = {b1, b2, s1, s2, p1} +/\ safekeeper_state = null + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 23:52:22 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 5 to line 53, col 26 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 1:6 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 59, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 18 to line 59, col 44 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 57, col 9 to line 59, col 44 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 57, col 12 to line 57, col 48 of module replicated: 642 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 58, col 12 to line 58, col 44 of module replicated: 258 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 12 to line 59, col 44 of module replicated: 84 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 32 to line 56, col 48 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 60, col 8 to line 60, col 67 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 4:14 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 32 of module replicated: 59 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 63, col 8 to line 63, col 15 of module replicated: 45:105 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 63, col 27 to line 63, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 14 of module replicated: 44 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 8 to line 64, col 9 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 64, col 13 to line 64, col 14 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 65, col 8 to line 65, col 72 of module replicated: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 8 to line 65, col 38 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 65, col 42 to line 65, col 72 of module replicated: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 69, col 13 to line 71, col 50 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 8 to line 72, col 58 of module replicated: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 32 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 76, col 8 to line 76, col 72 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 77, col 8 to line 77, col 71 of module replicated: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 78, col 8 to line 78, col 102 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 79, col 8 to line 79, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 82, col 8 to line 82, col 30 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 82, col 8 to line 82, col 13 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 82, col 25 to line 82, col 30 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 90, col 52 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 91, col 8 to line 91, col 62 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 100, col 13 to line 102, col 37 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 103, col 8 to line 103, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:30 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 107, col 8 to line 107, col 29 of module replicated: 75 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 107, col 8 to line 107, col 12 of module replicated: 45:111 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 107, col 24 to line 107, col 29 of module replicated: 45 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 108, col 8 to line 108, col 81 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 109, col 8 to line 109, col 57 of module replicated: 30 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:5 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 112, col 8 to line 112, col 27 of module replicated: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + |line 112, col 8 to line 112, col 10 of module replicated: 5:10 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 112, col 22 to line 112, col 27 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 117, col 9 to line 117, col 12 of module replicated: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 118, col 8 to line 118, col 57 of module replicated: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 130, col 8 to line 130, col 109 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 131, col 8 to line 131, col 58 of module replicated: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 153, col 13 to line 154, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 153, col 35 to line 154, col 81 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 154, col 9 to line 154, col 81 of module replicated: 39 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 153, col 44 to line 153, col 72 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 153, col 22 to line 153, col 32 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2774:0 @!@!@ + +@!@!@ENDMSG 2774 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 157, col 5 to line 159, col 88 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 157, col 47 to line 159, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 158, col 9 to line 159, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 158, col 12 to line 159, col 88 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 158, col 13 to line 158, col 85 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 159, col 16 to line 159, col 88 of module replicated: 5 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 157, col 61 to line 157, col 83 of module replicated: 33 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 157, col 21 to line 157, col 43 of module replicated: 13 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(4) at 2025-01-19 23:52:22: 73 states generated (1.649 s/min), 13 distinct states found (293 ds/min), 9 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +73 states generated, 13 distinct states found, 9 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 4. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2670ms at (2025-01-19 23:52:22) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/replicated.tla similarity index 66% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/replicated.tla rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/replicated.tla index 33971e3071..ba1484f85f 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/replicated.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327144010/replicated.tla @@ -17,6 +17,20 @@ CONSTANT CONSTANT max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +(* The minimum of a non-empty set of integers *) +MaxOfSet(S) == + CHOOSE x \in S: \A y \in S: x >= y + +\* END HELPERS StateConstraint == /\ \A s \in safekeepers: @@ -25,9 +39,10 @@ StateConstraint == /\ \A s \in DOMAIN broker_state[b].sk: /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] InitOnline == safekeepers \cup brokers \cup pageservers @@ -58,20 +73,21 @@ SkCommit(s1, s2) == SkPeerRecovery(s1,s2) == /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] /\ UNCHANGED <> SkPushToBroker(s,b) == /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] /\ UNCHANGED <> PsRecvBroker(b,p,s) == @@ -86,6 +102,21 @@ PsRecvBroker(b,p,s) == ELSE pageserver_state /\ UNCHANGED <> + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + sk == safekeeper_state[s] + skis == {<>: <> \in {<> \in { <>: b \in sk.rx }: bi # NULL} } + IN + TRUE + /\ UNCHANGED <> + SksWithNewerWal(p) == LET @@ -105,7 +136,11 @@ Next == \/ \E s1 \in safekeepers: \E s2 \in safekeepers: \/ SkCommit(s1, s2) \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) \/ \E p \in pageservers: PsChooseSk(p) @@ -117,7 +152,12 @@ Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,onl PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn - + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + EventuallyLaggingSkIsNotPreferredSk == <>( LET diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.cfg new file mode 100644 index 0000000000..f1c0cf2115 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.cfg @@ -0,0 +1,54 @@ +\* MV CONSTANT declarations +CONSTANTS +b1 = b1 +b2 = b2 +b3 = b3 +\* MV CONSTANT declarations +CONSTANTS +s1 = s1 +s2 = s2 +s3 = s3 +\* MV CONSTANT declarations +CONSTANTS +p1 = p1 +\* MV CONSTANT declarations +CONSTANTS +az1 = az1 +az2 = az2 +az3 = az3 +\* MV CONSTANT definitions +CONSTANT +brokers <- const_1737327160682382000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737327160682383000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737327160682384000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737327160682385000 +\* SYMMETRY definition +SYMMETRY symm_1737327160682386000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737327160682387000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737327160682388000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737327160682389000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* INVARIANT definition +INVARIANT +PsLagsSk +PeerRecoveryIsPossible +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 23:52:40 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.out similarity index 79% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.out rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.out index 21638f26fe..9996d5301e 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737307769810/MC.out +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.out @@ -2,7 +2,7 @@ TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) @!@!@ENDMSG 2262 @!@!@ @!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 19 and seed -4959290627086969114 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11541] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +Running breadth-first search Model-Checking with fp 121 and seed -1130553646976177579 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 25330] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). @!@!@ENDMSG 2187 @!@!@ @!@!@STARTMSG 2220:0 @!@!@ Starting SANY... @@ -25,7 +25,7 @@ Semantic processing of module MC SANY finished. @!@!@ENDMSG 2219 @!@!@ @!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:29:15) +Starting... (2025-01-19 23:52:41) @!@!@ENDMSG 2185 @!@!@ @!@!@STARTMSG 2279:3 @!@!@ Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. @@ -40,14 +40,14 @@ Implied-temporal checking--satisfiability problem has 1 branches. Computing initial states... @!@!@ENDMSG 2189 @!@!@ @!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:29:16. +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:52:43. @!@!@ENDMSG 2190 @!@!@ @!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 1431 total distinct states at (2025-01-19 18:29:19) +Checking temporal properties for the current state space with 1627 total distinct states at (2025-01-19 23:52:46) @!@!@ENDMSG 2192 @!@!@ @!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:29:19 +Finished checking temporal properties in 00s at 2025-01-19 23:52:46 @!@!@ENDMSG 2267 @!@!@ @!@!@STARTMSG 2200:0 @!@!@ -Progress(10) at 2025-01-19 18:29:19: 38.274 states generated (38.274 s/min), 4.060 distinct states found (4.060 ds/min), 2.625 states left on queue. +Progress(9) at 2025-01-19 23:52:46: 45.678 states generated (45.678 s/min), 7.117 distinct states found (7.117 ds/min), 5.486 states left on queue. @!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.tla new file mode 100644 index 0000000000..62ff97b5e7 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS replicated, TLC + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +b1, b2, b3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +s1, s2, s3 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +p1 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +az1, az2, az3 +---- + +\* MV CONSTANT definitions brokers +const_1737327160682382000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737327160682383000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737327160682384000 == +{p1} +---- + +\* MV CONSTANT definitions azs +const_1737327160682385000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737327160682386000 == +Permutations(const_1737327160682382000) \union Permutations(const_1737327160682383000) \union Permutations(const_1737327160682384000) \union Permutations(const_1737327160682385000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737327160682387000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737327160682388000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737327160682389000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 23:52:40 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC_TE.out similarity index 79% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC_TE.out rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC_TE.out index 366883d749..9996d5301e 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308216766/MC_TE.out +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/MC_TE.out @@ -2,7 +2,7 @@ TLC2 Version 2.19 of 08 August 2024 (rev: 5a47802) @!@!@ENDMSG 2262 @!@!@ @!@!@STARTMSG 2187:0 @!@!@ -Running breadth-first search Model-Checking with fp 39 and seed -9180611051874563891 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 11941] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). +Running breadth-first search Model-Checking with fp 121 and seed -1130553646976177579 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 25330] (Mac OS X 10.16 x86_64, AdoptOpenJDK 14.0.1 x86_64, OffHeapDiskFPSet, DiskStateQueue). @!@!@ENDMSG 2187 @!@!@ @!@!@STARTMSG 2220:0 @!@!@ Starting SANY... @@ -25,7 +25,7 @@ Semantic processing of module MC SANY finished. @!@!@ENDMSG 2219 @!@!@ @!@!@STARTMSG 2185:0 @!@!@ -Starting... (2025-01-19 18:36:40) +Starting... (2025-01-19 23:52:41) @!@!@ENDMSG 2185 @!@!@ @!@!@STARTMSG 2279:3 @!@!@ Declaring symmetry during liveness checking is dangerous. It might cause TLC to miss violations of the stated liveness properties. Please check liveness without symmetry defined. @@ -40,14 +40,14 @@ Implied-temporal checking--satisfiability problem has 1 branches. Computing initial states... @!@!@ENDMSG 2189 @!@!@ @!@!@STARTMSG 2190:0 @!@!@ -Finished computing initial states: 1 distinct state generated at 2025-01-19 18:36:41. +Finished computing initial states: 1 distinct state generated at 2025-01-19 23:52:43. @!@!@ENDMSG 2190 @!@!@ @!@!@STARTMSG 2192:0 @!@!@ -Checking temporal properties for the current state space with 3587 total distinct states at (2025-01-19 18:36:44) +Checking temporal properties for the current state space with 1627 total distinct states at (2025-01-19 23:52:46) @!@!@ENDMSG 2192 @!@!@ @!@!@STARTMSG 2267:0 @!@!@ -Finished checking temporal properties in 00s at 2025-01-19 18:36:44 +Finished checking temporal properties in 00s at 2025-01-19 23:52:46 @!@!@ENDMSG 2267 @!@!@ @!@!@STARTMSG 2200:0 @!@!@ -Progress(11) at 2025-01-19 18:36:44: 73.018 states generated (73.018 s/min), 8.206 distinct states found (8.206 ds/min), 4.615 states left on queue. +Progress(9) at 2025-01-19 23:52:46: 45.678 states generated (45.678 s/min), 7.117 distinct states found (7.117 ds/min), 5.486 states left on queue. @!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/replicated.tla similarity index 66% rename from storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/replicated.tla rename to storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/replicated.tla index 33971e3071..b59645ac75 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737308355472/replicated.tla +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737327172537/replicated.tla @@ -17,6 +17,20 @@ CONSTANT CONSTANT max_commit_lsn + +\* HELPERS + +Max(a,b) == IF a > b THEN a ELSE b + +(* The minimum of a non-empty set of integers *) +MinOfSet(S) == + CHOOSE x \in S: \A y \in S: x <= y + +(* The minimum of a non-empty set of integers *) +MaxOfSet(S) == + CHOOSE x \in S: \A y \in S: x >= y + +\* END HELPERS StateConstraint == /\ \A s \in safekeepers: @@ -25,9 +39,10 @@ StateConstraint == /\ \A s \in DOMAIN broker_state[b].sk: /\ broker_state[b].sk[s].commit_lsn <= max_commit_lsn + -InitSafekeeper == [pruned_lsn |-> 0, commit_lsn |-> 0] -InitBroker == [sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] +InitSafekeeper == [prune_lsn |-> 0, commit_lsn |-> 0, rx |-> [b \in brokers |-> NULL] ] +InitBroker == [sk |-> [s \in safekeepers |-> [prune_lsn |-> 0, commit_lsn |-> 0]]] InitPageserver == [last_record_lsn |-> 0, preferred_sk |-> NULL, sk |-> [s \in safekeepers |-> [commit_lsn |-> 0]]] InitOnline == safekeepers \cup brokers \cup pageservers @@ -58,20 +73,21 @@ SkCommit(s1, s2) == SkPeerRecovery(s1,s2) == /\ {s1, s2} \subseteq online - /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn \* s2 has more WAL than s1 + /\ safekeeper_state[s2].prune_lsn < safekeeper_state[s1].commit_lsn \* s2 has not yet trimmed the WAL the WAL /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] /\ UNCHANGED <> SkPushToBroker(s,b) == /\ {s, b} \subseteq online - /\ broker_state' = IF broker_state[b].sk[s].commit_lsn < safekeeper_state[s].commit_lsn - THEN - LET - bsk == broker_state[b].sk - updbsk == [bsk EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn] - IN - [broker_state EXCEPT ![b].sk = updbsk] - ELSE broker_state + /\ broker_state' = LET + broker_side == broker_state[b].sk[s] + sk_side == safekeeper_state[s] + merged == [broker_side EXCEPT + !["commit_lsn"] = Max(broker_side.commit_lsn, sk_side.commit_lsn), + !["prune_lsn"] = Max(broker_side.prune_lsn, sk_side.prune_lsn)] + IN + [broker_state EXCEPT ![b].sk[s] = merged] /\ UNCHANGED <> PsRecvBroker(b,p,s) == @@ -86,6 +102,21 @@ PsRecvBroker(b,p,s) == ELSE pageserver_state /\ UNCHANGED <> + +SkRecvBroker(b,s) == + /\ {b,s} \subseteq online + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].rx[b] = broker_state[b]] + /\ UNCHANGED <> + +SkPrune(s) == + /\ {s} \subseteq online + /\ LET + sk == safekeeper_state[s] + skis == {<>: <> \in {<> \in { <>: b \in sk.rx }: bi # NULL} } + IN + safekeeper_state' = safekeeper_state + /\ UNCHANGED <> + SksWithNewerWal(p) == LET @@ -105,7 +136,11 @@ Next == \/ \E s1 \in safekeepers: \E s2 \in safekeepers: \/ SkCommit(s1, s2) \/ SkPeerRecovery(s1, s2) - \/ \E s \in safekeepers: \E b \in brokers: SkPushToBroker(s, b) + \/ \E s \in safekeepers: \E b \in brokers: + \/ SkPushToBroker(s, b) + \/ SkRecvBroker(b, s) + \/ \E s \in safekeepers: + \/ SkPrune(s) \/ \E s \in safekeepers: \E b \in brokers: \E p \in pageservers: PsRecvBroker(b,p,s) \/ \E p \in pageservers: PsChooseSk(p) @@ -117,7 +152,12 @@ Spec == Init /\ [][Next]_<< broker_state, safekeeper_state, pageserver_state,onl PsLagsSk == \A p \in pageservers: \A s \in DOMAIN pageserver_state[p].sk: /\ pageserver_state[p].sk[s].commit_lsn <= safekeeper_state[s].commit_lsn - + +PeerRecoveryIsPossible == + \A laggard \in (safekeepers \cap online): \E donor \in (safekeepers \cap online): + /\ (safekeeper_state[laggard].commit_lsn < safekeeper_state[donor].commit_lsn) + => safekeeper_state[donor].prune_lsn <= safekeeper_state[laggard].commit_lsn + EventuallyLaggingSkIsNotPreferredSk == <>( LET diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1.launch index a09d0d0885..c799f17f3e 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1.launch +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1.launch @@ -12,7 +12,7 @@ - + @@ -26,6 +26,7 @@ + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307595008.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307595008.launch deleted file mode 100644 index 0c3da56e23..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307595008.launch +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307621596.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307621596.launch deleted file mode 100644 index 7175e68a8c..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307621596.launch +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307660221.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307660221.launch deleted file mode 100644 index 5546705b36..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307660221.launch +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307704621.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307704621.launch deleted file mode 100644 index 27f3ded305..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307704621.launch +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307769810.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307769810.launch deleted file mode 100644 index 9d0cbac7dd..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307769810.launch +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307828738.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307828738.launch deleted file mode 100644 index eaecdfb9f5..0000000000 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737307828738.launch +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308355472.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737323805723.launch similarity index 96% rename from storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308355472.launch rename to storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737323805723.launch index 7d9ed3f070..4079ddaf0e 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308355472.launch +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737323805723.launch @@ -2,7 +2,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -26,6 +26,7 @@ + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308024914.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737323834253.launch similarity index 96% rename from storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308024914.launch rename to storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737323834253.launch index 16960af230..e7c98ca3f9 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308024914.launch +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737323834253.launch @@ -2,7 +2,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -26,6 +26,7 @@ + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308183077.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324141888.launch similarity index 96% rename from storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308183077.launch rename to storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324141888.launch index 45c5003d49..40bfbc7ee0 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308183077.launch +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324141888.launch @@ -2,7 +2,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -26,6 +26,7 @@ + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308216766.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324186169.launch similarity index 96% rename from storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308216766.launch rename to storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324186169.launch index 137c568ffe..6f8c5c99bb 100644 --- a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737308216766.launch +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324186169.launch @@ -2,7 +2,7 @@ - + @@ -12,7 +12,7 @@ - + @@ -26,6 +26,7 @@ + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324315582.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324315582.launch new file mode 100644 index 0000000000..6995260232 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737324315582.launch @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326115252.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326115252.launch new file mode 100644 index 0000000000..3575d44169 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326115252.launch @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326135419.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326135419.launch new file mode 100644 index 0000000000..883bfb87d3 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326135419.launch @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326274268.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326274268.launch new file mode 100644 index 0000000000..307d62bc6d --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737326274268.launch @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737327144010.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737327144010.launch new file mode 100644 index 0000000000..66e774e9e3 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737327144010.launch @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737327172537.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737327172537.launch new file mode 100644 index 0000000000..ba0d15e47f --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737327172537.launch @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +