github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/workload/ledger/deposit.go (about) 1 // Copyright 2018 The Cockroach Authors. 2 // 3 // Use of this software is governed by the Business Source License 4 // included in the file licenses/BSL.txt. 5 // 6 // As of the Change Date specified in that file, in accordance with 7 // the Business Source License, use of this software will be governed 8 // by the Apache License, Version 2.0, included in the file 9 // licenses/APL.txt. 10 11 package ledger 12 13 import ( 14 "context" 15 gosql "database/sql" 16 "math/rand" 17 18 "github.com/cockroachdb/cockroach-go/crdb" 19 ) 20 21 type deposit struct{} 22 23 var _ ledgerTx = deposit{} 24 25 func (bal deposit) run(config *ledger, db *gosql.DB, rng *rand.Rand) (interface{}, error) { 26 cID := randInt(rng, 0, config.customers-1) 27 28 err := crdb.ExecuteTx( 29 context.Background(), 30 db, 31 nil, /* txopts */ 32 func(tx *gosql.Tx) error { 33 c, err := getBalance(tx, config, cID, false /* historical */) 34 if err != nil { 35 return err 36 } 37 38 amount := randAmount(rng) 39 c.balance += amount 40 c.sequence++ 41 42 if err := updateBalance(tx, config, c); err != nil { 43 return err 44 } 45 46 if err := getSession(tx, config, rng); err != nil { 47 return err 48 } 49 50 tID, err := insertTransaction(tx, config, rng, c.identifier) 51 if err != nil { 52 return err 53 } 54 55 cIDs := [2]int{ 56 cID, 57 randInt(rng, 0, config.customers-1), 58 } 59 return insertEntries(tx, config, rng, cIDs, tID) 60 }) 61 return nil, err 62 }