From: Eric Bollengier Date: Tue, 12 Apr 2022 16:08:43 +0000 (+0200) Subject: Fix #9035 Sync the Job and JobHisto table when "update stats" is issued X-Git-Tag: Beta-15.0.0~595 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e9d0f9111363782d74b58f8f3b1615d86030641f;p=thirdparty%2Fbacula.git Fix #9035 Sync the Job and JobHisto table when "update stats" is issued --- diff --git a/bacula/src/cats/sql_cmds.c b/bacula/src/cats/sql_cmds.c index 756dc6a2c..610d0bb97 100644 --- a/bacula/src/cats/sql_cmds.c +++ b/bacula/src/cats/sql_cmds.c @@ -47,6 +47,21 @@ const char *cleanup_created_job = const char *cleanup_running_job = "UPDATE Job SET JobStatus='f', EndTime=StartTime WHERE JobStatus = 'R'"; +const char *sync_jobhisto_def = "UPDATE JobHisto SET PurgedFiles=Job.PurgedFiles, HasCache=Job.HasCache,Reviewed=Job.Reviewed " + "FROM Job WHERE Job.JobId=JobHisto.JobId and Job.Job = JobHisto.Job " + "AND (Job.HasCache <> JobHisto.HasCache OR Job.PurgedFiles <> JobHisto.PurgedFiles OR Job.Reviewed <> JobHisto.Reviewed)"; +const char *sync_jobhisto[] = +{ + // MySQL + "UPDATE JobHisto JOIN Job USING (JobId) SET JobHisto.PurgedFiles=Job.PurgedFiles, JobHisto.HasCache=Job.HasCache, JobHisto.Reviewed=Job.Reviewed " + "WHERE Job.JobId=JobHisto.JobId and Job.Job = JobHisto.Job " + "AND (Job.HasCache <> JobHisto.HasCache OR Job.PurgedFiles <> JobHisto.PurgedFiles OR Job.Reviewed <> JobHisto.Reviewed)", + // PostgreSQL + sync_jobhisto_def, + // SQLite + sync_jobhisto_def +}; + /* For sql_update.c db_update_stats */ const char *fill_jobhisto = "INSERT INTO JobHisto (JobId, Job, Name, Type, Level," diff --git a/bacula/src/cats/sql_cmds.h b/bacula/src/cats/sql_cmds.h index 641952c74..2f78896bd 100644 --- a/bacula/src/cats/sql_cmds.h +++ b/bacula/src/cats/sql_cmds.h @@ -36,6 +36,7 @@ extern const char CATS_IMP_EXP *bvfs_select_delta_version_with_basejob_and_delta extern const char CATS_IMP_EXP *get_created_running_job; extern const char CATS_IMP_EXP *cleanup_created_job; extern const char CATS_IMP_EXP *cleanup_running_job; +extern const char CATS_IMP_EXP *sync_jobhisto[]; extern const char CATS_IMP_EXP *client_backups; extern const char CATS_IMP_EXP *cnt_File; extern const char CATS_IMP_EXP *create_delindex; diff --git a/bacula/src/dird/ua_update.c b/bacula/src/dird/ua_update.c index 16dbb78db..927ed9224 100644 --- a/bacula/src/dird/ua_update.c +++ b/bacula/src/dird/ua_update.c @@ -882,6 +882,11 @@ static bool update_stats(UAContext *ua) int nb = db_update_stats(ua->jcr, ua->db, since); ua->info_msg(_("Updating %i job(s).\n"), nb); + /* Can be removed in 2024. This is a workaround for a minor issue + * about the "update stats" command. + */ + db_sql_query(ua->db, sync_jobhisto[db_get_type_index(ua->db)], NULL, NULL); + return true; }