Skip to content
This repository was archived by the owner on Oct 8, 2022. It is now read-only.

Commit 84d2784

Browse files
author
C
committed
Add ErrExecutingRollback error
1 parent 0521bf3 commit 84d2784

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

postgresql/error.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,7 @@ var (
2323
// ErrScanningRows is returned when the worker fails to scan the rows
2424
// returned by a query.
2525
ErrScanningRows = errors.New("error trying to scan result rows")
26+
// ErrExecutingRollback is returned when the worker fails to rollback
27+
// in a transaction.
28+
ErrExecutingRollback = errors.New("error trying to rollback a transaction in database")
2629
)

postgresql/stats.go

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,56 @@ import (
66
"github.com/benchttp/worker/stats"
77
)
88

9-
func (s StatsService) Create(stats stats.Stats, statsId, userId, tag string) error {
9+
// nolint:gocognit
10+
func (s StatsService) Create(statsToStore stats.Stats, statsID, userId, tag string) error {
1011
tx, err := s.db.Begin()
1112
if err != nil {
1213
return err
1314
}
1415

1516
insertIntoStatsDescriptor, err := tx.Prepare(`INSERT INTO public.stats_descriptor(id, user_id, tag, finished_at) VALUES($1, $2, $3, '2022-03-03 17:36:38-02')`)
1617
if err != nil {
17-
tx.Rollback()
18+
err = tx.Rollback()
19+
if err != nil {
20+
return ErrExecutingRollback
21+
}
1822
return ErrPreparingStmt
1923
}
2024
defer insertIntoStatsDescriptor.Close()
2125

22-
if _, err = insertIntoStatsDescriptor.Exec(statsId, userId, tag); err != nil {
23-
tx.Rollback()
26+
if _, err = insertIntoStatsDescriptor.Exec(statsID, userId, tag); err != nil {
27+
err = tx.Rollback()
28+
if err != nil {
29+
return ErrExecutingRollback
30+
}
2431
return ErrExecutingPreparedStmt
2532
}
2633

2734
insertIntoTimestats, err := tx.Prepare(`INSERT INTO public.timestats(stats_descriptor_id, min, max, mean, median, standard_deviation, deciles) VALUES
2835
($1, $2, $3, $4, $5, $6, $7)`)
2936
if err != nil {
30-
tx.Rollback()
37+
err = tx.Rollback()
38+
if err != nil {
39+
return ErrExecutingRollback
40+
}
3141
return ErrPreparingStmt
3242
}
3343
defer insertIntoTimestats.Close()
3444

35-
if _, err = insertIntoTimestats.Exec(statsId, stats.Min, stats.Max, stats.Mean, stats.Median, stats.StdDev, pq.Array(stats.Deciles)); err != nil {
36-
tx.Rollback()
45+
if _, err = insertIntoTimestats.Exec(statsID, statsToStore.Min, statsToStore.Max, statsToStore.Mean, statsToStore.Median, statsToStore.StdDev, pq.Array(statsToStore.Deciles)); err != nil {
46+
err = tx.Rollback()
47+
if err != nil {
48+
return ErrExecutingRollback
49+
}
3750
return ErrExecutingPreparedStmt
3851
}
3952

4053
err = tx.Commit()
4154
if err != nil {
42-
tx.Rollback()
55+
err = tx.Rollback()
56+
if err != nil {
57+
return ErrExecutingRollback
58+
}
4359
return err
4460
}
4561
return nil

0 commit comments

Comments
 (0)