From 933b4719cb3e364cbb3e67930a66d1b55bcba494 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Sun, 19 Jan 2025 16:40:32 +0100 Subject: [PATCH] sketch a spec for replicated broker --- storage_broker/spec/replicated/.DS_Store | Bin 0 -> 6148 bytes storage_broker/spec/replicated/replicated.tla | 117 +++++++ .../replicated/replicated.toolbox/.project | 24 ++ .../.settings/org.lamport.tla.toolbox.prefs | 2 + .../Model_1/25-01-19-16-40-15/MC-0.st | Bin 0 -> 16384 bytes .../Model_1/25-01-19-16-40-15/MC-1.st | Bin 0 -> 16384 bytes .../Model_1/25-01-19-16-40-15/MC-2.st | Bin 0 -> 16384 bytes .../Model_1/25-01-19-16-40-15/MC-3.st | Bin 0 -> 16384 bytes .../Model_1/25-01-19-16-40-15/MC.st | 0 .../Model_1/25-01-19-16-40-15/MC_0.fp | 0 .../Model_1/25-01-19-16-40-15/MC_1.fp | 0 .../Model_1/25-01-19-16-40-15/nodes_0 | 0 .../Model_1/25-01-19-16-40-15/ptrs_0 | 0 .../replicated.toolbox/Model_1/MC.cfg | 51 +++ .../replicated.toolbox/Model_1/MC.out | 53 +++ .../replicated.toolbox/Model_1/MC.tla | 65 ++++ .../replicated.toolbox/Model_1/MC_TE.out | 53 +++ .../replicated.toolbox/Model_1/replicated.tla | 117 +++++++ .../Model_1_SnapShot_1737296416956/MC.cfg | 37 ++ .../Model_1_SnapShot_1737296416956/MC.out | 38 +++ .../Model_1_SnapShot_1737296416956/MC.tla | 50 +++ .../Model_1_SnapShot_1737296416956/MC_TE.out | 38 +++ .../fullmesh.tla | 85 +++++ .../Model_1_SnapShot_1737297534393/MC.cfg | 48 +++ .../Model_1_SnapShot_1737297534393/MC.out | 35 ++ .../Model_1_SnapShot_1737297534393/MC.tla | 65 ++++ .../Model_1_SnapShot_1737297534393/MC_TE.out | 35 ++ .../fullmesh.tla | 91 +++++ .../Model_1_SnapShot_1737297999722/MC.cfg | 48 +++ .../Model_1_SnapShot_1737297999722/MC.out | 38 +++ .../Model_1_SnapShot_1737297999722/MC.tla | 65 ++++ .../Model_1_SnapShot_1737297999722/MC_TE.out | 38 +++ .../fullmesh.tla | 97 ++++++ .../Model_1_SnapShot_1737299352762/MC.cfg | 51 +++ .../Model_1_SnapShot_1737299352762/MC.out | 35 ++ .../Model_1_SnapShot_1737299352762/MC.tla | 65 ++++ .../Model_1_SnapShot_1737299352762/MC_TE.out | 35 ++ .../fullmesh.tla | 115 +++++++ .../Model_1_SnapShot_1737299381423/MC.cfg | 51 +++ .../Model_1_SnapShot_1737299381423/MC.out | 186 ++++++++++ .../Model_1_SnapShot_1737299381423/MC.tla | 65 ++++ .../Model_1_SnapShot_1737299381423/MC_TE.out | 186 ++++++++++ .../fullmesh.tla | 115 +++++++ .../Model_1_SnapShot_1737299469039/MC.cfg | 51 +++ .../Model_1_SnapShot_1737299469039/MC.out | 202 +++++++++++ .../Model_1_SnapShot_1737299469039/MC.tla | 65 ++++ .../Model_1_SnapShot_1737299469039/MC_TE.out | 202 +++++++++++ .../fullmesh.tla | 116 +++++++ .../Model_1_SnapShot_1737299542008/MC.cfg | 51 +++ .../Model_1_SnapShot_1737299542008/MC.out | 57 ++++ .../Model_1_SnapShot_1737299542008/MC.tla | 65 ++++ .../Model_1_SnapShot_1737299542008/MC_TE.out | 57 ++++ .../fullmesh.tla | 117 +++++++ .../Model_1_SnapShot_1737299744229/MC.cfg | 51 +++ .../Model_1_SnapShot_1737299744229/MC.out | 323 ++++++++++++++++++ .../Model_1_SnapShot_1737299744229/MC.tla | 65 ++++ .../Model_1_SnapShot_1737299744229/MC_TE.out | 323 ++++++++++++++++++ .../fullmesh.tla | 117 +++++++ .../Model_1_SnapShot_1737301172627/MC.cfg | 51 +++ .../Model_1_SnapShot_1737301172627/MC.out | 44 +++ .../Model_1_SnapShot_1737301172627/MC.tla | 65 ++++ .../Model_1_SnapShot_1737301172627/MC_TE.out | 44 +++ .../replicated.tla | 117 +++++++ .../Model_1_SnapShot_1737301223409/MC.cfg | 51 +++ .../Model_1_SnapShot_1737301223409/MC.out | 53 +++ .../Model_1_SnapShot_1737301223409/MC.tla | 65 ++++ .../Model_1_SnapShot_1737301223409/MC_TE.out | 53 +++ .../replicated.tla | 117 +++++++ .../replicated.toolbox/fullmesh.tla.pmap | Bin 0 -> 8395 bytes .../replicated___Model_1.launch | 58 ++++ ...ed___Model_1_SnapShot_1737296416956.launch | 38 +++ ...ed___Model_1_SnapShot_1737297534393.launch | 40 +++ ...ed___Model_1_SnapShot_1737297999722.launch | 40 +++ ...ed___Model_1_SnapShot_1737299352762.launch | 42 +++ ...ed___Model_1_SnapShot_1737299381423.launch | 58 ++++ ...ed___Model_1_SnapShot_1737299469039.launch | 58 ++++ ...ed___Model_1_SnapShot_1737299542008.launch | 58 ++++ ...ed___Model_1_SnapShot_1737299744229.launch | 58 ++++ ...ed___Model_1_SnapShot_1737301172627.launch | 58 ++++ ...ed___Model_1_SnapShot_1737301223409.launch | 58 ++++ 80 files changed, 5282 insertions(+) create mode 100644 storage_broker/spec/replicated/.DS_Store create mode 100644 storage_broker/spec/replicated/replicated.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/.project create mode 100644 storage_broker/spec/replicated/replicated.toolbox/.settings/org.lamport.tla.toolbox.prefs create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-0.st create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-1.st create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-2.st create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-3.st create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC.st create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC_0.fp create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC_1.fp create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/nodes_0 create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/ptrs_0 create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/fullmesh.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/fullmesh.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/fullmesh.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/fullmesh.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/fullmesh.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/fullmesh.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/fullmesh.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/fullmesh.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/replicated.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC.cfg create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC_TE.out create mode 100644 storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/replicated.tla create mode 100644 storage_broker/spec/replicated/replicated.toolbox/fullmesh.tla.pmap create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737296416956.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737297534393.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737297999722.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299352762.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299381423.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299469039.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299542008.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299744229.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737301172627.launch create mode 100644 storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737301223409.launch diff --git a/storage_broker/spec/replicated/.DS_Store b/storage_broker/spec/replicated/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + + +SkCommit(s1, s2) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +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: \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/.project b/storage_broker/spec/replicated/replicated.toolbox/.project new file mode 100644 index 0000000000..6cd6e13bd0 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/.project @@ -0,0 +1,24 @@ + + + replicated + + + + + + toolbox.builder.TLAParserBuilder + + + + + + toolbox.natures.TLANature + + + + replicated.tla + 1 + PARENT-1-PROJECT_LOC/replicated.tla + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/.settings/org.lamport.tla.toolbox.prefs b/storage_broker/spec/replicated/replicated.toolbox/.settings/org.lamport.tla.toolbox.prefs new file mode 100644 index 0000000000..968871daf6 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/.settings/org.lamport.tla.toolbox.prefs @@ -0,0 +1,2 @@ +ProjectRootFile=PARENT-1-PROJECT_LOC/replicated.tla +eclipse.preferences.version=1 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-0.st b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-0.st new file mode 100644 index 0000000000000000000000000000000000000000..ea733796c7821122a6c0f72853b184cfd44b6ea3 GIT binary patch literal 16384 zcmXBbcRZHe8vyY8xgUFPqM~FgGBYYkMrB7tb{V~q>=6>7Y$_B|M%h`3D0^omWmG~| zS=oi(^_<`P*Zcik=RWrt*SXG3g<%*0t2$nyCXxD35hML~;<@^>>An}4@W1qgV3lpF zE;C#Zz)hSLRy4Kv<{g0W?rGuQvf-HH2n=uaqB7l1J=-@}XwcfIrr%wTdFvF3sy-J7VdJulR_i+-73_FFO*k;B3 zThho8AxUzqdiu_TMT8~xzNp+A67vXelus>mQ>JSIo)EUR1Cl8lgJ!n_twkt_1{E3A+HtkVIAJIvCsa=Frr7&^v*^p;geU zZrwA7Fnfk)Hkg6^ECR33qob1c%1j6mw_S|2#pjLzo?thfHzt*{B+?MV4BSsdcTzMW zlx&qeZ#kJp3oqSIyfCM*xMi9FiwKy_oTyFJ*VaXNm-FiLiO#XF@JtVWG&OMX-4&Nr zh@2tD3e2$i`3tQhsJg^>?>si_KzQ}3F>uHW)kdeb5P$qE{q5Ynk z_}3ioMimGI0160ZGK~^CUTvh!Dj@8Z1eKYH z)m}wdvVJ`BxWh070dqMwX`j%qhj4zcj^+_DQ&|Lj)X#;W6iQl<0>YpEJmYO!auWpe z$!{_fBYQ>=o*!eoGHmBQ3m79ZQk%`o(M|^=pT2P0^oz6czb2AdP9H_!*D8s z=h1nJz5s^^1b(S%E7$QxE`S74HNJG8Mt0^+gwp)iY!Z96c@f0IF7U*aw7||mGgJSp zLEX_PJ`xBw|LxnYOVS?#7!zG9CsuWjyIer1cIhoz|K~jbBQU@YvdD90xE^3f_&a@5 zx$Q^_9Riu`o9k;2*P&KHGw;J;n}ItK_YlGs&%aPnpMW!m8xypH`S#bUZjuISOgL+( zM9wxN0!e}2B1RmNtD>D5+lTP4kj6xjKJEwtd-|(7+0EDk2;)88KTEp)BqDJ9S~-qo z4t+ofytbPfIT}nln)7%7^Rh{R%04*30QpCSF)Kw*+0cv%f0erpzEhtzFDHo z-yFwK1g;mMav2f#>;YAn-{7a5=ZQPfZO5`7d@*@bFM;-2V742oE*US;U9vIZdb+1 zeeNI_bqlse%{_Zx!|5_Y-owK(qg33v@E#RnSNM`DM`|}D1z_!u`0FRpRWMUPEBhVU`F)a8#O?eAIBe4B$?jK1r8xvbGCO zFrY@+wB-rEHJp0FJl34V|IFI)kQsul8Sy|c)f*FVI>Z}J znl^4|71i;d_K-S4xTw~;4E5@L1WDenmrm2_K-bWW!uE4PcaJAje_}LI!q;a_&}R7} z0vkn>&!H183IG*C745UU=kLS95UfvKee^fv#aV@mC1vj}2bt#|Z7!X|y*|a`Rv~ z(S%UHlH#fOrzHptUO~oe1zeD$WNJjFp4H1nyc$re08s|%th6U~_9H}as8GNDa|_lQ zA_nFmvJ0;b9wN*-vL+>!&%lv^$Ot>T3!8IqJ9I6GoBCWmvf#q^1cA<1TJ!vJBt4*< zkXY>bSyC$dIfCw1$%KPvgfqf=w}2L}yVPrhx>Ekygd!R#=-PsqnEy4ec&@n)fxRl& zGb?Eh5*8xs{ZWeP1qM)r0BzDU9zQcHT-oUL zbCis5N8qopxR0Ej+cva92uUBypYYY`eL~kLd z?P8t|X$S@NS^42}jimQ{#!h)Y31*TrY=vi{@$h|#ezy3J4ZsVW)1pi0qRV+(gdG>p zT9e1x{~@rX=x-VmTMr?G*t|>=)8vKP3(u^dE~{`?*!+xu+rAHdvJ&3)|A^&zizBHS zj}WYL$`lMgdA@@YEMs45`Mw7hm3@WC46dITx9K?n!R4{icAqa1E3_g>oR1SUq%>6cDpLlNLCLW&|zo8-V2Ua zW40anL1G;#|r_~gwH!sy%4F5i_2S%4aW-A6-~wLcJQ6`*G5pXBv85lxYnFJP4)aV9A{`Y?DF6C zJ-0)95mem*BsbUOp#$P$EGzS`>(ffRbc8F^(JMww%;X5qJia^8u$JWmMlk(0>`Uyp z4eT7?X-m)d|EhnGio*!@&P4yw`p0A=gcCaSXMg0BeMg9%+OV|p>bFGT{5u=Zy8NDW zWM(jx(3IxZ|5ivxW(J!UJkTJ1wg3`|EEM0~&^5RfxdS&7z<-`K#$mVL2cc8rXUeQZ zSu=u>*~-P_+#G8_K2D|3TUw(V29*LJbiI&rna|0Dl-GppM1DP~h)Zyo$OnlJs;jrh zoliI-IAlE&5c!z{c|dMNklB%Vqkdo07hprsynJ!U(t0m+P5zMJe~(*Zq$m|~6wvBJ zd*<%#fI$qSI7vJ-IYe)Gw|^HRl(^k2m1Ex68A=#|C^m9@o7%K&P5_{W?Kao$l_Pj3 zAY7fWpO=TsOKK7RL@rDR{?UU^4~S&PR7H)`|g zx(3MVEb{zX5cHaYMJ`Qk8pGJUv3PPPV{_SsQG_pz#NMT_ff)oc_42)S+yim)>L@h3*`xRB z^wGPJA%L)7BTh>uMWz3T&cwfyecDhHDFpDyotEl8r{H-6pZarFR>ZtA1c}1UQ$PE< zs1b(ZJyI@IPZ$DD;-zVIISE8-Q-p3|w>@*1?&M5Eka`@XL1<#n`sR}hYLBf2z2;+JzHFl1{q}?{f z4L7G={CqQMhVVZ7p3f(Hy=l^X2%j!*Z>!dfFC%a~&)su>mj+4zM8x-qo)V>U5{DIi zj@fJW8!q z{Jaf#ZC5d)cj??UgpX23{xq>iL%D?rrK@X7*`YajDa8l8)OeP5|Fs{Gi2!w{t3CO6 z2MiRD#wblN_(usz0Z^vNcR3-SwiiYnM=1Gu(Ax9B02xBkM$LY!t?y8GAacF&Xj5N8 z8!RH=i*H_NG^>9a0zg1Dt0RfTd0tQL>tiw=uD8CV^mUh)zr9LtswD7Vl-_XKHGyO(z`$b$7 zwI7G$Ou0#zEE=hLt!V-I255*iGCbKe300Yjl|VOI&pRFLLXPmOLN7m@r3gMFAi{7V zf4ey|OAx_#HRdP#aTY2BHTJoe|H-V)L2q8TLv^yS_P|q8*Isy`;(jqE@efw04jttU;vJ$u8<_$S~@UakdU54#G<}ZH`^-Tpq zoA08e+WzJ-gpDUQ54C6wE+UwB`pb&=dXvgV6D}tH^cVN-wIPHO2j-fWA>Q!m0g+7R zUoX$iwm_u-G)%p-ZQv5JLujqg=%IM&^cIGrNMsT|%2jMUn~mU`8$K$XwgGtnk=1gqkY-Kw8w<)PVI0#lSdLEh$8GD1ho^W!dp2Jop15w~TT zSgu1e@S{Ayw%5e7J4JpC!A^f)@7aW2SP+PuiI%cY-0dZ0ND;BnU(x@l?KRTQ6%qdi zx^Tzuv^)oVBBn5dUHoUO9P4nMD|2A>Ce^)Iv`|J8vILbNPUH{dx`e=mFwx(5n|WWUK*e3 zlR@~j@M|*h*qjH3QF9X2Zt0p$US5I21Xzr=Fn#C7`5kbS;1c^{AR=`DRtL}`&DwLl zIjp^U?VZg)|{#uUSQ0Bw|Uz1&tUp8%DZW3gv?y5Fm2 z1U@-YP4>j*FVI0Yafa*Ovs)kcz%4^Hj=P79W5tQ%eF!5$Cgc}Nssf?e5b;+L#>jB; z3k8B2T{X?@o}fIy3eo0i^}m#(PpS~^9}c+FDIx>;29Z0j_9`j-oeo8iSEX059iX*G zpx=nHu0MDUMnFR#SPu^-9}Hmlif~;suEnE`j|m`5eDp+KNZ6ztRuteF75n{ueBC#M z`heR%dfy&A4!v>W3LfX~{t>$&2@zG|(J$K!@%ufNUz z04^{ZM?%^kSDW~f=RYB0jV0*r_FG2Xhxq_B$(0r;+cK{rEK269-ss?chtPaJxBMTI z5S$+>KkWReiPdT{A%28_dWSrfNz!jLAtJ9P zwIGD=O!{N~dfKK4)s&)bBl0p(`Dk7flC@6%xadzshHxVG?8W8&*-C_RrzyG}h5w@YQ91|E~=v8d7h>(C&`o z8GPHY@PMAqG&8(LKOdgi##9f~TKhH5z&6sV6F%lF6bXAs&mf2g_JyG_~YYZSrus7<; z-64m8LS#p_Y~s;_QF8>{YXfXTw2t7(%6bHxyMszF9P9M|=mI1%UpUN8JQ& zg9iv_coxgoMGivUp$^3EFfKh0*%o|>Fw4!6WiWFFGLbfeAQ&LUvgBw;+8+k|NROJ3 z$a4+Ic!1&KMlp9nZz}D~9=ZSHb4*j~pQbK^)rz9W$2xP~!!yEoe%$_a zX;Jk!h_n)#lJsYnmOX*3Bj^V7br;kgksr~CbfMStTjB7 zdiLSO%BaH&1P4#!smJwcgDxP)!8VpsLR-7naXLk2E<_QH7aQh6evnr=DWEH^O zC!u^XfZZKI(;{l`{qG)yq{(4QUv)3EPP4&o13vs{i1EFB9F7cNaDI>bffjGl!4SqW zFLq;-WBca;x>#V<$4$yBL{f_BVxn(ur)O>yJ;pFPYJy2jh0MUTLM(!SHgC_zKyxpI z>h_kup$kQDmq0U}wR3#(ckhZJEKw6ud|JyQ5bkoT=sAS{gFk1x@1PRdv)l2R1GXSG1&=tU_Q0YoC(4lLg}!2>A< zIObJd@~yV87-6B}rft4=3@QD6iM_@g;sdVN&?&*&cj#{|Wjd1H^BVW@PwY~ms8mI8 zd}*+)ZTNvSYCA&Q^_O#uFW$oE3cyZZK(eOpK{W!C->Mw zV40tbo;(i-Alx?<){ha7o5=;Q%E$O8{7KQqYkHpE{X8{x$~a(|Cr(a z0mS#VtS=m%UWH~XxKhF1Iqz+GxPJf)p39fRx0G5C&RM=${rbD)3qsP?>1&NNv9Lch zso3BA``o>i2RsomBNZrBgfMp5ai|(-psMaL-sRdZ|FomB4 zvwsV2$>|h)2!bql(}9UT*b<1ukFmD+wI4MAND^1ZUOlOpdL@W3eD?H`?J-dfgqerG z>~!DcO(9&YnBPmo#PI}1@D+3DGD_+VTTiq+92sbq=eW6E zE+s~q=~s-p`0-lileKMxH+!7N1<%KkcKa*FNA7>bs4aLBFo$&**jNXvFZdy(>C00d z7(P7Xdy4O3;#{a?)LO*m?#s82cr7}4dMgMCLKbO7*!Y696#gHeKClUTpj`Th_B>V>9 ze4$7q=ZY@e_3%tUZtSX66-7L(P7?98@oU2w{R4FfsaxI?a<*mA0YnZPMlF?<_6H%% zwgpAK+piC0klur^WLQRaburT);mp%43gxdFY0&H)(W~#lIrbNQP+b6o9HqjUp=wgs z?}$b=X2iaik&W<7Fu|Prq~GC2>x&TiN!(#`x6AM!MO#m#->BQB-1P5(W-ke*6?_lg z9#g-Epr!k2#j*C5I*FTf~)Cs!uSnz{?VPyjkFt;gyU zt=RzFMDfr5BNK0{;3@zR-J)L|wLOrGAolI}?lDFAT7;Mweshy^`&ePA46zND-Oy{r z3DOAO`}Vqi>yCoE5h9OGuGhx2@@OM4WqzkA5mAjoXev2T*!?U~5_+2@G+c9bt+S8O zMUdIlH&-9$T|}@_KDu-(R+w~73$eov6Qgvrn~=SLgA0_rI?BUm5C%`#+hiYWdygQ+ z@z6G;<1uLjg;%F7^3?VDltRiRrzV5h3s z?5#F}b%SPxtCkVFw%=jv0sCZ}3VYm?VM_p~={~H=CO(BN0aQq;9tqoyIE?VMPg%5u z=_?#FIu88Fn+T_4Nxe%5V}5+m3XEl>6U>1J{@ciMNY`LOxcA;YU}(+xECS_toPMRk z=pF=B@j!;q4OUnX`e34sNL^P%b2D58fOp#`Po5GIphW1A%ssDF`iBcafKKqy-=QHm z!O-l`-**qL^UohbDDh%=exU!1H{c2JQh@#?PTjE;g!9##l;dhbq@i2*P4+2Mr@9-~d9i zq~N>qz2r zzPu;n+y#WGf83uP7ucNt+wI7Nq^ma=^zotXk zhaW-LGGjEV?K}*J?jpwL7VT^Iq%;xXJ=fkgGCH?GggY8>F<1Z9D^W3+xi!Amp~6NUBdsh6vp|>}cn_sk1Gda}szyy`S%s5+)s{cbMG1Rn^AUHKzEe zaL4@iD$I|A!UfI3`zO1e1uBTce1x#02PBTAm1}PTWH85pqnDNcR*)7^2YV-=>3G?r z!32RZvc~^gR^}9fn1@7C#q-{N=C=|t zn7yqD&s5-!-D#&fKM05+Y^QG)3vtOmg$}BSjC8G%qMAZ*P0^3yC;SBC%{2l%Ao7vu z8e>{!u+sPkVMTs`Deo!u2EvCZBTbr%j_Lq1JU;qafV*QFYy;yff%Ru z!l-(oc~OxeoJRU}te!8mjh-@%^h_=BQ8APC--sNT4}ktic}mskyZ4o zjbRSfcL?e2-(=V+)#G8H%S7cB84-EQks^c@*`s2f7o)uq2-G!;jVE#rBAlhymY4qd z(+#?wA>1oFRyeXDy91Gf_`9kA*LEEixS0U6Z^Sqq`)fbKdp=^00^8$>N2hZ*5^%vfb5tI98g1wsC%d}H|pggm)Wlaw2t zy9gFE)OUpUSY`o?F{OYed$TiPq@^;(hB@++W9crMBN${E8~Y`5#Q+}RA=s5^l9H_|5+*Hz#>1vyF{ix^I1_* z2og;C?8)kO0SH6lqaVa1v=6}u_TV(J2k292{2>CkfA>~TxQ~7Zf|5jd6U|FGNLYwG zlTM-X5f|u(4l=RTivp`sk&bX@0gjB*>&R!(LlpxIf4lu4wDS;Ly8zGl9?1}MUv7ju zh30c|vW6;vT5R!1pIhXtbR2@~vFO6&=J%U>udg(nbQmi4L48pX`J0;MA&1q zP@=f+)IJ2xn%G6FF8wg*K#i#O%|XZ1u?O}P5LKVJRjoYb2hb-D$lXidb8~MiJhKN| zU6?6ayJ=C0VJvI}^2+nw#oYh05%|NJ1dpX_JcMWBiJezgW-n)p9YbjMaz7+tuuzV$ z?5j!3J^2T66q@z(+`TYxRVx@lP>3eRp3&+vLe5Gzi!g^A72pjqrn6s^U-&X?BOoc7 z;^OnVF$#q1CHEqkU$jE{LuBdkn7+qAFw`9Y6B%=X@Rh4MfbT@YkYyH+%J)8mTmSur zzm{^$41rjCMO?dJu^HjQ7n+93(etNarjPMjS;fX)h2&g>fR5{YTz)s&5!76Nd%uZf zg5j_j5jNP_6piV$91#jQPMNR9O>O`viKTW=G&h!{dJr5vDgDn z6cnaz{3vqcAe;o|gWY!}qZWL7^Ug3#`}! zsSJ^bYaA`Xv#+7l0GPbUXqH?uO#snY_MI_=*%44e*hpxRskbnM3jOrSXI$$6E>HEVNr&)6xfq#Vi!sk04 z@E&G)T&mNdE}o-;1;MekNLV($5~@E$M(6iE*=SbOgZGSJ^399V!}R8q2<)CG{Pxn} zaDlNz5WQ$Jic?A^;hX~6j-L8J#%#%hKpFfi;$gbzIfQ*X3%~duu0w@|X4Cby@^QOg z+W^JH@>=nlKo?k8p^=+j0Bh2@VZ;sP)!%QKPRNH4SFL*2i zftg%9@fRw3RFVffe81#e$}q0c}g(T zYxv{}n>o2GuK~hgS!N5h_L3P?+4 zZ`@o$t98}J6UqkQC2JF_2CXIJ8z2U|guP{^A4c$1{xrZCzgbheo zfZZP_OYxyDRfJBx-b=0j5*J{gOGMd}YiB~}%?=?f`2BGDa&cw`A=lt#eT<3~WFoT# zmJ-<1;6^Kku29VWo7hvC;;#f0;c-mff7P2J9O07Qix&>7i=3H^6&N z5^AU=+|@!op}GJxWuF(V{j!8L04Vdiz0_Ybn@5POxcjzWP+1?Ljeqy%c>2vU1hKP= zC%)u%z#70a?74}qPoGPy!CF(|+GlB19dqRd5kfAmuif7zkaCm_zaG;tP_PrvhmcgN z%fS1n+84&wj5+Hj|FG`!hVuhpI4ItmK0wU@UFQ&%U9%#8wH$-90JwLuqx6N}-IECU znCd0Io#Twqn-We_IF8FGX8IuP$p{IyODcv;WKAK~hU-^sItyMxuo!P3Pu}^t2byVO z569U4yQD`AdClUFUpA8LG~D|B1L1|^Th6hBwn_xCW^Tr`N%;AGM#ud{&8S zOVQm7zt0^;P$}0RDB){$KzO|SU}n~C3Kkxk@wek@saMVY5!frpN||fyHZhD1C;q1q zalUcxE1Wrig4&3vz30udBoHQRMu@Z;+OP`%x=8yJveNUgZUB`(6#G6ZDM1wjly~22 zzG}b%V*`+lKMne^&({+nK`m<^a$eWgW7+BcC1;%!opmX(Xjq7`XLJ!I^&xA+qhn?L7GVzX(@`o==omsP{E|07lpyoTi}#SzlQd5ol#E<*OQIT5(7 z2wSq9BK-mnurTP5xXfNvjd1bDu0kj$!3IJ5>Me!WBm7?hUIcC9$3dUVZhc0WO%?Zf z&%Tq5a73h)d3|{XDjzgsYRk8X{!1?bFI~b+yeOD9Ue&T8=zC?V2(U~}BFv~t|2AN< zP)4|Oyk7k2YTOqDB`TxagX^Lg0=>JTrL%OjYZS?~6hGQl+k@U@%fxFnaC4@pjo9pvmRatfJy ziQvVS+}5^7;}|q+B6xarF@Cp-H%6!r8KJMzaV-OUBXTDWH5=>|3r2|i?_h?+#eeWp zRw?W$9l*SpfNr|hhR*POc-veY7yNg&>!>FDX= z@@0l*QCQcGbIsot(qA87*C2fS*-or@dhTK&)M7<=oY3*i%3@SG%r#%^jFFyC0#I zBb&C9tYj7e{{6tGFJ9@E2zidHDdVbwI|vUV;s#RA)x!Z~e@3tf-{h{Lq?19=mkB)O zPb94CW= zpu$3AB4e}iSjZfV8u0k+lPdGrIa>s|x%7`Uw&}$PRJ4B|H#+$l0z~l391j+WjXgsM zejj%?;h7{+mka1IxH`8GD33Bmlwz51?Km9G&d2KTvCl@gs1_7eiS zdFe?XX6)lc(|YCT?5}4t5CXT$?T?r(#X;AXF>dqs_FCi3pAbF<$0mgt3qmSG#D_m& z?P``mJ%UEV`WxQ-iUR;Ij7h8WcsyrM0z!7%#D|`i%OVK-|GC-bH2qveFzt?=<=V)B zUEsJvICEV`NbpG~OdGJ2W+~ubB4GjuBxpwL4i_#5IwIJQ2Dyx-#&aN?`aylykxN7n zdaK0r2g$9{tAf-4O;~4XN{MJO%{X8a6AlSh-gAY#8DZd{B*mk~K`sQ>n@6(N%eTv6 z+7$RxzsT}ak8l5kuBQkec?$WcUgy^#c+^~7uugZ6LMU8+)~_&Z1{WnX~+Iqwd z;qaU3`;F}nNQYJt=V_Yv*JLh$>j=;hZv;RTVHakL_`MHB#ZGE2+ zTpdSZsyZAA2-atd9j|-5_C-+P+&?>6xXX{A!9L_I$D|(u$R^5k*eNDi8h%CC;fN?z zYNvu@29eE&oouxY^H2r>)~!d)mFjnOVQd<>gZeCaN^LVKuQl+Rg_PANd!0zdP6H<& zqBoh_-wUe)U|Te)ZuKPnsXXAb^7f<|dDA+=@iXsi75JT?aB-{J4`K0@V#W~pgz$(KD>ArIh>2sFtkY| zvHjNXD+q;$tj824^q>f_KfuIj+uYbQW@QoXytwJP6jqu9c!po*miYX9Fem_FwS{d* zqPiIt5hCtIt(ZaZ%2mKyT!u&Rs)ml|GYsS8A!9nLVCuq@Jb`5{m4!Hx^-aPNt7bh}B0?|b2hZ{}sUu&4@6+Fbqyp7C& z03X2s$!zTo3;!SRqZLOao;?|VyTQ;Baug6W#N%-8)5K}$;11F3jQ@|2>0C$(fY<9x zzh(Zn{{Xo}d6m?LS)tIgfJP$DL-9)Oxdtu5VR4=1s&4HZ1lCT`nug|=YS8sLtn|+x ztWQcj1|e(ehO~}EF?0=)eSK4D3WsSQBK%y;zUo>Ov>#xC1r(Gqa$HM?n+YIRIObTs zCe4arTr9+e88+ujhnOzGd%hBmND;Vp?X3SG2o~BtrKzZa41q}e<(tp+k}SLsUQ8`- zExDX%gWj?+;qL1_$I9mW5Tx4=G$(fVe*kph!wgXk+Vq+)5w3})1szX33NwYs!GijW zul>}G0HxTs&oROFRedi2D|lXetKEcq2V8A{4VRARB%-F-F$0bg<=05Pa(&}L)Lc^eQnz?#6J3KRlZRdrJ X4KFp4>gW(wc6eA$e}5_T#%1_FWU6FO literal 0 HcmV?d00001 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-1.st b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-1.st new file mode 100644 index 0000000000000000000000000000000000000000..0b468bb25373bae87e01de2e6a1df88093046901 GIT binary patch literal 16384 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 z zctcBrdU1r-(fJ*_4qLo~uFXi{Z)?PVi%V4iSv>1gm_crD9~4M{B6mame#X6&5y;{p zrSkceLwfxPtJ?K38%f!xp|>@n+A}n9@U_4_gt3XII`{5g@quP$IIV&BY3pLPw+JlV zdcO;NJD{vXgzq!_KK$oT^a!FC3iq3fKYs>r$I~v4L{>A8?LhcwMeqB0>kCLEh)BM! zlgU_ig*@Q6hmWm3(Fl810DBG~t8^u5-8CH66mUvM73tEI3D4- z_o>&f_6iav^S zHx_U~crY{DaGLi@B7Dy{xx3B$TIT2jC^cJI@XsyypFm@!T?p&RMmii)OG*gLX(P$$ z+C#PoAJR4_V)hE8B4{$db`9qt{{Z;#e)|`e_ECQxBZycihW4$Dv?ApErkV1==AqO; zvs`uW@!K=RDnJoWxOnN!q5L0^E`Yebk%8jD46t$lNgkfP)*+?vhb};)oqF-;{$sFm z?B9tdO>w61&7!ji4ADXUzr8%>5jKlivaR?np+rNo=|N#W9`#Fw2>RHsAAXmX;F86` zP1Fhdcl@lP4jovlN3f8G8MVSe|c7i{_YkZ%w<#?HibF_&!+ zA&JPlYh=dChaj^5pwLc>f@TC?mo1}{?&8*z&&EzpUC3oRZ|jDT{bAg_ozCW!pa z`f}4aH2)LA)~~~noRq(@rbMjM{n?cCvAnSUEaUG;!nr90gmW@E|?S zUPJmCMudnDBA0Up?Jpsy@04}hvEA z+rcDqTqL;a8DvGg+~N2Dv@dls-;lF}@c^#9GRtI?`3au@(5kgD4wxKSh7R777Ncin z&DA3;5!f%Pj&*hYJp|2mVW%t#8|}nRpt=C8N_f6rW_khZ1DLR+8&woB+X>IClD|1z zr7<=K7!Ic(eyd*j?esG?Q)m`|DK&n*s9XGP6C%dAY1ly%`EMt-BRC`!ZQ0fP$qwOk zaHi+6c0X|hc_~4e7DsCMQjP{2^a0;4FcN7PD)!p2aE?!v6UB zsg;Eg__GW|h7FGj?D(z?8xRo5<;~?>U$ixMoX14knh=uv4dAQw!nEtWm;l zsX!cog?pd-LsFIp;is&%$QNfxNPl?dtkHP%Yx<8A3=(}U*O=bU2hJh{z&`?Bx*~ZF z(23Q4S!-~(Y($0N6md1H?_v)JLc2z*RY&VdI3%DM-J*!Xnjq!>{{R%X>i7hSXMP6^ zVwT|!ZghWRbP(jvFNCnO>cC|IBHNu!XYU%^UPM?F@9~-*csB`HB2<_Ei*2C^fVl=Z zEQfE*mETT7K;x{%hgB`)EC}BxcS7Qx~VzR6QRxI*o%}Y=U8~g zg>0|lWDypQZb#_K;Ok{IJ5q-b-*eJ*M>9KIBcR#S=}+}>8hO)z8|2-_R8OT*Z>YV1 z=EJYk%UD>rpld};X`<$RGP3c0J+PFSFHlqSOK*p$0%QSN1?nc z!mSr=Y6H>lVQWHUm#c46quePdoq#XR4-1!iwJGnZB}aDs{dRXaV+!7L5_=H5Z>*S; zkOz1XhAvrIm2^8&}>!#j1URq8j;6ut9Vm@ed>=_8ZEBRLU?w2pRL{T$COczV0t~5 zbI7#>b_7EWx#k^Ri=hbG{KoZD--5m1rDsUx``a8JeiC^OupXalFPEnLw~KA%WWRAkns=ZUq(8ua*(Wy0`m*QX z5rv?3>#h>$xJ9P>_*_)ExSklAiWiW^Yrpu z6zks*gs|1{W_kDxCwS>1na`#qT>aKl58-Zm4^1WS#{lS>8Q0pkcI33-NeP6>dzu>M z*XW@GE@slEU15CY;0iN>h)<|#{U1SC5{T@-|NE%_=UGTG0KlO5GqVmq~A$L`9TLc7e?h176Nv0k6F&?Vd#(*$U_d=a1 ztCkbcO~%oVD1|>$xQtM9C8~P&=R~ zeek3E=^k9yw1KNT!0lexn~zoMup7B7iH1T>!IwX7L2=;nB&bg&__fKm*g&&TGB@{q zsP|Jlk-WVatItlbpf`E&e}8YTNbi!%KgY0ZP}iI|Jt^OaGgELOZLkO?4~`nn~mN YTl-A@8oEP<0G^*)nXYy};z_~(01`_xb^rhX literal 0 HcmV?d00001 diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-3.st b/storage_broker/spec/replicated/replicated.toolbox/Model_1/25-01-19-16-40-15/MC-3.st new file mode 100644 index 0000000000000000000000000000000000000000..2eece7fbb554a3c052f12119c50586c5a9b192c4 GIT binary patch literal 16384 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 {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_17373012151769000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 16:40:15 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 new file mode 100644 index 0000000000..ab92cbb3d7 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1/MC_TE.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 20 and seed 6372772458573668883 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 9898] (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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module replicated +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:40:16) +@!@!@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 16:40:18. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 1217 total distinct states at (2025-01-19 16:40:21) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:40:21 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(11) at 2025-01-19 16:40:21: 39.816 states generated (39.816 s/min), 3.288 distinct states found (3.288 ds/min), 2.067 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla new file mode 100644 index 0000000000..14910364fe --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1/replicated.tla @@ -0,0 +1,117 @@ +---- MODULE replicated ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + + +SkCommit(s1, s2) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +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: \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_1737296416956/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.cfg new file mode 100644 index 0000000000..315dcb696c --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.cfg @@ -0,0 +1,37 @@ +\* 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 definitions +CONSTANT +brokers <- const_1737296402193120000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737296402194121000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737296402194122000 +\* SYMMETRY definition +SYMMETRY symm_1737296402194123000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737296402194124000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737296402194125000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* Generated on Sun Jan 19 15:20:02 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.out new file mode 100644 index 0000000000..696943b056 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.out @@ -0,0 +1,38 @@ +@!@!@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 6751784514943401101 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 5476] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 15:20:03) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 15:20:04. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(12) at 2025-01-19 15:20:07: 163.015 states generated (163.015 s/min), 12.588 distinct states found (12.588 ds/min), 7.372 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.tla new file mode 100644 index 0000000000..d30390320b --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC.tla @@ -0,0 +1,50 @@ +---- MODULE MC ---- +EXTENDS fullmesh, 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 definitions brokers +const_1737296402193120000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737296402194121000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737296402194122000 == +{p1, p2} +---- + +\* SYMMETRY definition +symm_1737296402194123000 == +Permutations(const_1737296402193120000) \union Permutations(const_1737296402194121000) \union Permutations(const_1737296402194122000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737296402194124000 == +2 +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737296402194125000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 15:20:02 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC_TE.out new file mode 100644 index 0000000000..696943b056 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/MC_TE.out @@ -0,0 +1,38 @@ +@!@!@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 6751784514943401101 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 5476] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 15:20:03) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 15:20:04. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(12) at 2025-01-19 15:20:07: 163.015 states generated (163.015 s/min), 12.588 distinct states found (12.588 ds/min), 7.372 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/fullmesh.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/fullmesh.tla new file mode 100644 index 0000000000..a70d3aeb85 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737296416956/fullmesh.tla @@ -0,0 +1,85 @@ +---- MODULE fullmesh ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + +vars == << broker_state, safekeeper_state, pageserver_state >> + +CONSTANT + brokers, + safekeepers, + pageservers + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + +SkCommit(s) == + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn + 1] + /\ UNCHANGED <> + +SkPushToBroker(s,b) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +Next == + \/ \E s \in safekeepers: SkCommit(s) + \/ \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]_vars + +==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.cfg new file mode 100644 index 0000000000..5d0e77461a --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.cfg @@ -0,0 +1,48 @@ +\* 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_1737297530693169000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737297530694170000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737297530694171000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737297530694172000 +\* SYMMETRY definition +SYMMETRY symm_1737297530694173000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737297530694174000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737297530694175000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737297530694176000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* Generated on Sun Jan 19 15:38:50 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.out new file mode 100644 index 0000000000..6ab9f0e5e4 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.out @@ -0,0 +1,35 @@ +@!@!@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 130 and seed 4267255892797165884 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 6327] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 15:38:51) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 15:38:53. +@!@!@ENDMSG 2190 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.tla new file mode 100644 index 0000000000..ec7157637f --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS fullmesh, 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_1737297530693169000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737297530694170000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737297530694171000 == +{p1, p2} +---- + +\* MV CONSTANT definitions azs +const_1737297530694172000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737297530694173000 == +Permutations(const_1737297530693169000) \union Permutations(const_1737297530694170000) \union Permutations(const_1737297530694171000) \union Permutations(const_1737297530694172000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737297530694174000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737297530694175000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737297530694176000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 15:38:50 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC_TE.out new file mode 100644 index 0000000000..6ab9f0e5e4 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/MC_TE.out @@ -0,0 +1,35 @@ +@!@!@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 130 and seed 4267255892797165884 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 6327] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 15:38:51) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 15:38:53. +@!@!@ENDMSG 2190 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/fullmesh.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/fullmesh.tla new file mode 100644 index 0000000000..9346db0d45 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297534393/fullmesh.tla @@ -0,0 +1,91 @@ +---- MODULE fullmesh ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + +SkCommit(s) == + /\ safekeeper_state' = [safekeeper_state EXCEPT ![s].commit_lsn = safekeeper_state[s].commit_lsn + 1] + /\ UNCHANGED <> + +SkPushToBroker(s,b) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +Next == + \/ \E s \in safekeepers: SkCommit(s) + \/ \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 + + + +==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.cfg new file mode 100644 index 0000000000..317368faaf --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.cfg @@ -0,0 +1,48 @@ +\* 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_1737297992949177000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737297992949178000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737297992949179000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737297992949180000 +\* SYMMETRY definition +SYMMETRY symm_1737297992949181000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737297992949182000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737297992949183000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737297992949184000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* Generated on Sun Jan 19 15:46:32 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.out new file mode 100644 index 0000000000..be1df74b07 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.out @@ -0,0 +1,38 @@ +@!@!@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 -5924036830053169413 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 6690] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 15:46:33) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 15:46:35. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(10) at 2025-01-19 15:46:38: 41.300 states generated (41.300 s/min), 3.445 distinct states found (3.445 ds/min), 2.202 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.tla new file mode 100644 index 0000000000..ee8e18c7a3 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS fullmesh, 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_1737297992949177000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737297992949178000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737297992949179000 == +{p1, p2} +---- + +\* MV CONSTANT definitions azs +const_1737297992949180000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737297992949181000 == +Permutations(const_1737297992949177000) \union Permutations(const_1737297992949178000) \union Permutations(const_1737297992949179000) \union Permutations(const_1737297992949180000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737297992949182000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737297992949183000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737297992949184000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 15:46:32 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC_TE.out new file mode 100644 index 0000000000..be1df74b07 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/MC_TE.out @@ -0,0 +1,38 @@ +@!@!@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 -5924036830053169413 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 6690] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 15:46:33) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2189:0 @!@!@ +Computing initial states... +@!@!@ENDMSG 2189 @!@!@ +@!@!@STARTMSG 2190:0 @!@!@ +Finished computing initial states: 1 distinct state generated at 2025-01-19 15:46:35. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(10) at 2025-01-19 15:46:38: 41.300 states generated (41.300 s/min), 3.445 distinct states found (3.445 ds/min), 2.202 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/fullmesh.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/fullmesh.tla new file mode 100644 index 0000000000..b752cd48e2 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737297999722/fullmesh.tla @@ -0,0 +1,97 @@ +---- MODULE fullmesh ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + +SkCommit(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 <> + +SkPushToBroker(s,b) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +Next == + \/ \E s1 \in safekeepers: \E s2 \in safekeepers: SkCommit(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 + + + +==== \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.cfg new file mode 100644 index 0000000000..fa522b981a --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.cfg @@ -0,0 +1,51 @@ +\* 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_1737299350679194000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737299350679195000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737299350679196000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737299350679197000 +\* SYMMETRY definition +SYMMETRY symm_1737299350679198000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737299350679199000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737299350679200000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737299350680201000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* INVARIANT definition +INVARIANT +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 16:09:10 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.out new file mode 100644 index 0000000000..27a0150e6e --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.out @@ -0,0 +1,35 @@ +@!@!@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 119 and seed -1908114041878732601 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7665] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:09:11) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2146:1 @!@!@ +The invariant EventuallyLaggingSkIsNotPreferredSk is not a state predicate (one with no primes or temporal operators). +@!@!@ENDMSG 2146 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 994ms at (2025-01-19 16:09:11) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.tla new file mode 100644 index 0000000000..1dd82bc923 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS fullmesh, 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_1737299350679194000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737299350679195000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737299350679196000 == +{p1, p2} +---- + +\* MV CONSTANT definitions azs +const_1737299350679197000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737299350679198000 == +Permutations(const_1737299350679194000) \union Permutations(const_1737299350679195000) \union Permutations(const_1737299350679196000) \union Permutations(const_1737299350679197000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737299350679199000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737299350679200000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737299350680201000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 16:09:10 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC_TE.out new file mode 100644 index 0000000000..27a0150e6e --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/MC_TE.out @@ -0,0 +1,35 @@ +@!@!@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 119 and seed -1908114041878732601 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7665] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:09:11) +@!@!@ENDMSG 2185 @!@!@ +@!@!@STARTMSG 2146:1 @!@!@ +The invariant EventuallyLaggingSkIsNotPreferredSk is not a state predicate (one with no primes or temporal operators). +@!@!@ENDMSG 2146 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 994ms at (2025-01-19 16:09:11) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/fullmesh.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/fullmesh.tla new file mode 100644 index 0000000000..a6c5e2ea3f --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299352762/fullmesh.tla @@ -0,0 +1,115 @@ +---- MODULE fullmesh ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + + +SkCommit(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) == + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn + /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] + +SkPushToBroker(s,b) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +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: \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_1737299381423/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.cfg new file mode 100644 index 0000000000..b9bc8092a2 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.cfg @@ -0,0 +1,51 @@ +\* 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_1737299377376212000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737299377376213000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737299377376214000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737299377376215000 +\* SYMMETRY definition +SYMMETRY symm_1737299377376216000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737299377376217000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737299377376218000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737299377376219000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 16:09:37 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.out new file mode 100644 index 0000000000..7760635dfb --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.out @@ -0,0 +1,186 @@ +@!@!@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 3 and seed -7432767478319300652 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7681] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:09:38) +@!@!@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 16:09:40. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2109:1 @!@!@ +Successor state is not completely specified by action SkPeerRecovery of the next-state relation. The following variables are not assigned: broker_state, 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] @@ 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])]) +/\ 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])]) +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = null +/\ broker_state = 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 16:09:40 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 34, col 5 to line 36, col 64 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:17 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 8 to line 40, col 72 of module fullmesh: 46 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 8 to line 40, col 38 of module fullmesh: 29 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 42 to line 40, col 72 of module fullmesh: 29 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 44, col 13 to line 46, col 50 of module fullmesh: 17 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 47, col 8 to line 47, col 51 of module fullmesh: 17 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:4 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 8 to line 50, col 72 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 50, col 8 to line 50, col 38 of module fullmesh: 28 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 50, col 42 to line 50, col 72 of module fullmesh: 28 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 51, col 8 to line 51, col 102 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 28 to line 51, col 102 of module fullmesh: 4 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:9 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 54, col 8 to line 61, col 29 of module fullmesh: 9 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 62, col 8 to line 62, col 55 of module fullmesh: 9 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:18 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 70, col 13 to line 72, col 37 of module fullmesh: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 51 of module fullmesh: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 83, col 30 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 83, col 8 to line 83, col 25 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 78, col 15 to line 78, col 33 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 80, col 5 to line 80, col 66 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 80, col 26 to line 80, col 65 of module fullmesh: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 80, col 12 to line 80, col 23 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 83, col 24 to line 83, col 24 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 83, col 29 to line 83, col 30 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 84, col 8 to line 84, col 109 of module fullmesh: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 85, col 8 to line 85, col 51 of module fullmesh: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(3) at 2025-01-19 16:09:40: 46 states generated (1.044 s/min), 6 distinct states found (136 ds/min), 2 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +46 states generated, 6 distinct states found, 2 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 3. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2268:0 @!@!@ +The average outdegree of the complete state graph is 2 (minimum is 2, the maximum 2 and the 95th percentile is 2). +@!@!@ENDMSG 2268 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2658ms at (2025-01-19 16:09:40) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.tla new file mode 100644 index 0000000000..9df26a2fc9 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS fullmesh, 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_1737299377376212000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737299377376213000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737299377376214000 == +{p1, p2} +---- + +\* MV CONSTANT definitions azs +const_1737299377376215000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737299377376216000 == +Permutations(const_1737299377376212000) \union Permutations(const_1737299377376213000) \union Permutations(const_1737299377376214000) \union Permutations(const_1737299377376215000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737299377376217000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737299377376218000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737299377376219000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 16:09:37 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC_TE.out new file mode 100644 index 0000000000..7760635dfb --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/MC_TE.out @@ -0,0 +1,186 @@ +@!@!@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 3 and seed -7432767478319300652 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7681] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:09:38) +@!@!@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 16:09:40. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2109:1 @!@!@ +Successor state is not completely specified by action SkPeerRecovery of the next-state relation. The following variables are not assigned: broker_state, 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] @@ 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])]) +/\ 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])]) +/\ safekeeper_state = (s1 :> [commit_lsn |-> 1, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 0, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +3: +/\ pageserver_state = null +/\ broker_state = 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 16:09:40 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 34, col 5 to line 36, col 64 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 5:17 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 8 to line 40, col 72 of module fullmesh: 46 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 8 to line 40, col 38 of module fullmesh: 29 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 42 to line 40, col 72 of module fullmesh: 29 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 44, col 13 to line 46, col 50 of module fullmesh: 17 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 47, col 8 to line 47, col 51 of module fullmesh: 17 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:4 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 50, col 8 to line 50, col 72 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 50, col 8 to line 50, col 38 of module fullmesh: 28 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 50, col 42 to line 50, col 72 of module fullmesh: 28 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 51, col 8 to line 51, col 102 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 28 to line 51, col 102 of module fullmesh: 4 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:9 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 54, col 8 to line 61, col 29 of module fullmesh: 9 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 62, col 8 to line 62, col 55 of module fullmesh: 9 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:18 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 70, col 13 to line 72, col 37 of module fullmesh: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 73, col 8 to line 73, col 51 of module fullmesh: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 83, col 8 to line 83, col 30 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 83, col 8 to line 83, col 25 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 78, col 15 to line 78, col 33 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 80, col 5 to line 80, col 66 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 80, col 26 to line 80, col 65 of module fullmesh: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 80, col 12 to line 80, col 23 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 83, col 24 to line 83, col 24 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 83, col 29 to line 83, col 30 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 84, col 8 to line 84, col 109 of module fullmesh: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 85, col 8 to line 85, col 51 of module fullmesh: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(3) at 2025-01-19 16:09:40: 46 states generated (1.044 s/min), 6 distinct states found (136 ds/min), 2 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +46 states generated, 6 distinct states found, 2 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 3. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2268:0 @!@!@ +The average outdegree of the complete state graph is 2 (minimum is 2, the maximum 2 and the 95th percentile is 2). +@!@!@ENDMSG 2268 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2658ms at (2025-01-19 16:09:40) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/fullmesh.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/fullmesh.tla new file mode 100644 index 0000000000..a6c5e2ea3f --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299381423/fullmesh.tla @@ -0,0 +1,115 @@ +---- MODULE fullmesh ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + + +SkCommit(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) == + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn + /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] + +SkPushToBroker(s,b) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +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: \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_1737299469039/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.cfg new file mode 100644 index 0000000000..3de9dad2e7 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.cfg @@ -0,0 +1,51 @@ +\* 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_1737299464992221000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737299464992222000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737299464992223000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737299464992224000 +\* SYMMETRY definition +SYMMETRY symm_1737299464992225000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737299464992226000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737299464992227000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737299464992228000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 16:11:04 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.out new file mode 100644 index 0000000000..3299ac8cfa --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.out @@ -0,0 +1,202 @@ +@!@!@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 105 and seed 4277674636266930199 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7749] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:11:06) +@!@!@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 16:11:07. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2109:1 @!@!@ +Successor state is not completely specified by action SkPeerRecovery of the next-state relation. The following variables are not assigned: broker_state, 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] @@ 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])]) +/\ 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])]) +/\ 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 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] @@ 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])]) +/\ safekeeper_state = (s1 :> [commit_lsn |-> 2, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 2, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: +/\ pageserver_state = null +/\ broker_state = null +/\ safekeeper_state = (s1 :> [commit_lsn |-> 2, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 2, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 2, pruned_lsn |-> 0]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 16:11:07 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 34, col 5 to line 36, col 64 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:14 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 8 to line 40, col 14 of module fullmesh: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 8 to line 40, col 9 of module fullmesh: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 13 to line 40, col 14 of module fullmesh: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 41, col 8 to line 41, col 72 of module fullmesh: 37 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 41, col 8 to line 41, col 38 of module fullmesh: 23 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 41, col 42 to line 41, col 72 of module fullmesh: 23 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 45, col 13 to line 47, col 50 of module fullmesh: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 48, col 8 to line 48, col 51 of module fullmesh: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:3 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 51, col 8 to line 51, col 72 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 8 to line 51, col 38 of module fullmesh: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 42 to line 51, col 72 of module fullmesh: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 52, col 102 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 28 to line 52, col 102 of module fullmesh: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:9 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 55, col 8 to line 62, col 29 of module fullmesh: 9 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 55 of module fullmesh: 9 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:18 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 13 to line 73, col 37 of module fullmesh: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 51 of module fullmesh: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 84, col 8 to line 84, col 30 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 84, col 8 to line 84, col 25 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 79, col 15 to line 79, col 33 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 81, col 5 to line 81, col 66 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 81, col 26 to line 81, col 65 of module fullmesh: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 81, col 12 to line 81, col 23 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 84, col 24 to line 84, col 24 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 84, col 29 to line 84, col 30 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 85, col 8 to line 85, col 109 of module fullmesh: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 86, col 8 to line 86, col 51 of module fullmesh: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(3) at 2025-01-19 16:11:07: 40 states generated (992 s/min), 3 distinct states found (74 ds/min), 0 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +40 states generated, 3 distinct states found, 0 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 3. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2268:0 @!@!@ +The average outdegree of the complete state graph is 1 (minimum is 1, the maximum 1 and the 95th percentile is 1). +@!@!@ENDMSG 2268 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2440ms at (2025-01-19 16:11:07) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.tla new file mode 100644 index 0000000000..eceb21dd0b --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS fullmesh, 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_1737299464992221000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737299464992222000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737299464992223000 == +{p1, p2} +---- + +\* MV CONSTANT definitions azs +const_1737299464992224000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737299464992225000 == +Permutations(const_1737299464992221000) \union Permutations(const_1737299464992222000) \union Permutations(const_1737299464992223000) \union Permutations(const_1737299464992224000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737299464992226000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737299464992227000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737299464992228000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 16:11:04 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC_TE.out new file mode 100644 index 0000000000..3299ac8cfa --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/MC_TE.out @@ -0,0 +1,202 @@ +@!@!@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 105 and seed 4277674636266930199 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7749] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:11:06) +@!@!@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 16:11:07. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2109:1 @!@!@ +Successor state is not completely specified by action SkPeerRecovery of the next-state relation. The following variables are not assigned: broker_state, 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] @@ 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])]) +/\ 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])]) +/\ 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 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] @@ 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])]) +/\ safekeeper_state = (s1 :> [commit_lsn |-> 2, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 2, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 0, pruned_lsn |-> 0]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2217:4 @!@!@ +4: +/\ pageserver_state = null +/\ broker_state = null +/\ safekeeper_state = (s1 :> [commit_lsn |-> 2, pruned_lsn |-> 0] @@ s2 :> [commit_lsn |-> 2, pruned_lsn |-> 0] @@ s3 :> [commit_lsn |-> 2, pruned_lsn |-> 0]) + +@!@!@ENDMSG 2217 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 16:11:07 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 2:2 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 34, col 5 to line 36, col 64 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 2:14 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 8 to line 40, col 14 of module fullmesh: 48 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 8 to line 40, col 9 of module fullmesh: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 13 to line 40, col 14 of module fullmesh: 34 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 41, col 8 to line 41, col 72 of module fullmesh: 37 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 41, col 8 to line 41, col 38 of module fullmesh: 23 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 41, col 42 to line 41, col 72 of module fullmesh: 23 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 45, col 13 to line 47, col 50 of module fullmesh: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 48, col 8 to line 48, col 51 of module fullmesh: 14 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:3 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 51, col 8 to line 51, col 72 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 8 to line 51, col 38 of module fullmesh: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 42 to line 51, col 72 of module fullmesh: 32 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 52, col 102 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 52, col 28 to line 52, col 102 of module fullmesh: 3 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:9 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 55, col 8 to line 62, col 29 of module fullmesh: 9 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 63, col 8 to line 63, col 55 of module fullmesh: 9 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:18 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 71, col 13 to line 73, col 37 of module fullmesh: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 74, col 8 to line 74, col 51 of module fullmesh: 18 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 0:0 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 84, col 8 to line 84, col 30 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 84, col 8 to line 84, col 25 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 79, col 15 to line 79, col 33 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 81, col 5 to line 81, col 66 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 81, col 26 to line 81, col 65 of module fullmesh: 6 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 81, col 12 to line 81, col 23 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 84, col 24 to line 84, col 24 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 84, col 29 to line 84, col 30 of module fullmesh: 2 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 85, col 8 to line 85, col 109 of module fullmesh: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 86, col 8 to line 86, col 51 of module fullmesh: 0 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(3) at 2025-01-19 16:11:07: 40 states generated (992 s/min), 3 distinct states found (74 ds/min), 0 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2199:0 @!@!@ +40 states generated, 3 distinct states found, 0 states left on queue. +@!@!@ENDMSG 2199 @!@!@ +@!@!@STARTMSG 2194:0 @!@!@ +The depth of the complete state graph search is 3. +@!@!@ENDMSG 2194 @!@!@ +@!@!@STARTMSG 2268:0 @!@!@ +The average outdegree of the complete state graph is 1 (minimum is 1, the maximum 1 and the 95th percentile is 1). +@!@!@ENDMSG 2268 @!@!@ +@!@!@STARTMSG 2186:0 @!@!@ +Finished in 2440ms at (2025-01-19 16:11:07) +@!@!@ENDMSG 2186 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/fullmesh.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/fullmesh.tla new file mode 100644 index 0000000000..047ececfe2 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299469039/fullmesh.tla @@ -0,0 +1,116 @@ +---- MODULE fullmesh ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + + +SkCommit(s1, s2) == + /\ 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) == + /\ safekeeper_state[s1].commit_lsn < safekeeper_state[s2].commit_lsn + /\ safekeeper_state' = [safekeeper_state EXCEPT![s1].commit_lsn = safekeeper_state[s2].commit_lsn] + +SkPushToBroker(s,b) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +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: \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_1737299542008/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.cfg new file mode 100644 index 0000000000..85f59f2a5a --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.cfg @@ -0,0 +1,51 @@ +\* 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_1737299528165230000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737299528166231000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737299528166232000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737299528166233000 +\* SYMMETRY definition +SYMMETRY symm_1737299528166234000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737299528166235000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737299528166236000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737299528166237000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 16:12:08 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.out new file mode 100644 index 0000000000..50c1506166 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.out @@ -0,0 +1,57 @@ +@!@!@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 90 and seed -131482239732531000 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7787] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:12:09) +@!@!@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 16:12:10. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2143:3 @!@!@ +The variable safekeeper_state was changed while it is specified as UNCHANGED at +line 53, col 34 to line 53, col 49 of module fullmesh +@!@!@ENDMSG 2143 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 1454 total distinct states at (2025-01-19 16:12:13) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:12:13 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(11) at 2025-01-19 16:12:13: 44.264 states generated (44.264 s/min), 2.994 distinct states found (2.994 ds/min), 1.536 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.tla new file mode 100644 index 0000000000..c9a0a6f895 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS fullmesh, 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_1737299528165230000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737299528166231000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737299528166232000 == +{p1, p2} +---- + +\* MV CONSTANT definitions azs +const_1737299528166233000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737299528166234000 == +Permutations(const_1737299528165230000) \union Permutations(const_1737299528166231000) \union Permutations(const_1737299528166232000) \union Permutations(const_1737299528166233000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737299528166235000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737299528166236000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737299528166237000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 16:12:08 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC_TE.out new file mode 100644 index 0000000000..50c1506166 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/MC_TE.out @@ -0,0 +1,57 @@ +@!@!@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 90 and seed -131482239732531000 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7787] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:12:09) +@!@!@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 16:12:10. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2143:3 @!@!@ +The variable safekeeper_state was changed while it is specified as UNCHANGED at +line 53, col 34 to line 53, col 49 of module fullmesh +@!@!@ENDMSG 2143 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 1454 total distinct states at (2025-01-19 16:12:13) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:12:13 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(11) at 2025-01-19 16:12:13: 44.264 states generated (44.264 s/min), 2.994 distinct states found (2.994 ds/min), 1.536 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/fullmesh.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/fullmesh.tla new file mode 100644 index 0000000000..06c69da79a --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299542008/fullmesh.tla @@ -0,0 +1,117 @@ +---- MODULE fullmesh ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + + +SkCommit(s1, s2) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +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: \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_1737299744229/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.cfg new file mode 100644 index 0000000000..a8b002b0f3 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.cfg @@ -0,0 +1,51 @@ +\* 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_1737299548592239000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_1737299548592240000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_1737299548592241000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_1737299548592242000 +\* SYMMETRY definition +SYMMETRY symm_1737299548592243000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_1737299548592244000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_1737299548592245000 +\* CONSTRAINT definition +CONSTRAINT +constr_1737299548592246000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 16:12:28 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.out new file mode 100644 index 0000000000..071b6e732d --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.out @@ -0,0 +1,323 @@ +@!@!@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 7 and seed 1961239747497010948 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7839] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:12:29) +@!@!@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 16:12:31. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 1175 total distinct states at (2025-01-19 16:12:34) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:12:34 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(11) at 2025-01-19 16:12:34: 38.396 states generated (38.396 s/min), 3.250 distinct states found (3.250 ds/min), 2.071 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 45381 total distinct states at (2025-01-19 16:13:34) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:13:34 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(15) at 2025-01-19 16:13:34: 1.510.623 states generated (1.472.227 s/min), 97.716 distinct states found (94.466 ds/min), 52.332 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 92513 total distinct states at (2025-01-19 16:14:34) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:14:34 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(16) at 2025-01-19 16:14:34: 3.093.230 states generated (1.582.607 s/min), 182.372 distinct states found (84.656 ds/min), 89.855 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 140861 total distinct states at (2025-01-19 16:15:34) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:15:34 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(17) at 2025-01-19 16:15:34: 4.742.508 states generated (1.649.278 s/min), 257.179 distinct states found (74.807 ds/min), 116.314 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 16:15:34 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 1:1 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 34, col 5 to line 36, col 64 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 54:531874 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 8 to line 40, col 14 of module fullmesh: 1799789 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 8 to line 40, col 9 of module fullmesh: 1267920 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 13 to line 40, col 14 of module fullmesh: 1267920 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 41, col 8 to line 41, col 72 of module fullmesh: 1377160 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 41, col 8 to line 41, col 38 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 41, col 8 to line 41, col 27 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 41, col 8 to line 41, col 23 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 41, col 25 to line 41, col 26 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 41, col 42 to line 41, col 72 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 45, col 13 to line 47, col 50 of module fullmesh: 531880 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 48, col 8 to line 48, col 51 of module fullmesh: 531878 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 148:156702 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 51, col 8 to line 51, col 72 of module fullmesh: 156716 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 8 to line 51, col 38 of module fullmesh: 1267992 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 51, col 8 to line 51, col 27 of module fullmesh: 1267999 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 51, col 8 to line 51, col 23 of module fullmesh: 1268010 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 51, col 25 to line 51, col 26 of module fullmesh: 1268010 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 42 to line 51, col 72 of module fullmesh: 1268010 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 52, col 102 of module fullmesh: 156720 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 53, col 8 to line 53, col 51 of module fullmesh: 156716 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 13409:1268009 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 63, col 29 of module fullmesh: 1268023 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 24 to line 63, col 29 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 27 to line 56, col 91 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 56, col 27 to line 56, col 58 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 56, col 27 to line 56, col 47 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 56, col 27 to line 56, col 44 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 56, col 27 to line 56, col 41 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 56, col 27 to line 56, col 38 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 56, col 40 to line 56, col 40 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 56, col 46 to line 56, col 46 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 56, col 62 to line 56, col 91 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 59, col 28 to line 59, col 45 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 28 to line 59, col 42 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 60, col 31 to line 60, col 91 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 60, col 32 to line 60, col 34 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 60, col 43 to line 60, col 90 of module fullmesh: 793906 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 62, col 17 to line 62, col 54 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 63, col 18 to line 63, col 29 of module fullmesh: 474120 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 55 of module fullmesh: 1268023 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 130578:2536105 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 13 to line 74, col 37 of module fullmesh: 2536113 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 72, col 33 to line 74, col 37 of module fullmesh: 2536117 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 72, col 36 to line 72, col 66 of module fullmesh: 2536118 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 72, col 36 to line 72, col 49 of module fullmesh: 2536119 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 72, col 53 to line 72, col 66 of module fullmesh: 2536121 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 72, col 53 to line 72, col 55 of module fullmesh: 2536122 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 69, col 20 to line 69, col 44 of module fullmesh: 2536123 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 69, col 20 to line 69, col 41 of module fullmesh: 2536124 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 69, col 20 to line 69, col 38 of module fullmesh: 2536125 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 69, col 43 to line 69, col 43 of module fullmesh: 2536126 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 73, col 22 to line 73, col 66 of module fullmesh: 818090 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 74, col 22 to line 74, col 37 of module fullmesh: 1718038 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 51 of module fullmesh: 2536113 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 113018:250807 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 85, col 8 to line 85, col 30 of module fullmesh: 532607 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 85, col 8 to line 85, col 25 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 80, col 15 to line 80, col 33 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 82, col 5 to line 82, col 66 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 82, col 26 to line 82, col 65 of module fullmesh: 845394 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 82, col 12 to line 82, col 23 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 85, col 24 to line 85, col 24 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 85, col 29 to line 85, col 30 of module fullmesh: 281800 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 86, col 8 to line 86, col 109 of module fullmesh: 250813 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 86, col 28 to line 86, col 109 of module fullmesh: 250815 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 86, col 29 to line 86, col 44 of module fullmesh: 250815 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 86, col 52 to line 86, col 108 of module fullmesh: 250807 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 86, col 72 to line 86, col 108 of module fullmesh: 250815 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 86, col 105 to line 86, col 108 of module fullmesh: 250814 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 86, col 85 to line 86, col 102 of module fullmesh: 250815 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 80, col 15 to line 80, col 33 of module fullmesh: 250814 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + ||||line 82, col 5 to line 82, col 66 of module fullmesh: 250814:250814 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 82, col 26 to line 82, col 65 of module fullmesh: 752442 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 82, col 12 to line 82, col 23 of module fullmesh: 250814 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 86, col 101 to line 86, col 101 of module fullmesh: 250814 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 51 of module fullmesh: 250807 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.tla new file mode 100644 index 0000000000..fc42ac157a --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC.tla @@ -0,0 +1,65 @@ +---- MODULE MC ---- +EXTENDS fullmesh, 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_1737299548592239000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_1737299548592240000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_1737299548592241000 == +{p1, p2} +---- + +\* MV CONSTANT definitions azs +const_1737299548592242000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_1737299548592243000 == +Permutations(const_1737299548592239000) \union Permutations(const_1737299548592240000) \union Permutations(const_1737299548592241000) \union Permutations(const_1737299548592242000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_1737299548592244000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_1737299548592245000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_1737299548592246000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 16:12:28 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC_TE.out new file mode 100644 index 0000000000..071b6e732d --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/MC_TE.out @@ -0,0 +1,323 @@ +@!@!@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 7 and seed 1961239747497010948 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 7839] (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/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/MC.tla +Parsing file /Users/cs/Desktop/broker/fullmesh/fullmesh.toolbox/Model_1/fullmesh.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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module fullmesh +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:12:29) +@!@!@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 16:12:31. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 1175 total distinct states at (2025-01-19 16:12:34) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:12:34 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(11) at 2025-01-19 16:12:34: 38.396 states generated (38.396 s/min), 3.250 distinct states found (3.250 ds/min), 2.071 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 45381 total distinct states at (2025-01-19 16:13:34) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:13:34 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(15) at 2025-01-19 16:13:34: 1.510.623 states generated (1.472.227 s/min), 97.716 distinct states found (94.466 ds/min), 52.332 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 92513 total distinct states at (2025-01-19 16:14:34) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:14:34 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(16) at 2025-01-19 16:14:34: 3.093.230 states generated (1.582.607 s/min), 182.372 distinct states found (84.656 ds/min), 89.855 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 140861 total distinct states at (2025-01-19 16:15:34) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:15:34 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(17) at 2025-01-19 16:15:34: 4.742.508 states generated (1.649.278 s/min), 257.179 distinct states found (74.807 ds/min), 116.314 states left on queue. +@!@!@ENDMSG 2200 @!@!@ +@!@!@STARTMSG 2201:0 @!@!@ +The coverage statistics at 2025-01-19 16:15:34 +@!@!@ENDMSG 2201 @!@!@ +@!@!@STARTMSG 2773:0 @!@!@ +: 1:1 +@!@!@ENDMSG 2773 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 34, col 5 to line 36, col 64 of module fullmesh: 1 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 54:531874 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 40, col 8 to line 40, col 14 of module fullmesh: 1799789 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 8 to line 40, col 9 of module fullmesh: 1267920 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 40, col 13 to line 40, col 14 of module fullmesh: 1267920 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 41, col 8 to line 41, col 72 of module fullmesh: 1377160 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 41, col 8 to line 41, col 38 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 41, col 8 to line 41, col 27 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 41, col 8 to line 41, col 23 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 41, col 25 to line 41, col 26 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 41, col 42 to line 41, col 72 of module fullmesh: 845280 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 45, col 13 to line 47, col 50 of module fullmesh: 531880 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 48, col 8 to line 48, col 51 of module fullmesh: 531878 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 148:156702 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 51, col 8 to line 51, col 72 of module fullmesh: 156716 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 8 to line 51, col 38 of module fullmesh: 1267992 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 51, col 8 to line 51, col 27 of module fullmesh: 1267999 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 51, col 8 to line 51, col 23 of module fullmesh: 1268010 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 51, col 25 to line 51, col 26 of module fullmesh: 1268010 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 51, col 42 to line 51, col 72 of module fullmesh: 1268010 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 52, col 8 to line 52, col 102 of module fullmesh: 156720 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 53, col 8 to line 53, col 51 of module fullmesh: 156716 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 13409:1268009 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 56, col 8 to line 63, col 29 of module fullmesh: 1268023 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 56, col 24 to line 63, col 29 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 56, col 27 to line 56, col 91 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 56, col 27 to line 56, col 58 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 56, col 27 to line 56, col 47 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 56, col 27 to line 56, col 44 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 56, col 27 to line 56, col 41 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 56, col 27 to line 56, col 38 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 56, col 40 to line 56, col 40 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 56, col 46 to line 56, col 46 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 56, col 62 to line 56, col 91 of module fullmesh: 1268028 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 59, col 28 to line 59, col 45 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 59, col 28 to line 59, col 42 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 60, col 31 to line 60, col 91 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 60, col 32 to line 60, col 34 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 60, col 43 to line 60, col 90 of module fullmesh: 793906 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 62, col 17 to line 62, col 54 of module fullmesh: 793908 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 63, col 18 to line 63, col 29 of module fullmesh: 474120 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 64, col 8 to line 64, col 55 of module fullmesh: 1268023 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 130578:2536105 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 72, col 13 to line 74, col 37 of module fullmesh: 2536113 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 72, col 33 to line 74, col 37 of module fullmesh: 2536117 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 72, col 36 to line 72, col 66 of module fullmesh: 2536118 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 72, col 36 to line 72, col 49 of module fullmesh: 2536119 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 72, col 53 to line 72, col 66 of module fullmesh: 2536121 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 72, col 53 to line 72, col 55 of module fullmesh: 2536122 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 69, col 20 to line 69, col 44 of module fullmesh: 2536123 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 69, col 20 to line 69, col 41 of module fullmesh: 2536124 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||||line 69, col 20 to line 69, col 38 of module fullmesh: 2536125 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||||line 69, col 43 to line 69, col 43 of module fullmesh: 2536126 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 73, col 22 to line 73, col 66 of module fullmesh: 818090 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 74, col 22 to line 74, col 37 of module fullmesh: 1718038 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 75, col 8 to line 75, col 51 of module fullmesh: 2536113 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2772:0 @!@!@ +: 113018:250807 +@!@!@ENDMSG 2772 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 85, col 8 to line 85, col 30 of module fullmesh: 532607 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 85, col 8 to line 85, col 25 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 80, col 15 to line 80, col 33 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 82, col 5 to line 82, col 66 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 82, col 26 to line 82, col 65 of module fullmesh: 845394 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 82, col 12 to line 82, col 23 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 85, col 24 to line 85, col 24 of module fullmesh: 281798 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 85, col 29 to line 85, col 30 of module fullmesh: 281800 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 86, col 8 to line 86, col 109 of module fullmesh: 250813 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |line 86, col 28 to line 86, col 109 of module fullmesh: 250815 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 86, col 29 to line 86, col 44 of module fullmesh: 250815 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 86, col 52 to line 86, col 108 of module fullmesh: 250807 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||line 86, col 72 to line 86, col 108 of module fullmesh: 250815 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 86, col 105 to line 86, col 108 of module fullmesh: 250814 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||line 86, col 85 to line 86, col 102 of module fullmesh: 250815 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 80, col 15 to line 80, col 33 of module fullmesh: 250814 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2775:0 @!@!@ + ||||line 82, col 5 to line 82, col 66 of module fullmesh: 250814:250814 +@!@!@ENDMSG 2775 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 82, col 26 to line 82, col 65 of module fullmesh: 752442 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + |||||line 82, col 12 to line 82, col 23 of module fullmesh: 250814 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + ||||line 86, col 101 to line 86, col 101 of module fullmesh: 250814 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2221:0 @!@!@ + line 87, col 8 to line 87, col 51 of module fullmesh: 250807 +@!@!@ENDMSG 2221 @!@!@ +@!@!@STARTMSG 2202:0 @!@!@ +End of statistics. +@!@!@ENDMSG 2202 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/fullmesh.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/fullmesh.tla new file mode 100644 index 0000000000..b010e35f80 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737299744229/fullmesh.tla @@ -0,0 +1,117 @@ +---- MODULE fullmesh ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + + +SkCommit(s1, s2) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +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: \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_1737301172627/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.cfg new file mode 100644 index 0000000000..4963984e72 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.cfg @@ -0,0 +1,51 @@ +\* 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_17373011685892000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_17373011685893000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_17373011685894000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_17373011685895000 +\* SYMMETRY definition +SYMMETRY symm_17373011685896000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_17373011685897000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_17373011685898000 +\* CONSTRAINT definition +CONSTRAINT +constr_17373011685899000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 16:39:28 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.out new file mode 100644 index 0000000000..32aec7b880 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.out @@ -0,0 +1,44 @@ +@!@!@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 71 and seed 2330797625274141225 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 9710] (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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module replicated +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:39:29) +@!@!@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 16:39:31. +@!@!@ENDMSG 2190 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC.tla new file mode 100644 index 0000000000..a2397f5d47 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/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, p2 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +az1, az2, az3 +---- + +\* MV CONSTANT definitions brokers +const_17373011685892000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_17373011685893000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_17373011685894000 == +{p1, p2} +---- + +\* MV CONSTANT definitions azs +const_17373011685895000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_17373011685896000 == +Permutations(const_17373011685892000) \union Permutations(const_17373011685893000) \union Permutations(const_17373011685894000) \union Permutations(const_17373011685895000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_17373011685897000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_17373011685898000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_17373011685899000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 16:39:28 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC_TE.out new file mode 100644 index 0000000000..32aec7b880 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/MC_TE.out @@ -0,0 +1,44 @@ +@!@!@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 71 and seed 2330797625274141225 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 9710] (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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module replicated +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:39:29) +@!@!@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 16:39:31. +@!@!@ENDMSG 2190 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/replicated.tla new file mode 100644 index 0000000000..14910364fe --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301172627/replicated.tla @@ -0,0 +1,117 @@ +---- MODULE replicated ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + + +SkCommit(s1, s2) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +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: \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_1737301223409/MC.cfg b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC.cfg new file mode 100644 index 0000000000..1dcac21267 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC.cfg @@ -0,0 +1,51 @@ +\* 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_17373012151752000 +\* CONSTANT declarations +CONSTANT NULL = NULL +\* MV CONSTANT definitions +CONSTANT +safekeepers <- const_17373012151763000 +\* MV CONSTANT definitions +CONSTANT +pageservers <- const_17373012151764000 +\* MV CONSTANT definitions +CONSTANT +azs <- const_17373012151765000 +\* SYMMETRY definition +SYMMETRY symm_17373012151766000 +\* CONSTANT definitions +CONSTANT +max_commit_lsn <- const_17373012151767000 +\* CONSTANT definitions +CONSTANT +az_mapping <- const_17373012151768000 +\* CONSTRAINT definition +CONSTRAINT +constr_17373012151769000 +\* SPECIFICATION definition +SPECIFICATION +Spec +\* PROPERTY definition +PROPERTY +EventuallyLaggingSkIsNotPreferredSk +\* Generated on Sun Jan 19 16:40:15 CET 2025 \ No newline at end of file diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC.out new file mode 100644 index 0000000000..ab92cbb3d7 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/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 20 and seed 6372772458573668883 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 9898] (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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module replicated +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:40:16) +@!@!@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 16:40:18. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 1217 total distinct states at (2025-01-19 16:40:21) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:40:21 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(11) at 2025-01-19 16:40:21: 39.816 states generated (39.816 s/min), 3.288 distinct states found (3.288 ds/min), 2.067 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC.tla new file mode 100644 index 0000000000..316c6f4df7 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/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, p2 +---- + +\* MV CONSTANT declarations@modelParameterConstants +CONSTANTS +az1, az2, az3 +---- + +\* MV CONSTANT definitions brokers +const_17373012151752000 == +{b1, b2, b3} +---- + +\* MV CONSTANT definitions safekeepers +const_17373012151763000 == +{s1, s2, s3} +---- + +\* MV CONSTANT definitions pageservers +const_17373012151764000 == +{p1, p2} +---- + +\* MV CONSTANT definitions azs +const_17373012151765000 == +{az1, az2, az3} +---- + +\* SYMMETRY definition +symm_17373012151766000 == +Permutations(const_17373012151752000) \union Permutations(const_17373012151763000) \union Permutations(const_17373012151764000) \union Permutations(const_17373012151765000) +---- + +\* CONSTANT definitions @modelParameterConstants:4max_commit_lsn +const_17373012151767000 == +2 +---- + +\* CONSTANT definitions @modelParameterConstants:5az_mapping +const_17373012151768000 == +[ az1 |-> {b1,s1,p1} , az2 |-> {b2,s2,p2} , az3 |-> {b3,s3}] +---- + +\* CONSTRAINT definition @modelParameterContraint:0 +constr_17373012151769000 == +StateConstraint +---- +============================================================================= +\* Modification History +\* Created Sun Jan 19 16:40:15 CET 2025 by cs diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC_TE.out b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC_TE.out new file mode 100644 index 0000000000..ab92cbb3d7 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/MC_TE.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 20 and seed 6372772458573668883 with 4 workers on 8 cores with 2428MB heap and 5460MB offheap memory [pid: 9898] (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/Naturals.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/Sequences.tla +Parsing file /Applications/TLA+ Toolbox.app/Contents/Eclipse/plugins/org.lamport.tlatools_1.0.0.202408081326/tla2sany/StandardModules/FiniteSets.tla +Semantic processing of module Naturals +Semantic processing of module Integers +Semantic processing of module replicated +Semantic processing of module Sequences +Semantic processing of module FiniteSets +Semantic processing of module TLC +Semantic processing of module MC +@!@!@STARTMSG 2219:0 @!@!@ +SANY finished. +@!@!@ENDMSG 2219 @!@!@ +@!@!@STARTMSG 2185:0 @!@!@ +Starting... (2025-01-19 16:40:16) +@!@!@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 16:40:18. +@!@!@ENDMSG 2190 @!@!@ +@!@!@STARTMSG 2192:0 @!@!@ +Checking temporal properties for the current state space with 1217 total distinct states at (2025-01-19 16:40:21) +@!@!@ENDMSG 2192 @!@!@ +@!@!@STARTMSG 2267:0 @!@!@ +Finished checking temporal properties in 00s at 2025-01-19 16:40:21 +@!@!@ENDMSG 2267 @!@!@ +@!@!@STARTMSG 2200:0 @!@!@ +Progress(11) at 2025-01-19 16:40:21: 39.816 states generated (39.816 s/min), 3.288 distinct states found (3.288 ds/min), 2.067 states left on queue. +@!@!@ENDMSG 2200 @!@!@ diff --git a/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/replicated.tla b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/replicated.tla new file mode 100644 index 0000000000..14910364fe --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/Model_1_SnapShot_1737301223409/replicated.tla @@ -0,0 +1,117 @@ +---- MODULE replicated ---- + +EXTENDS Integers + +VARIABLES broker_state, safekeeper_state, pageserver_state + + +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]]] + +Init == + /\ broker_state = [b \in brokers |-> InitBroker] + /\ safekeeper_state = [s \in safekeepers |-> InitSafekeeper] + /\ pageserver_state = [p \in pageservers |-> InitPageserver] + + +SkCommit(s1, s2) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ 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) == + /\ SksWithNewerWal(p) # {} + /\ pageserver_state' = [pageserver_state EXCEPT![p].preferred_sk = CHOOSE s \in SksWithNewerWal(p): TRUE] + /\ UNCHANGED <> + + +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: \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/fullmesh.tla.pmap b/storage_broker/spec/replicated/replicated.toolbox/fullmesh.tla.pmap new file mode 100644 index 0000000000000000000000000000000000000000..a224f42aac997b44e3d9fc155d82d11459306339 GIT binary patch literal 8395 zcmdT}OK6?d7XD9~w24WpO`Dk3w2f_AtI<^3s?`LmwpF92SX$pzAx%$XYCMVQDYl?O z;c^uml!{ISM<1$>6pO-hb)sGyDLNXHqx%}8GYydYi$xC+*(kdA@2^7XrdeIL9ynYZYYZKm zE{bAF_$&&a^N-F%xj`@YbI;+*@!{A1+f)<=*&IZ>s4e!`iuChvx`H=W{S?!bv^Q8 z&yUZ3F*p!3j1rF+|NU?BiHiONRAzws=L;%@$ zx}E;(YvU93P?g)J9<0^3eEjtH>%ZA^k6E2nbnM~c@uDp#2+^CC)g@YX)elO?r|O;}v=3wot@L3Wpwwu?K*!|L}_SgRN&MP5b)uP4JBgocju^?!- z$79n+@V7mn5qDdpdLy-Xmbb)sX9o(=oo$qO=Qv*HQRr+5Qbl}fa`J_f@6M!_1|VX> zzYddJZr}2fYoO5nq=bP-^etiFbHYHfBU)@R%|asw&6!1bvN+mb7%5>8=fVtwEtxQ_ zkrD>{voZ{NFJU?&B@E(Snqd%a!YqrFF!Wbhc-{B`IK#8;?o+#5_5iGmhYy?{|y@>oDK%7*4hge7|EG ztc8+!`+c1`qwv`MzTa{6<2F>kZwM>14GI0f;_I+a3`ym1-ab4Wb2#5*8H`ft`o@#b zdy7jCN0*HI?0iMtCk!`Yyl-h;x>g3se%cQKSJ-k; zfm<+DXn<8Vn4FMh2UY?>1th)a=+2E`_bS>5jR$OV*LmsrINDm zgd-)MZ!c2fvDt*ot@OPd^IqO9O|9H2e19O~_*~KKz^AKv+q~ zO{Ebl2&EMDD$=^<$i+dDRmAyOIUZF&fGT2nA2p_sR|Em>A(jiBlR%&_TQU_VOod|h zo9-&(d53XS`Q(z*^|*M z-ZruzpEjnDBSGM1B1=H9;T*;bH3-|{?}#3LnRY;y6+E=}T5sm$BR1bG4>Q$t5sTc^7 ztfKAe_oE7UPZhDe9~x80EkR(bt)$tKK-i(Ujb$o6F@Unk%Zc*DA?zJq9#zQfm0@Lw zW)bt}_6Tcuhxh3j3M<2zhe-+;T-Av2X4AUN4hPAd$?SL0ECyv3r7CRZ$9<)sga^V;Fl~H-(kG)P;oohOgU=j)g5HRU~3nqeNpPnY+n}Tz1DV% aNa + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737296416956.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737296416956.launch new file mode 100644 index 0000000000..b6473f673b --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737296416956.launch @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737297534393.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737297534393.launch new file mode 100644 index 0000000000..2d71f66906 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737297534393.launch @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737297999722.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737297999722.launch new file mode 100644 index 0000000000..1a09cb6ee5 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737297999722.launch @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299352762.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299352762.launch new file mode 100644 index 0000000000..d7f0f71f05 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299352762.launch @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299381423.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299381423.launch new file mode 100644 index 0000000000..20569969c6 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299381423.launch @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299469039.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299469039.launch new file mode 100644 index 0000000000..66fb925b63 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299469039.launch @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299542008.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299542008.launch new file mode 100644 index 0000000000..971c7c5a63 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299542008.launch @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299744229.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299744229.launch new file mode 100644 index 0000000000..d8b504d669 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737299744229.launch @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737301172627.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737301172627.launch new file mode 100644 index 0000000000..3acafd183d --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737301172627.launch @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737301223409.launch b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737301223409.launch new file mode 100644 index 0000000000..79f0c2c1e8 --- /dev/null +++ b/storage_broker/spec/replicated/replicated.toolbox/replicated___Model_1_SnapShot_1737301223409.launch @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +