aboutsummaryrefslogtreecommitdiff
path: root/internal/database/database.go
diff options
context:
space:
mode:
authorJonathan Amsterdam <jba@google.com>2020-05-21 17:19:53 -0400
committerJonathan Amsterdam <jba@google.com>2020-05-26 14:43:40 +0000
commit9a1fb33cac3b609fea1bcc2ec5ddd5d467d30fd8 (patch)
tree48610b0c2a78e1c87364e30cfe46fdf2a8686373 /internal/database/database.go
parent2bfe1fcb1f5ca1cc0533b62585941106c34a15ea (diff)
downloadgo-x-pkgsite-9a1fb33cac3b609fea1bcc2ec5ddd5d467d30fd8.tar.xz
internal/database: correctly wrap bulk statement errors
Wrap DB errors in BulkInsert and BulkUpdate, instead of hiding them. This will allow TransactSerializable to retry the transaction; now it is just failing. Also, log the number of retries so we can get a sense of how congested we are. Change-Id: Ice538c5c4de56d88c89ec7a290767c0d5c0b9e39 Reviewed-on: https://team-review.git.corp.google.com/c/golang/discovery/+/752351 CI-Result: Cloud Build <devtools-proctor-result-processor@system.gserviceaccount.com> Reviewed-by: Julie Qiu <julieqiu@google.com>
Diffstat (limited to 'internal/database/database.go')
-rw-r--r--internal/database/database.go7
1 files changed, 5 insertions, 2 deletions
diff --git a/internal/database/database.go b/internal/database/database.go
index f1009b35..3e009e1c 100644
--- a/internal/database/database.go
+++ b/internal/database/database.go
@@ -159,6 +159,9 @@ func (db *DB) TransactSerializable(ctx context.Context, txFunc func(*DB) error)
db.mu.Unlock()
continue
}
+ if i > 0 {
+ log.Debugf(ctx, "retried serializable transaction %d time(s)", i)
+ }
return err
}
return fmt.Errorf("reached max number of tries due to serialization failure (%d)", maxRetries)
@@ -257,7 +260,7 @@ func (db *DB) bulkInsert(ctx context.Context, table string, columns, returningCo
err = db.RunQuery(ctx, query, scanFunc, valueSlice...)
}
if err != nil {
- return fmt.Errorf("running bulk insert query, values[%d:%d]): %v", leftBound, rightBound, err)
+ return fmt.Errorf("running bulk insert query, values[%d:%d]): %w", leftBound, rightBound, err)
}
}
return nil
@@ -348,7 +351,7 @@ func (db *DB) BulkUpdate(ctx context.Context, table string, columns, types []str
args = append(args, pq.Array(vs[left:right]))
}
if _, err := db.Exec(ctx, query, args...); err != nil {
- return fmt.Errorf("db.Exec(%q, values[%d:%d]): %v", query, left, right, err)
+ return fmt.Errorf("db.Exec(%q, values[%d:%d]): %w", query, left, right, err)
}
}
return nil