From d3ce155d8b084be2f480008d3a50c30e6c47fd9b Mon Sep 17 00:00:00 2001
From: Lyuben Penkovski <lyuben.penkovski@vereign.com>
Date: Thu, 5 May 2022 20:45:10 +0300
Subject: [PATCH] Add retry mechanism on saving tasks to history collection

---
 go.mod                                        |   1 +
 go.sum                                        |   2 ++
 internal/executor/worker.go                   |   1 -
 internal/storage/storage.go                   |  10 ++++++++--
 .../github.com/cenkalti/backoff/v4/.gitignore | Bin 0 -> 267 bytes
 .../cenkalti/backoff/v4/.travis.yml           | Bin 0 -> 194 bytes
 vendor/github.com/cenkalti/backoff/v4/LICENSE | Bin 0 -> 1077 bytes
 .../github.com/cenkalti/backoff/v4/README.md  | Bin 0 -> 1752 bytes
 .../github.com/cenkalti/backoff/v4/backoff.go | Bin 0 -> 2142 bytes
 .../github.com/cenkalti/backoff/v4/context.go | Bin 0 -> 1110 bytes
 .../cenkalti/backoff/v4/exponential.go        | Bin 0 -> 5749 bytes
 .../github.com/cenkalti/backoff/v4/retry.go   | Bin 0 -> 2510 bytes
 .../github.com/cenkalti/backoff/v4/ticker.go  | Bin 0 -> 2121 bytes
 .../github.com/cenkalti/backoff/v4/timer.go   | Bin 0 -> 750 bytes
 .../github.com/cenkalti/backoff/v4/tries.go   | Bin 0 -> 724 bytes
 vendor/modules.txt                            | Bin 5657 -> 5749 bytes
 16 files changed, 11 insertions(+), 3 deletions(-)
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/.gitignore
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/.travis.yml
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/LICENSE
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/README.md
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/backoff.go
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/context.go
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/exponential.go
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/retry.go
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/ticker.go
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/timer.go
 create mode 100644 vendor/github.com/cenkalti/backoff/v4/tries.go

