
# Perform some writes at various sequence numbers.

run stats ok
with t=A
  txn_begin ts=11
  txn_step  seq=10
  put       k=k  v=a
  put       k=k/10 v=10
  txn_step  seq=20
  put       k=k  v=b
  put       k=k/20 v=20
  txn_step  seq=30
  put       k=k  v=c
  put       k=k/30 v=30
  txn_step  seq=40
# Mask a single write.
# The third write should be hidden now.
  txn_ignore_seqs seqs=(25-35)
  resolve_intent k=k
  resolve_intent k=k/10
  resolve_intent k=k/20
  resolve_intent k=k/30
----
>> put k=k v=a t=A
put: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=10 Replicated Intent []}
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+56 live_count=+1 live_bytes=+70 intent_count=+1 intent_bytes=+18 lock_count=+1 lock_age=+89
>> put k=k/10 v=10 t=A
put: lock acquisition = {k/10 id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=10 Replicated Intent []}
stats: key_count=+1 key_bytes=+17 val_count=+1 val_bytes=+57 live_count=+1 live_bytes=+74 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+89
>> put k=k v=b t=A
put: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=20 Replicated Intent []}
stats: val_bytes=+10 live_bytes=+10
>> put k=k/20 v=20 t=A
put: lock acquisition = {k/20 id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=20 Replicated Intent []}
stats: key_count=+1 key_bytes=+17 val_count=+1 val_bytes=+57 live_count=+1 live_bytes=+74 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+89
>> put k=k v=c t=A
put: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30 Replicated Intent []}
stats: val_bytes=+12 live_bytes=+12
>> put k=k/30 v=30 t=A
put: lock acquisition = {k/30 id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30 Replicated Intent []}
stats: key_count=+1 key_bytes=+17 val_count=+1 val_bytes=+57 live_count=+1 live_bytes=+74 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+89
>> resolve_intent k=k t=A
resolve_intent: "k" -> resolved key = true
stats: val_bytes=-72 live_bytes=-72 intent_count=-1 intent_bytes=-18 lock_count=-1 lock_age=-89
>> resolve_intent k=k/10 t=A
resolve_intent: "k/10" -> resolved key = true
stats: val_bytes=-50 live_bytes=-50 intent_count=-1 intent_bytes=-19 lock_count=-1 lock_age=-89
>> resolve_intent k=k/20 t=A
resolve_intent: "k/20" -> resolved key = true
stats: val_bytes=-50 live_bytes=-50 intent_count=-1 intent_bytes=-19 lock_count=-1 lock_age=-89
>> resolve_intent k=k/30 t=A
resolve_intent: "k/30" -> resolved key = true
stats: key_count=-1 key_bytes=-17 val_count=-1 val_bytes=-57 live_count=-1 live_bytes=-74 intent_count=-1 intent_bytes=-19 lock_count=-1 lock_age=-89
>> at end:
txn: "A" meta={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=40} lock=true stat=PENDING rts=11.000000000,0 wto=false gul=0,0 isn=1
data: "k"/11.000000000,0 -> /BYTES/b
data: "k/10"/11.000000000,0 -> /BYTES/10
data: "k/20"/11.000000000,0 -> /BYTES/20
stats: key_count=3 key_bytes=48 val_count=3 val_bytes=20 live_count=3 live_bytes=68

run ok
scan k=k end=-k
get  k=k
----
scan: "k"-"l" -> <no data>
get: "k" -> <no data>

run ok
clear_range k=k end=-k
txn_remove t=A
----
>> at end:
<no data>

run stats ok
with t=A
  txn_begin ts=11
  txn_step  seq=10
  put       k=k  v=a
  put       k=k/10 v=10
  txn_step  seq=20
  put       k=k  v=b
  put       k=k/20 v=20
  txn_step  seq=30
  put       k=k  v=c
  put       k=k/30 v=30
  txn_step  seq=40
# Mask a single write.
# The middle write should be hidden now.
  txn_ignore_seqs seqs=(15-25)
  resolve_intent k=k
  resolve_intent k=k/10
  resolve_intent k=k/20
  resolve_intent k=k/30
