]> git.sur5r.net Git - bacula/bacula/commitdiff
Uses a dedicated connection when running bvfs_update command
authorEric Bollengier <eric@eb.homelinux.org>
Sun, 7 Mar 2010 10:56:49 +0000 (11:56 +0100)
committerEric Bollengier <eric@eb.homelinux.org>
Mon, 2 Aug 2010 14:49:38 +0000 (16:49 +0200)
bacula/src/dird/protos.h
bacula/src/dird/ua.h
bacula/src/dird/ua_cmds.c
bacula/src/dird/ua_dotcmds.c

index 9f84950337e4fa98c77423513f2415f91ecdf941..2055b8cb724fd41cf7ba4d36077fe71b4a5d0ed8 100644 (file)
@@ -191,6 +191,7 @@ bool acl_access_ok(UAContext *ua, int acl, const char *item, int len);
 bool do_a_command(UAContext *ua);
 bool do_a_dot_command(UAContext *ua);
 int qmessagescmd(UAContext *ua, const char *cmd);
+bool open_new_client_db(UAContext *ua);
 bool open_client_db(UAContext *ua);
 bool open_db(UAContext *ua);
 void close_db(UAContext *ua);
index 522ac87a7bf4a86d6ab73789c55930dc0f8fac1c..bdd67addce0bf644432cd224788f23bc4184e132 100644 (file)
@@ -53,6 +53,7 @@ public:
    int max_prompts;                   /* max size of list */
    int num_prompts;                   /* current number in list */
    int api;                           /* For programs want an API */
+   bool force_mult_db_connections;    /* overwrite cat.mult_db_connections */
    bool auto_display_messages;        /* if set, display messages */
    bool user_notified_msg_pending;    /* set when user notified */
    bool automount;                    /* if set, mount after label */
index 829382f54df9bbdbfdf5c1d1f79b19f6e9eaff42..37d0d9e439af2ead157c043649659c9c4c620279 100644 (file)
@@ -1955,6 +1955,22 @@ static int version_cmd(UAContext *ua, const char *cmd)
 }
 #endif
 
+/* 
+ * This call uses open_client_db() and force a
+ * new dedicated connection to the catalog
+ */
+bool open_new_client_db(UAContext *ua)
+{   
+   bool ret;
+
+   /* Force a new dedicated connection */
+   close_db(ua);
+   ua->force_mult_db_connections = true;
+   ret = open_client_db(ua);
+   ua->force_mult_db_connections = false;
+   return ret;
+}
+
 /* 
  * This call explicitly checks for a catalog=xxx and
  *  if given, opens that catalog.  It also checks for
@@ -2040,6 +2056,8 @@ bool open_client_db(UAContext *ua)
  */
 bool open_db(UAContext *ua)
 {
+   bool mult_db_conn;
+
    if (ua->db) {
       return true;
    }
@@ -2051,6 +2069,12 @@ bool open_db(UAContext *ua)
       }
    }
 
+   /* Some modules like bvfs need their own catalog connection */
+   mult_db_conn = ua->catalog->mult_db_connections;
+   if (ua->force_mult_db_connections) {
+      mult_db_conn = true;
+   }
+
    ua->jcr->catalog = ua->catalog;
 
    Dmsg0(100, "UA Open database\n");
@@ -2058,7 +2082,7 @@ bool open_db(UAContext *ua)
                              ua->catalog->db_user,
                              ua->catalog->db_password, ua->catalog->db_address,
                              ua->catalog->db_port, ua->catalog->db_socket,
-                             ua->catalog->mult_db_connections);
+                             mult_db_conn);
    if (!ua->db || !db_open_database(ua->jcr, ua->db)) {
       ua->error_msg(_("Could not open catalog database \"%s\".\n"),
                  ua->catalog->db_name);
index 4bc9c5c73b57f2878ae2027d23d8e103ae744568..1c42caf0cfdb2f128777061dcd397ab37c08b864 100644 (file)
@@ -165,8 +165,7 @@ bool do_a_dot_command(UAContext *ua)
 
 static bool dot_bvfs_update(UAContext *ua, const char *cmd)
 {
-
-   if (!open_client_db(ua)) {
+   if (!open_new_client_db(ua)) {
       return 1;
    }
 
@@ -179,6 +178,8 @@ static bool dot_bvfs_update(UAContext *ua, const char *cmd)
       /* update cache for all jobids */
       bvfs_update_cache(ua->jcr, ua->db);
    }
+   
+   close_db(ua);
    return true;
 }