diff --git a/go.mod b/go.mod index 888464d14644a144b261d14643bf32f32850e22e..208c120b1a568cbaf999a06fea637b2987e83bd5 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.17 require ( code.vereign.com/gaiax/tsa/golib v0.0.0-20220321093827-5fdf8f34aad9 + github.com/cenkalti/backoff/v4 v4.1.3 github.com/google/uuid v1.3.0 github.com/kelseyhightower/envconfig v1.4.0 go.mongodb.org/mongo-driver v1.8.4 diff --git a/go.sum b/go.sum index 3e7b80662f07e6d2f70de3c29789d73f3876be1e..88799848bf7901420915b8d03065a61acaffeb29 100644 --- a/go.sum +++ b/go.sum @@ -49,6 +49,8 @@ github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLj github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= diff --git a/internal/executor/worker.go b/internal/executor/worker.go index deec231362a2a4878671b40198e3777241a3b96a..d03bdc1162a5155431f1ca6e54fee81de49cae9c 100644 --- a/internal/executor/worker.go +++ b/internal/executor/worker.go @@ -56,7 +56,6 @@ func (w *Worker) Start(ctx context.Context) { } if err := w.storage.SaveTaskHistory(ctx, executed); err != nil { - // TODO: is this fatal error, should the task be re-executed? logger.Error("error saving task history", zap.Error(err)) continue } diff --git a/internal/storage/storage.go b/internal/storage/storage.go index 028ef4c00ba3e17e658e9652f96f9424ed7db414..0e314d761b3cf3ce6f95a2ae959b180a6f7a6c54 100644 --- a/internal/storage/storage.go +++ b/internal/storage/storage.go @@ -4,6 +4,7 @@ import ( "context" "strings" + "github.com/cenkalti/backoff/v4" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" @@ -109,6 +110,11 @@ func (s *Storage) Unack(ctx context.Context, t *task.Task) error { // SaveTaskHistory saves a task to the `tasksHistory` collection. func (s *Storage) SaveTaskHistory(ctx context.Context, task *task.Task) error { - _, err := s.tasksHistory.InsertOne(ctx, task) - return err + insert := func() error { + _, err := s.tasksHistory.InsertOne(ctx, task) + return err + } + + b := backoff.WithContext(backoff.NewExponentialBackOff(), ctx) + return backoff.Retry(insert, b) } diff --git a/vendor/github.com/cenkalti/backoff/v4/.gitignore b/vendor/github.com/cenkalti/backoff/v4/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..50d95c548b67069b52ea4dcf91bf85314d488d41 Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/.gitignore differ diff --git a/vendor/github.com/cenkalti/backoff/v4/.travis.yml b/vendor/github.com/cenkalti/backoff/v4/.travis.yml new file mode 100644 index 0000000000000000000000000000000000000000..c79105c2fbebe29ea2a4d735de58526f58a06815 Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/.travis.yml differ diff --git a/vendor/github.com/cenkalti/backoff/v4/LICENSE b/vendor/github.com/cenkalti/backoff/v4/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..89b8179965581339743b5edd9e18c1fcc778b56d Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/LICENSE differ diff --git a/vendor/github.com/cenkalti/backoff/v4/README.md b/vendor/github.com/cenkalti/backoff/v4/README.md new file mode 100644 index 0000000000000000000000000000000000000000..16abdfc084f73cb6658c2ddf463ac02ff666dd6e Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/README.md differ diff --git a/vendor/github.com/cenkalti/backoff/v4/backoff.go b/vendor/github.com/cenkalti/backoff/v4/backoff.go new file mode 100644 index 0000000000000000000000000000000000000000..3676ee405d87b3dc7b675f3c93f719a2abca12d2 Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/backoff.go differ diff --git a/vendor/github.com/cenkalti/backoff/v4/context.go b/vendor/github.com/cenkalti/backoff/v4/context.go new file mode 100644 index 0000000000000000000000000000000000000000..48482330eb763651b2217b2704de5903b155d8d2 Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/context.go differ diff --git a/vendor/github.com/cenkalti/backoff/v4/exponential.go b/vendor/github.com/cenkalti/backoff/v4/exponential.go new file mode 100644 index 0000000000000000000000000000000000000000..2c56c1e7189ba605ae668e752b3781f815b1bbd1 Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/exponential.go differ diff --git a/vendor/github.com/cenkalti/backoff/v4/retry.go b/vendor/github.com/cenkalti/backoff/v4/retry.go new file mode 100644 index 0000000000000000000000000000000000000000..1ce2507ebc8be550a89b07d84e58f0fc55a50ee6 Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/retry.go differ diff --git a/vendor/github.com/cenkalti/backoff/v4/ticker.go b/vendor/github.com/cenkalti/backoff/v4/ticker.go new file mode 100644 index 0000000000000000000000000000000000000000..df9d68bce527f2952dd8a6b4569fff26b6c214c2 Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/ticker.go differ diff --git a/vendor/github.com/cenkalti/backoff/v4/timer.go b/vendor/github.com/cenkalti/backoff/v4/timer.go new file mode 100644 index 0000000000000000000000000000000000000000..8120d0213c58d550ea7cf20ab4d2329134abb12a Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/timer.go differ diff --git a/vendor/github.com/cenkalti/backoff/v4/tries.go b/vendor/github.com/cenkalti/backoff/v4/tries.go new file mode 100644 index 0000000000000000000000000000000000000000..28d58ca37c684020e7db4e1f5a1394cc4b4edef9 Binary files /dev/null and b/vendor/github.com/cenkalti/backoff/v4/tries.go differ diff --git a/vendor/modules.txt b/vendor/modules.txt index cc125ed7892e00bda7f373537e628ab49a99401a..e4d7aa31821205e1e8eb7e7920a4d8185d08933e 100644 Binary files a/vendor/modules.txt and b/vendor/modules.txt differ