1 This patch fixes all orphan jobs from catalog (Running/Created) during
4 This avoid phantom jobs with bweb or bat.
7 patch -p0 < cleanup_CR_catalog_at_start.patch
8 ./configure <your options>
14 Index: src/dird/dird.c
15 ===================================================================
16 --- src/dird/dird.c (revision 7176)
17 +++ src/dird/dird.c (working copy)
19 /* Forward referenced subroutines */
20 void terminate_dird(int sig);
21 static bool check_resources();
22 +static void cleanup_catalog();
23 static bool check_catalog();
24 static void dir_sql_query(JCR *jcr, const char *cmd);
27 set_thread_concurrency(director->MaxConcurrentJobs * 2 +
28 4 /* UA */ + 4 /* sched+watchdog+jobsvr+misc */);
30 + cleanup_catalog(); /* cleanup old running jobs */
32 Dmsg0(200, "Start UA server\n");
33 start_UA_server(director->DIRaddrs);
39 +/* Cleanup old catalog records during starting */
40 +static void cleanup_catalog()
43 + foreach_res(catalog, R_CATALOG) {
46 + * Make sure we can open catalog, otherwise print a warning
47 + * message because the server is probably not running.
49 + db = db_init(NULL, catalog->db_driver, catalog->db_name, catalog->db_user,
50 + catalog->db_password, catalog->db_address,
51 + catalog->db_port, catalog->db_socket,
52 + catalog->mult_db_connections);
53 + if (!db || !db_open_database(NULL, db)) {
54 + Pmsg2(000, _("Could not open Catalog \"%s\", database \"%s\".\n"),
55 + catalog->name(), catalog->db_name);
56 + Jmsg(NULL, M_FATAL, 0, _("Could not open Catalog \"%s\", database \"%s\".\n"),
57 + catalog->name(), catalog->db_name);
59 + Jmsg(NULL, M_FATAL, 0, _("%s"), db_strerror(db));
60 + Pmsg1(000, "%s", db_strerror(db));
61 + db_close_database(NULL, db);
64 + } else { /* connection is OK */
65 + db_cleanup_job_record(NULL, db); /* check if jobs are running ?? */
66 + db_close_database(NULL, db);
71 static bool check_catalog()
74 Index: src/cats/sql_update.c
75 ===================================================================
76 --- src/cats/sql_update.c (revision 7176)
77 +++ src/cats/sql_update.c (working copy)
82 +db_cleanup_job_record(JCR *jcr, B_DB *mdb)
85 + char query[] = "UPDATE Job SET JobStatus = 'f', EndTime = NOW() WHERE JobStatus IN ('R', 'C')";
88 + stat = UPDATE_DB(jcr, mdb, query);
94 db_update_storage_record(JCR *jcr, B_DB *mdb, STORAGE_DBR *sr)
97 Index: src/cats/protos.h
98 ===================================================================
99 --- src/cats/protos.h (revision 7176)
100 +++ src/cats/protos.h (working copy)
102 void db_list_client_records(JCR *jcr, B_DB *mdb, DB_LIST_HANDLER *sendit, void *ctx, e_list_type type);
105 +bool db_cleanup_job_record(JCR *jcr, B_DB *mdb);
106 bool db_update_job_start_record(JCR *jcr, B_DB *db, JOB_DBR *jr);
107 int db_update_job_end_record(JCR *jcr, B_DB *db, JOB_DBR *jr, bool stats_enabled);
108 int db_update_client_record(JCR *jcr, B_DB *mdb, CLIENT_DBR *cr);