// String formats transaction into human readable string. func (t Transaction) String() string { // Compute priority as a floating point number from 0-100 for readability. floatPri := 100 * float64(t.Priority) / float64(math.MaxInt32) if len(t.Name) > 0 { return fmt.Sprintf("%q id=%s key=%s pri=%.8f iso=%s stat=%s epo=%d ts=%s orig=%s max=%s", t.Name, uuid.UUID(t.ID).Short(), t.Key, floatPri, t.Isolation, t.Status, t.Epoch, t.Timestamp, t.OrigTimestamp, t.MaxTimestamp) } return fmt.Sprintf("id=%s key=%s pri=%.8f iso=%s stat=%s epo=%d ts=%s orig=%s max=%s", uuid.UUID(t.ID).Short(), t.Key, floatPri, t.Isolation, t.Status, t.Epoch, t.Timestamp, t.OrigTimestamp, t.MaxTimestamp) }
// TraceID implements tracer.Traceable. For a nontrivial Transaction, it // returns 't', followed by the transaction ID. Otherwise, the empty string is // returned. func (t *Transaction) TraceID() string { if t == nil || len(t.ID) == 0 { return "" } s := uuid.UUID(t.ID).String() return "t" + s }
func TestUUIDString(t *testing.T) { uuid := uuid.UUID([]byte("ת\x0f^\xe4-Fؽ\xf7\x16\xe4\xf9\xbe^\xbe")) expStr := "d7aa0f5e-e42d-46d8-bdf7-16e4f9be5ebe" if str := uuid.String(); str != expStr { t.Errorf("expected txn %s; got %s", expStr, str) } }
// String formats transaction into human readable string. func (t Transaction) String() string { var buf bytes.Buffer // Compute priority as a floating point number from 0-100 for readability. floatPri := 100 * float64(t.Priority) / float64(math.MaxInt32) if len(t.Name) > 0 { fmt.Fprintf(&buf, "%q ", t.Name) } fmt.Fprintf(&buf, "id=%s key=%s rw=%t pri=%.8f iso=%s stat=%s epo=%d ts=%s orig=%s max=%s", uuid.UUID(t.ID).Short(), t.Key, t.Writing, floatPri, t.Isolation, t.Status, t.Epoch, t.Timestamp, t.OrigTimestamp, t.MaxTimestamp) return buf.String() }
// Short returns the short form of the Transaction's UUID. func (t Transaction) Short() string { return uuid.UUID(t.ID).Short() }
// Short returns the short form of the Transaction's UUID. func (t *Transaction) Short() string { return uuid.UUID(t.GetID()).Short() }
func init() { incR := roachpb.IncrementResponse{ NewValue: 1, } batchR.Add(&incR) } // createTestSequenceCache creates an in-memory engine and // returns a sequence cache using the supplied Range ID. func createTestSequenceCache(t *testing.T, rangeID roachpb.RangeID, stopper *stop.Stopper) (*SequenceCache, engine.Engine) { return NewSequenceCache(rangeID), engine.NewInMem(roachpb.Attributes{}, 1<<20, stopper) } const testTxnEpoch = 5 var testTxnID = uuid.UUID([]byte("0ce61c17-5eb4-4587-8c36-dcf4062ada4c")) var testTxnKey = []byte("a") var testTxnTimestamp = roachpb.ZeroTimestamp.Add(123, 456) var testEntry = roachpb.SequenceCacheEntry{Key: testTxnKey, Timestamp: testTxnTimestamp} func TestSequenceCacheEncodeDecode(t *testing.T) { defer leaktest.AfterTest(t) const rangeID = 123 const expSeq = 987 key := keys.SequenceCacheKey(rangeID, testTxnID, testTxnEpoch, expSeq) id, epoch, seq, err := decodeSequenceCacheKey(key, nil) if err != nil { t.Fatal(err) } if !bytes.Equal(id, testTxnID) { t.Fatalf("expected id %q, got %q", testTxnID, id)