mirror of
https://github.com/pingcap/tla-plus.git
synced 2024-12-26 12:30:10 +08:00
RaftMerge: rollback and TLC models. (#11)
This commit is contained in:
parent
b66286b0dd
commit
7d1ad5bf38
@ -27,6 +27,10 @@ ASSUME /\ Region = {RegionA, RegionB}
|
|||||||
/\ LeaderA \in Store
|
/\ LeaderA \in Store
|
||||||
/\ LeaderB \in Store
|
/\ LeaderB \in Store
|
||||||
|
|
||||||
|
\* If TRUE, a rollback will be performed in place of merge.
|
||||||
|
CONSTANTS WillPerformRollback
|
||||||
|
ASSUME WillPerformRollback \in BOOLEAN
|
||||||
|
|
||||||
\* The minimum size of servers to be a quorum.
|
\* The minimum size of servers to be a quorum.
|
||||||
\*
|
\*
|
||||||
\* The motivation of adding this constant is that, Raft with 1 leader and 2
|
\* The motivation of adding this constant is that, Raft with 1 leader and 2
|
||||||
@ -57,7 +61,7 @@ VARIABLES messages
|
|||||||
|
|
||||||
\* The data structures in C. MAXS = |Store|.
|
\* The data structures in C. MAXS = |Store|.
|
||||||
\*
|
\*
|
||||||
\* enum Log { LogNormal, LogPreMerge, LogMerge };
|
\* enum Log { LogNormal, LogPreMerge, LogMerge, LogRollback };
|
||||||
\*
|
\*
|
||||||
\* enum RegionState { RegionNormal, RegionTombStone, RegionMerging };
|
\* enum RegionState { RegionNormal, RegionTombStone, RegionMerging };
|
||||||
\*
|
\*
|
||||||
@ -89,7 +93,8 @@ VARIABLES messages
|
|||||||
\* Logs apart from LogNormal are admin logs.
|
\* Logs apart from LogNormal are admin logs.
|
||||||
CONSTANTS LogNormal, \* RegionB only
|
CONSTANTS LogNormal, \* RegionB only
|
||||||
LogPreMerge,
|
LogPreMerge,
|
||||||
LogMerge
|
LogMerge,
|
||||||
|
LogRollback
|
||||||
|
|
||||||
\* Region state types.
|
\* Region state types.
|
||||||
CONSTANTS RegionNormal,
|
CONSTANTS RegionNormal,
|
||||||
@ -230,6 +235,7 @@ InternalRequest(i, r, log) ==
|
|||||||
\* Send merge request to the leader of Region B.
|
\* Send merge request to the leader of Region B.
|
||||||
ProposeMergeRequest(i) ==
|
ProposeMergeRequest(i) ==
|
||||||
/\ raft[i][RegionB].is_leader
|
/\ raft[i][RegionB].is_leader
|
||||||
|
/\ region[i][RegionB] = RegionNormal
|
||||||
/\ \* This request should be sent only once.
|
/\ \* This request should be sent only once.
|
||||||
Len(SelectSeq(raft[i][RegionB].logs, LAMBDA log : log.type = LogPreMerge)) = 0
|
Len(SelectSeq(raft[i][RegionB].logs, LAMBDA log : log.type = LogPreMerge)) = 0
|
||||||
/\ raft' = InternalRequest(
|
/\ raft' = InternalRequest(
|
||||||
@ -239,6 +245,16 @@ ProposeMergeRequest(i) ==
|
|||||||
)
|
)
|
||||||
/\ UNCHANGED <<messages, region, client_vars>>
|
/\ UNCHANGED <<messages, region, client_vars>>
|
||||||
|
|
||||||
|
\* Perform rollback by appending a rollback log on leader B.
|
||||||
|
PerformRollbackRequest(i) ==
|
||||||
|
/\ WillPerformRollback = TRUE
|
||||||
|
/\ raft[i][RegionB].is_leader
|
||||||
|
/\ region[i][RegionB] = RegionMerging
|
||||||
|
/\ \* This log should be appended only once.
|
||||||
|
Len(SelectSeq(raft[i][RegionB].logs, LAMBDA log : log.type = LogRollback)) = 0
|
||||||
|
/\ raft' = InternalRequest(i, RegionB, [type |-> LogRollback])
|
||||||
|
/\ UNCHANGED <<messages, region, client_vars>>
|
||||||
|
|
||||||
\* Return TRUE if there is a log applicable to the state machine.
|
\* Return TRUE if there is a log applicable to the state machine.
|
||||||
\* A log is applicable if it is committed, and the target region is not in
|
\* A log is applicable if it is committed, and the target region is not in
|
||||||
\* TombStone state.
|
\* TombStone state.
|
||||||
@ -308,7 +324,11 @@ ApplyMergeLogStep2(i) ==
|
|||||||
/\ \* Lag logs have been applied.
|
/\ \* Lag logs have been applied.
|
||||||
raft[i][RegionB].apply_index >= commit_index
|
raft[i][RegionB].apply_index >= commit_index
|
||||||
/\ raft' = [raft EXCEPT ![i][RegionA].apply_index = next_index]
|
/\ raft' = [raft EXCEPT ![i][RegionA].apply_index = next_index]
|
||||||
/\ region' = [region EXCEPT ![i][RegionB] = RegionTombStone]
|
/\ IF WillPerformRollback = FALSE
|
||||||
|
THEN
|
||||||
|
region' = [region EXCEPT ![i][RegionB] = RegionTombStone]
|
||||||
|
ELSE
|
||||||
|
UNCHANGED <<region>>
|
||||||
/\ UNCHANGED <<messages, client_vars>>
|
/\ UNCHANGED <<messages, client_vars>>
|
||||||
|
|
||||||
ApplyMergeLog(i) ==
|
ApplyMergeLog(i) ==
|
||||||
@ -320,6 +340,19 @@ ApplyMergeLog(i) ==
|
|||||||
/\ \/ ApplyMergeLogStep1(i)
|
/\ \/ ApplyMergeLogStep1(i)
|
||||||
\/ ApplyMergeLogStep2(i)
|
\/ ApplyMergeLogStep2(i)
|
||||||
|
|
||||||
|
\* Apply LogRollback.
|
||||||
|
\* As we skip all logs after PreMerge log, rollback just marks the state of
|
||||||
|
\* region as normal.
|
||||||
|
ApplyRollbackLog(i) ==
|
||||||
|
LET
|
||||||
|
next_index == raft[i][RegionB].apply_index + 1
|
||||||
|
IN
|
||||||
|
/\ LogAppliable(i, RegionB)
|
||||||
|
/\ raft[i][RegionB].logs[next_index].type = LogRollback
|
||||||
|
/\ raft' = [raft EXCEPT ![i][RegionB].apply_index = next_index]
|
||||||
|
/\ region' = [region EXCEPT ![i][RegionB] = RegionNormal]
|
||||||
|
/\ UNCHANGED <<messages, client_vars>>
|
||||||
|
|
||||||
\* Apply LogNormal.
|
\* Apply LogNormal.
|
||||||
\* This log simply increases apply_index.
|
\* This log simply increases apply_index.
|
||||||
ApplyNormalLog(i, r) ==
|
ApplyNormalLog(i, r) ==
|
||||||
@ -345,6 +378,7 @@ ApplyLog(i) ==
|
|||||||
\/ \E r \in Region : ApplyNormalLog(i, r)
|
\/ \E r \in Region : ApplyNormalLog(i, r)
|
||||||
\/ ApplyPreMergeLog(i)
|
\/ ApplyPreMergeLog(i)
|
||||||
\/ ApplyMergeLog(i)
|
\/ ApplyMergeLog(i)
|
||||||
|
\/ ApplyRollbackLog(i)
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -361,6 +395,7 @@ Next ==
|
|||||||
|
|
||||||
\* Raft merge actions.
|
\* Raft merge actions.
|
||||||
\/ ProposeMergeRequest(LeaderB)
|
\/ ProposeMergeRequest(LeaderB)
|
||||||
|
\/ PerformRollbackRequest(LeaderB)
|
||||||
\/ \E i \in Store : ApplyLog(i)
|
\/ \E i \in Store : ApplyLog(i)
|
||||||
|
|
||||||
Init ==
|
Init ==
|
||||||
@ -397,6 +432,7 @@ LogType ==
|
|||||||
FlatLogType ==
|
FlatLogType ==
|
||||||
[type : {LogNormal}]
|
[type : {LogNormal}]
|
||||||
\cup [type : {LogPreMerge}, min_index : Nat]
|
\cup [type : {LogPreMerge}, min_index : Nat]
|
||||||
|
\cup [type : {LogRollback}]
|
||||||
IN
|
IN
|
||||||
FlatLogType
|
FlatLogType
|
||||||
\cup [type : {LogMerge},
|
\cup [type : {LogMerge},
|
||||||
@ -472,14 +508,16 @@ SimpliedRaftInvariant ==
|
|||||||
\* Some invariants for Raft region merge.
|
\* Some invariants for Raft region merge.
|
||||||
|
|
||||||
\* If a region on two different stores have applied the same logs, they should
|
\* If a region on two different stores have applied the same logs, they should
|
||||||
\* also share the same region state.
|
\* also share the same region state and number of applied normal logs.
|
||||||
RegionApplyInvariant ==
|
RegionApplyInvariant ==
|
||||||
\A i, j \in Store :
|
\A i, j \in Store :
|
||||||
(
|
(
|
||||||
/\ i /= j
|
/\ i /= j
|
||||||
/\ (\A r \in Region : raft[i][r].apply_index = raft[j][r].apply_index)
|
/\ (\A r \in Region : raft[i][r].apply_index = raft[j][r].apply_index)
|
||||||
) =>
|
) =>
|
||||||
\A r \in Region : region[i][r] = region[j][r]
|
\A r \in Region :
|
||||||
|
/\ region[i][r] = region[j][r]
|
||||||
|
/\ raft[i][RegionB].num_applied = raft[j][RegionB].num_applied
|
||||||
|
|
||||||
\* For any two stores of region B, if both done, they should have the same
|
\* For any two stores of region B, if both done, they should have the same
|
||||||
\* number of applied logs.
|
\* number of applied logs.
|
||||||
@ -490,11 +528,7 @@ MergeLogInvariant ==
|
|||||||
/\ region[i][RegionB] = RegionTombStone
|
/\ region[i][RegionB] = RegionTombStone
|
||||||
/\ region[j][RegionB] = RegionTombStone
|
/\ region[j][RegionB] = RegionTombStone
|
||||||
) =>
|
) =>
|
||||||
LET
|
raft[i][RegionB].num_applied = raft[j][RegionB].num_applied
|
||||||
applied_i == raft[i][RegionB].num_applied
|
|
||||||
applied_j == raft[j][RegionB].num_applied
|
|
||||||
IN
|
|
||||||
applied_i = applied_j
|
|
||||||
|
|
||||||
\* Combination of the above invariants.
|
\* Combination of the above invariants.
|
||||||
RaftMergeInvariant ==
|
RaftMergeInvariant ==
|
||||||
|
66
RaftMerge/RaftMerge.toolbox/RaftMerge___Test1.launch
Normal file
66
RaftMerge/RaftMerge.toolbox/RaftMerge___Test1.launch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck">
|
||||||
|
<stringAttribute key="TLCCmdLineParameters" value="-workers 2"/>
|
||||||
|
<stringAttribute key="configurationName" value="Test1"/>
|
||||||
|
<booleanAttribute key="deferLiveness" value="false"/>
|
||||||
|
<intAttribute key="dfidDepth" value="100"/>
|
||||||
|
<booleanAttribute key="dfidMode" value="false"/>
|
||||||
|
<intAttribute key="distributedFPSetCount" value="0"/>
|
||||||
|
<stringAttribute key="distributedNetworkInterface" value="172.17.0.1"/>
|
||||||
|
<intAttribute key="distributedNodesCount" value="1"/>
|
||||||
|
<stringAttribute key="distributedTLC" value="off"/>
|
||||||
|
<stringAttribute key="distributedTLCVMArgs" value=""/>
|
||||||
|
<intAttribute key="fpBits" value="1"/>
|
||||||
|
<intAttribute key="fpIndex" value="1"/>
|
||||||
|
<intAttribute key="maxHeapSize" value="25"/>
|
||||||
|
<intAttribute key="maxSetSize" value="1000000"/>
|
||||||
|
<booleanAttribute key="mcMode" value="true"/>
|
||||||
|
<stringAttribute key="modelBehaviorInit" value=""/>
|
||||||
|
<stringAttribute key="modelBehaviorNext" value=""/>
|
||||||
|
<stringAttribute key="modelBehaviorSpec" value="Spec"/>
|
||||||
|
<intAttribute key="modelBehaviorSpecType" value="1"/>
|
||||||
|
<stringAttribute key="modelBehaviorVars" value="client_requests_index, messages, raft, region"/>
|
||||||
|
<stringAttribute key="modelComments" value=""/>
|
||||||
|
<booleanAttribute key="modelCorrectnessCheckDeadlock" value="true"/>
|
||||||
|
<listAttribute key="modelCorrectnessInvariants">
|
||||||
|
<listEntry value="1TypeInvariant"/>
|
||||||
|
<listEntry value="1SimpliedRaftInvariant"/>
|
||||||
|
<listEntry value="1RaftMergeInvariant"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="modelCorrectnessProperties"/>
|
||||||
|
<stringAttribute key="modelExpressionEval" value=""/>
|
||||||
|
<stringAttribute key="modelParameterActionConstraint" value=""/>
|
||||||
|
<listAttribute key="modelParameterConstants">
|
||||||
|
<listEntry value="LeaderA;;1;0;0"/>
|
||||||
|
<listEntry value="LeaderB;;2;0;0"/>
|
||||||
|
<listEntry value="Store;;{1,2};0;0"/>
|
||||||
|
<listEntry value="RegionA;;RegionA;1;0"/>
|
||||||
|
<listEntry value="RegionB;;RegionB;1;0"/>
|
||||||
|
<listEntry value="AppendEntriesReply;;AppendEntriesReply;1;0"/>
|
||||||
|
<listEntry value="Region;;{RegionA, RegionB};0;0"/>
|
||||||
|
<listEntry value="AppendEntriesRequest;;AppendEntriesRequest;1;0"/>
|
||||||
|
<listEntry value="MaxClientRequests;;2;0;0"/>
|
||||||
|
<listEntry value="QuorumSize;;1;0;0"/>
|
||||||
|
<listEntry value="LogNormal;;LogNormal;1;0"/>
|
||||||
|
<listEntry value="RegionNormal;;RegionNormal;1;0"/>
|
||||||
|
<listEntry value="LogPreMerge;;LogPreMerge;1;0"/>
|
||||||
|
<listEntry value="LogMerge;;LogMerge;1;0"/>
|
||||||
|
<listEntry value="RegionMerging;;RegionMerging;1;0"/>
|
||||||
|
<listEntry value="RegionTombStone;;RegionTombStone;1;0"/>
|
||||||
|
<listEntry value="LogRollback;;LogRollback;1;0"/>
|
||||||
|
<listEntry value="WillPerformRollback;;FALSE;0;0"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="modelParameterContraint" value=""/>
|
||||||
|
<listAttribute key="modelParameterDefinitions"/>
|
||||||
|
<stringAttribute key="modelParameterModelValues" value="{}"/>
|
||||||
|
<stringAttribute key="modelParameterNewDefinitions" value=""/>
|
||||||
|
<intAttribute key="numberOfWorkers" value="2"/>
|
||||||
|
<booleanAttribute key="recover" value="false"/>
|
||||||
|
<stringAttribute key="result.mail.address" value=""/>
|
||||||
|
<intAttribute key="simuAril" value="-1"/>
|
||||||
|
<intAttribute key="simuDepth" value="100"/>
|
||||||
|
<intAttribute key="simuSeed" value="-1"/>
|
||||||
|
<stringAttribute key="specName" value="RaftMerge"/>
|
||||||
|
<stringAttribute key="view" value=""/>
|
||||||
|
<booleanAttribute key="visualizeStateGraph" value="false"/>
|
||||||
|
</launchConfiguration>
|
66
RaftMerge/RaftMerge.toolbox/RaftMerge___Test2.launch
Normal file
66
RaftMerge/RaftMerge.toolbox/RaftMerge___Test2.launch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck">
|
||||||
|
<stringAttribute key="TLCCmdLineParameters" value="-workers 2"/>
|
||||||
|
<stringAttribute key="configurationName" value="Test2"/>
|
||||||
|
<booleanAttribute key="deferLiveness" value="false"/>
|
||||||
|
<intAttribute key="dfidDepth" value="100"/>
|
||||||
|
<booleanAttribute key="dfidMode" value="false"/>
|
||||||
|
<intAttribute key="distributedFPSetCount" value="0"/>
|
||||||
|
<stringAttribute key="distributedNetworkInterface" value="172.17.0.1"/>
|
||||||
|
<intAttribute key="distributedNodesCount" value="1"/>
|
||||||
|
<stringAttribute key="distributedTLC" value="off"/>
|
||||||
|
<stringAttribute key="distributedTLCVMArgs" value=""/>
|
||||||
|
<intAttribute key="fpBits" value="1"/>
|
||||||
|
<intAttribute key="fpIndex" value="1"/>
|
||||||
|
<intAttribute key="maxHeapSize" value="25"/>
|
||||||
|
<intAttribute key="maxSetSize" value="1000000"/>
|
||||||
|
<booleanAttribute key="mcMode" value="true"/>
|
||||||
|
<stringAttribute key="modelBehaviorInit" value=""/>
|
||||||
|
<stringAttribute key="modelBehaviorNext" value=""/>
|
||||||
|
<stringAttribute key="modelBehaviorSpec" value="Spec"/>
|
||||||
|
<intAttribute key="modelBehaviorSpecType" value="1"/>
|
||||||
|
<stringAttribute key="modelBehaviorVars" value="client_requests_index, messages, raft, region"/>
|
||||||
|
<stringAttribute key="modelComments" value=""/>
|
||||||
|
<booleanAttribute key="modelCorrectnessCheckDeadlock" value="true"/>
|
||||||
|
<listAttribute key="modelCorrectnessInvariants">
|
||||||
|
<listEntry value="1TypeInvariant"/>
|
||||||
|
<listEntry value="1SimpliedRaftInvariant"/>
|
||||||
|
<listEntry value="1RaftMergeInvariant"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="modelCorrectnessProperties"/>
|
||||||
|
<stringAttribute key="modelExpressionEval" value=""/>
|
||||||
|
<stringAttribute key="modelParameterActionConstraint" value=""/>
|
||||||
|
<listAttribute key="modelParameterConstants">
|
||||||
|
<listEntry value="LeaderA;;1;0;0"/>
|
||||||
|
<listEntry value="LeaderB;;1;0;0"/>
|
||||||
|
<listEntry value="Store;;{1,2};0;0"/>
|
||||||
|
<listEntry value="RegionA;;RegionA;1;0"/>
|
||||||
|
<listEntry value="RegionB;;RegionB;1;0"/>
|
||||||
|
<listEntry value="AppendEntriesReply;;AppendEntriesReply;1;0"/>
|
||||||
|
<listEntry value="Region;;{RegionA, RegionB};0;0"/>
|
||||||
|
<listEntry value="AppendEntriesRequest;;AppendEntriesRequest;1;0"/>
|
||||||
|
<listEntry value="MaxClientRequests;;2;0;0"/>
|
||||||
|
<listEntry value="QuorumSize;;1;0;0"/>
|
||||||
|
<listEntry value="LogNormal;;LogNormal;1;0"/>
|
||||||
|
<listEntry value="RegionNormal;;RegionNormal;1;0"/>
|
||||||
|
<listEntry value="LogPreMerge;;LogPreMerge;1;0"/>
|
||||||
|
<listEntry value="LogMerge;;LogMerge;1;0"/>
|
||||||
|
<listEntry value="RegionMerging;;RegionMerging;1;0"/>
|
||||||
|
<listEntry value="RegionTombStone;;RegionTombStone;1;0"/>
|
||||||
|
<listEntry value="LogRollback;;LogRollback;1;0"/>
|
||||||
|
<listEntry value="WillPerformRollback;;FALSE;0;0"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="modelParameterContraint" value=""/>
|
||||||
|
<listAttribute key="modelParameterDefinitions"/>
|
||||||
|
<stringAttribute key="modelParameterModelValues" value="{}"/>
|
||||||
|
<stringAttribute key="modelParameterNewDefinitions" value=""/>
|
||||||
|
<intAttribute key="numberOfWorkers" value="2"/>
|
||||||
|
<booleanAttribute key="recover" value="false"/>
|
||||||
|
<stringAttribute key="result.mail.address" value=""/>
|
||||||
|
<intAttribute key="simuAril" value="-1"/>
|
||||||
|
<intAttribute key="simuDepth" value="100"/>
|
||||||
|
<intAttribute key="simuSeed" value="-1"/>
|
||||||
|
<stringAttribute key="specName" value="RaftMerge"/>
|
||||||
|
<stringAttribute key="view" value=""/>
|
||||||
|
<booleanAttribute key="visualizeStateGraph" value="false"/>
|
||||||
|
</launchConfiguration>
|
66
RaftMerge/RaftMerge.toolbox/RaftMerge___Test3.launch
Normal file
66
RaftMerge/RaftMerge.toolbox/RaftMerge___Test3.launch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck">
|
||||||
|
<stringAttribute key="TLCCmdLineParameters" value="-workers 2"/>
|
||||||
|
<stringAttribute key="configurationName" value="Test3"/>
|
||||||
|
<booleanAttribute key="deferLiveness" value="false"/>
|
||||||
|
<intAttribute key="dfidDepth" value="100"/>
|
||||||
|
<booleanAttribute key="dfidMode" value="false"/>
|
||||||
|
<intAttribute key="distributedFPSetCount" value="0"/>
|
||||||
|
<stringAttribute key="distributedNetworkInterface" value="172.17.0.1"/>
|
||||||
|
<intAttribute key="distributedNodesCount" value="1"/>
|
||||||
|
<stringAttribute key="distributedTLC" value="off"/>
|
||||||
|
<stringAttribute key="distributedTLCVMArgs" value=""/>
|
||||||
|
<intAttribute key="fpBits" value="1"/>
|
||||||
|
<intAttribute key="fpIndex" value="1"/>
|
||||||
|
<intAttribute key="maxHeapSize" value="25"/>
|
||||||
|
<intAttribute key="maxSetSize" value="1000000"/>
|
||||||
|
<booleanAttribute key="mcMode" value="true"/>
|
||||||
|
<stringAttribute key="modelBehaviorInit" value=""/>
|
||||||
|
<stringAttribute key="modelBehaviorNext" value=""/>
|
||||||
|
<stringAttribute key="modelBehaviorSpec" value="Spec"/>
|
||||||
|
<intAttribute key="modelBehaviorSpecType" value="1"/>
|
||||||
|
<stringAttribute key="modelBehaviorVars" value="client_requests_index, messages, raft, region"/>
|
||||||
|
<stringAttribute key="modelComments" value=""/>
|
||||||
|
<booleanAttribute key="modelCorrectnessCheckDeadlock" value="true"/>
|
||||||
|
<listAttribute key="modelCorrectnessInvariants">
|
||||||
|
<listEntry value="1TypeInvariant"/>
|
||||||
|
<listEntry value="1SimpliedRaftInvariant"/>
|
||||||
|
<listEntry value="1RaftMergeInvariant"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="modelCorrectnessProperties"/>
|
||||||
|
<stringAttribute key="modelExpressionEval" value=""/>
|
||||||
|
<stringAttribute key="modelParameterActionConstraint" value=""/>
|
||||||
|
<listAttribute key="modelParameterConstants">
|
||||||
|
<listEntry value="LeaderA;;1;0;0"/>
|
||||||
|
<listEntry value="LeaderB;;2;0;0"/>
|
||||||
|
<listEntry value="Store;;{1,2};0;0"/>
|
||||||
|
<listEntry value="RegionA;;RegionA;1;0"/>
|
||||||
|
<listEntry value="RegionB;;RegionB;1;0"/>
|
||||||
|
<listEntry value="AppendEntriesReply;;AppendEntriesReply;1;0"/>
|
||||||
|
<listEntry value="Region;;{RegionA, RegionB};0;0"/>
|
||||||
|
<listEntry value="AppendEntriesRequest;;AppendEntriesRequest;1;0"/>
|
||||||
|
<listEntry value="MaxClientRequests;;2;0;0"/>
|
||||||
|
<listEntry value="QuorumSize;;1;0;0"/>
|
||||||
|
<listEntry value="LogNormal;;LogNormal;1;0"/>
|
||||||
|
<listEntry value="RegionNormal;;RegionNormal;1;0"/>
|
||||||
|
<listEntry value="LogPreMerge;;LogPreMerge;1;0"/>
|
||||||
|
<listEntry value="LogMerge;;LogMerge;1;0"/>
|
||||||
|
<listEntry value="RegionMerging;;RegionMerging;1;0"/>
|
||||||
|
<listEntry value="RegionTombStone;;RegionTombStone;1;0"/>
|
||||||
|
<listEntry value="LogRollback;;LogRollback;1;0"/>
|
||||||
|
<listEntry value="WillPerformRollback;;TRUE;0;0"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="modelParameterContraint" value=""/>
|
||||||
|
<listAttribute key="modelParameterDefinitions"/>
|
||||||
|
<stringAttribute key="modelParameterModelValues" value="{}"/>
|
||||||
|
<stringAttribute key="modelParameterNewDefinitions" value=""/>
|
||||||
|
<intAttribute key="numberOfWorkers" value="2"/>
|
||||||
|
<booleanAttribute key="recover" value="false"/>
|
||||||
|
<stringAttribute key="result.mail.address" value=""/>
|
||||||
|
<intAttribute key="simuAril" value="-1"/>
|
||||||
|
<intAttribute key="simuDepth" value="100"/>
|
||||||
|
<intAttribute key="simuSeed" value="-1"/>
|
||||||
|
<stringAttribute key="specName" value="RaftMerge"/>
|
||||||
|
<stringAttribute key="view" value=""/>
|
||||||
|
<booleanAttribute key="visualizeStateGraph" value="false"/>
|
||||||
|
</launchConfiguration>
|
66
RaftMerge/RaftMerge.toolbox/RaftMerge___Test4.launch
Normal file
66
RaftMerge/RaftMerge.toolbox/RaftMerge___Test4.launch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<launchConfiguration type="org.lamport.tla.toolbox.tool.tlc.modelCheck">
|
||||||
|
<stringAttribute key="TLCCmdLineParameters" value="-workers 2"/>
|
||||||
|
<stringAttribute key="configurationName" value="Test4"/>
|
||||||
|
<booleanAttribute key="deferLiveness" value="false"/>
|
||||||
|
<intAttribute key="dfidDepth" value="100"/>
|
||||||
|
<booleanAttribute key="dfidMode" value="false"/>
|
||||||
|
<intAttribute key="distributedFPSetCount" value="0"/>
|
||||||
|
<stringAttribute key="distributedNetworkInterface" value="172.17.0.1"/>
|
||||||
|
<intAttribute key="distributedNodesCount" value="1"/>
|
||||||
|
<stringAttribute key="distributedTLC" value="off"/>
|
||||||
|
<stringAttribute key="distributedTLCVMArgs" value=""/>
|
||||||
|
<intAttribute key="fpBits" value="1"/>
|
||||||
|
<intAttribute key="fpIndex" value="1"/>
|
||||||
|
<intAttribute key="maxHeapSize" value="25"/>
|
||||||
|
<intAttribute key="maxSetSize" value="1000000"/>
|
||||||
|
<booleanAttribute key="mcMode" value="true"/>
|
||||||
|
<stringAttribute key="modelBehaviorInit" value=""/>
|
||||||
|
<stringAttribute key="modelBehaviorNext" value=""/>
|
||||||
|
<stringAttribute key="modelBehaviorSpec" value="Spec"/>
|
||||||
|
<intAttribute key="modelBehaviorSpecType" value="1"/>
|
||||||
|
<stringAttribute key="modelBehaviorVars" value="client_requests_index, messages, raft, region"/>
|
||||||
|
<stringAttribute key="modelComments" value=""/>
|
||||||
|
<booleanAttribute key="modelCorrectnessCheckDeadlock" value="true"/>
|
||||||
|
<listAttribute key="modelCorrectnessInvariants">
|
||||||
|
<listEntry value="1TypeInvariant"/>
|
||||||
|
<listEntry value="1SimpliedRaftInvariant"/>
|
||||||
|
<listEntry value="1RaftMergeInvariant"/>
|
||||||
|
</listAttribute>
|
||||||
|
<listAttribute key="modelCorrectnessProperties"/>
|
||||||
|
<stringAttribute key="modelExpressionEval" value=""/>
|
||||||
|
<stringAttribute key="modelParameterActionConstraint" value=""/>
|
||||||
|
<listAttribute key="modelParameterConstants">
|
||||||
|
<listEntry value="LeaderA;;1;0;0"/>
|
||||||
|
<listEntry value="LeaderB;;1;0;0"/>
|
||||||
|
<listEntry value="Store;;{1,2};0;0"/>
|
||||||
|
<listEntry value="RegionA;;RegionA;1;0"/>
|
||||||
|
<listEntry value="RegionB;;RegionB;1;0"/>
|
||||||
|
<listEntry value="AppendEntriesReply;;AppendEntriesReply;1;0"/>
|
||||||
|
<listEntry value="Region;;{RegionA, RegionB};0;0"/>
|
||||||
|
<listEntry value="AppendEntriesRequest;;AppendEntriesRequest;1;0"/>
|
||||||
|
<listEntry value="MaxClientRequests;;2;0;0"/>
|
||||||
|
<listEntry value="QuorumSize;;1;0;0"/>
|
||||||
|
<listEntry value="LogNormal;;LogNormal;1;0"/>
|
||||||
|
<listEntry value="RegionNormal;;RegionNormal;1;0"/>
|
||||||
|
<listEntry value="LogPreMerge;;LogPreMerge;1;0"/>
|
||||||
|
<listEntry value="LogMerge;;LogMerge;1;0"/>
|
||||||
|
<listEntry value="RegionMerging;;RegionMerging;1;0"/>
|
||||||
|
<listEntry value="RegionTombStone;;RegionTombStone;1;0"/>
|
||||||
|
<listEntry value="LogRollback;;LogRollback;1;0"/>
|
||||||
|
<listEntry value="WillPerformRollback;;TRUE;0;0"/>
|
||||||
|
</listAttribute>
|
||||||
|
<stringAttribute key="modelParameterContraint" value=""/>
|
||||||
|
<listAttribute key="modelParameterDefinitions"/>
|
||||||
|
<stringAttribute key="modelParameterModelValues" value="{}"/>
|
||||||
|
<stringAttribute key="modelParameterNewDefinitions" value=""/>
|
||||||
|
<intAttribute key="numberOfWorkers" value="2"/>
|
||||||
|
<booleanAttribute key="recover" value="false"/>
|
||||||
|
<stringAttribute key="result.mail.address" value=""/>
|
||||||
|
<intAttribute key="simuAril" value="-1"/>
|
||||||
|
<intAttribute key="simuDepth" value="100"/>
|
||||||
|
<intAttribute key="simuSeed" value="-1"/>
|
||||||
|
<stringAttribute key="specName" value="RaftMerge"/>
|
||||||
|
<stringAttribute key="view" value=""/>
|
||||||
|
<booleanAttribute key="visualizeStateGraph" value="false"/>
|
||||||
|
</launchConfiguration>
|
31
RaftMerge/Test1.cfg
Normal file
31
RaftMerge/Test1.cfg
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
CONSTANT
|
||||||
|
AppendEntriesReply = AppendEntriesReply
|
||||||
|
AppendEntriesRequest = AppendEntriesRequest
|
||||||
|
|
||||||
|
LogMerge = LogMerge
|
||||||
|
LogNormal = LogNormal
|
||||||
|
LogPreMerge = LogPreMerge
|
||||||
|
LogRollback = LogRollback
|
||||||
|
|
||||||
|
RegionA = RegionA
|
||||||
|
RegionB = RegionB
|
||||||
|
|
||||||
|
RegionMerging = RegionMerging
|
||||||
|
RegionNormal = RegionNormal
|
||||||
|
RegionTombStone = RegionTombStone
|
||||||
|
|
||||||
|
Region = {RegionA, RegionB}
|
||||||
|
LeaderA = 1
|
||||||
|
LeaderB = 2
|
||||||
|
MaxClientRequests = 2
|
||||||
|
QuorumSize = 1
|
||||||
|
Store = {1, 2}
|
||||||
|
WillPerformRollback = FALSE
|
||||||
|
|
||||||
|
SPECIFICATION
|
||||||
|
Spec
|
||||||
|
|
||||||
|
INVARIANT
|
||||||
|
TypeInvariant
|
||||||
|
SimpliedRaftInvariant
|
||||||
|
RaftMergeInvariant
|
31
RaftMerge/Test2.cfg
Normal file
31
RaftMerge/Test2.cfg
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
CONSTANT
|
||||||
|
AppendEntriesReply = AppendEntriesReply
|
||||||
|
AppendEntriesRequest = AppendEntriesRequest
|
||||||
|
|
||||||
|
LogMerge = LogMerge
|
||||||
|
LogNormal = LogNormal
|
||||||
|
LogPreMerge = LogPreMerge
|
||||||
|
LogRollback = LogRollback
|
||||||
|
|
||||||
|
RegionA = RegionA
|
||||||
|
RegionB = RegionB
|
||||||
|
|
||||||
|
RegionMerging = RegionMerging
|
||||||
|
RegionNormal = RegionNormal
|
||||||
|
RegionTombStone = RegionTombStone
|
||||||
|
|
||||||
|
Region = {RegionA, RegionB}
|
||||||
|
LeaderA = 1
|
||||||
|
LeaderB = 1
|
||||||
|
MaxClientRequests = 2
|
||||||
|
QuorumSize = 1
|
||||||
|
Store = {1, 2}
|
||||||
|
WillPerformRollback = FALSE
|
||||||
|
|
||||||
|
SPECIFICATION
|
||||||
|
Spec
|
||||||
|
|
||||||
|
INVARIANT
|
||||||
|
TypeInvariant
|
||||||
|
SimpliedRaftInvariant
|
||||||
|
RaftMergeInvariant
|
31
RaftMerge/Test3.cfg
Normal file
31
RaftMerge/Test3.cfg
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
CONSTANT
|
||||||
|
AppendEntriesReply = AppendEntriesReply
|
||||||
|
AppendEntriesRequest = AppendEntriesRequest
|
||||||
|
|
||||||
|
LogMerge = LogMerge
|
||||||
|
LogNormal = LogNormal
|
||||||
|
LogPreMerge = LogPreMerge
|
||||||
|
LogRollback = LogRollback
|
||||||
|
|
||||||
|
RegionA = RegionA
|
||||||
|
RegionB = RegionB
|
||||||
|
|
||||||
|
RegionMerging = RegionMerging
|
||||||
|
RegionNormal = RegionNormal
|
||||||
|
RegionTombStone = RegionTombStone
|
||||||
|
|
||||||
|
Region = {RegionA, RegionB}
|
||||||
|
LeaderA = 1
|
||||||
|
LeaderB = 2
|
||||||
|
MaxClientRequests = 2
|
||||||
|
QuorumSize = 1
|
||||||
|
Store = {1, 2}
|
||||||
|
WillPerformRollback = TRUE
|
||||||
|
|
||||||
|
SPECIFICATION
|
||||||
|
Spec
|
||||||
|
|
||||||
|
INVARIANT
|
||||||
|
TypeInvariant
|
||||||
|
SimpliedRaftInvariant
|
||||||
|
RaftMergeInvariant
|
31
RaftMerge/Test4.cfg
Normal file
31
RaftMerge/Test4.cfg
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
CONSTANT
|
||||||
|
AppendEntriesReply = AppendEntriesReply
|
||||||
|
AppendEntriesRequest = AppendEntriesRequest
|
||||||
|
|
||||||
|
LogMerge = LogMerge
|
||||||
|
LogNormal = LogNormal
|
||||||
|
LogPreMerge = LogPreMerge
|
||||||
|
LogRollback = LogRollback
|
||||||
|
|
||||||
|
RegionA = RegionA
|
||||||
|
RegionB = RegionB
|
||||||
|
|
||||||
|
RegionMerging = RegionMerging
|
||||||
|
RegionNormal = RegionNormal
|
||||||
|
RegionTombStone = RegionTombStone
|
||||||
|
|
||||||
|
Region = {RegionA, RegionB}
|
||||||
|
LeaderA = 1
|
||||||
|
LeaderB = 1
|
||||||
|
MaxClientRequests = 2
|
||||||
|
QuorumSize = 1
|
||||||
|
Store = {1, 2}
|
||||||
|
WillPerformRollback = TRUE
|
||||||
|
|
||||||
|
SPECIFICATION
|
||||||
|
Spec
|
||||||
|
|
||||||
|
INVARIANT
|
||||||
|
TypeInvariant
|
||||||
|
SimpliedRaftInvariant
|
||||||
|
RaftMergeInvariant
|
Loading…
Reference in New Issue
Block a user