-
Notifications
You must be signed in to change notification settings - Fork 642
Closed
Description
Using the latest version of scylla on docker, I have the following code:
b := tx.session.NewBatch(gocql.UnloggedBatch)
for key, val := range tx.pendingWrites {
// Write rowLock and data to primary key
lock := rowLock{
PrimaryLockKey: tx.primaryLockKey,
StartTs: tx.readTime.UnixNano(),
TimeoutTs: tx.readTime.Add(time.Second * 5).UnixNano(),
}
encodedLock, err := lock.Encode()
if err != nil {
return fmt.Errorf("error in rowLock.Encode: %w", err)
}
// Insert the lock
b.Entries = append(b.Entries, gocql.BatchEntry{
Stmt: fmt.Sprintf("insert into \"%s\" (key, ts, col, val) values (?, 0, 'l', ?) if not exists", tx.table),
Args: []any{key, []byte(encodedLock)},
})
// Insert the data record
b.Entries = append(b.Entries, gocql.BatchEntry{
Stmt: fmt.Sprintf("insert into \"%s\" (key, ts, col, val) values (?, ?, 'd', ?) if not exists", tx.table),
Args: []any{key, tx.readTime.UnixNano(), val},
})
}
// Non-map version was always having applied: false
applied, _, err := tx.session.MapExecuteBatchCAS(b, make(map[string]interface{}))
if err != nil {
return fmt.Errorf("error in MapExecuteBatchCAS: %w", err)
}
if !applied {
return fmt.Errorf("%w: prewrite not applied (confict)", &TxnAborted{})
}When using ExecuteBatchCAS(b), the applied return would always be false, but when using MapExecuteBatchCAS(b, make(map[string]interface{})) (despite not actaully binding to anything), applied would be true.
Why is this? My understand is that it si a difference of binding only.
Metadata
Metadata
Assignees
Labels
No labels