From 6b8861d783bf6555d307357cbf9431f790b9cf78 Mon Sep 17 00:00:00 2001 From: Volker Schukai <volker.schukai@schukai.com> Date: Wed, 13 Mar 2024 10:37:01 +0100 Subject: [PATCH] fix: add where statements and add error handling #45 --- database-1_test.go | 12 ++++++++++++ database-2_test.go | 2 ++ database.go | 17 ++++++++++++++--- manager.go | 10 +++++++++- 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/database-1_test.go b/database-1_test.go index f21d993..4c57ee3 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 45d84d2..5e5c624 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 58781fb..0408857 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 ea0d2c7..e30f6e9 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 -- GitLab