void terminate_dird(int sig);
static bool check_resources();
static void dir_sql_query(JCR *jcr, const char *cmd);
+static void cleanup_old_files();
/* Exported subroutines */
extern "C" void reload_config(int sig);
drop(uid, gid, false); /* reduce privileges if requested */
+ cleanup_old_files();
+
/* If we are in testing mode, we don't try to fix the catalog */
cat_op mode=(test_config)?CHECK_CONNECTION:UPDATE_AND_FIX;
my_name_is(0, NULL, director->name()); /* set user defined name */
/* Plug database interface for library routines */
- p_sql_query = (sql_query)dir_sql_query;
- p_sql_escape = (sql_escape)db_escape_string;
+ p_sql_query = (sql_query_func)dir_sql_query;
+ p_sql_escape = (sql_escape_func)db_escape_string;
FDConnectTimeout = (int)director->FDConnectTimeout;
SDConnectTimeout = (int)director->SDConnectTimeout;
*/
static void reload_job_end_cb(JCR *jcr, void *ctx)
{
- int reload_id = (int)((long int)ctx);
+ int reload_id = (int)((intptr_t)ctx);
Dmsg3(100, "reload job_end JobId=%d table=%d cnt=%d\n", jcr->JobId,
reload_id, reload_table[reload_id].job_count);
lock_jobs();
* Make sure we can open catalog, otherwise print a warning
* message because the server is probably not running.
*/
- db = db_init(NULL, catalog->db_driver, catalog->db_name, catalog->db_user,
- catalog->db_password, catalog->db_address,
- catalog->db_port, catalog->db_socket,
- catalog->mult_db_connections);
+ db = db_init_database(NULL, catalog->db_driver, catalog->db_name, catalog->db_user,
+ catalog->db_password, catalog->db_address,
+ catalog->db_port, catalog->db_socket,
+ catalog->mult_db_connections,
+ catalog->disable_batch_insert);
if (!db || !db_open_database(NULL, db)) {
Pmsg2(000, _("Could not open Catalog \"%s\", database \"%s\".\n"),
catalog->name(), catalog->db_name);
continue;
}
- /* Check if the SQL library is thread-safe */
- db_check_backend_thread_safe();
-
/* Display a message if the db max_connections is too low */
if (!db_check_max_connections(NULL, db, director->MaxConcurrentJobs)) {
Pmsg1(000, "Warning, settings problem for Catalog=%s\n", catalog->name());
db_sql_query(db, cleanup_running_job, NULL, NULL);
}
+ /* Set type in global for debugging */
+ set_db_type(db_get_type(db));
+
db_close_database(NULL, db);
}
- /* Set type in global for debugging */
- set_db_type(db_get_type());
return OK;
}
+
+static void copy_base_name(POOLMEM *cleanup)
+{
+ int len = strlen(director->working_directory);
+#if defined(HAVE_WIN32)
+ pm_strcpy(cleanup, "del /q ");
+#else
+ pm_strcpy(cleanup, "/bin/rm -f ");
+#endif
+ pm_strcat(cleanup, director->working_directory);
+ if (len > 0 && !IsPathSeparator(director->working_directory[len-1])) {
+ pm_strcat(cleanup, "/");
+ }
+ pm_strcat(cleanup, my_name);
+}
+
+static void cleanup_old_files()
+{
+ POOLMEM *cleanup = get_pool_memory(PM_MESSAGE);
+ POOLMEM *results = get_pool_memory(PM_MESSAGE);
+ copy_base_name(cleanup);
+ pm_strcat(cleanup, "*.restore.*.bsr");
+ run_program(cleanup, 0, results);
+ copy_base_name(cleanup);
+ pm_strcat(cleanup, "*.mail");
+ run_program(cleanup, 0, results);
+ free_pool_memory(cleanup);
+ free_pool_memory(results);
+}