Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Build the go-tpc binary
FROM golang:1.21 as builder
FROM golang:1.25 as builder

WORKDIR /workspace
COPY go.mod go.mod
Expand Down
46 changes: 27 additions & 19 deletions tpcc/delivery.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func (w *Workloader) runDelivery(ctx context.Context, thread int) error {
return fmt.Errorf("exec %s failed %v", deliveryUpdateOrder, err)
}

if rows, err := s.deliveryStmts[deliverySelectOrders].QueryContext(ctx,
orderRows, err := s.deliveryStmts[deliverySelectOrders].QueryContext(ctx,
d.wID, 1, orders[0].oID,
d.wID, 2, orders[1].oID,
d.wID, 3, orders[2].oID,
Expand All @@ -101,16 +101,20 @@ func (w *Workloader) runDelivery(ctx context.Context, thread int) error {
d.wID, 8, orders[7].oID,
d.wID, 9, orders[8].oID,
d.wID, 10, orders[9].oID,
); err != nil {
)
if err != nil {
return fmt.Errorf("exec %s failed %v", deliverySelectOrders, err)
} else {
for rows.Next() {
var dID, cID int
if err = rows.Scan(&dID, &cID); err != nil {
return fmt.Errorf("exec %s failed %v", deliverySelectOrders, err)
}
orders[dID-1].cID = cID
}
defer orderRows.Close()
for orderRows.Next() {
var dID, cID int
if err = orderRows.Scan(&dID, &cID); err != nil {
return fmt.Errorf("exec %s failed %v", deliverySelectOrders, err)
}
orders[dID-1].cID = cID
}
if err := orderRows.Err(); err != nil {
return fmt.Errorf("exec %s failed %v", deliverySelectOrders, err)
}

if _, err = s.deliveryStmts[deliveryUpdateOrderLine].ExecContext(ctx, time.Now().Format(timeFormat),
Expand All @@ -128,7 +132,7 @@ func (w *Workloader) runDelivery(ctx context.Context, thread int) error {
return fmt.Errorf("exec %s failed %v", deliveryUpdateOrderLine, err)
}

if rows, err := s.deliveryStmts[deliverySelectSumAmount].QueryContext(ctx,
amountRows, err := s.deliveryStmts[deliverySelectSumAmount].QueryContext(ctx,
d.wID, 1, orders[0].oID,
d.wID, 2, orders[1].oID,
d.wID, 3, orders[2].oID,
Expand All @@ -139,17 +143,21 @@ func (w *Workloader) runDelivery(ctx context.Context, thread int) error {
d.wID, 8, orders[7].oID,
d.wID, 9, orders[8].oID,
d.wID, 10, orders[9].oID,
); err != nil {
)
if err != nil {
return fmt.Errorf("exec %s failed %v", deliverySelectSumAmount, err)
} else {
for rows.Next() {
var dID int
var amount float64
if err = rows.Scan(&dID, &amount); err != nil {
return fmt.Errorf("exec %s failed %v", deliverySelectOrders, err)
}
orders[dID-1].amount = amount
}
defer amountRows.Close()
for amountRows.Next() {
var dID int
var amount float64
if err = amountRows.Scan(&dID, &amount); err != nil {
return fmt.Errorf("exec %s failed %v", deliverySelectSumAmount, err)
}
orders[dID-1].amount = amount
}
if err := amountRows.Err(); err != nil {
return fmt.Errorf("exec %s failed %v", deliverySelectSumAmount, err)
}

for i := 0; i < districtPerWarehouse; i++ {
Expand Down
20 changes: 14 additions & 6 deletions tpcc/new_order.go
Original file line number Diff line number Diff line change
Expand Up @@ -209,13 +209,14 @@ func (w *Workloader) runNewOrder(ctx context.Context, thread int) error {
for i := range items {
selectItemArgs[i] = items[i].olIID
}
rows, err := s.newOrderStmts[selectItemSQL].QueryContext(ctx, selectItemArgs...)
itemRows, err := s.newOrderStmts[selectItemSQL].QueryContext(ctx, selectItemArgs...)
if err != nil {
return fmt.Errorf("exec %s failed %v", selectItemSQL, err)
}
for rows.Next() {
defer itemRows.Close()
for itemRows.Next() {
var tmpItem orderItem
err := rows.Scan(&tmpItem.iPrice, &tmpItem.iName, &tmpItem.iData, &tmpItem.olIID)
err := itemRows.Scan(&tmpItem.iPrice, &tmpItem.iName, &tmpItem.iData, &tmpItem.olIID)
if err != nil {
return fmt.Errorf("exec %s failed %v", selectItemSQL, err)
}
Expand All @@ -225,6 +226,9 @@ func (w *Workloader) runNewOrder(ctx context.Context, thread int) error {
item.iData = tmpItem.iData
item.foundInItems = true
}
if err := itemRows.Err(); err != nil {
return fmt.Errorf("exec %s failed %v", selectItemSQL, err)
}
for i := range items {
item := &items[i]
if !item.foundInItems {
Expand All @@ -243,16 +247,17 @@ func (w *Workloader) runNewOrder(ctx context.Context, thread int) error {
selectStockArgs[i*2] = d.wID
selectStockArgs[i*2+1] = items[i].olIID
}
rows, err = s.newOrderStmts[selectStockSQL].QueryContext(ctx, selectStockArgs...)
stockRows, err := s.newOrderStmts[selectStockSQL].QueryContext(ctx, selectStockArgs...)
if err != nil {
return fmt.Errorf("exec %s failed %v", selectStockSQL, err)
}
for rows.Next() {
defer stockRows.Close()
for stockRows.Next() {
var iID int
var quantity int
var data string
var dists [10]string
err = rows.Scan(&iID, &quantity, &data, &dists[0], &dists[1], &dists[2], &dists[3], &dists[4], &dists[5], &dists[6], &dists[7], &dists[8], &dists[9])
err = stockRows.Scan(&iID, &quantity, &data, &dists[0], &dists[1], &dists[2], &dists[3], &dists[4], &dists[5], &dists[6], &dists[7], &dists[8], &dists[9])
if err != nil {
return fmt.Errorf("exec %s failed %v", selectStockSQL, err)
}
Expand All @@ -266,6 +271,9 @@ func (w *Workloader) runNewOrder(ctx context.Context, thread int) error {
item.sDist = dists[d.dID-1]
item.olAmount = float64(item.olQuantity) * item.iPrice * (1 + d.wTax + d.dTax) * (1 - d.cDiscount)
}
if err := stockRows.Err(); err != nil {
return fmt.Errorf("exec %s failed %v", selectStockSQL, err)
}

// Process 8
for i := 0; i < d.oOlCnt; i++ {
Expand Down
1 change: 1 addition & 0 deletions tpcc/order_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ func (w *Workloader) runOrderStatus(ctx context.Context, thread int) error {
}
for i := 0; i < nameCnt/2 && rows.Next(); i++ {
if err := rows.Scan(&d.cBalance, &d.cFirst, &d.cMiddle, &d.cID); err != nil {
rows.Close()
return err
}
}
Expand Down
4 changes: 4 additions & 0 deletions tpcc/payment.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ func (w *Workloader) runPayment(ctx context.Context, thread int) error {
if err != nil {
return fmt.Errorf("exec %s failed %v", paymentSelectCustomerListByLast, err)
}
defer rows.Close()
var ids []int
for rows.Next() {
var id int
Expand All @@ -130,6 +131,9 @@ func (w *Workloader) runPayment(ctx context.Context, thread int) error {
}
ids = append(ids, id)
}
if err := rows.Err(); err != nil {
return fmt.Errorf("exec %s failed %v", paymentSelectCustomerListByLast, err)
}
if len(ids) == 0 {
return fmt.Errorf("customer for (%d, %d, %s) not found", d.cWID, d.cDID, d.cLast)
}
Expand Down