// Calls rand 4 times func (b *Buy) MakeOne(w int, local_seed *uint32, sp uint32, txn *ddtxn.Query) { var bidder int var product int if *partition { rnd := ddtxn.RandN(local_seed, sp/8) lb := int(rnd) bidder = lb + w*int(sp) } else { bidder = int(ddtxn.RandN(local_seed, uint32(b.nbidders))) } x := int(ddtxn.RandN(local_seed, 100)) if b.zipfd > 0 { product = int(b.z[w].Uint64()) } else { product = int(ddtxn.RandN(local_seed, uint32(b.nproducts))) } if x < b.read_rate { if x > b.ncontended_rate { // Contended read; use Zipfian distribution or np txn.K1 = ddtxn.UserKey(uint64(bidder)) txn.K2 = ddtxn.ProductKey(product) } else { // (Hopefully) uncontended read. Random product. product = int(ddtxn.RandN(local_seed, uint32(b.nbidders))) txn.K1 = ddtxn.UserKey(uint64(bidder)) txn.K2 = ddtxn.ProductKey(product) } txn.TXN = ddtxn.D_READ_TWO } else { amt := int32(ddtxn.RandN(local_seed, 10)) txn.K1 = ddtxn.UserKey(uint64(bidder)) txn.K2 = ddtxn.ProductKey(product) txn.A = amt txn.TXN = ddtxn.D_BUY } }