From: Kern Sibbald Date: Sun, 14 Jun 2009 08:31:20 +0000 (+0000) Subject: move 3.0.0 patches to 3.0.x dir X-Git-Tag: Release-3.0.2~164 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=ab81d532ab8d3ebe3081d57f156ecb8b32dcdef8;p=bacula%2Fbacula move 3.0.0 patches to 3.0.x dir git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8902 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/patches/3.0.0-maxruntime.patch b/bacula/patches/3.0.0-maxruntime.patch deleted file mode 100644 index 0bfabd5f67..0000000000 --- a/bacula/patches/3.0.0-maxruntime.patch +++ /dev/null @@ -1,15 +0,0 @@ - - This patch can be applied to version 3.0.1 and fixes a - syntax error that causes builds on older Solarises to fail. - - Apply it to version 3.0.1 with: - - cd - patch -p0 <3.0.1-solaris-acl.patch - ./configure - make - ... - make install - - - diff --git a/bacula/patches/3.0.0-read-vol-list.patch b/bacula/patches/3.0.0-read-vol-list.patch deleted file mode 100644 index de1cfea600..0000000000 --- a/bacula/patches/3.0.0-read-vol-list.patch +++ /dev/null @@ -1,282 +0,0 @@ - - This patch can be applied to version 3.0.0. It ensures that the list - of volumes to be read is created very early when starting the Job in - the SD (before the drive reservation) so that any Volume to be read - cannot also be chosen to append. - - Apply it to version 3.0.0 with: - - cd - patch -p0 <3.0.0-read-vol-list.patch - ./configure - make - ... - make install - - - -Index: src/dird/msgchan.c -=================================================================== ---- src/dird/msgchan.c (revision 8699) -+++ src/dird/msgchan.c (working copy) -@@ -144,10 +144,12 @@ - } - #endif - -+static char OKbootstrap[] = "3000 OK bootstrap\n"; -+ - /* - * Start a job with the Storage daemon - */ --bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore) -+bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, bool send_bsr) - { - bool ok = true; - STORE *storage; -@@ -196,7 +198,7 @@ - &jcr->VolSessionTime, &auth_key) != 3) { - Dmsg1(100, "BadJob=%s\n", sd->msg); - Jmsg(jcr, M_FATAL, 0, _("Storage daemon rejected Job command: %s\n"), sd->msg); -- return 0; -+ return false; - } else { - jcr->sd_auth_key = bstrdup(auth_key); - Dmsg1(150, "sd_auth_key=%s\n", jcr->sd_auth_key); -@@ -204,9 +206,14 @@ - } else { - Jmsg(jcr, M_FATAL, 0, _("bstrerror()); -- return 0; -+ return false; - } - -+ if (send_bsr && (!send_bootstrap_file(jcr, sd) || -+ !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR))) { -+ return false; -+ } -+ - /* - * We have two loops here. The first comes from the - * Storage = associated with the Job, and we need -Index: src/dird/migrate.c -=================================================================== ---- src/dird/migrate.c (revision 8699) -+++ src/dird/migrate.c (working copy) -@@ -55,7 +55,6 @@ - - static const int dbglevel = 10; - --static char OKbootstrap[] = "3000 OK bootstrap\n"; - static int get_job_to_migrate(JCR *jcr); - struct idpkt; - static bool regex_find_jobids(JCR *jcr, idpkt *ids, const char *query1, -@@ -353,15 +352,11 @@ - ((STORE *)jcr->rstorage->first())->name()); - return false; - } -- if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage)) { -+ if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage, /*send_bsr*/true)) { - return false; - } - Dmsg0(150, "Storage daemon connection OK\n"); - -- if (!send_bootstrap_file(jcr, sd) || -- !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { -- return false; -- } - - /* - * We re-update the job start record so that the start -Index: src/dird/protos.h -=================================================================== ---- src/dird/protos.h (revision 8699) -+++ src/dird/protos.h (working copy) -@@ -155,7 +155,8 @@ - /* msgchan.c */ - extern bool connect_to_storage_daemon(JCR *jcr, int retry_interval, - int max_retry_time, int verbose); --extern bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore); -+extern bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, -+ bool send_bsr=false); - extern bool start_storage_daemon_message_thread(JCR *jcr); - extern int bget_dirmsg(BSOCK *bs); - extern void wait_for_storage_daemon_termination(JCR *jcr); -Index: src/dird/vbackup.c -=================================================================== ---- src/dird/vbackup.c (revision 8699) -+++ src/dird/vbackup.c (working copy) -@@ -50,8 +50,6 @@ - - static const int dbglevel = 10; - --static char OKbootstrap[] = "3000 OK bootstrap\n"; -- - static bool create_bootstrap_file(JCR *jcr, POOLMEM *jobids); - void vbackup_cleanup(JCR *jcr, int TermCode); - -@@ -217,16 +215,11 @@ - /* - * Now start a job with the Storage daemon - */ -- if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage)) { -+ if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage, /*send_bsr*/true)) { - return false; - } - Dmsg0(100, "Storage daemon connection OK\n"); - -- if (!send_bootstrap_file(jcr, sd) || -- !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { -- return false; -- } -- - /* - * We re-update the job start record so that the start - * time is set after the run before job. This avoids -Index: src/stored/fd_cmds.c -=================================================================== ---- src/stored/fd_cmds.c (revision 8699) -+++ src/stored/fd_cmds.c (working copy) -@@ -388,6 +388,8 @@ - if (debug_level >= 10) { - dump_bsr(jcr->bsr, true); - } -+ /* If we got a bootstrap, we are reading, so create read volume list */ -+ create_restore_volume_list(jcr); - ok = true; - - bail_out: -Index: src/stored/read.c -=================================================================== ---- src/stored/read.c (revision 8699) -+++ src/stored/read.c (working copy) -@@ -1,7 +1,7 @@ - /* - Bacula® - The Network Backup Solution - -- Copyright (C) 2000-2008 Free Software Foundation Europe e.V. -+ Copyright (C) 2000-2009 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. -@@ -62,11 +62,8 @@ - return false; - } - -- -- create_restore_volume_list(jcr); - if (jcr->NumReadVolumes == 0) { - Jmsg(jcr, M_FATAL, 0, _("No Volume names found for restore.\n")); -- free_restore_volume_list(jcr); - fd->fsend(FD_error); - return false; - } -@@ -76,7 +73,6 @@ - - /* Ready device for reading */ - if (!acquire_device_for_read(dcr)) { -- free_restore_volume_list(jcr); - fd->fsend(FD_error); - return false; - } -@@ -92,7 +88,6 @@ - ok = false; - } - -- free_restore_volume_list(jcr); - Dmsg0(30, "Done reading.\n"); - return ok; - } -Index: src/stored/parse_bsr.c -=================================================================== ---- src/stored/parse_bsr.c (revision 8699) -+++ src/stored/parse_bsr.c (working copy) -@@ -1,7 +1,7 @@ - /* - Bacula® - The Network Backup Solution - -- Copyright (C) 2002-2008 Free Software Foundation Europe e.V. -+ Copyright (C) 2002-2009 Free Software Foundation Europe e.V. - - The main author of Bacula is Kern Sibbald, with contributions from - many others, a complete list can be found in the file AUTHORS. -Index: src/stored/mac.c -=================================================================== ---- src/stored/mac.c (revision 8699) -+++ src/stored/mac.c (working copy) -@@ -84,8 +84,6 @@ - } - Dmsg2(100, "read_dcr=%p write_dcr=%p\n", jcr->read_dcr, jcr->dcr); - -- -- create_restore_volume_list(jcr); - if (jcr->NumReadVolumes == 0) { - Jmsg(jcr, M_FATAL, 0, _("No Volume names found for %s.\n"), Type); - goto bail_out; -@@ -161,11 +159,8 @@ - } - } - -- free_restore_volume_list(jcr); -- - dir_send_job_status(jcr); /* update director */ - -- - Dmsg0(30, "Done reading.\n"); - jcr->end_time = time(NULL); - dequeue_messages(jcr); /* send any queued messages */ -Index: src/stored/vol_mgr.c -=================================================================== ---- src/stored/vol_mgr.c (revision 8699) -+++ src/stored/vol_mgr.c (working copy) -@@ -529,6 +529,7 @@ - VOLRES vol, *fvol; - - if (read_vol_list->empty()) { -+ Dmsg0(dbglvl, "find_read_vol: read_vol_list empty.\n"); - return NULL; - } - /* Do not lock reservations here */ -Index: src/stored/job.c -=================================================================== ---- src/stored/job.c (revision 8699) -+++ src/stored/job.c (working copy) -@@ -371,6 +371,8 @@ - free_bsr(jcr->bsr); - jcr->bsr = NULL; - } -+ /* Free any restore volume list created */ -+ free_restore_volume_list(jcr); - if (jcr->RestoreBootstrap) { - unlink(jcr->RestoreBootstrap); - free_pool_memory(jcr->RestoreBootstrap); -Index: src/stored/acquire.c -=================================================================== ---- src/stored/acquire.c (revision 8699) -+++ src/stored/acquire.c (working copy) -@@ -187,7 +187,7 @@ - if (!dir_get_volume_info(dcr, GET_VOL_INFO_FOR_READ)) { - Dmsg2(150, "dir_get_vol_info failed for vol=%s: %s\n", - dcr->VolumeName, jcr->errmsg); -- Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg); -+ Jmsg1(jcr, M_WARNING, 0, "Read acquire: %s", jcr->errmsg); - } - dev->set_load(); /* set to load volume */ - -@@ -241,7 +241,7 @@ - * error messages when nothing is mounted. - */ - if (tape_previously_mounted) { -- Jmsg(jcr, M_WARNING, 0, "%s", jcr->errmsg); -+ Jmsg(jcr, M_WARNING, 0, "Read acquire: %s", jcr->errmsg); - } - goto default_path; - case VOL_NAME_ERROR: -@@ -257,7 +257,7 @@ - dev->set_load(); - /* Fall through */ - default: -- Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg); -+ Jmsg1(jcr, M_WARNING, 0, "Read acquire: %s", jcr->errmsg); - default_path: - Dmsg0(50, "default path\n"); - tape_previously_mounted = true; diff --git a/bacula/patches/3.0.x/3.0.0-maxruntime.patch b/bacula/patches/3.0.x/3.0.0-maxruntime.patch new file mode 100644 index 0000000000..0bfabd5f67 --- /dev/null +++ b/bacula/patches/3.0.x/3.0.0-maxruntime.patch @@ -0,0 +1,15 @@ + + This patch can be applied to version 3.0.1 and fixes a + syntax error that causes builds on older Solarises to fail. + + Apply it to version 3.0.1 with: + + cd + patch -p0 <3.0.1-solaris-acl.patch + ./configure + make + ... + make install + + + diff --git a/bacula/patches/3.0.x/3.0.0-read-vol-list.patch b/bacula/patches/3.0.x/3.0.0-read-vol-list.patch new file mode 100644 index 0000000000..de1cfea600 --- /dev/null +++ b/bacula/patches/3.0.x/3.0.0-read-vol-list.patch @@ -0,0 +1,282 @@ + + This patch can be applied to version 3.0.0. It ensures that the list + of volumes to be read is created very early when starting the Job in + the SD (before the drive reservation) so that any Volume to be read + cannot also be chosen to append. + + Apply it to version 3.0.0 with: + + cd + patch -p0 <3.0.0-read-vol-list.patch + ./configure + make + ... + make install + + + +Index: src/dird/msgchan.c +=================================================================== +--- src/dird/msgchan.c (revision 8699) ++++ src/dird/msgchan.c (working copy) +@@ -144,10 +144,12 @@ + } + #endif + ++static char OKbootstrap[] = "3000 OK bootstrap\n"; ++ + /* + * Start a job with the Storage daemon + */ +-bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore) ++bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, bool send_bsr) + { + bool ok = true; + STORE *storage; +@@ -196,7 +198,7 @@ + &jcr->VolSessionTime, &auth_key) != 3) { + Dmsg1(100, "BadJob=%s\n", sd->msg); + Jmsg(jcr, M_FATAL, 0, _("Storage daemon rejected Job command: %s\n"), sd->msg); +- return 0; ++ return false; + } else { + jcr->sd_auth_key = bstrdup(auth_key); + Dmsg1(150, "sd_auth_key=%s\n", jcr->sd_auth_key); +@@ -204,9 +206,14 @@ + } else { + Jmsg(jcr, M_FATAL, 0, _("bstrerror()); +- return 0; ++ return false; + } + ++ if (send_bsr && (!send_bootstrap_file(jcr, sd) || ++ !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR))) { ++ return false; ++ } ++ + /* + * We have two loops here. The first comes from the + * Storage = associated with the Job, and we need +Index: src/dird/migrate.c +=================================================================== +--- src/dird/migrate.c (revision 8699) ++++ src/dird/migrate.c (working copy) +@@ -55,7 +55,6 @@ + + static const int dbglevel = 10; + +-static char OKbootstrap[] = "3000 OK bootstrap\n"; + static int get_job_to_migrate(JCR *jcr); + struct idpkt; + static bool regex_find_jobids(JCR *jcr, idpkt *ids, const char *query1, +@@ -353,15 +352,11 @@ + ((STORE *)jcr->rstorage->first())->name()); + return false; + } +- if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage)) { ++ if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage, /*send_bsr*/true)) { + return false; + } + Dmsg0(150, "Storage daemon connection OK\n"); + +- if (!send_bootstrap_file(jcr, sd) || +- !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { +- return false; +- } + + /* + * We re-update the job start record so that the start +Index: src/dird/protos.h +=================================================================== +--- src/dird/protos.h (revision 8699) ++++ src/dird/protos.h (working copy) +@@ -155,7 +155,8 @@ + /* msgchan.c */ + extern bool connect_to_storage_daemon(JCR *jcr, int retry_interval, + int max_retry_time, int verbose); +-extern bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore); ++extern bool start_storage_daemon_job(JCR *jcr, alist *rstore, alist *wstore, ++ bool send_bsr=false); + extern bool start_storage_daemon_message_thread(JCR *jcr); + extern int bget_dirmsg(BSOCK *bs); + extern void wait_for_storage_daemon_termination(JCR *jcr); +Index: src/dird/vbackup.c +=================================================================== +--- src/dird/vbackup.c (revision 8699) ++++ src/dird/vbackup.c (working copy) +@@ -50,8 +50,6 @@ + + static const int dbglevel = 10; + +-static char OKbootstrap[] = "3000 OK bootstrap\n"; +- + static bool create_bootstrap_file(JCR *jcr, POOLMEM *jobids); + void vbackup_cleanup(JCR *jcr, int TermCode); + +@@ -217,16 +215,11 @@ + /* + * Now start a job with the Storage daemon + */ +- if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage)) { ++ if (!start_storage_daemon_job(jcr, jcr->rstorage, jcr->wstorage, /*send_bsr*/true)) { + return false; + } + Dmsg0(100, "Storage daemon connection OK\n"); + +- if (!send_bootstrap_file(jcr, sd) || +- !response(jcr, sd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) { +- return false; +- } +- + /* + * We re-update the job start record so that the start + * time is set after the run before job. This avoids +Index: src/stored/fd_cmds.c +=================================================================== +--- src/stored/fd_cmds.c (revision 8699) ++++ src/stored/fd_cmds.c (working copy) +@@ -388,6 +388,8 @@ + if (debug_level >= 10) { + dump_bsr(jcr->bsr, true); + } ++ /* If we got a bootstrap, we are reading, so create read volume list */ ++ create_restore_volume_list(jcr); + ok = true; + + bail_out: +Index: src/stored/read.c +=================================================================== +--- src/stored/read.c (revision 8699) ++++ src/stored/read.c (working copy) +@@ -1,7 +1,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2000-2008 Free Software Foundation Europe e.V. ++ Copyright (C) 2000-2009 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +@@ -62,11 +62,8 @@ + return false; + } + +- +- create_restore_volume_list(jcr); + if (jcr->NumReadVolumes == 0) { + Jmsg(jcr, M_FATAL, 0, _("No Volume names found for restore.\n")); +- free_restore_volume_list(jcr); + fd->fsend(FD_error); + return false; + } +@@ -76,7 +73,6 @@ + + /* Ready device for reading */ + if (!acquire_device_for_read(dcr)) { +- free_restore_volume_list(jcr); + fd->fsend(FD_error); + return false; + } +@@ -92,7 +88,6 @@ + ok = false; + } + +- free_restore_volume_list(jcr); + Dmsg0(30, "Done reading.\n"); + return ok; + } +Index: src/stored/parse_bsr.c +=================================================================== +--- src/stored/parse_bsr.c (revision 8699) ++++ src/stored/parse_bsr.c (working copy) +@@ -1,7 +1,7 @@ + /* + Bacula® - The Network Backup Solution + +- Copyright (C) 2002-2008 Free Software Foundation Europe e.V. ++ Copyright (C) 2002-2009 Free Software Foundation Europe e.V. + + The main author of Bacula is Kern Sibbald, with contributions from + many others, a complete list can be found in the file AUTHORS. +Index: src/stored/mac.c +=================================================================== +--- src/stored/mac.c (revision 8699) ++++ src/stored/mac.c (working copy) +@@ -84,8 +84,6 @@ + } + Dmsg2(100, "read_dcr=%p write_dcr=%p\n", jcr->read_dcr, jcr->dcr); + +- +- create_restore_volume_list(jcr); + if (jcr->NumReadVolumes == 0) { + Jmsg(jcr, M_FATAL, 0, _("No Volume names found for %s.\n"), Type); + goto bail_out; +@@ -161,11 +159,8 @@ + } + } + +- free_restore_volume_list(jcr); +- + dir_send_job_status(jcr); /* update director */ + +- + Dmsg0(30, "Done reading.\n"); + jcr->end_time = time(NULL); + dequeue_messages(jcr); /* send any queued messages */ +Index: src/stored/vol_mgr.c +=================================================================== +--- src/stored/vol_mgr.c (revision 8699) ++++ src/stored/vol_mgr.c (working copy) +@@ -529,6 +529,7 @@ + VOLRES vol, *fvol; + + if (read_vol_list->empty()) { ++ Dmsg0(dbglvl, "find_read_vol: read_vol_list empty.\n"); + return NULL; + } + /* Do not lock reservations here */ +Index: src/stored/job.c +=================================================================== +--- src/stored/job.c (revision 8699) ++++ src/stored/job.c (working copy) +@@ -371,6 +371,8 @@ + free_bsr(jcr->bsr); + jcr->bsr = NULL; + } ++ /* Free any restore volume list created */ ++ free_restore_volume_list(jcr); + if (jcr->RestoreBootstrap) { + unlink(jcr->RestoreBootstrap); + free_pool_memory(jcr->RestoreBootstrap); +Index: src/stored/acquire.c +=================================================================== +--- src/stored/acquire.c (revision 8699) ++++ src/stored/acquire.c (working copy) +@@ -187,7 +187,7 @@ + if (!dir_get_volume_info(dcr, GET_VOL_INFO_FOR_READ)) { + Dmsg2(150, "dir_get_vol_info failed for vol=%s: %s\n", + dcr->VolumeName, jcr->errmsg); +- Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg); ++ Jmsg1(jcr, M_WARNING, 0, "Read acquire: %s", jcr->errmsg); + } + dev->set_load(); /* set to load volume */ + +@@ -241,7 +241,7 @@ + * error messages when nothing is mounted. + */ + if (tape_previously_mounted) { +- Jmsg(jcr, M_WARNING, 0, "%s", jcr->errmsg); ++ Jmsg(jcr, M_WARNING, 0, "Read acquire: %s", jcr->errmsg); + } + goto default_path; + case VOL_NAME_ERROR: +@@ -257,7 +257,7 @@ + dev->set_load(); + /* Fall through */ + default: +- Jmsg1(jcr, M_WARNING, 0, "%s", jcr->errmsg); ++ Jmsg1(jcr, M_WARNING, 0, "Read acquire: %s", jcr->errmsg); + default_path: + Dmsg0(50, "default path\n"); + tape_previously_mounted = true;