diff --git a/go.mod b/go.mod
index 888464d..208c120 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 3e7b806..8879984 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 deec231..d03bdc1 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 028ef4c..0e314d7 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
GIT binary patch
literal 267
zcmY#ZaL&&y$jnJiQSeX7N=+_NNXyJgE!I&8E=erOOjbzDOHpvC%uCG8OjgLrOe$8;
z2+l|>f~zjp<kHg1=hD(k<kHeB&gbG%R&dMDNl7g#=8Dfx%HoPINi8k`i8>Y~XJnS7
zCYO{Jr79E`q$X#kWhN`6R+OaX6=&w>73&uirKV+8q!x2&=|!8GS(FvVazSam{L&IG
zE-k&}^n63TbdY7q>G?)_$z1Wt>G|;~scEHoFiv`YNo7H5F-R3yGPR;0zo<k{iwokA
e+{Da0kQ|qmUTQ@u$XT8)uEkt>nJKA>`dk3(l2&>E

literal 0
HcmV?d00001

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
GIT binary patch
literal 194
zcmc~v%u6p#Oi#5^NYCd=&$r@IP|#H{)H5`OGAh7yNoE08QfgX$QEGf<UU5lcP7Xw2
zdcHz>YKcO6W=TeAl3sFtu6}M}NlBi5dVX1IQDRO`F<3WDRX)fvz5Jqd{R;h({QR6^
z{p8#f{bZ0@uHxjP%z_e#sVW}+zOMS|`2~q38Tv_?NX9AX7N-`KWhSTEmJ}tHWftou
HXL11m%Thk|

literal 0
HcmV?d00001

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
GIT binary patch
literal 1077
zcmWH^NLBFl3{mjOOis-!PF2wG^$gME;&RR}s4U7%&nQvQNY+#^GB7kza8Aw3R&dNI
zIkJ(9D<HKfH?z1nGe1uuvsfV`wJ0^IQX#!4F|Q;wMMoj6C^c0fKTRPyBe5twRY##D
zUm-ECQlTKVs5n1QAwQ`kF*7eSFI^!~AvwRGQXxN$t0W_{SfMySt)x7$C{-abFGV4-
zxHvyKGqEH!MIj|WximL5uOzVqWM5ilPHM4&MoC7hf>JP4hmt1Pl9bfM9EHq0E|45d
zN})WnBqP7HM4>3PxTGjE8DxfzLS|laPH76r4KV4P%-l?<4Iu4czZWZ%<a3o4r|N*+
zsiTmapOTqYsiTma3ieh(X;MyRafXgUN+!tYq|%a99fe|$AUG&>K>pCrFH$H@&B+0o
zkeONx@oTCA%ynQjpztXG1!xI0h(Pu#lxO7UDuA2<Qws{|w9=xy%;JpH6p)^je1+nC
z9j@Ziq^#8B5|9W;d0Ku>PJTJaYsvX}DVZSu7F%&~f#NwaDZeZg<PvDq=H-`UCPRW7
z906cQKw=dtRh*HSlcSK73JtK-6ot$@g~Xg3uH^gzuy=|;9xg6P%qz)E%uy)FF9O>K
zihPh;U{2TL;tKI_RS5QX3ki1&a#ipQRtO045A$?!bx}}q3|8<AR?<-j_YCpy4-HWW
zcMJ-0^b3hp@OM*i^ovyR_VjbnQE-h22yzV$R`3tv^7IYx@pN_3QSkJ0_6c?I^mA8m
z3Jp>4^AAz*@$~f!adlA$@mBy@2sO&nH5g==uWOLAhofJJqm!qPXGo-uf}3ZEpKEY1
zmz#f(f}=u!V^D~vbEuDFkU~IcP=J51tAeASi-MoOpQoQ&kf)!!tFNnHh@OI{pMsyi
zf@_$oUx-4mhog@V*eb`+5D)(#u=||-10sVw-917SJp6rJT!VrYoLm)rJRO~UTou4p
z`9&%?`#5^~>L|E4`Z~IUTo<I^AL8K}1Xc!hUATuUNQleRPr=bo!O=Oy)87x|4QGG9
zkRV6r5FLdO|DX^Bf2h`Q&tO*_1;-%IU{HX#1^N5xD1d^~-wmY1(~ry9-_Oq#VhSjz
l!LEkKh<^~69~$fmQVns7i>srLr=NQ;$j6}2gelhJ0s#NmR?GkZ

literal 0
HcmV?d00001

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
GIT binary patch
literal 1752
zcmY#ZaIGlF&r8iK$xO^qa7s+h&QD8Ih*pet&v(gBj*U*wPsvYK$jnVlPmP80VnNbQ
zrI|S?3c)3bC8fo&(IrKRWtqirWe_e{opXL!YEfc(DqLwYSRf|{p&Bj{%f%Iv0Wzjo
zAyL6SU!fqss6-(@O`#+sRUsA0l}S)nCg!B)7iE@Y<SL{U<>x9yyXWVp=cK9^D|m#2
z1SmM?WTxhoDEMS16(tr`Dx~EXDR?E8C4xKwQl^_xQc|Fsl~|Ujn+#SNtH;F^jT{(I
zYht6Z*<GHQof*rOS*(zlr+{!rNk(FcLTPbou|isEY6{2zg_3-Q+|rzq%z~WE<iwK9
zvecYPg_P9fqSVCVRItyA5=&A+zAVnqO;so;%1=%$F4p17%u~oON=YpO=}#|8Oesyw
z$*ELG%gjpw+nAi3T2PXhl#{9e(yqr9l98%Vlv+}hnOck-R5_IjnR!sV67y0Nic9hf
zU?Q1$=?di;sd);C3dyNOC5f4N3MCmusl^%jIVlR6#R|EpC3;+3%E}6%#fj;uTwI>H
z;P@y=EXe>#C!}YVWRxc9CFkerC#U9RC+3u7>VtfopO&UyW|E+%5Re1*V_tp<#G_@Y
zMa7x<c?t!IMI{P}C1B5|=B4OyafKGADuAM+*h*i&AUj<zJzp;+wM-ws4WN)I%S<f?
zo0F2CT$-DjSCUwgnV$!7wsU@7Nl|7}X-Q^YIv1Cgf~P`xerZmMLQZCODoAg3YHEQ(
z2`IhgK$A#fu|jcfVor`iVzEL&esOVTQckKKmln(;DfxNoB?`r<peRrX2vR7|EXl|(
zEm6oXNX-KUW@4T~W^r+8ssbpaQ!<N_ON)y^;+Z81X_-aEB_N|b(?C&NkYAjdqL7@C
zn3tXk3d_9w5>PDU=jP_;fs&6xa$<3+4#>rsIXNH=Nr_20l?q^G;Fwp)1jP*`bH-Yc
z9(G(1t<VgMFaVs}_413-@rAv8F*w)j738IJL32Km8z6aKH#rk*40_6dX~3`<zc!Fv
z_DMyFdC3{JxrxOksYP7Th++fbez=%kW<Jyl7>N_7IT&t2F|8=IAio%wnfghIDe0+t
z#bxPerh@_+dufAkG*U882bW;_5DKG&(of3CPts3GG)zpiv@}k&G%&I-O-(kmFg3SK
zGc+|dHa50QGB8Lrv`jKiOfp3=1yaQ67Z)Y#=O$+6>4VBWeNfhgSf!s>kf{$<Q(BUl
zqmNV$g6ahSv@|`C7B1XnA;dpc`ueGPdZ5CwAT=d35u64<JY)mop``>DS9D@ZSz=yt
lYKlT?MPhD2PAXD5BDx%~FG)<YP03GIF33*Tg_={$1pqfGcUb@c

literal 0
HcmV?d00001

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
GIT binary patch
literal 2142
zcmdPbR|rT<&Q45ERY*!q&dyIuQ^?FM$Vtsj%_}K}3nk{H=NDy`WaJhrq~#YW6s49F
zRc7X;E94iX7A2Ns=I0gbap~)G>FX<m7N;r%fut4EO7oIIQn+*|lw>59DC8zqDx@W5
z=797oc&0)1rsSs<E9B*uDCDN5mMB!_mli4HrKYA7>wv6C&M&CcFGwsdNmVGxNJZF_
znOBkzQCm=ypOu<iqL7%EqL7=Pl9^VikXQ_oQYg<X&Hz~jGAAS>wJ22~vsfW9r#N3B
zBr`cXwMe0)vLIEVI5RghC$UJOBwwK<GdEQaA_vl^5Sd@9keryOP+FX-kXfRTnFcl%
z<T#M(^8BJ~h4Rdj429&3#Js%J9C)|{r=}{nRwROgwpgJ!6%sN@sX6)O;P5Fe2E{-s
zRDm8>0cxCZab@Nf<QJ7FD1qFg#07G`Q(|(qKPbA26%yeQRgj;PnOq4r5*|s3d5Cz@
z;{tmSt~akFwJ0qyIaQ&Wi&I};!7sI<1SVIMT2fk+R}2p0lu}4EgZ-G8S)!1XnwDRb
zibx2ch=3;s9k5yXMKD+CDFm0~7l8C;=A~pNCxRm`u|y#+Um+J}N@i-YLUBfZX-<kl
zQmR63VoItW$P^HUg_{C6kgPyLAgsU%ca@bb+$tm=XlPnP)MchAXu#FlBGiIhr3v*p
zC&>FQ`QStc4msp71IcmLDx~HV!vYGdJUAycwE!H}aMM944u^J-Tevt;+y_ZrF3`Z`
z0;y04N-a(;frM3NNoHb>LUBoA2`DhY5*nIZwcywXxm^JkoS;Y|7@lB<f|G3?ay)Bj
z>TxCK=M|SgBMFq=VJ=dzRnRpATNjmDln+Z7pd6!+mRXUS0t<BoXtFEM$S+2eBcP-T
z$zJ7&mBk8GsYUtV{F|Gam<K96!1*5~;eb?wLN7BlMIkdcH#H?Qu_QI85}c#*OG^~W
z6EjOP^U`%d9#2in%*zDHLX$MI3yVvNN|Q^fYq_{Ug^+?ql7beJv?e5sH8d4)tH2XY
z3e})wUs{x>V4#4A3&Mc|_HJShI4p{wc?(+P>Vac3Ex!nquTiYlQNR;g(EO5@T9#S_
z$~DlSg9Zr5Oqi>%1PGEejsQVXf#NFEbc+ZOkPc{=ID?W@VjjFS0Vf)$cVWo|TZn+t
zLvdm*A{C{i<|I~vi{6lo%wkXq$;?wo&d)0;N-PHFlf*oQ)QW=qywp5!c0siRoZ!kc
zGLti)kp?O(!A3%=pY)>q@?wRY{JiwkB3K=foS2h?nnM)wK_Lvv+Ym;2VrCvRl+pbO
z329KF;t48S%Mx=?0}GUW;fWGWGa?=ouz>1XL~6#+NL2JB>A~Fu%Nl;E<!EMUq@X%j
cQ$Y(&1;}%d1gxNjCRGiyz)B&dmaCQv09#kq*Z=?k

