]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/verify.c
Add heap stats to Dir and SD -- eliminate #ifdefs
[bacula/bacula] / bacula / src / dird / verify.c
index 213d8ddc5f80efab334caf12ac76dc6eccb5dbc1..e6ec1ac98682329e9b8edec3562450d4c92c052c 100644 (file)
@@ -15,7 +15,7 @@
  */
 
 /*
-   Copyright (C) 2000-2003 Kern Sibbald and John Walker
+   Copyright (C) 2000-2004 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -64,12 +64,16 @@ static int missing_handler(void *ctx, int num_fields, char **row);
  */
 int do_verify(JCR *jcr) 
 {
-   char *level, *Name;
+   const char *level, *Name;
    BSOCK   *fd;
    JOB_DBR jr, verify_jr;
-   JobId_t JobId = 0;
+   JobId_t verify_jobid = 0;
    int stat;
 
+   memset(&verify_jr, 0, sizeof(verify_jr));
+   if (!jcr->verify_jr) {
+      jcr->verify_jr = &verify_jr;
+   }
    if (!get_or_create_client_record(jcr)) {
       goto bail_out;
    }
@@ -83,10 +87,12 @@ int do_verify(JCR *jcr)
     *      last backup Job.
     */
    if (jcr->JobLevel == L_VERIFY_CATALOG || 
-       jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG) {
+       jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG ||
+       jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG) {
       memcpy(&jr, &jcr->jr, sizeof(jr));
-      if (jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG &&
-         jcr->job->verify_job) {
+      if (jcr->job->verify_job &&
+         (jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG ||
+          jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG)) {
         Name = jcr->job->verify_job->hdr.name;
       } else {
         Name = NULL;
@@ -104,13 +110,10 @@ int do_verify(JCR *jcr)
         }   
         goto bail_out;
       }
-      JobId = jr.JobId;
-      Dmsg1(100, "Last full Jobid=%d\n", JobId);
+      verify_jobid = jr.JobId;
+      Dmsg1(100, "Last full jobid=%d\n", verify_jobid);
    } 
 
-   jcr->jr.JobId = jcr->JobId;
-   jcr->jr.StartTime = jcr->start_time;
-   jcr->jr.Level = jcr->JobLevel;
    if (!db_update_job_start_record(jcr, jcr->db, &jcr->jr)) {
       Jmsg(jcr, M_FATAL, 0, "%s", db_strerror(jcr->db));
       goto bail_out;
@@ -121,18 +124,17 @@ int do_verify(JCR *jcr)
    }
 
    /* Print Job Start message */
-   Jmsg(jcr, M_INFO, 0, _("Start Verify JobId %d Job=%s\n"),
-      jcr->JobId, jcr->Job);
+   Jmsg(jcr, M_INFO, 0, _("Start Verify JobId=%d Level=%s Job=%s\n"),
+      jcr->JobId, level_to_str(jcr->JobLevel), jcr->Job);
 
    /*
     * Now get the job record for the previous backup that interests
-    *  us. We use the JobId that we found above.
+    *  us. We use the verify_jobid that we found above.
     */
    if (jcr->JobLevel == L_VERIFY_CATALOG || 
        jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG ||
        jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG) {
-      memset(&verify_jr, 0, sizeof(verify_jr));
-      verify_jr.JobId = JobId;
+      verify_jr.JobId = verify_jobid;
       if (!db_get_job_record(jcr, jcr->db, &verify_jr)) {
          Jmsg(jcr, M_FATAL, 0, _("Could not get job record for previous Job. ERR=%s"), 
              db_strerror(jcr->db));
@@ -140,7 +142,7 @@ int do_verify(JCR *jcr)
       }
       if (verify_jr.JobStatus != 'T') {
          Jmsg(jcr, M_FATAL, 0, _("Last Job %d did not terminate normally. JobStatus=%c\n"),
-           JobId, verify_jr.JobStatus);
+           verify_jobid, verify_jr.JobStatus);
         goto bail_out;
       }
       Jmsg(jcr, M_INFO, 0, _("Verifying against JobId=%d Job=%s\n"),
@@ -201,11 +203,10 @@ int do_verify(JCR *jcr)
       jcr->sd_auth_key = bstrdup("dummy");    /* dummy Storage daemon key */
    }
 
-   if (jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG &&
-       jcr->job->verify_job) {
-       jcr->fileset = jcr->job->verify_job->fileset;
+   if (jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG && jcr->job->verify_job) {
+      jcr->fileset = jcr->job->verify_job->fileset;
    }
-   jcr->verify_jr = &verify_jr;
+   Dmsg2(100, "ClientId=%u JobLevel=%c\n", verify_jr.ClientId, jcr->JobLevel);
 
    /*
     * OK, now connect to the File daemon
@@ -286,7 +287,8 @@ int do_verify(JCR *jcr)
       level="disk_to_catalog";
       break;
    default:
-      Jmsg1(jcr, M_FATAL, 0, _("Unimplemented save level %d\n"), jcr->JobLevel);
+      Jmsg2(jcr, M_FATAL, 0, _("Unimplemented save level %d(%c)\n"), jcr->JobLevel,
+        jcr->JobLevel);
       goto bail_out;
    }
 
@@ -313,17 +315,19 @@ int do_verify(JCR *jcr)
       Dmsg0(10, "Verify level=catalog\n");
       jcr->sd_msg_thread_done = true;  /* no SD msg thread, so it is done */
       jcr->SDJobStatus = JS_Terminated;
-      get_attributes_and_compare_to_catalog(jcr, JobId);
+      get_attributes_and_compare_to_catalog(jcr, verify_jobid);
       break;
 
    case L_VERIFY_VOLUME_TO_CATALOG:
       Dmsg0(10, "Verify level=volume\n");
-      get_attributes_and_compare_to_catalog(jcr, JobId);
+      get_attributes_and_compare_to_catalog(jcr, verify_jobid);
       break;
 
    case L_VERIFY_DISK_TO_CATALOG:
       Dmsg0(10, "Verify level=disk_to_catalog\n");
-      get_attributes_and_compare_to_catalog(jcr, JobId);
+      jcr->sd_msg_thread_done = true;  /* no SD msg thread, so it is done */
+      jcr->SDJobStatus = JS_Terminated;
+      get_attributes_and_compare_to_catalog(jcr, verify_jobid);
       break;
 
    case L_VERIFY_INIT:
@@ -340,7 +344,6 @@ int do_verify(JCR *jcr)
    }
 
    stat = wait_for_job_termination(jcr);
-
    verify_cleanup(jcr, stat);
    return 1;
 
@@ -358,11 +361,12 @@ static void verify_cleanup(JCR *jcr, int TermCode)
    char sdt[50], edt[50];
    char ec1[30];
    char term_code[100], fd_term_msg[100], sd_term_msg[100];
-   char *term_msg;
+   const char *term_msg;
    int msg_type;
    JobId_t JobId;
+   const char *Name;
 
-// Dmsg1(000, "Enter verify_cleanup() TermCod=%d\n", TermCode);
+// Dmsg1(100, "Enter verify_cleanup() TermCod=%d\n", TermCode);
 
    JobId = jcr->jr.JobId;
    set_jcr_job_status(jcr, TermCode);
@@ -386,21 +390,29 @@ static void verify_cleanup(JCR *jcr, int TermCode)
       break;
    default:
       term_msg = term_code;
-      sprintf(term_code, _("Inappropriate term code: %c\n"), TermCode);
+      bsnprintf(term_code, sizeof(term_code), 
+                _("Inappropriate term code: %d %c\n"), TermCode, TermCode);
       break;
    }
    bstrftime(sdt, sizeof(sdt), jcr->jr.StartTime);
    bstrftime(edt, sizeof(edt), jcr->jr.EndTime);
