You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Tested the following, without nemesis to produce failures:
Register
Tests for single registers, using knossos for linearizability checking. This test contains read/write/cas operations.
Set
Use a compare-and-set transaction to read a set of integers from a single key and append a value to that set
Append
Tests append/read transactions over lists. In order to provide append
transactions, we need to read the current states, then perform a second
transaction to perform all writes (and reads).
Wr
Tests transactional writes and reads to registers using Elle.
Result
Register
Failed once, haven't investigate what happend yet.
Set
Ok
Append
Mostly Failed
Wr
Mostly Failed
Anomalies
The most obvious anomalies I found is txn inconsistencies in append and wr.
After some investigations, I found two basic types of anomalies.
G2-item #0
Let:
T1 = {:index 469, :time 13951607366, :type :ok, :process 3, :f :txn, :value [[:w 7 30] [:r 9 nil] [:w 9 1]]}
T2 = {:index 472, :time 13956078295, :type :ok, :process 5, :f :txn, :value [[:r 9 nil] [:w 9 3] [:r 8 8]]}
Then:
- T1 < T2, because T1 read key 9 = nil, and T2 set it to 3, which came later in the version order.
- However, T2 < T1, because T2 read key 9 = nil, and T1 set it to 1, which came later in the version order: a contradiction!
This is caused by:
When constructing key range for conflict check in command_from_request_wrapper, we have the following code
The code only use compare keys for conflict check, but the child operation keys are not added here, so the command may execute out of order. A fix would be add all keys of that txn to the command.
The operations in a single txn should be executed sequentially. However in Xline, we donot check for conflicts inside a single txn, all commands result are based on the storage state before the txn is exected. This behaviour is inconsistent with etcd. This needs futher discussion. Maybe we could statically check that txn after the compare is completed.
The text was updated successfully, but these errors were encountered:
The operations in a single txn should be executed sequentially. However in Xline, we donot check for conflicts inside a single txn, all commands result are based on the storage state before the txn is exected
The operations in a single txn should be executed sequentially. However in Xline, we donot check for conflicts inside a single txn, all commands result are based on the storage state before the txn is exected
Tests
I partially completed Jepsen tests on Xline, which based on https://github.com/jepsen-io/etcd.
Tested the following, without nemesis to produce failures:
Tests for single registers, using knossos for linearizability checking. This test contains
read/write/cas
operations.Use a compare-and-set transaction to read a set of integers from a single key and append a value to that set
Tests append/read transactions over lists. In order to provide append
transactions, we need to read the current states, then perform a second
transaction to perform all writes (and reads).
Tests transactional writes and reads to registers using Elle.
Result
Failed once, haven't investigate what happend yet.
Ok
Mostly Failed
Mostly Failed
Anomalies
The most obvious anomalies I found is txn inconsistencies in append and wr.
After some investigations, I found two basic types of anomalies.
This is caused by:
When constructing key range for conflict check in
command_from_request_wrapper
, we have the following codeThe code only use compare keys for conflict check, but the child operation keys are not added here, so the command may execute out of order. A fix would be add all keys of that txn to the command.
The operations in a single txn should be executed sequentially. However in Xline, we donot check for conflicts inside a single txn, all commands result are based on the storage state before the txn is exected. This behaviour is inconsistent with etcd. This needs futher discussion. Maybe we could statically check that txn after the compare is completed.
The text was updated successfully, but these errors were encountered: