// TransactionKey returns a transaction key based on the provided // transaction key and ID. The base key is encoded in order to // guarantee that all transaction records for a range sort together. func TransactionKey(key roachpb.Key, txnID *uuid.UUID) roachpb.Key { rk, err := Addr(key) if err != nil { panic(err) } return MakeRangeKey(rk, localTransactionSuffix, roachpb.RKey(txnID.GetBytes())) }
func fillUUID(b byte) uuid.UUID { var ret uuid.UUID for i := range ret.GetBytes() { ret.UUID[i] = b } return ret }
// assertTS is a helper function for layeredIntervalTestCase // validators. It queries the timestamp cache for the given keys and // reports a test error if it doesn't match the given timestamp and // transaction ID. func assertTS( t *testing.T, tc *timestampCache, start, end roachpb.Key, expectedTS hlc.Timestamp, expectedTxnID *uuid.UUID, ) { var keys string if len(end) == 0 { keys = fmt.Sprintf("%q", start) } else { keys = fmt.Sprintf("%q-%q", start, end) } ts, txnID, _ := tc.GetMaxRead(start, end) if !ts.Equal(expectedTS) { t.Errorf("expected %s to have timestamp %v, found %v", keys, expectedTS, ts) } if expectedTxnID == nil { if txnID != nil { t.Errorf("expected %s to have no txn id, but found %s", keys, txnID.Short()) } } else { if txnID == nil { t.Errorf("expected %s to have txn id %s, but found nil", keys, expectedTxnID.Short()) } else if *txnID != *expectedTxnID { t.Errorf("expected %s to have txn id %s, but found %s", keys, expectedTxnID.Short(), txnID.Short()) } } }
// AbortCacheKey returns a range-local key by Range ID for an // abort cache entry, with detail specified by encoding the // supplied transaction ID. func AbortCacheKey(rangeID roachpb.RangeID, txnID *uuid.UUID) roachpb.Key { key := MakeRangeIDReplicatedKey(rangeID, LocalAbortCacheSuffix, nil) key = encoding.EncodeBytesAscending(key, txnID.GetBytes()) return key }