func (b *Buy) Populate(s *ddtxn.Store, ex *ddtxn.ETransaction) { for i := 0; i < b.nbidders; i++ { k := ddtxn.ProductKey(i) s.CreateKey(k, int32(0), ddtxn.SUM) } dlog.Printf("Created %v products; np: %v\n", b.nbidders, b.nproducts) for i := 0; i < b.nbidders; i++ { k := ddtxn.UserKey(uint64(i)) s.CreateKey(k, "x", ddtxn.WRITE) } dlog.Printf("Created %v bidders\n", b.nbidders) dlog.Printf("Done with Populate") }
// 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 } }