----
>> put k=k v=a t=A
put: lock acquisition = {k id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=10 Replicated Intent []}
stats: key_count=+1 key_bytes=+14 val_count=+1 val_bytes=+56 live_count=+1 live_bytes=+70 intent_count=+1 intent_bytes=+18 lock_count=+1 lock_age=+89
>> put k=k/10 v=10 t=A
put: lock acquisition = {k/10 id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=10 Replicated Intent []}
stats: key_count=+1 key_bytes=+17 val_count=+1 val_bytes=+57 live_count=+1 live_bytes=+74 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+89
>> put k=k v=b t=A
put: lock acquisition = {k id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=20 Replicated Intent []}
stats: val_bytes=+10 live_bytes=+10
>> put k=k/20 v=20 t=A
put: lock acquisition = {k/20 id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=20 Replicated Intent []}
stats: key_count=+1 key_bytes=+17 val_count=+1 val_bytes=+57 live_count=+1 live_bytes=+74 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+89
>> put k=k v=c t=A
put: lock acquisition = {k id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30 Replicated Intent []}
stats: val_bytes=+12 live_bytes=+12
>> put k=k/30 v=30 t=A
put: lock acquisition = {k/30 id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=30 Replicated Intent []}
stats: key_count=+1 key_bytes=+17 val_count=+1 val_bytes=+57 live_count=+1 live_bytes=+74 intent_count=+1 intent_bytes=+19 lock_count=+1 lock_age=+89
>> resolve_intent k=k t=A
resolve_intent: "k" -> resolved key = true
stats: val_bytes=-72 live_bytes=-72 intent_count=-1 intent_bytes=-18 lock_count=-1 lock_age=-89
>> resolve_intent k=k/10 t=A
resolve_intent: "k/10" -> resolved key = true
stats: val_bytes=-50 live_bytes=-50 intent_count=-1 intent_bytes=-19 lock_count=-1 lock_age=-89
>> resolve_intent k=k/20 t=A
resolve_intent: "k/20" -> resolved key = true
stats: key_count=-1 key_bytes=-17 val_count=-1 val_bytes=-57 live_count=-1 live_bytes=-74 intent_count=-1 intent_bytes=-19 lock_count=-1 lock_age=-89
>> resolve_intent k=k/30 t=A
resolve_intent: "k/30" -> resolved key = true
stats: val_bytes=-50 live_bytes=-50 intent_count=-1 intent_bytes=-19 lock_count=-1 lock_age=-89
>> at end:
txn: "A" meta={id=00000002 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=11.000000000,0 min=0,0 seq=40} lock=true stat=PENDING rts=11.000000000,0 wto=false gul=0,0 isn=1
data: "k"/11.000000000,0 -> /BYTES/c
data: "k/10"/11.000000000,0 -> /BYTES/10
data: "k/30"/11.000000000,0 -> /BYTES/30
stats: key_count=3 key_bytes=48 val_count=3 val_bytes=20 live_count=3 live_bytes=68

run ok
scan k=k end=-k
get  k=k
----
scan: "k"-"l" -> <no data>
get: "k" -> <no data>


# Commit an intent with a lower epoch than the resolution.
# The intent should be aborted because the new epoch may not write it again.

run ok
with t=B k=b
  txn_begin    ts=12
  txn_step     seq=10
  put          v=a
  txn_step     seq=20
  put          v=b
  check_intent
  get
----
put: lock acquisition = {b id=00000003 key="b" iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=10 Replicated Intent []}
put: lock acquisition = {b id=00000003 key="b" iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=20 Replicated Intent []}
meta: "b" -> txn={id=00000003 key="b" iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=20} ts=12.000000000,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}} mergeTs=<nil> txnDidNotUpdateMeta=false
get: "b" -> /BYTES/b @12.000000000,0
>> at end:
txn: "B" meta={id=00000003 key="b" iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=20} lock=true stat=PENDING rts=12.000000000,0 wto=false gul=0,0
meta: "b"/0,0 -> txn={id=00000003 key="b" iso=Serializable pri=0.00000000 epo=0 ts=12.000000000,0 min=0,0 seq=20} ts=12.000000000,0 del=false klen=12 vlen=6 ih={{10 /BYTES/a}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "b"/12.000000000,0 -> /BYTES/b
data: "k"/11.000000000,0 -> /BYTES/c
data: "k/10"/11.000000000,0 -> /BYTES/10
data: "k/30"/11.000000000,0 -> /BYTES/30


run ok log-ops
with t=B k=b
  txn_restart
  txn_ignore_seqs seqs=(15-25)
  resolve_intent status=COMMITTED
  get
----
resolve_intent: "b" -> resolved key = true
get: "b" -> <no data>
>> at end:
txn: "B" meta={id=00000003 key="b" iso=Serializable pri=0.00000000 epo=1 ts=12.000000000,0 min=0,0 seq=0} lock=true stat=PENDING rts=12.000000000,0 wto=false gul=0,0 isn=1
data: "k"/11.000000000,0 -> /BYTES/c
data: "k/10"/11.000000000,0 -> /BYTES/10
data: "k/30"/11.000000000,0 -> /BYTES/30
logical op: *enginepb.MVCCAbortIntentOp
