3333//
3434// See borges documentation for more details about the archiving rules.
3535type Archiver struct {
36- Notifiers struct {
37- // Start function, if set, is called whenever a job is started.
38- Start func (* Job )
39- // Stop function, if set, is called whenever a job stops. If
40- // there was an error, it is passed as second parameter,
41- // otherwise, it is nil.
42- Stop func (* Job , error )
43- // Warn function, if set, is called whenever there is a warning
44- // during the processing of a repository.
45- Warn func (* Job , error )
46- }
36+ log log15.Logger
4737
4838 // TemporaryCloner is used to clone repositories into temporary storage.
4939 TemporaryCloner TemporaryCloner
@@ -60,9 +50,11 @@ type Archiver struct {
6050 LockSession lock.Session
6151}
6252
63- func NewArchiver (r * model.RepositoryStore , tx repository.RootedTransactioner ,
64- tc TemporaryCloner , ls lock.Session ) * Archiver {
53+ func NewArchiver (log log15.Logger , r * model.RepositoryStore ,
54+ tx repository.RootedTransactioner , tc TemporaryCloner ,
55+ ls lock.Session ) * Archiver {
6556 return & Archiver {
57+ log : log ,
6658 TemporaryCloner : tc ,
6759 RepositoryStorage : r ,
6860 RootedTransactioner : tx ,
@@ -72,14 +64,19 @@ func NewArchiver(r *model.RepositoryStore, tx repository.RootedTransactioner,
7264
7365// Do archives a repository according to a job.
7466func (a * Archiver ) Do (j * Job ) error {
75- a .notifyStart (j )
76- err := a .do (j )
77- a .notifyStop (j , err )
78- return err
67+ log := a .log .New ("job" , j .RepositoryID )
68+ log .Info ("job started" )
69+ if err := a .do (log , j ); err != nil {
70+ log .Error ("job finished with error" , "error" , err )
71+ return err
72+ }
73+
74+ log .Info ("job finished successfully" )
75+ return nil
7976}
8077
81- func (a * Archiver ) do (j * Job ) (err error ) {
82- log := log . New ( "job" , j . RepositoryID )
78+ func (a * Archiver ) do (log log15. Logger , j * Job ) (err error ) {
79+
8380 now := time .Now ()
8481
8582 r , err := a .getRepositoryModel (j )
@@ -96,7 +93,8 @@ func (a *Archiver) do(j *Job) (err error) {
9693 if err != nil {
9794 return err
9895 }
99- log .Debug ("endpoint selected" , "endpoint" , endpoint )
96+
97+ log = log .New ("endpoint" , endpoint )
10098
10199 gr , err := a .TemporaryCloner .Clone (
102100 context .TODO (),
@@ -157,30 +155,6 @@ func (a *Archiver) getRepositoryModel(j *Job) (*model.Repository, error) {
157155 return r , nil
158156}
159157
160- func (a * Archiver ) notifyStart (j * Job ) {
161- if a .Notifiers .Start == nil {
162- return
163- }
164-
165- a .Notifiers .Start (j )
166- }
167-
168- func (a * Archiver ) notifyStop (j * Job , err error ) {
169- if a .Notifiers .Stop == nil {
170- return
171- }
172-
173- a .Notifiers .Stop (j , err )
174- }
175-
176- func (a * Archiver ) notifyWarn (j * Job , err error ) {
177- if a .Notifiers .Warn == nil {
178- return
179- }
180-
181- a .Notifiers .Warn (j , err )
182- }
183-
184158func selectEndpoint (endpoints []string ) (string , error ) {
185159 if len (endpoints ) == 0 {
186160 return "" , ErrEndpointsEmpty .New ()
@@ -190,13 +164,14 @@ func selectEndpoint(endpoints []string) (string, error) {
190164 return endpoints [0 ], nil
191165}
192166
193- func (a * Archiver ) pushChangesToRootedRepositories (log log15.Logger ,
167+ func (a * Archiver ) pushChangesToRootedRepositories (ctxLog log15.Logger ,
194168 j * Job , r * model.Repository , tr TemporaryRepository , changes Changes ,
195169 now time.Time ) error {
196170
197171 var failedInits []model.SHA1
198172 for ic , cs := range changes {
199- lock := a .LockSession .NewLocker (ic .String ())
173+ log := ctxLog .New ("root" , ic .String ())
174+ lock := a .LockSession .NewLocker (fmt .Sprintf ("borges/%s" , ic .String ()))
200175 ch , err := lock .Lock ()
201176 if err != nil {
202177 failedInits = append (failedInits , ic )
@@ -206,7 +181,7 @@ func (a *Archiver) pushChangesToRootedRepositories(log log15.Logger,
206181
207182 if err := a .pushChangesToRootedRepository (r , tr , ic , cs ); err != nil {
208183 err = ErrPushToRootedRepository .Wrap (err , ic .String ())
209- a . notifyWarn ( j , err )
184+ log . Error ( "error pushing changes to rooted repository" , "error" , err )
210185 failedInits = append (failedInits , ic )
211186 if err := lock .Unlock (); err != nil {
212187 log .Warn ("failed to release lock" , "root" , ic .String (), "error" , err )
@@ -218,7 +193,7 @@ func (a *Archiver) pushChangesToRootedRepositories(log log15.Logger,
218193 r .References = updateRepositoryReferences (r .References , cs , ic )
219194 if err := a .dbUpdateRepository (r , now ); err != nil {
220195 err = ErrPushToRootedRepository .Wrap (err , ic .String ())
221- a . notifyWarn ( j , err )
196+ log . Error ( "error updating repository in database" , "error" , err )
222197 failedInits = append (failedInits , ic )
223198 }
224199
@@ -380,42 +355,22 @@ func checkFailedInits(changes Changes, failed []model.SHA1) error {
380355// NewArchiverWorkerPool creates a new WorkerPool that uses an Archiver to
381356// process jobs. It takes optional start, stop and warn notifier functions that
382357// are equal to the Archiver notifiers but with additional WorkerContext.
383- func NewArchiverWorkerPool (r * model.RepositoryStore ,
358+ func NewArchiverWorkerPool (
359+ log log15.Logger ,
360+ r * model.RepositoryStore ,
384361 tx repository.RootedTransactioner ,
385362 tc TemporaryCloner ,
386- ls lock.Service ,
387- start func (* WorkerContext , * Job ),
388- stop func (* WorkerContext , * Job , error ),
389- warn func (* WorkerContext , * Job , error )) * WorkerPool {
363+ ls lock.Service ) * WorkerPool {
390364
391- do := func (ctx * WorkerContext , j * Job ) error {
365+ do := func (log log15. Logger , j * Job ) error {
392366 lsess , err := ls .NewSession (& lock.SessionConfig {TTL : 10 * time .Second })
393367 if err != nil {
394368 return err
395369 }
396370
397- a := NewArchiver (r , tx , tc , lsess )
398-
399- if start != nil {
400- a .Notifiers .Start = func (j * Job ) {
401- start (ctx , j )
402- }
403- }
404-
405- if stop != nil {
406- a .Notifiers .Stop = func (j * Job , err error ) {
407- stop (ctx , j , err )
408- }
409- }
410-
411- if warn != nil {
412- a .Notifiers .Warn = func (j * Job , err error ) {
413- warn (ctx , j , err )
414- }
415- }
416-
371+ a := NewArchiver (log , r , tx , tc , lsess )
417372 return a .Do (j )
418373 }
419374
420- return NewWorkerPool (do )
375+ return NewWorkerPool (log , do )
421376}
0 commit comments