literal 0
HcmV?d00001

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
GIT binary patch
literal 1110
zcmXR&OwLYBPgO`tOwP_vOXK3o%q_?-DpAnj;#5k`&nro-C{g0#R4U2LO;zI3<l@rT
zS8z&9&h}4BbB4$&WELwV!n7+C<mY52S1OcbB$g-?m*f`|D-@-c6jf&Cr7I++m82Fa
zlw_nTK+Of2m07HioS2uKnv<HM$5m2Ukcwe?UP)?ET4HjlLbZavzCvDpPG(+-l|nk0
z=Hi69g^LsF8VyaD>3UERu39dL!5|+ZIlH)|s5H4mp&H4I<dO<(y7l!H!ZS-Upyq)*
zR9ch=@-)<Pm_&JINd`>6LUKt3m%cv8iy%{TON&bs^72a*l2R4&GIO}nO7oJD4b@13
z`CA916J`p`51KGpm{nNAA~OxF*VYzf1;}HZ1&Mi?$r?&|nK>{Ml{C3HYq_{MGt(53
zbQJQl6|8I(lJqpRPy<KP8YETC#mQNeT2fk+r=W%^50Zfey_G_e9yB0yxHvgElS?YB
z6hI)kqyi*R3$YNlK~T+B3P~X4XxeK*(FYE#^wbil?-7B85!oPLgMtCsZ&350nlZeV
zoCFJH4RF|if~EvnKP+rQiZWA+F|;E&t0YM;B{e5CJ+UMeViMHP(BuvdrSziw(!3N6
zO}Mu-k`!PTz+9*RWniXdkoTa5Ch37vSS=SMDPc3kFSVis>URxI1yBaob15xKEXmBz
z1DR8tnv)7i|H+BPsR}l_U=#IR^7B$PG_4R(A6$}Oz{Q!8nwD6aQ-UN8k99p1i$Jkm
G%LM>)zG)Ny