+   if (jcr->job->verify_job) {
+      Name = jcr->job->verify_job->hdr.name;
+   } else {
+      Name = "";
+   }
 
    jobstatus_to_ascii(jcr->FDJobStatus, fd_term_msg, sizeof(fd_term_msg));
    if (jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG) {
-       jobstatus_to_ascii(jcr->SDJobStatus, sd_term_msg, sizeof(sd_term_msg));
+      jobstatus_to_ascii(jcr->SDJobStatus, sd_term_msg, sizeof(sd_term_msg));
       Jmsg(jcr, msg_type, 0, _("Bacula " VERSION " (" LSMDATE "): %s\n\
 JobId:                  %d\n\
 Job:                    %s\n\
 FileSet:                %s\n\
 Verify Level:           %s\n\
 Client:                 %s\n\
+Verify JobId:           %d\n\
+Verify Job:             %s\n\
 Start time:             %s\n\
 End time:               %s\n\
 Files Examined:         %s\n\
@@ -414,6 +426,8 @@ Termination:            %s\n\n"),
         jcr->fileset->hdr.name,
         level_to_str(jcr->JobLevel),
         jcr->client->hdr.name,
+        jcr->verify_jr->JobId,
+        Name,
         sdt,
         edt,
         edit_uint64_with_commas(jcr->JobFiles, ec1),
@@ -428,6 +442,8 @@ Job:                    %s\n\
 FileSet:                %s\n\
 Verify Level:           %s\n\
 Client:                 %s\n\
+Verify JobId:           %d\n\
+Verify Job:             %s\n\
 Start time:             %s\n\
 End time:               %s\n\
 Files Examined:         %s\n\
@@ -440,6 +456,8 @@ Termination:            %s\n\n"),
         jcr->fileset->hdr.name,
         level_to_str(jcr->JobLevel),
         jcr->client->hdr.name,
+        jcr->verify_jr->JobId,
+        Name,
         sdt,
         edt,
         edit_uint64_with_commas(jcr->JobFiles, ec1),
@@ -493,7 +511,7 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId)
 
       fname = check_pool_memory_size(fname, fd->msglen);
       jcr->fname = check_pool_memory_size(jcr->fname, fd->msglen);
-      Dmsg1(400, "Atts+SIG=%s\n", fd->msg);
+      Dmsg1(200, "Atts+SIG=%s\n", fd->msg);
       if ((len = sscanf(fd->msg, "%ld %d %100s", &file_index, &stream, 
            fname)) != 3) {
          Jmsg3(jcr, M_FATAL, 0, _("bird<filed: bad attributes, expected 3 fields got %d\n\
@@ -528,7 +546,7 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId)
         jcr->FileIndex = file_index;    /* remember attribute file_index */
         decode_stat(attr, &statf, &LinkFIf);  /* decode file stat packet */
         do_SIG = NO_SIG;
-        jcr->fn_printed = FALSE;
+        jcr->fn_printed = false;
         pm_strcpy(&jcr->fname, fname);  /* move filename into JCR */
 
          Dmsg2(040, "dird<filed: stream=%d %s\n", stream, jcr->fname);
@@ -697,7 +715,7 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId)
    /* Now find all the files that are missing -- i.e. all files in
     *  the database where the MarkedId != current JobId
     */
-   jcr->fn_printed = FALSE;
+   jcr->fn_printed = false;
    sprintf(buf, 
 "SELECT Path.Path,Filename.Name FROM File,Path,Filename "
 "WHERE File.JobId=%d "
@@ -732,7 +750,7 @@ static int missing_handler(void *ctx, int num_fields, char **row)
    if (!jcr->fn_printed) {
       Jmsg(jcr, M_INFO, 0, "\n");
       Jmsg(jcr, M_INFO, 0, _("The following files are missing:\n"));
-      jcr->fn_printed = TRUE;
+      jcr->fn_printed = true;
    }
    Jmsg(jcr, M_INFO, 0, "      %s%s\n", row[0]?row[0]:"", row[1]?row[1]:"");
    return 0;