# Tests a scenario where a put operation of an older timestamp comes
# after a put operation of a newer timestamp. The timestamp of the
# resulting intent remains equal to the higher timestamp - it does not
# regress.

run stats ok
with t=A
  txn_begin   ts=1
  txn_advance ts=2,1
  put         ts=1 k=k v=v
----
>> put ts=1 k=k v=v t=A
put: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=2.000000000,1 min=0,0 seq=0 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=+98
>> at end:
txn: "A" meta={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=2.000000000,1 min=0,0 seq=0} lock=true stat=PENDING rts=1.000000000,0 wto=false gul=0,0
meta: "k"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=2.000000000,1 min=0,0 seq=0} ts=2.000000000,1 del=false klen=12 vlen=6 mergeTs=<nil> txnDidNotUpdateMeta=true
data: "k"/2.000000000,1 -> /BYTES/v
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=98

# Put operation with earlier wall time. Will NOT be ignored.
run stats ok
with t=A
  txn_step
  txn_advance ts=1
  put         ts=1 k=k v=v2
----
>> put ts=1 k=k v=v2 t=A
put: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=2.000000000,1 min=0,0 seq=1 Replicated Intent []}
stats: val_bytes=+13 live_bytes=+13 intent_bytes=+1
>> at end:
txn: "A" meta={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=1.000000000,0 min=0,0 seq=1} lock=true stat=PENDING rts=1.000000000,0 wto=false gul=0,0
meta: "k"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=2.000000000,1 min=0,0 seq=1} ts=2.000000000,1 del=false klen=12 vlen=7 ih={{0 /BYTES/v}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "k"/2.000000000,1 -> /BYTES/v2
stats: key_count=1 key_bytes=14 val_count=1 val_bytes=69 live_count=1 live_bytes=83 intent_count=1 intent_bytes=19 lock_count=1 lock_age=98

# We're expecting v2 here.

run ok
with t=A
  get ts=3 k=k
----
get: "k" -> /BYTES/v2 @2.000000000,1

# Another put operation with earlier logical time. Will NOT be ignored.

run stats ok
with t=A
  txn_step
  put ts=1 k=k v=v2
----
>> put ts=1 k=k v=v2 t=A
put: lock acquisition = {k id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=2.000000000,1 min=0,0 seq=2 Replicated Intent []}
stats: val_bytes=+13 live_bytes=+13
>> at end:
txn: "A" meta={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=1.000000000,0 min=0,0 seq=2} lock=true stat=PENDING rts=1.000000000,0 wto=false gul=0,0
meta: "k"/0,0 -> txn={id=00000001 key=/Min iso=Serializable pri=0.00000000 epo=0 ts=2.000000000,1 min=0,0 seq=2} ts=2.000000000,1 del=false klen=12 vlen=7 ih={{0 /BYTES/v}{1 /BYTES/v2}} mergeTs=<nil> txnDidNotUpdateMeta=false
data: "k"/2.000000000,1 -> /BYTES/v2
stats: key_count=1 key_bytes=14 val_count=1 val_bytes=82 live_count=1 live_bytes=96 intent_count=1 intent_bytes=19 lock_count=1 lock_age=98

# We're expecting v2 here.

run ok
with t=A
  get ts=3 k=k
----
get: "k" -> /BYTES/v2 @2.000000000,1
