From: Eric Bollengier Date: Wed, 15 Jul 2009 10:08:00 +0000 (+0000) Subject: ebl fix technotes X-Git-Tag: Release-3.0.2~67 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=ee6795ff69b149a4456b16a3fbaa7dd6b02d430f;p=bacula%2Fbacula ebl fix technotes git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8999 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/src/cats/sql_cmds.c b/bacula/src/cats/sql_cmds.c index 171162c436..476ba63d75 100644 --- a/bacula/src/cats/sql_cmds.c +++ b/bacula/src/cats/sql_cmds.c @@ -44,6 +44,11 @@ #include "bacula.h" #include "cats.h" +const char *cleanup_created_job = + "UPDATE Job SET JobStatus='f', StartTime=SchedTime, EndTime=SchedTime " + "WHERE JobStatus = 'C'"; +const char *cleanup_running_job = + "UPDATE Job SET JobStatus='f', EndTime=StartTime WHERE JobStatus = 'R'"; /* For sql_update.c db_update_stats */ const char *fill_jobhisto = diff --git a/bacula/src/cats/sql_cmds.h b/bacula/src/cats/sql_cmds.h index 438f7591b0..7b967572e8 100644 --- a/bacula/src/cats/sql_cmds.h +++ b/bacula/src/cats/sql_cmds.h @@ -50,6 +50,8 @@ extern const char CATS_IMP_EXP *cnt_JobMedia; extern const char CATS_IMP_EXP *sel_JobMedia; extern const char CATS_IMP_EXP *upd_Purged; +extern const char CATS_IMP_EXP *cleanup_created_job; +extern const char CATS_IMP_EXP *cleanup_running_job; extern const char CATS_IMP_EXP *uar_list_jobs; extern const char CATS_IMP_EXP *uar_count_files; extern const char CATS_IMP_EXP *uar_sel_files; diff --git a/bacula/src/dird/dird.c b/bacula/src/dird/dird.c index fc59364e1f..441a0eb298 100644 --- a/bacula/src/dird/dird.c +++ b/bacula/src/dird/dird.c @@ -53,7 +53,6 @@ extern int job_setattr(PyObject *self, char *attrname, PyObject *value); /* Forward referenced subroutines */ void terminate_dird(int sig); static bool check_resources(); -static bool check_catalog(); static void dir_sql_query(JCR *jcr, const char *cmd); /* Exported subroutines */ @@ -96,8 +95,16 @@ extern "C" { // work around visual compiler mangling variables extern URES res_all; #endif +typedef enum { + CHECK_CONNECTION, /* Check catalog connection */ + UPDATE_CATALOG, /* Ensure that catalog is ok with conf */ + UPDATE_AND_FIX /* Ensure that catalog is ok, and fix old jobs */ +} cat_op; +static bool check_catalog(cat_op mode); + #define CONFIG_FILE "bacula-dir.conf" /* default configuration file */ + static void usage() { fprintf(stderr, _( @@ -265,11 +272,14 @@ int main (int argc, char *argv[]) drop(uid, gid); /* reduce privileges if requested */ - if (!check_catalog()) { + /* If we are in testing mode, we don't try to fix the catalog */ + cat_op mode=(test_config)?CHECK_CONNECTION:UPDATE_AND_FIX; + + if (!check_catalog(mode)) { Jmsg((JCR *)NULL, M_ERROR_TERM, 0, _("Please correct configuration file: %s\n"), configfile); } - - if (test_config) { + + if (test_config) { terminate_dird(0); } @@ -513,7 +523,7 @@ void reload_config(int sig) ok = parse_dir_config(config, configfile, M_ERROR); Dmsg0(100, "Reloaded config file\n"); - if (!ok || !check_resources() || !check_catalog()) { + if (!ok || !check_resources() || !check_catalog(UPDATE_CATALOG)) { rtable = find_free_reload_table_entry(); /* save new, bad table */ if (rtable < 0) { Jmsg(NULL, M_ERROR, 0, _("Please correct configuration file: %s\n"), configfile); @@ -905,7 +915,13 @@ static bool check_resources() return OK; } -static bool check_catalog() +/* + * In this routine, + * - we can check the connection (mode=CHECK_CONNECTION) + * - we can synchronize the catalog with the configuration (mode=UPDATE_CATALOG) + * - we can synchronize, and fix old job records (mode=UPDATE_AND_FIX) + */ +static bool check_catalog(cat_op mode) { bool OK = true; bool need_tls; @@ -936,6 +952,12 @@ static bool check_catalog() continue; } + /* we are in testing mode, so don't touch anything in the catalog */ + if (mode == CHECK_CONNECTION) { + db_close_database(NULL, db); + continue; + } + /* Loop over all pools, defining/updating them in each database */ POOL *pool; foreach_res(pool, R_POOL) { @@ -1055,6 +1077,12 @@ static bool check_catalog() counter->CurrentValue = counter->MinValue; /* default value */ } } + /* cleanup old job records */ + if (mode == UPDATE_AND_FIX) { + db_sql_query(db, cleanup_created_job, NULL, NULL); + db_sql_query(db, cleanup_running_job, NULL, NULL); + } + db_close_database(NULL, db); } /* Set type in global for debugging */ diff --git a/bacula/technotes b/bacula/technotes index e570254ad4..447040a961 100644 --- a/bacula/technotes +++ b/bacula/technotes @@ -4,6 +4,8 @@ General: 15Jul09 kes Add more example SD Device configurations. +ebl Cleanup old job records when starting the director + (Created/Running -> Failed) 14Jul09 kes Tweak debug print in accurate kes Apply patch in bug #1315 by McMichaeli that fixes scripts/logwatch