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  }