From 0f6688e102aee65c82e2f0aba389e2b3e8ccc554 Mon Sep 17 00:00:00 2001 From: Eric Bollengier Date: Wed, 7 Nov 2007 21:34:36 +0000 Subject: [PATCH] ebl Patch to fix only #897. (No backup timing change) git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5876 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/patches/testing/bug_897.patch | 163 ++++++++++++++++++--------- 1 file changed, 111 insertions(+), 52 deletions(-) diff --git a/bacula/patches/testing/bug_897.patch b/bacula/patches/testing/bug_897.patch index 97665960c0..f5d5e79f30 100644 --- a/bacula/patches/testing/bug_897.patch +++ b/bacula/patches/testing/bug_897.patch @@ -1,44 +1,85 @@ -Index: src/filed/job.c +Index: src/dird/backup.c =================================================================== ---- src/filed/job.c (revision 5235) -+++ src/filed/job.c (working copy) -@@ -266,9 +266,6 @@ - bnet_sig(jcr->store_bsock, BNET_TERMINATE); - } +--- src/dird/backup.c (révision 5819) ++++ src/dird/backup.c (copie de travail) +@@ -245,8 +245,7 @@ + set_jcr_job_status(jcr, JS_ErrorTerminated); + Dmsg1(400, "wait for sd. use=%d\n", jcr->use_count()); + /* Cancel SD */ +- cancel_storage_daemon_job(jcr); +- wait_for_storage_daemon_termination(jcr); ++ wait_for_job_termination(jcr, 300); + Dmsg1(400, "after wait for sd. use=%d\n", jcr->use_count()); + return false; + } +@@ -258,7 +257,7 @@ + * are done, we return the job status. + * Also used by restore.c + */ +-int wait_for_job_termination(JCR *jcr) ++int wait_for_job_termination(JCR *jcr, int timeout) + { + int32_t n = 0; + BSOCK *fd = jcr->file_bsock; +@@ -268,8 +267,13 @@ + uint64_t JobBytes = 0; + int VSS = 0; + int Encrypt = 0; ++ btimer_t *tid=NULL; -- /* Run the after job */ -- run_scripts(jcr, jcr->RunScripts, "ClientAfterJob"); -- - generate_daemon_event(jcr, "JobEnd"); + set_jcr_job_status(jcr, JS_Running); ++ ++ if (timeout) { ++ tid = start_bsock_timer(fd, timeout); /* TODO: use user timeout */ ++ } + /* Wait for Client to terminate */ + while ((n = bget_dirmsg(fd)) >= 0) { + if (!fd_ok && +@@ -288,6 +292,9 @@ + break; + } + } ++ if (tid) { ++ stop_bsock_timer(tid); ++ } - dequeue_messages(jcr); /* send any queued messages */ -@@ -1321,7 +1318,25 @@ - return bnet_fsend(dir, OKstore); - } + if (is_bnet_error(fd)) { + Jmsg(jcr, M_FATAL, 0, _("Network error with FD during %s: ERR=%s\n"), +Index: src/dird/protos.h +=================================================================== +--- src/dird/protos.h (révision 5819) ++++ src/dird/protos.h (copie de travail) +@@ -52,7 +52,7 @@ + extern bool find_recycled_volume(JCR *jcr, bool InChanger, MEDIA_DBR *mr); -+static void job_end(JCR *jcr) -+{ -+ char ed1[50], ed2[50]; + /* backup.c */ +-extern int wait_for_job_termination(JCR *jcr); ++extern int wait_for_job_termination(JCR *jcr, int timeout=0); + extern bool do_backup_init(JCR *jcr); + extern bool do_backup(JCR *jcr); + extern void backup_cleanup(JCR *jcr, int TermCode); +Index: src/filed/job.c +=================================================================== +--- src/filed/job.c (révision 5856) ++++ src/filed/job.c (copie de travail) +@@ -261,6 +261,16 @@ + } + } -+ /* Inform Storage daemon that we are done */ -+ if (jcr->store_bsock) { -+ bnet_sig(jcr->store_bsock, BNET_TERMINATE); ++ if (jcr->JobId) { ++ char ed1[50], ed2[50]; ++ /* Send termination status back to Dir */ ++ bnet_fsend(dir, EndJob, jcr->JobStatus, jcr->JobFiles, ++ edit_uint64(jcr->ReadBytes, ed1), ++ edit_uint64(jcr->JobBytes, ed2), jcr->Errors, jcr->VSS, ++ jcr->pki_encrypt); ++ Dmsg1(110, "End FD msg: %s\n", dir->msg); + } + -+ /* Run the after job */ -+ run_scripts(jcr, jcr->RunScripts, "ClientAfterJob"); -+ -+ bnet_fsend(jcr->dir_bsock, EndJob, jcr->JobStatus, jcr->JobFiles, -+ edit_uint64(jcr->ReadBytes, ed1), -+ edit_uint64(jcr->JobBytes, ed2), jcr->Errors, (int)jcr->VSS, -+ jcr->pki_encrypt); -+ Dmsg1(110, "End FD msg: %s\n", jcr->dir_bsock->msg); -+} -+ - /* - * Do a backup. - */ -@@ -1331,15 +1346,13 @@ + /* Inform Storage daemon that we are done */ + if (jcr->store_bsock) { + bnet_sig(jcr->store_bsock, BNET_TERMINATE); +@@ -1331,15 +1341,13 @@ BSOCK *sd = jcr->store_bsock; int ok = 0; int SDJobStatus; @@ -56,7 +97,7 @@ Index: src/filed/job.c /* Run only one at a time */ P(vss_mutex); } -@@ -1395,7 +1408,7 @@ +@@ -1395,7 +1403,7 @@ #if defined(WIN32_VSS) /* START VSS ON WIN 32 */ @@ -65,7 +106,7 @@ Index: src/filed/job.c if (g_pVSSClient->InitializeForBackup()) { /* tell vss which drives to snapshot */ char szWinDriveLetters[27]; -@@ -1488,7 +1501,7 @@ +@@ -1488,7 +1496,7 @@ #if defined(WIN32_VSS) /* STOP VSS ON WIN 32 */ /* tell vss to close the backup session */ @@ -74,7 +115,7 @@ Index: src/filed/job.c if (g_pVSSClient->CloseBackup()) { /* inform user about writer states */ for (int i=0; i<(int)g_pVSSClient->GetWriterCount(); i++) { -@@ -1504,12 +1517,8 @@ +@@ -1504,12 +1512,6 @@ } #endif @@ -84,12 +125,19 @@ Index: src/filed/job.c - jcr->pki_encrypt); - Dmsg1(110, "End FD msg: %s\n", dir->msg); - -+ job_end(jcr); -+ return 0; /* return and stop command loop */ } -@@ -1585,12 +1594,7 @@ +@@ -1521,7 +1523,7 @@ + { + BSOCK *dir = jcr->dir_bsock; + BSOCK *sd = jcr->store_bsock; +- char level[100], ed1[50], ed2[50]; ++ char level[100]; + + jcr->JobType = JT_VERIFY; + if (sscanf(dir->msg, verifycmd, level) != 1) { +@@ -1585,15 +1587,6 @@ bnet_sig(dir, BNET_EOD); @@ -99,11 +147,21 @@ Index: src/filed/job.c - edit_uint64(jcr->JobBytes, ed2), jcr->Errors, 0, - jcr->pki_encrypt); - Dmsg1(110, "End FD msg: %s\n", dir->msg); -+ job_end(jcr); +- +- /* Inform Director that we are done */ +- bnet_sig(dir, BNET_TERMINATE); + return 0; /* return and terminate command loop */ + } + +@@ -1609,7 +1602,6 @@ + bool use_regexwhere=false; + int prefix_links; + char replace; +- char ed1[50], ed2[50]; - /* Inform Director that we are done */ - bnet_sig(dir, BNET_TERMINATE); -@@ -1696,13 +1700,9 @@ + /* + * Scan WHERE (base directory for restore) from command +@@ -1696,16 +1688,7 @@ if (jcr->Errors) { set_jcr_job_status(jcr, JS_ErrorTerminated); } @@ -114,16 +172,17 @@ Index: src/filed/job.c - jcr->pki_encrypt); - Dmsg1(110, "End FD msg: %s\n", dir->msg); -+ job_end(jcr); -+ - /* Inform Director that we are done */ - bnet_sig(dir, BNET_TERMINATE); - +- /* Inform Director that we are done */ +- bnet_sig(dir, BNET_TERMINATE); +- + Dmsg0(130, "Done in job.c\n"); + return 0; /* return and terminate command loop */ + } Index: src/jcr.h =================================================================== ---- src/jcr.h (revision 5235) -+++ src/jcr.h (working copy) -@@ -297,6 +297,7 @@ +--- src/jcr.h (révision 5856) ++++ src/jcr.h (copie de travail) +@@ -301,6 +301,7 @@ int32_t pki_session_encoded_size; /* Size of DER-encoded pki_session */ POOLMEM *crypto_buf; /* Encryption/Decryption buffer */ DIRRES* director; /* Director resource */ -- 2.39.5