X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Ffiled%2Fjob.c;h=368976d2b96dacfa30ca32c90047489627db7047;hb=8694fe83738792584b6c7c1a42a6225159dbf998;hp=8cac931472c1fa2ba485d80ec8ebca00af9666cf;hpb=c3e84ba6b4f90a64b8ddd1876767ac633ef9611a;p=bacula%2Fbacula diff --git a/bacula/src/filed/job.c b/bacula/src/filed/job.c index 8cac931472..368976d2b9 100644 --- a/bacula/src/filed/job.c +++ b/bacula/src/filed/job.c @@ -6,7 +6,7 @@ The main author of Bacula is Kern Sibbald, with contributions from many others, a complete list can be found in the file AUTHORS. This program is Free Software; you can redistribute it and/or - modify it under the terms of version two of the GNU General Public + modify it under the terms of version three of the GNU Affero General Public License as published by the Free Software Foundation and included in the file LICENSE. @@ -15,7 +15,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Affero General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. @@ -91,6 +91,10 @@ static int runbeforenow_cmd(JCR *jcr); static int restore_object_cmd(JCR *jcr); static int set_options(findFOPTS *fo, const char *opts); static void set_storage_auth_key(JCR *jcr, char *key); +static int sm_dump_cmd(JCR *jcr); +#ifdef DEVELOPER +static int exit_cmd(JCR *jcr); +#endif /* Exported functions */ @@ -126,6 +130,10 @@ static struct s_cmds cmds[] = { {"Run", runscript_cmd, 0}, {"accurate", accurate_cmd, 0}, {"restoreobject", restore_object_cmd, 0}, + {"sm_dump", sm_dump_cmd, 0}, +#ifdef DEVELOPER + {"exit", exit_cmd, 0}, +#endif {NULL, NULL} /* list terminator */ }; @@ -394,9 +402,28 @@ void *handle_client_request(void *dirp) free_jcr(jcr); /* destroy JCR record */ Dmsg0(100, "Done with free_jcr\n"); Dsm_check(1); + garbage_collect_memory_pool(); return NULL; } +static int sm_dump_cmd(JCR *jcr) +{ + close_memory_pool(); + sm_dump(false, true); + jcr->dir_bsock->fsend("2000 sm_dump OK\n"); + return 1; +} + +#ifdef DEVELOPER +static int exit_cmd(JCR *jcr) +{ + jcr->dir_bsock->fsend("2000 exit OK\n"); + terminate_filed(0); + return 0; +} +#endif + + /** * Hello from Director he must identify himself and provide his * password. @@ -734,6 +761,22 @@ static bool init_fileset(JCR *jcr) return true; } +static void append_file(JCR *jcr, findINCEXE *incexe, + const char *buf, bool is_file) +{ + if (is_file) { + incexe->name_list.append(new_dlistString(buf)); + + } else if (me->plugin_directory) { + generate_plugin_event(jcr, bEventPluginCommand, (void *)buf); + incexe->plugin_list.append(new_dlistString(buf)); + + } else { + Jmsg(jcr, M_FATAL, 0, + _("Plugin Directory not defined. Cannot use plugin: \"%s\"\n"), + buf); + } +} /** * Add fname to include/exclude fileset list. First check for @@ -768,11 +811,7 @@ void add_file_to_fileset(JCR *jcr, const char *fname, bool is_file) free_pool_memory(fn); while (fgets(buf, sizeof(buf), bpipe->rfd)) { strip_trailing_junk(buf); - if (is_file) { - fileset->incexe->name_list.append(new_dlistString(buf)); - } else { - fileset->incexe->plugin_list.append(new_dlistString(buf)); - } + append_file(jcr, fileset->incexe, buf, is_file); } if ((stat=close_bpipe(bpipe)) != 0) { berrno be; @@ -786,32 +825,19 @@ void add_file_to_fileset(JCR *jcr, const char *fname, bool is_file) p++; /* skip over < */ if ((ffd = fopen(p, "rb")) == NULL) { berrno be; - Jmsg(jcr, M_FATAL, 0, _("Cannot open FileSet input file: %s. ERR=%s\n"), + Jmsg(jcr, M_FATAL, 0, + _("Cannot open FileSet input file: %s. ERR=%s\n"), p, be.bstrerror()); return; } while (fgets(buf, sizeof(buf), ffd)) { strip_trailing_junk(buf); - Dmsg1(100, "%s\n", buf); - if (is_file) { - fileset->incexe->name_list.append(new_dlistString(buf)); - } else { - fileset->incexe->plugin_list.append(new_dlistString(buf)); - } - } + append_file(jcr, fileset->incexe, buf, is_file); + } fclose(ffd); break; default: - if (is_file) { - fileset->incexe->name_list.append(new_dlistString(fname)); - } else { - if (me->plugin_directory) { - fileset->incexe->plugin_list.append(new_dlistString(fname)); - } else { - Jmsg(jcr, M_FATAL, 0, _("Plugin Directory not defined. Cannot use plugin: \"%\"\n"), - fname); - } - } + append_file(jcr, fileset->incexe, fname, is_file); break; } } @@ -1796,8 +1822,8 @@ static int backup_cmd(JCR *jcr) if (get_win32_driveletters(jcr->ff, szWinDriveLetters)) { Jmsg(jcr, M_INFO, 0, _("Generate VSS snapshots. Driver=\"%s\", Drive(s)=\"%s\"\n"), g_pVSSClient->GetDriverName(), szWinDriveLetters); if (!g_pVSSClient->CreateSnapshots(szWinDriveLetters)) { - Jmsg(jcr, M_WARNING, 0, _("Generate VSS snapshots failed.\n")); - jcr->JobErrors++; + berrno be; + Jmsg(jcr, M_FATAL, 0, _("Generate VSS snapshots failed. ERR=%s\n"), be.bstrerror()); } else { /* tell user if snapshot creation of a specific drive failed */ int i; @@ -1810,8 +1836,8 @@ static int backup_cmd(JCR *jcr) /* inform user about writer states */ for (i=0; i < (int)g_pVSSClient->GetWriterCount(); i++) if (g_pVSSClient->GetWriterState(i) < 1) { - Jmsg(jcr, M_WARNING, 0, _("VSS Writer (PrepareForBackup): %s\n"), g_pVSSClient->GetWriterInfo(i)); - jcr->JobErrors++; + Jmsg(jcr, M_INFO, 0, _("VSS Writer (PrepareForBackup): %s\n"), g_pVSSClient->GetWriterInfo(i)); + //jcr->JobErrors++; } } } else { @@ -2087,14 +2113,9 @@ static int restore_cmd(JCR *jcr) /* inform user about writer states */ int i; for (i=0; i < (int)g_pVSSClient->GetWriterCount(); i++) { - int msg_type = M_INFO; - if (g_pVSSClient->GetWriterState(i) < 1) { - msg_type = M_WARNING; - jcr->JobErrors++; - } if (g_pVSSClient->GetWriterState(i) < 1) { - Jmsg(jcr, M_WARNING, 0, _("VSS Writer (PreRestore): %s\n"), g_pVSSClient->GetWriterInfo(i)); - jcr->JobErrors++; + Jmsg(jcr, M_INFO, 0, _("VSS Writer (PreRestore): %s\n"), g_pVSSClient->GetWriterInfo(i)); + //jcr->JobErrors++; } } } else { @@ -2142,8 +2163,8 @@ static int restore_cmd(JCR *jcr) for (int i=0; i<(int)g_pVSSClient->GetWriterCount(); i++) { int msg_type = M_INFO; if (g_pVSSClient->GetWriterState(i) < 1) { - msg_type = M_WARNING; - jcr->JobErrors++; + //msg_type = M_WARNING; + //jcr->JobErrors++; } Jmsg(jcr, msg_type, 0, _("VSS Writer (RestoreComplete): %s\n"), g_pVSSClient->GetWriterInfo(i)); }