X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fverify.c;h=a4075474467879e12c2df4c6f7ca48ef4f545ed3;hb=44566f589dd96e4414e38ec4bf7d76b22fbcd9aa;hp=8081532727a3222543a380cc8d94a9616087183c;hpb=2c10d832689907ccbbd02369a7a397c545145837;p=bacula%2Fbacula diff --git a/bacula/src/dird/verify.c b/bacula/src/dird/verify.c index 8081532727..a407547446 100644 --- a/bacula/src/dird/verify.c +++ b/bacula/src/dird/verify.c @@ -14,7 +14,7 @@ * Version $Id$ */ /* - Copyright (C) 2000-2005 Kern Sibbald + Copyright (C) 2000-2006 Kern Sibbald This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -33,9 +33,6 @@ #include "dird.h" #include "findlib/find.h" -/* Imported Global Variables */ -extern int debug_level; - /* Commands sent to File daemon */ static char verifycmd[] = "verify level=%s\n"; static char storaddr[] = "storage address=%s port=%d ssl=0\n"; @@ -43,6 +40,7 @@ static char storaddr[] = "storage address=%s port=%d ssl=0\n"; /* Responses received from File daemon */ static char OKverify[] = "2000 OK verify\n"; static char OKstore[] = "2000 OK storage\n"; +static char OKbootstrap[] = "2000 OK bootstrap\n"; /* Forward referenced functions */ static void prt_fname(JCR *jcr); @@ -59,7 +57,9 @@ bool do_verify_init(JCR *jcr) JobId_t verify_jobid = 0; const char *Name; - memset(&jcr->target_jr, 0, sizeof(jcr->target_jr)); + free_wstorage(jcr); /* we don't write */ + + memset(&jcr->previous_jr, 0, sizeof(jcr->previous_jr)); Dmsg1(9, "bdird: created client %s record\n", jcr->client->hdr.name); @@ -103,19 +103,19 @@ bool do_verify_init(JCR *jcr) if (jcr->JobLevel == L_VERIFY_CATALOG || jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG || jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG) { - jcr->target_jr.JobId = verify_jobid; - if (!db_get_job_record(jcr, jcr->db, &jcr->target_jr)) { + jcr->previous_jr.JobId = verify_jobid; + if (!db_get_job_record(jcr, jcr->db, &jcr->previous_jr)) { Jmsg(jcr, M_FATAL, 0, _("Could not get job record for previous Job. ERR=%s"), db_strerror(jcr->db)); return false; } - if (jcr->target_jr.JobStatus != 'T') { + if (jcr->previous_jr.JobStatus != 'T') { Jmsg(jcr, M_FATAL, 0, _("Last Job %d did not terminate normally. JobStatus=%c\n"), - verify_jobid, jcr->target_jr.JobStatus); + verify_jobid, jcr->previous_jr.JobStatus); return false; } Jmsg(jcr, M_INFO, 0, _("Verifying against JobId=%d Job=%s\n"), - jcr->target_jr.JobId, jcr->target_jr.Job); + jcr->previous_jr.JobId, jcr->previous_jr.Job); } /* @@ -125,34 +125,9 @@ bool do_verify_init(JCR *jcr) * File daemon but not used). */ if (jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG) { - RESTORE_CTX rx; - UAContext *ua; - memset(&rx, 0, sizeof(rx)); - rx.bsr = new_bsr(); - rx.JobIds = ""; - rx.bsr->JobId = jcr->target_jr.JobId; - ua = new_ua_context(jcr); - complete_bsr(ua, rx.bsr); - rx.bsr->fi = new_findex(); - rx.bsr->fi->findex = 1; - rx.bsr->fi->findex2 = jcr->target_jr.JobFiles; - jcr->ExpectedFiles = write_bsr_file(ua, rx); - if (jcr->ExpectedFiles == 0) { - free_ua_context(ua); - free_bsr(rx.bsr); + if (!create_restore_bootstrap_file(jcr)) { return false; } - if (jcr->RestoreBootstrap) { - free(jcr->RestoreBootstrap); - } - POOLMEM *fname = get_pool_memory(PM_MESSAGE); - make_unique_restore_filename(ua, &fname); - jcr->RestoreBootstrap = bstrdup(fname); - free_ua_context(ua); - free_bsr(rx.bsr); - free_pool_memory(fname); - jcr->needs_sd = true; - } else { jcr->sd_auth_key = bstrdup("dummy"); /* dummy Storage daemon key */ } @@ -160,7 +135,7 @@ bool do_verify_init(JCR *jcr) if (jcr->JobLevel == L_VERIFY_DISK_TO_CATALOG && jcr->verify_job) { jcr->fileset = jcr->verify_job->fileset; } - Dmsg2(100, "ClientId=%u JobLevel=%c\n", jcr->target_jr.ClientId, jcr->JobLevel); + Dmsg2(100, "ClientId=%u JobLevel=%c\n", jcr->previous_jr.ClientId, jcr->JobLevel); return true; } @@ -198,7 +173,10 @@ bool do_verify(JCR *jcr) /* * Now start a job with the Storage daemon */ - if (!start_storage_daemon_job(jcr, jcr->storage, NULL)) { + if (!start_storage_daemon_job(jcr, jcr->rstorage, NULL)) { + return false; + } + if (!bnet_fsend(jcr->store_bsock, "run")) { return false; } /* @@ -208,6 +186,7 @@ bool do_verify(JCR *jcr) return false; } Dmsg0(50, "Storage daemon connection OK\n"); + } /* * OK, now connect to the File daemon @@ -247,10 +226,10 @@ bool do_verify(JCR *jcr) /* * send Storage daemon address to the File daemon */ - if (jcr->store->SDDport == 0) { - jcr->store->SDDport = jcr->store->SDport; + if (jcr->rstore->SDDport == 0) { + jcr->rstore->SDDport = jcr->rstore->SDport; } - bnet_fsend(fd, storaddr, jcr->store->address, jcr->store->SDDport); + bnet_fsend(fd, storaddr, jcr->rstore->address, jcr->rstore->SDDport); if (!response(jcr, fd, OKstore, "Storage", DISPLAY_ERROR)) { return false; } @@ -258,7 +237,8 @@ bool do_verify(JCR *jcr) /* * Send the bootstrap file -- what Volumes/files to restore */ - if (!send_bootstrap_file(jcr)) { + if (!send_bootstrap_file(jcr, fd) || + !response(jcr, fd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { return false; } @@ -281,7 +261,7 @@ bool do_verify(JCR *jcr) return false; } - if (!send_run_before_and_after_commands(jcr)) { + if (!send_runscripts_commands(jcr)) { return false; } @@ -304,19 +284,19 @@ bool 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, jcr->target_jr.JobId); + get_attributes_and_compare_to_catalog(jcr, jcr->previous_jr.JobId); break; case L_VERIFY_VOLUME_TO_CATALOG: Dmsg0(10, "Verify level=volume\n"); - get_attributes_and_compare_to_catalog(jcr, jcr->target_jr.JobId); + get_attributes_and_compare_to_catalog(jcr, jcr->previous_jr.JobId); break; case L_VERIFY_DISK_TO_CATALOG: Dmsg0(10, "Verify level=disk_to_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, jcr->target_jr.JobId); + get_attributes_and_compare_to_catalog(jcr, jcr->previous_jr.JobId); break; case L_VERIFY_INIT: @@ -440,7 +420,7 @@ void verify_cleanup(JCR *jcr, int TermCode) jcr->fileset->hdr.name, level_to_str(jcr->JobLevel), jcr->client->hdr.name, - jcr->target_jr.JobId, + jcr->previous_jr.JobId, Name, sdt, edt, @@ -473,7 +453,7 @@ void verify_cleanup(JCR *jcr, int TermCode) jcr->fileset->hdr.name, level_to_str(jcr->JobLevel), jcr->client->hdr.name, - jcr->target_jr.JobId, + jcr->previous_jr.JobId, Name, sdt, edt, @@ -570,7 +550,7 @@ int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId) */ fdbr.FileId = 0; if (!db_get_file_attributes_record(jcr, jcr->db, jcr->fname, - &jcr->target_jr, &fdbr)) { + &jcr->previous_jr, &fdbr)) { Jmsg(jcr, M_INFO, 0, _("New file: %s\n"), jcr->fname); Dmsg1(020, _("File not in catalog: %s\n"), jcr->fname); stat = JS_Differences; @@ -727,15 +707,15 @@ 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 + * the database where the MarkId != current JobId */ jcr->fn_printed = false; bsnprintf(buf, sizeof(buf), -"SELECT Path.Path,Filename.Name FROM File,Path,Filename " -"WHERE File.JobId=%d " -"AND File.MarkedId!=%d AND File.PathId=Path.PathId " -"AND File.FilenameId=Filename.FilenameId", - JobId, jcr->JobId); + "SELECT Path.Path,Filename.Name FROM File,Path,Filename " + "WHERE File.JobId=%d " + "AND File.MarkId!=%d AND File.PathId=Path.PathId " + "AND File.FilenameId=Filename.FilenameId", + JobId, jcr->JobId); /* missing_handler is called for each file found */ db_sql_query(jcr->db, buf, missing_handler, (void *)jcr); if (jcr->fn_printed) {