Skip to content

Commit e7ad7ef

Browse files
committed
tla/storage: add big doubled test
This is the test, I'm going to execute on VM for week. Let's try finding the doubled buckets cases. NO_DOC=tla NO_TEST=tla
1 parent 99c6c51 commit e7ad7ef

File tree

2 files changed

+97
-0
lines changed

2 files changed

+97
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
INIT Init
2+
NEXT Next
3+
4+
CONSTANTS
5+
Storages <- StoragesC
6+
ReplicaSets <- ReplicaSetsC
7+
BucketIds <- BucketIdsC
8+
StorageAssignments <- StorageAssignmentsC
9+
BucketAssignments <- BucketAssignmentsC
10+
MasterAssignments <- MasterAssignmentsC
11+
b1 = b1
12+
b2 = b2
13+
b3 = b3
14+
b4 = b4
15+
16+
SYMMETRY Symmetry
17+
18+
INVARIANTS
19+
NetworkTypeInv
20+
StorageTypeInv
21+
StorageToReplicasetTypeInv
22+
NoActiveSimultaneousInv
23+
24+
CONSTRAINT
25+
SendLimitConstraint
26+
NetworkBoundConstraint
27+
RefConstraint
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
--------------------------- MODULE DoubledBigTest ------------------------------
2+
EXTENDS storage, utils
3+
4+
CONSTANTS b1, b2, b3, b4
5+
6+
StoragesC == {"s1", "s2", "s3", "s4"}
7+
ReplicaSetsC == {"rs1", "rs2", "rs3"}
8+
BucketIdsC == {b1, b2, b3, b4}
9+
StorageAssignmentsC == [rs1 |-> {"s1", "s2"},
10+
rs2 |-> {"s3"},
11+
rs3 |-> {"s4"}]
12+
BucketAssignmentsC == [rs1 |-> {b1},
13+
rs2 |-> {b2},
14+
rs3 |-> {b3, b4}]
15+
MasterAssignmentsC == [rs1 |-> {"s1"},
16+
rs2 |-> {"s3"},
17+
rs3 |-> {"s4"}]
18+
19+
(***************************************************************************)
20+
(* CONSTRAINTS *)
21+
(***************************************************************************)
22+
23+
MAX_TOTAL_SENDS == 3
24+
25+
\* 1. Limit total bucket sends - prevent endless transfers.
26+
SendLimitConstraint ==
27+
LET totalSends ==
28+
SetSum({ storages[i].errinj.bucketSendCount : i \in StoragesC })
29+
IN totalSends =< MAX_TOTAL_SENDS
30+
31+
\* 2. Keep network bounded - avoid message explosion.
32+
NetworkBoundConstraint ==
33+
/\ \A s1, s2 \in StoragesC :
34+
Len(network[s1][s2]) =< 3
35+
/\ \A s \in StoragesC :
36+
/\ storages[s].errinj.networkReorderCount <= 2
37+
/\ storages[s].errinj.networkDropCount <= 2
38+
39+
RefConstraint ==
40+
\A s1 \in StoragesC :
41+
/\ storages[s1].errinj.bucketRWRefCount <= 2
42+
/\ storages[s1].errinj.bucketRORefCount <= 2
43+
/\ storages[s1].errinj.bucketRWUnRefCount <= 2
44+
/\ storages[s1].errinj.bucketROUnRefCount <= 2
45+
46+
(***************************************************************************)
47+
(* SYMMETRY *)
48+
(***************************************************************************)
49+
50+
Symmetry ==
51+
Permutations(BucketIdsC)
52+
53+
(***************************************************************************)
54+
(* STATE INVARIANTS *)
55+
(***************************************************************************)
56+
57+
NoActiveSimultaneousInv ==
58+
\* No bucket can be ACTIVE in storages belonging to different ReplicaSets
59+
\A b \in BucketIds :
60+
\A rs1, rs2 \in ReplicaSets :
61+
rs1 # rs2 =>
62+
~(\E s1, s2 \in Storages :
63+
storageToReplicaset[s1] = rs1 /\
64+
storageToReplicaset[s2] = rs2 /\
65+
storages[s1].status = "master" /\
66+
storages[s2].status = "master" /\
67+
storages[s1].buckets[b].status = "ACTIVE" /\
68+
storages[s2].buckets[b].status = "ACTIVE")
69+
70+
================================================================================

0 commit comments

Comments
 (0)