diff --git a/database-1_test.go b/database-1_test.go index f21d9938661937f879467d6b94d360020bc51a10..4c57ee35df07116869043f2fc2e66e86bd8cefe2 100644 --- a/database-1_test.go +++ b/database-1_test.go @@ -20,6 +20,8 @@ func TestWriteToDB1(t *testing.T) { t.Fatalf("a error occurred while opening the database: %v", err) } + gormDB.Logger = gormDB.Logger.LogMode(4) + manager := &Manager{database: gormDB} saver := NewDBSaver().SetManager(manager) @@ -57,6 +59,16 @@ func TestWriteToDB1(t *testing.T) { time.Sleep(1 * time.Second) + saver.Wait() + + // check if stats are in database + var stats JobPersistence + err = gormDB.First(&stats, "id = ?", job.GetID()).Error + assert.Nil(t, err) + + assert.Equal(t, job.GetID(), stats.ID) + assert.Equal(t, job.GetID(), stats.ID) + err = saver.Stop() assert.Nil(t, err) diff --git a/database-2_test.go b/database-2_test.go index 45d84d219d274ab8ac5b00ff3933026216f2e7c7..5e5c6245773ab2ce62006829d92228df521ec75b 100644 --- a/database-2_test.go +++ b/database-2_test.go @@ -20,6 +20,8 @@ func TestWriteToDB2(t *testing.T) { t.Fatalf("a error occurred while opening the database: %v", err) } + gormDB.Logger = gormDB.Logger.LogMode(4) + manager := &Manager{database: gormDB} saver := NewDBSaver().SetManager(manager) diff --git a/database.go b/database.go index 58781fb6c5d9f6abcf679ed03d63e3ff2e70d26a..040885740a94a3e3cfb803119ca8a076367d6a37 100644 --- a/database.go +++ b/database.go @@ -188,9 +188,9 @@ func CreateOrUpdateJob(job GenericJob, db *gorm.DB) error { } } else { - db.Unscoped().Model(&existingJob).Update("deleted_at", nil) + tx.Unscoped().Model(&existingJob).Update("deleted_at", nil) - tx.Model(&existingJob.Scheduler).Select( + tx.Model(&existingJob).Where("id = ?", existingJob.ID).Select( []string{ "type", "interval", @@ -215,7 +215,12 @@ func CreateOrUpdateJob(job GenericJob, db *gorm.DB) error { } } - tx.Model(&permJob.Stats). + if tx.Error != nil { + Trace("Error while updating job", "error", tx.Error) + return tx.Error + } + + tx.Model(&permJob.Stats).Where("job_id = ?", permJob.GetID()). Select( []string{ "run_count", @@ -246,6 +251,10 @@ func CreateOrUpdateJob(job GenericJob, db *gorm.DB) error { } +func (s *DBSaver) Wait() { + s.jobSaveProgress.Wait() +} + // Stop stops the DBSaver func (s *DBSaver) Stop() error { s.mu.Lock() @@ -282,12 +291,14 @@ func exponentialBackoff(retry int) time.Duration { // SaveJob saves a job to the database func (s *DBSaver) SaveJob(job GenericJob) error { + s.jobSaveProgress.Add(1) s.mu.Lock() defer func() { if r := recover(); r != nil { Error("Error while saving job", "error", r) } s.mu.Unlock() + s.jobSaveProgress.Done() }() if s.saveChannel == nil { diff --git a/manager.go b/manager.go index ea0d2c77c5f3e8c24d95ff67d449851c8072f3af..e30f6e9e41b6155780aa9b5dce4ccf0e81a71bea 100644 --- a/manager.go +++ b/manager.go @@ -501,7 +501,15 @@ func (m *Manager) Stop() error { } if m.dbSaver != nil { - m.dbSaver.Stop() + err = m.dbSaver.Stop() + if err != nil { + if wrappedErr == nil { + wrappedErr = fmt.Errorf("Error: ") + } + + wrappedErr = fmt.Errorf("%w\n%s", wrappedErr, err.Error()) + + } } return wrappedErr