literal 0
HcmV?d00001

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
GIT binary patch
literal 5749
zcmXR&OwLYBPgO`tOwP_vOXK3o%q_?-DpAnj;#A5_EXmL>O3X`9;^I^)$;?ev;?m^e
z(%0g0ttiOPOU*0EOw4ggOwRUCOH;@!R!D>yqL7(ekdvC5npcuol9`{UP?C{YqL7)F
zT$GwvoLa0<l7X<UAhjqnKSd!ezepi9F*!q_D7B=hQX#RVBsI67M4_}eGcR2sQ32$J
z{M^hch;eD9dC3TK(~I)UixpB4F3PFY<Kps5ttf#yO+yppxa7o~<kFnPlGGHasUTOR
z<>%z&mxJs`%P-0;%}KQ4;(}Y2nxc@ISCU#(mYAbp%cTGUK_J(8!UVMxG$0OBC`-&K
zO;yOu1L;jqRfslJ&{YUZ%u9j0*)1`-B)>>U!B9aPn?$T87nf(ALVig`YLP;Deo;!X
z0;&hfGjnpFh9{+#l&7YG0yPyRg0Mp&4QvTlL26MlDCj|vnwpbeu8^3QqL7%BUzQ3E
zc}NJue5S|6<pv7-ibPP9=_sUUmO;%%giS$WQDSatNor9sD0ooAz*fPC3!9G=Y!wXj
zOt}<%OLIyx3vx13ixfagxj><wm|Rktm;+BN&?Hb=3=VLx8}m{tO3;!5mJl!m`^;FO
zI5jyxFQr(AD;H*2ib7H)*dU~2p#x2Z#X1VGAT$CSU<NY)lx*@#Qmqtx6D#16oSawy
zNwKK@28C%}ehJtTNFvCr0=plQVDz}SJk!9EplqX%nv+-n@?LRfUUI5JVxEF4BDq3S
zsX}I6aY-UbI<r^-lv6+{H9bGISfL=X7;F!hZ(@Zj#GsJO+*FW%piz~ZT9T2Uf|g{8
zOA?Dpib0`RT9gM$;?Nwf7hIBGpvT1(l938`7ub=>iFpc1sR~7@#i=Er@Jmk2$pPsL
z0tskn>Tz+oLQ;v9f;*N}l9HO1SejF!kXV#n3d;J$I^bMwXrNG1lnKrC#i@m*sUSas
zV>2mLhYJ*riN(dGxgeX$Qx($l74pkci@-sL>R$zLL6WLqXi$=&P*PM0NsEQ0sl_D<
z$_fgo(W3!P6PgO}#F?6+0FP9-G#8hGf*~kpL$HCKDTIMWMjPlEnd&GgC>ZFOo5pe}
zC>S9WfP@e{1S{G=&)6KK$xzSG2&~B%Aqf^kaN(?I13gnSBOL_=Lp?JKbC69Ya5;z=
zf(vIw8|Yb>7@O)S80ncBgY+PI0we@ih{T9C)H5;zxz1S6+!E|MGlVQy48eu7q7C&d
zEX{Qk6ioHZER8@mnZxBEVhApr6>X$vVPdAEpkSeAYHR`0WC53hh#|OeR<wzpk(s5A
zf}xR~g#kDmEa7qxF*p~&h&IzRF)-FqFtpS&GBk+gQZO`tOG3opTm%C-S8#Fpf%Cs7
zs4N7fVMu+GS*!rb>P4xEDZ0gpX{mZ#TKZfil?AETGIDWAQE76CLNynsXI>_#ii9US
zkgcGsrsq;x1U8zB6H6_jkd~95SYl?v#femSg0zA$LK3Nv0?Q~UD4-dxudm>kR+3r-
zD$tNh4shneQUVpFmXsFd6)Qjr2u^){1<w+Nyi`zjEH23}C|1Z!LpRA5RLpa6qUBUH
zXMoIuxe(Kl&N=zX*$8Pcmy3%txwNP#HLnC7c4%gTOE*w42-OLe2JyLSxw!Q86~M-T
z>ixt#NG+b0m<+1_62bKf*qcxrz<~xXs-PvY9wcU=CV(n?u-<AePQUze4Nb6mJtV7K
zpambe5l{>^2{Ul@xRUepiowk)sCsOP!&br6z(7F@Vuf#JPEIDI9OL4IYQmOWKv7@{
zSAi|f*eV$6A*sNUaBLOK;PwWCt5bx5D76kGxNQ{-O%cw_D=kR{Hw^U^{8Gy?{SK|p
zia`}0yq3#P!<Kg-4L(>^0trz)E>MFHyU`k&3R+k!tmfiOQn0dBP{Wj~=Hf)pmsVg;
zK|>fVT6DNLvE@-K1*mc?5dzYJhy{q@$TlG4z$y{3flvxH9H|`wRf?30p{fx|k>o(C
zLAeg925dW+011L5!HFAPHn_65BsCW-rNhNp%f*?b2d(?LI3Z<&LJ}x@feXH3gkl9q
ziC10A1&Jw*5(Ok#O$D@U11cGz#({G!SQ=!mzP<vI6A+z<Vpwj5=S6Ubq7>Yh$jnXE
z1Dl}7RhC$UVt_5OGeEA>*H-|02wVWdTEO6Ts6t6TR1jQZgIY~Rm5_o1)cgmvQi@W+
zWe%h<2y%Fl9;l#!7?@jHTmou5f!a)|DGEucY57H|(2hnDGy!WQVN0u;5GQG9f`TPU
z4_YX}i#=O~Bt5hw35pl6Q$S^q0!RTk${?Wt4M(Kjg95zg193XIZ4IsU5I%%tJW%T#
z-V@T-SAZvdq^7NcEm~VkOF_d>;m}5SLknE9K{`B|&;)_Q=SZ%Em8-Ct5fmEw`U<{@
z*{KS}rA4U<<*5o8iDjwanm9c_FBQ>D%uTGw%q`7DY0T<zal+c%R-h1aPc1>p9vYfl
zoZw)vvQ<b=ErI0WFi;=PttdYi7WNuRdJq|CzZ2pm9dM^h&ka&XYiQ~yU__cGD2Bk@
zT~Hgs8MPt<*`1lDkfeuJXDZq%7$~Tz!F-_&cAp)lI#Brq%{@urraU;OLPbEDpeX>=
z$DjlauJk}L3=0`hB32-#O9D#gNWBtJZpZ}nEI=KF@{H6xcoGIFO3cYgO#x*MkS>f)
z21rGIZb2!icLPmxh#VZ6ms#PLn3u1isRwF$WEO*r0JXP3*%Oqt6jDLG)AEeW98g^j
zA4O0o$j`}4t^`&0;9g`>C1}i`G!NA60U1$}nVg+kL?9cY1{k*V2o2;UJ*51m7hIa8
zk)#LDkDAcn_XLf0fTACg>7dyfk>8Rk6`;M<N>I-yvqYgh6V$KCNQH@K5_B={BnHhr
z&Kar6+295Vs85xalV7d_YQw=epzumbElEuVMFuD?L5TyyrO=WwH?acldOa@A%rsat
zRRc5qE7;j0$s*Nan)*q4i0TjIN=^*j;1Uf<4;N>xLTXNNDo)j)WDIXnYe3t_*j%Lr
z%1y8#f+9^&#(^{zgP;vx*gz9>JSVLvKNnmpAcjI<m4+24S#d@~0}EDSDCmL<2eeTi
z1uX?Mbvoz*3fjbJjD@CQJcSl)FaoI*h7?)(xv)6Fv>qi0p)FkGk~lLBtNTE$e{i%w
za|W6>74-ELa^VGdUOv=}ywu`iP|^cuRdDfv#myiE26~_<;sjOeDXBRni3+w*6Hp3d
z1udArG|=qV<O1u>&CG*G5F%Zot5wid09yjpgJ_j0;L)QE)x!nqEV-wafQlXPupfE~
zDoV@)jSC_<MMohQVMnYU*aT2%39Wt=z@d`_9>2>-1dXj~8!9BFCMT8_r-Je@D61lw
z1`007a2QwuVKPX<7?g<fz&4bpDwHSYf!t|qtg4Wl0UmGy4Zaqq=A<T<fQq8jOz<eA
rp^k!)LVl5gu^znfhmuM(kZsq7kA!L|XdwAZL017)nW3g8sDuOn*dtE$

literal 0
HcmV?d00001

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
GIT binary patch
literal 2510
zcmXR&OwLYBPgO`tOwP_vOXK3o%q_?-DpAnj;#5j4D#|Y^R^sARD#^@ERpQd*;?mbw
zaLiNiFGwv)EXmBzQ^+h<NUcasE-lH-OIJv$R0v8fDXP@aRLC!aF#YmNGSezGH1$9_
zLo!ko^5I&`Gjnnjl2R3lQcH?5Q&SX5i$P{2!d#+Ike`#8T&a+mrjS_zQdC-$SFDhj
zrvP@99#=_aK`N3%(n|A^H8dfTU}r*X201WMArI^d-TXXVux162VvzIo6g)vjC#PnX
zrGm{yxDKK)F)sz=aA@Etq@?B~f?ZUC;*+$*%$(E|1&#8|k_@;D!CnSw_VW*MRVc|w
zECG21q!DHs)Puz(i6yBi3MKgp#U=R#AfFahX6B{qfb@ctLmUrxvqENZo_dKwa$-(S
zY6>(Mpne5;O9Sk19R*N~>A93bq6rdl;J8r$8Hw;_zCvkUNoEcxh*R=Yi$Ng;azSYk
zG@L;Z>6Dn9?Vpwgc3v?!BJ)APnqHb%l$ckN3UNCqB1`iW5=#_vQWJ|y6!P<uQ$cD$
zzVJ*_$cLI*tdOXn6_8q#o0ylHSK<mvU^-|{%7nWDlq_@<67y0(DnJI67bO-Hq^3Y(
z8RUkd)RNMoJWx33>w^?PyjYx*np#i{(xi}{Uz86@oT&<F`9)xn6lj=09h8~^O13aB
zCZ?677AYixjDkigBB&sC73*<<f*F#!HS!TDP)8w20cs3187fqBaY8gfR6}A(BVR`$
zNk<_sGe?uF7MxPSj)q8rqZRD`%(O~Gl!Fr%DB{483l5R;#LN-}m|wu|%`Z|&O-#;E
zfI2*}q$D-BphO`lH7&m=RRJ6($Zm&NsDbbwJX0h2L<f{0Ku&?E#_O^0%#w_d%-qx>
zgqaYZf-@g3AH#K#>2+wa0ScV-%(B!x1+Wu{4-im+rjU}FmROoo0?ss`RFYVtP+FW?
ztWaE8T#}j#70xUM38pBNXQbwVq7Rh*3KENpL8%XsBp?9=_Z1>6u%;BW@YPW$fw&(j
zpvw}AK<OQX^NYARLEOC53W!_b8JvqVGfkmH!PXY+uxc(&&JqP%1vRL@z(G=7%f(sC
z#l@MDnwDAwPFfn8pcKkkq8D6}U!bAM#aXMN$;HK)TvDN6Wvh^$TH>6aSCU#$qLBm=
zPSOiXElw=~sRLytkR6$6AXh2aA_{d4O>2k{!XdCMke8Xm#R+x+*bfD;G620e;Nk@N
z1)R`}^&E>q<(ZCx8eBQV%`ijZ!g{VnMKI$t(-goVWUG**=a*Vh0?m~mw?V{h6+k`)
zdmdz0a%xc#$j8Yg6(D0k>cB#ZNS=UM2$JC9g!%&}n2KsQIK3+%>xLBJ5U+ropb2v-
zDC`r9N;DvXT%4T6sX3|1C19r|Cl;qF*yw^><&vM5s-bBGvKU&RfJ9x3ia@c!2~}94
z=L}H;j%Y~Hf?Col6lbRACFX!i#>5hEVTj26#TogfIVqs*j#MW@s~2=rN{UJ$ZgedI
zr_KB#P)P>P0~)F5@u{f*F6A{e6^cuWKs7v~R7?d0Hwfp0JW|UADOs@@5t;`o`eF4u
zD0raZ05$@z?ViONC5c7psU@I<nO~%-kd&XF12Q3AM<G8O6z>peJq@&aNfTar=Vya#
z(AQUh2ZRF1IiPS%Re+Q_pd^%;hgrEnOI)}{P#S<a1f0e}E`jAEM0$hz4xDFd;qFj_
W8v_nfP!@D8DzXBZrvu8|wOjx$L_{e7

literal 0
HcmV?d00001

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
GIT binary patch
literal 2121
zcmXR&OwLYBPgO`tOwP_vOXK3o%q_?-DpAnj;#5k`&nro-C{g0#R4T5_O9s&;nYpP-
zT$)^5`uYkXnaSCyMG6`DIVr^oi3-UXiFtXcISM5ii6sgtsX3WtsYS&K2_>1y*~RJ#
z`Dq{}Ir+)i3W+5OAY+OZic&#VrKTt(RVpMZI3*@$`=_Ppap~*BOfOa_&&<hD0J$SG
zuQXMmBwr!1s3@~6RiQj1HBX@=BUPcGD77pzzqD8(zaX_Ju_QA;Pa(5dp|}L3uc$OH
zFEcM)2V`7vK0-w?#Em71*{KSN3gsD@IbfsH5;H+|mFA=<6qV*FWacRpmS!erD-@R|
zC#Mz{XXfYWag|gSq{2L2TvAk;T%u6T#p$d71va{%Pyl;RFC;TJm5VbODgzE4WQio0
z1k~SLoXI5>5HXN{Q!7gJoFU=Q#R&?oB9I)&%pxw%;*$IV5Eo)7#2wYO5OM#!<WvPv
zbm@UuT(#h+@=Gm;##T{kNoi3YD8BMi%V9nNS(um!3M)_~A;%*){EJibQb1t{3U828
z5HVO>keZyCmI;YMkTldY3W-JOrManjC3-L`GK)bbq?aZZCFYf+rlx@65|lJRX62+N
z7MCdG=Ow4=DJX<wq=LN#N=li<3duS7#i=Qf_zo_~F94a6n_7~Qp8|^K<iwnu)D(sM
zB3SBC00m94o`PoyNIEaSM4>n_4II0<iFug?r8$Wusi1TNGNzy?zbrEa<aS8fS18EO
z$xN<P(8$X#NlePAQ~;TtnU}8Mms(K*^H_e7LQraPYKbPu1ZdL9NL2uNCAA1-Cp6LN
zaix{!B`d%KULy(SL`?-PXk1itaYCX4p)5SJBm*4D8c8||YALB{iKRIuV1epdP4viw
zD^`FQgBGjhnI##Z_$)0h$<GBRy&_QNQgBp&nhOzwWQNk>)MAC=%Hon#s8Wz$O5s7D
zmze_+C`c?WPEA4g8{8cTPwGI;20I<a$C+tRDO+0wkg3&NoY3@bi|%1A&RS3gva(gk
zP0UW!K+Rg3T%08eR<;UikiY~P<7@@V6gpg-oXJS+BnUeREM8Ip;-#mSKy#Nyk|szT
zl&*`cAWj4ELFvd!0m))mE(58q<>D;SOVR@;1Px6t&h&hR61}3*JP;ca6$&NL$O5HV
z1xS|5PXm>Kkd&gQ;FwmDTBHDy)=|jISIEsTf}|p7nU|ERPz=gHkYuD$0!uWSU@aP&
zpkk*)59CTvHrI2>*8rtAkT@jEXh0-26(Gq5B&mRG3fQ$ELy|#(SfZEA#hH?tmRbbW
zovg{l#fd26Gm8}nW?e4MM39%9A?AU~3=L4A>iOlDYiNRuOUo|;S;(20rT|rmlmwtT
zfs2!~mWzv%vp6*;6;ifxCMOm{LIz~8jV?s16&EKb%syL%5<RGO$=RBqxCiO5(S?Kn
zSY?S`vH~Qz>FX;56s4A>=9MU<m6nvk13j%MKUX0s6_njU;SMgI5G9cw$T~>OBAcIF
zQlaOPpO>nk3AP2Upca&JYq>Dv4(?2FLIYP3nhNNZ1}Kma{)c#9FImAx7hK9%aX~@^
z*?$m=LD>mpF&AfEY6UoNfD$QE;RQ;bnQ01OSzB8LP}&38#aW^UVuEC$v4AkCL=O~)
YMS8&{iA5zEAf1}<LJKD6tN|*S0F@1<%m4rY

literal 0
HcmV?d00001

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
GIT binary patch
literal 750
zcmXR&OwLYBPgO`tOwP_vOXK3o%q_?-Dp61>$;?ev;^Hc)EJ#%d$;?eHQpn6JNi9lC
zOiop(=Hd)4Nh~VSNGUB!EXmBzQvj*fbAj?SLDKmJ8k$_3&KjBuHoD0fiBKgVlelWR
zxb*cEQc}|rOLIy<B1H<Bxdl0?xv6<2#Tb^A7H8(ALo5KRg*XXCcX3HkX>tk3Ss-^5
zDQJNxJ&0<EWzGsksU@XFdBqAP8L42yii#CL&dN*8Q7F&IOwLd!N=;79EK7x`NG>fZ
zO3f<)t5hh@NX<j&Q%K7!N-fsoN-NDvR?sL>&_Z^KrUEt}gIor&U!g<~<hCL`XJ{yZ
z!%?9a6q*p5!O{vP`Cw}l64Odji@<iLXO^YrDZm08m+fHVa77Eq8JTG?Cn(t3D&%G6
zfCM?Au2QfCdsxpewHzFHaDz0tIBOMBbBe)H4^yodlv<pMNCO}>a8KnIC}b8ZBq!$N
zq^6*UUuLmFUVe!}X>n?bLSkNJZhld!LSkNuLQ!gQerZv1YOz9YVx>Y-szO>(YHAA3
bfDSGJB{7imk^H2H;U_(aIxfyyu39bt%%lC3

literal 0
HcmV?d00001

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
GIT binary patch
literal 724
zcmXR&OwLYBPgO`tOwP_vOXK3o%q_?-Dp61>$;?ev;^NZR;tJ0!$?#3A2udv}%1kX*
zNG?iEEJ-a^NK_~<N-QWyEmBA<$}i1JQAo_oFUd$PQgBL4&h}4B(@`kT$V|>qD9_Bv
z;VMckDJ{xV2rkJlP{>SE@Jp>IfhyC`RLDpyR!B-s%~MED%*jbjQ7FmJSIAAwt5g8F
zp;)0fGcP%nt0W^;At$l81T3f!lv<oxqM@l!o>&ak#l_{9Uy^F2;F(*HlbV~FSCUwg
znV+YSS*(zkU!qWwQIwjPqFbDpma504rO%aCnwPAA>M@NZgv)aiD-=pI^GeK2G+}}Y
z)m)rVU#Nis%RenG1QZ_CDXBTB>4_k#lXMhv6Dz=?Rv=a_S1lJ;No4^fbYU74ic5-0
zlS@G6!L-8c;NpbohuY4?nOB+%HV`II%LQ?}Mv{USvNJT%!W0yAdM>3!kWi@R;>=7_
zNYaBFZ)>Yy0CEA$OQ4A1;;cniW(QS;s@cX?AxRJJuxc(&PE=z+=5QiZXlsK_h6Y}e
m9?aKzD5(GxR^V8{^cgI&tGSR&Rj^es0P*3bK~-_pasdFDqwl}~

literal 0
HcmV?d00001

diff --git a/vendor/modules.txt b/vendor/modules.txt
index cc125ed7892e00bda7f373537e628ab49a99401a..e4d7aa31821205e1e8eb7e7920a4d8185d08933e 100644
GIT binary patch
delta 74
zcmbQK^HpcUE~(_yyzIoBl1%-i#N_P!v^4!P6NNGpJwrX?$p@K46pXpjGfOf`lk}4F
NbM>*P-MA)K6af2Z8rT2;

delta 15
WcmeyWGgD{6uF3U`Je!pmgGB*0QU#6x

-- 
GitLab