From: Kern Sibbald Date: Fri, 28 May 2004 15:45:59 +0000 (+0000) Subject: Misc see kes-1.34 X-Git-Tag: Release-1.34.3~34 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=95ecfa0618e4f5ee665f80feb62138ebe69fbc35;p=bacula%2Fbacula Misc see kes-1.34 git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1370 91ce42f0-d328-0410-95d8-f526ca767f89 --- diff --git a/bacula/kernstodo b/bacula/kernstodo index de3fb4ea95..35f56116b0 100644 --- a/bacula/kernstodo +++ b/bacula/kernstodo @@ -1,5 +1,5 @@ Kern's ToDo List - 31 March 2004 + 28 May 2004 Documentation to do: (any release a little bit at a time) - Document query file format. @@ -22,6 +22,7 @@ Documentation to do: (any release a little bit at a time) changing tape settings while a job is running.) - Lookup HP cleaning recommendations. - Lookup HP tape replacement recommendations (see trouble shooting autochanger) +- Add more obvious documentation of @ for conf files. Testing to do: (painful) - Test drive polling! @@ -43,6 +44,15 @@ For 1.33 Testing/Documentation: For version 1.35: +- On Win95 + The error I when I installed 1.34.2 clients: + The BACULA-FD file is + linked to missing export KERNEL32.DLL:GetFileAttributesExA. +- When restore started from console, report jobid. +- Feedback while the tree is being built. +- Possibly implement "Ensure Full Backup = yes" looks for a failed full backup + and upgrades the current backup if one exists. +- Check that barcode reading and update slots scan works. - Try not to re-backup a file if a new hard link is added. - Backup hard links only, but not the data. - Add "All Local = yes" option to save to include all local partitions. diff --git a/bacula/src/Makefile.in b/bacula/src/Makefile.in index b04ca9c447..c96264a822 100644 --- a/bacula/src/Makefile.in +++ b/bacula/src/Makefile.in @@ -41,7 +41,7 @@ Makefile: $(srcdir)/Makefile.in $(topdir)/config.status clean: @$(RMF) core core.* a.out *.o *.bak *~ *.intpro *.extpro 1 2 3 @$(RMF) AUTHORS ChangeLog Makefile.am NEWS README acconfig.h autogen.sh - @$(RMF) configure.in stamp.h + @$(RMF) configure.in stamp.h stamp-h.in @$(RMF) -r po (cd gnome-console; $(MAKE) clean) (cd gnome2-console; $(MAKE) clean) diff --git a/bacula/src/console2.glade b/bacula/src/console2.glade index 5011ed46ef..fad8622190 100644 --- a/bacula/src/console2.glade +++ b/bacula/src/console2.glade @@ -1012,6 +1012,7 @@ + 1 True False 0 @@ -1024,7 +1025,7 @@ - 66 + 68 16 True Job: @@ -1226,13 +1227,14 @@ + 1 True False 0 - 65 + 68 16 True Client: @@ -1342,13 +1344,16 @@ + 1 + 503 + 26 True False 0 - 66 + 68 16 True FileSet: @@ -1423,36 +1428,87 @@ 0 - True - True + False + False + + + + + + 13 + 16 + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False - - 93 - 26 + + 52 + 16 + True + Priority: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + 81 + 24 True True - View FileSet - True - GTK_RELIEF_NORMAL - + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 10 0 100 1 10 10 - 10 + 4 False - True + False - + + 100 + 16 True - + False False - GTK_JUSTIFY_CENTER + GTK_JUSTIFY_LEFT False False 0.5 @@ -1461,7 +1517,7 @@ 0 - 65 + 0 False False @@ -1476,13 +1532,14 @@ + 1 True False 0 - 66 + 68 16 True Level: @@ -1614,13 +1671,14 @@ + 1 True False 0 - 66 + 68 16 True Pool: @@ -1752,13 +1810,14 @@ + 1 True False 0 - 66 + 68 16 True Storage: @@ -1890,13 +1949,14 @@ + 1 True False 0 - 66 + 68 16 True Messages: @@ -2006,13 +2066,14 @@ + 1 True False 0 - 66 + 68 16 True Where: @@ -2089,13 +2150,14 @@ + 1 True False 0 - 66 + 68 16 True When: @@ -2163,8 +2225,87 @@ + + + 1 + True + False + 0 + + + + 68 + 16 + True + Bootstrap: + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + True + True + True + 0 + + True + * + False + + + 0 + True + True + + + + + + True + + False + False + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + + + 36 + False + False + + + + + 0 + True + True + + + + 12 + 19 True False @@ -2202,8 +2343,8 @@ GTK_WINDOW_TOPLEVEL GTK_WIN_POS_NONE True - 640 - 400 + 700 + 450 True False @@ -2510,16 +2651,48 @@ - + True True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - + + 164 + 78 + True + True + GTK_POLICY_ALWAYS + GTK_POLICY_ALWAYS + GTK_SHADOW_NONE + GTK_CORNER_TOP_LEFT + + + + + + + True + False + + + + + + True + True + GTK_POLICY_ALWAYS + GTK_POLICY_ALWAYS + GTK_SHADOW_NONE + GTK_CORNER_TOP_LEFT + + + + + + + True + True + @@ -2531,20 +2704,22 @@ + 301 + 30 True - True + False 0 - + True - + Files Selected: False False GTK_JUSTIFY_LEFT False False - 0.94 + 0.02 0.5 0 0 @@ -2558,6 +2733,8 @@ + 72 + 30 True True gtk-ok @@ -2573,7 +2750,9 @@ - + + 34 + 16 True False @@ -2610,9 +2789,9 @@ - + True - + False False GTK_JUSTIFY_LEFT @@ -2624,14 +2803,14 @@ 0 - 0 + 8 False False - 7 + 5 False True @@ -4033,4 +4212,146 @@ + + True + Progress + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + -7 + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + 0 + 43 + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + 0 + 36 + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + 150 + 33 + True + GTK_PROGRESS_LEFT_TO_RIGHT + 0 + 0.1 + + + 0 + True + False + + + + + + 0 + 52 + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + 0 + True + True + + + + + + diff --git a/bacula/src/dird/fd_cmds.c b/bacula/src/dird/fd_cmds.c index 49289929a2..28fd36ae85 100644 --- a/bacula/src/dird/fd_cmds.c +++ b/bacula/src/dird/fd_cmds.c @@ -40,6 +40,7 @@ static char inc[] = "include\n"; static char exc[] = "exclude\n"; static char fileset[] = "fileset\n"; /* set full fileset */ static char jobcmd[] = "JobId=%d Job=%s SDid=%u SDtime=%u Authorization=%s\n"; +/* Note, mtime_only is not used here -- implemented as file option */ static char levelcmd[] = "level = %s%s mtime_only=%d\n"; static char runbefore[] = "RunBeforeJob %s\n"; static char runafter[] = "RunAfterJob %s\n"; diff --git a/bacula/src/dird/run_conf.c b/bacula/src/dird/run_conf.c index 15509951e5..216e5bb864 100644 --- a/bacula/src/dird/run_conf.c +++ b/bacula/src/dird/run_conf.c @@ -124,26 +124,15 @@ static bool have_hour, have_mday, have_wday, have_month, have_wom; static bool have_at, have_woy; static RUN lrun; -static void clear_defaults() -{ - have_hour = have_mday = have_wday = have_month = have_wom = have_woy = true; - clear_bit(0,lrun.hour); - clear_bits(0, 30, lrun.mday); - clear_bits(0, 6, lrun.wday); - clear_bits(0, 11, lrun.month); - clear_bits(0, 4, lrun.wom); - clear_bits(0, 53, lrun.woy); -} - static void set_defaults() { have_hour = have_mday = have_wday = have_month = have_wom = have_woy = false; have_at = false; - set_bit(0,lrun.hour); + set_bits(0, 23, lrun.hour); set_bits(0, 30, lrun.mday); - set_bits(0, 6, lrun.wday); + set_bits(0, 6, lrun.wday); set_bits(0, 11, lrun.month); - set_bits(0, 4, lrun.wom); + set_bits(0, 4, lrun.wom); set_bits(0, 53, lrun.woy); } @@ -565,32 +554,22 @@ void store_run(LEX *lc, RES_ITEM *item, int index, int pass) } break; case s_hourly: - clear_defaults(); + have_hour = true; set_bits(0, 23, lrun.hour); - set_bits(0, 30, lrun.mday); - set_bits(0, 11, lrun.month); - set_bits(0, 4, lrun.wom); - set_bits(0, 53, lrun.woy); break; case s_weekly: - clear_defaults(); - set_bit(0, lrun.wday); - set_bits(0, 11, lrun.month); - set_bits(0, 4, lrun.wom); - set_bits(0, 53, lrun.woy); - break; - case s_daily: - clear_defaults(); + have_mday = have_wom = have_woy = true; set_bits(0, 30, lrun.mday); - set_bits(0, 11, lrun.month); set_bits(0, 4, lrun.wom); set_bits(0, 53, lrun.woy); break; + case s_daily: + have_mday = true; + set_bits(0, 6, lrun.wday); + break; case s_monthly: - clear_defaults(); + have_month = true; set_bits(0, 11, lrun.month); - set_bits(0, 4, lrun.wom); - set_bits(0, 53, lrun.woy); break; default: scan_err0(lc, _("Unexpected run state\n")); diff --git a/bacula/src/dird/ua_restore.c b/bacula/src/dird/ua_restore.c index c78822f33c..ab674e03b3 100644 --- a/bacula/src/dird/ua_restore.c +++ b/bacula/src/dird/ua_restore.c @@ -762,7 +762,9 @@ static bool build_directory_tree(UAContext *ua, RESTORE_CTX *rx) if (node->extract || node->extract_dir) { Dmsg2(400, "type=%d FI=%d\n", node->type, node->FileIndex); add_findex(rx->bsr, node->JobId, node->FileIndex); - rx->selected_files++; + if (node->extract) { + rx->selected_files++; /* count only saved files */ + } } } } diff --git a/bacula/src/dird/ua_select.c b/bacula/src/dird/ua_select.c index d211b39b37..991af1fe19 100644 --- a/bacula/src/dird/ua_select.c +++ b/bacula/src/dird/ua_select.c @@ -802,6 +802,10 @@ STORE *get_storage_resource(UAContext *ua, int use_default) break; } else if (strcasecmp(ua->argk[i], _("job")) == 0) { + if (!ua->argv[i]) { + bsendmsg(ua, _("Job name not specified.\n")); + return NULL; + } if (!(jcr=get_jcr_by_partial_name(ua->argv[i]))) { bsendmsg(ua, _("Job \"%s\" is not running.\n"), ua->argv[i]); return NULL; diff --git a/bacula/src/gnome2-console/interface.c b/bacula/src/gnome2-console/interface.c index 9dbfc71f1d..13eccfc5f4 100644 --- a/bacula/src/gnome2-console/interface.c +++ b/bacula/src/gnome2-console/interface.c @@ -626,8 +626,11 @@ create_RunDialog (void) GtkWidget *combo_fileset; GList *combo_fileset_items = NULL; GtkWidget *entry_fileset; - GtkWidget *view_fileset_button; - GtkWidget *label69; + GtkWidget *label156; + GtkWidget *label155; + GtkObject *spinbutton1_adj; + GtkWidget *spinbutton1; + GtkWidget *label157; GtkWidget *hbox32; GtkWidget *label70; GtkWidget *combo_level; @@ -660,6 +663,10 @@ create_RunDialog (void) GtkWidget *label100; GtkWidget *entry_when; GtkWidget *label101; + GtkWidget *hbox60; + GtkWidget *label153; + GtkWidget *entry28; + GtkWidget *label154; GtkWidget *label84; GtkWidget *dialog_action_area6; GtkWidget *hbuttonbox1; @@ -692,6 +699,7 @@ create_RunDialog (void) hbox28 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox28); gtk_container_add (GTK_CONTAINER (alignment1), hbox28); + gtk_container_set_border_width (GTK_CONTAINER (hbox28), 1); hbox29 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox29); @@ -700,7 +708,7 @@ create_RunDialog (void) label63 = gtk_label_new (_("Job:")); gtk_widget_show (label63); gtk_box_pack_start (GTK_BOX (hbox29), label63, FALSE, FALSE, 0); - gtk_widget_set_size_request (label63, 66, 16); + gtk_widget_set_size_request (label63, 68, 16); gtk_label_set_justify (GTK_LABEL (label63), GTK_JUSTIFY_RIGHT); combo_job = gtk_combo_new (); @@ -744,11 +752,12 @@ create_RunDialog (void) hbox30 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox30); gtk_box_pack_start (GTK_BOX (vbox12), hbox30, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox30), 1); label66 = gtk_label_new (_("Client:")); gtk_widget_show (label66); gtk_box_pack_start (GTK_BOX (hbox30), label66, FALSE, FALSE, 0); - gtk_widget_set_size_request (label66, 65, 16); + gtk_widget_set_size_request (label66, 68, 16); gtk_label_set_justify (GTK_LABEL (label66), GTK_JUSTIFY_RIGHT); combo_client = gtk_combo_new (); @@ -772,18 +781,20 @@ create_RunDialog (void) hbox31 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox31); gtk_box_pack_start (GTK_BOX (vbox12), hbox31, TRUE, TRUE, 2); + gtk_widget_set_size_request (hbox31, 503, 26); + gtk_container_set_border_width (GTK_CONTAINER (hbox31), 1); label68 = gtk_label_new (_("FileSet: ")); gtk_widget_show (label68); gtk_box_pack_start (GTK_BOX (hbox31), label68, FALSE, FALSE, 0); - gtk_widget_set_size_request (label68, 66, 16); + gtk_widget_set_size_request (label68, 68, 16); gtk_label_set_justify (GTK_LABEL (label68), GTK_JUSTIFY_RIGHT); combo_fileset = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (combo_fileset)->popwin), "GladeParentKey", combo_fileset); gtk_widget_show (combo_fileset); - gtk_box_pack_start (GTK_BOX (hbox31), combo_fileset, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox31), combo_fileset, FALSE, FALSE, 0); gtk_combo_set_value_in_list (GTK_COMBO (combo_fileset), TRUE, FALSE); combo_fileset_items = g_list_append (combo_fileset_items, (gpointer) ""); gtk_combo_set_popdown_strings (GTK_COMBO (combo_fileset), combo_fileset_items); @@ -793,23 +804,39 @@ create_RunDialog (void) gtk_widget_show (entry_fileset); gtk_editable_set_editable (GTK_EDITABLE (entry_fileset), FALSE); - view_fileset_button = gtk_button_new_with_mnemonic (_(" View FileSet ")); - gtk_widget_show (view_fileset_button); - gtk_box_pack_start (GTK_BOX (hbox31), view_fileset_button, FALSE, TRUE, 10); - gtk_widget_set_size_request (view_fileset_button, 93, 26); - - label69 = gtk_label_new (_(" ")); - gtk_widget_show (label69); - gtk_box_pack_start (GTK_BOX (hbox31), label69, FALSE, FALSE, 65); + label156 = gtk_label_new (""); + gtk_widget_show (label156); + gtk_box_pack_start (GTK_BOX (hbox31), label156, FALSE, FALSE, 0); + gtk_widget_set_size_request (label156, 13, 16); + gtk_label_set_justify (GTK_LABEL (label156), GTK_JUSTIFY_LEFT); + + label155 = gtk_label_new (_("Priority:")); + gtk_widget_show (label155); + gtk_box_pack_start (GTK_BOX (hbox31), label155, FALSE, FALSE, 0); + gtk_widget_set_size_request (label155, 52, 16); + gtk_label_set_justify (GTK_LABEL (label155), GTK_JUSTIFY_LEFT); + + spinbutton1_adj = gtk_adjustment_new (10, 0, 100, 1, 10, 10); + spinbutton1 = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton1_adj), 1, 0); + gtk_widget_show (spinbutton1); + gtk_box_pack_start (GTK_BOX (hbox31), spinbutton1, FALSE, FALSE, 4); + gtk_widget_set_size_request (spinbutton1, 81, 24); + + label157 = gtk_label_new (""); + gtk_widget_show (label157); + gtk_box_pack_start (GTK_BOX (hbox31), label157, FALSE, FALSE, 0); + gtk_widget_set_size_request (label157, 100, 16); + gtk_label_set_justify (GTK_LABEL (label157), GTK_JUSTIFY_LEFT); hbox32 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox32); gtk_box_pack_start (GTK_BOX (vbox12), hbox32, TRUE, TRUE, 2); + gtk_container_set_border_width (GTK_CONTAINER (hbox32), 1); label70 = gtk_label_new (_("Level:")); gtk_widget_show (label70); gtk_box_pack_start (GTK_BOX (hbox32), label70, FALSE, FALSE, 0); - gtk_widget_set_size_request (label70, 66, 16); + gtk_widget_set_size_request (label70, 68, 16); gtk_label_set_justify (GTK_LABEL (label70), GTK_JUSTIFY_RIGHT); combo_level = gtk_combo_new (); @@ -834,11 +861,12 @@ create_RunDialog (void) hbox33 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox33); gtk_box_pack_start (GTK_BOX (vbox12), hbox33, TRUE, TRUE, 2); + gtk_container_set_border_width (GTK_CONTAINER (hbox33), 1); label72 = gtk_label_new (_("Pool:")); gtk_widget_show (label72); gtk_box_pack_start (GTK_BOX (hbox33), label72, FALSE, FALSE, 0); - gtk_widget_set_size_request (label72, 66, 16); + gtk_widget_set_size_request (label72, 68, 16); combo_pool = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (combo_pool)->popwin), @@ -862,11 +890,12 @@ create_RunDialog (void) hbox39 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox39); gtk_box_pack_start (GTK_BOX (vbox12), hbox39, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox39), 1); label96 = gtk_label_new (_("Storage:")); gtk_widget_show (label96); gtk_box_pack_start (GTK_BOX (hbox39), label96, FALSE, FALSE, 0); - gtk_widget_set_size_request (label96, 66, 16); + gtk_widget_set_size_request (label96, 68, 16); combo_storage = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (combo_storage)->popwin), @@ -890,11 +919,12 @@ create_RunDialog (void) hbox40 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox40); gtk_box_pack_start (GTK_BOX (vbox12), hbox40, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox40), 1); label98 = gtk_label_new (_("Messages:")); gtk_widget_show (label98); gtk_box_pack_start (GTK_BOX (hbox40), label98, FALSE, FALSE, 0); - gtk_widget_set_size_request (label98, 66, 16); + gtk_widget_set_size_request (label98, 68, 16); combo_messages = gtk_combo_new (); g_object_set_data (G_OBJECT (GTK_COMBO (combo_messages)->popwin), @@ -917,11 +947,12 @@ create_RunDialog (void) hbox34 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox34); gtk_box_pack_start (GTK_BOX (vbox12), hbox34, TRUE, TRUE, 2); + gtk_container_set_border_width (GTK_CONTAINER (hbox34), 1); label77 = gtk_label_new (_("Where: ")); gtk_widget_show (label77); gtk_box_pack_start (GTK_BOX (hbox34), label77, FALSE, FALSE, 0); - gtk_widget_set_size_request (label77, 66, 16); + gtk_widget_set_size_request (label77, 68, 16); entry_where = gtk_entry_new (); gtk_widget_show (entry_where); @@ -934,11 +965,12 @@ create_RunDialog (void) hbox41 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox41); gtk_box_pack_start (GTK_BOX (vbox11), hbox41, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox41), 1); label100 = gtk_label_new (_("When:")); gtk_widget_show (label100); gtk_box_pack_start (GTK_BOX (hbox41), label100, FALSE, FALSE, 0); - gtk_widget_set_size_request (label100, 66, 16); + gtk_widget_set_size_request (label100, 68, 16); entry_when = gtk_entry_new (); gtk_widget_show (entry_when); @@ -948,9 +980,28 @@ create_RunDialog (void) gtk_widget_show (label101); gtk_box_pack_start (GTK_BOX (hbox41), label101, FALSE, FALSE, 120); + hbox60 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox60); + gtk_box_pack_start (GTK_BOX (vbox11), hbox60, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox60), 1); + + label153 = gtk_label_new (_("Bootstrap:")); + gtk_widget_show (label153); + gtk_box_pack_start (GTK_BOX (hbox60), label153, FALSE, FALSE, 0); + gtk_widget_set_size_request (label153, 68, 16); + + entry28 = gtk_entry_new (); + gtk_widget_show (entry28); + gtk_box_pack_start (GTK_BOX (hbox60), entry28, TRUE, TRUE, 0); + + label154 = gtk_label_new (_(" ")); + gtk_widget_show (label154); + gtk_box_pack_start (GTK_BOX (hbox60), label154, FALSE, FALSE, 36); + label84 = gtk_label_new (_(" ")); gtk_widget_show (label84); gtk_box_pack_start (GTK_BOX (vbox11), label84, FALSE, FALSE, 0); + gtk_widget_set_size_request (label84, 12, 19); dialog_action_area6 = GTK_DIALOG (RunDialog)->action_area; gtk_widget_show (dialog_action_area6); @@ -975,9 +1026,6 @@ create_RunDialog (void) g_signal_connect ((gpointer) entry_job, "changed", G_CALLBACK (on_entry_job_changed), NULL); - g_signal_connect ((gpointer) view_fileset_button, "clicked", - G_CALLBACK (on_view_fileset_clicked), - NULL); g_signal_connect ((gpointer) run_ok, "clicked", G_CALLBACK (on_run_ok_clicked), NULL); @@ -1010,8 +1058,10 @@ create_RunDialog (void) GLADE_HOOKUP_OBJECT (RunDialog, label68, "label68"); GLADE_HOOKUP_OBJECT (RunDialog, combo_fileset, "combo_fileset"); GLADE_HOOKUP_OBJECT (RunDialog, entry_fileset, "entry_fileset"); - GLADE_HOOKUP_OBJECT (RunDialog, view_fileset_button, "view_fileset_button"); - GLADE_HOOKUP_OBJECT (RunDialog, label69, "label69"); + GLADE_HOOKUP_OBJECT (RunDialog, label156, "label156"); + GLADE_HOOKUP_OBJECT (RunDialog, label155, "label155"); + GLADE_HOOKUP_OBJECT (RunDialog, spinbutton1, "spinbutton1"); + GLADE_HOOKUP_OBJECT (RunDialog, label157, "label157"); GLADE_HOOKUP_OBJECT (RunDialog, hbox32, "hbox32"); GLADE_HOOKUP_OBJECT (RunDialog, label70, "label70"); GLADE_HOOKUP_OBJECT (RunDialog, combo_level, "combo_level"); @@ -1040,6 +1090,10 @@ create_RunDialog (void) GLADE_HOOKUP_OBJECT (RunDialog, label100, "label100"); GLADE_HOOKUP_OBJECT (RunDialog, entry_when, "entry_when"); GLADE_HOOKUP_OBJECT (RunDialog, label101, "label101"); + GLADE_HOOKUP_OBJECT (RunDialog, hbox60, "hbox60"); + GLADE_HOOKUP_OBJECT (RunDialog, label153, "label153"); + GLADE_HOOKUP_OBJECT (RunDialog, entry28, "entry28"); + GLADE_HOOKUP_OBJECT (RunDialog, label154, "label154"); GLADE_HOOKUP_OBJECT (RunDialog, label84, "label84"); GLADE_HOOKUP_OBJECT_NO_REF (RunDialog, dialog_action_area6, "dialog_action_area6"); GLADE_HOOKUP_OBJECT (RunDialog, hbuttonbox1, "hbuttonbox1"); @@ -1108,19 +1162,21 @@ create_restore_file_selection (void) GtkWidget *hbox38; GtkWidget *label88; GtkWidget *restore_dir; + GtkWidget *hpaned1; + GtkWidget *tree; GtkWidget *scrolled; GtkWidget *hbox44; - GtkWidget *label115; + GtkWidget *FilesSelected; GtkWidget *restore_select_ok; - GtkWidget *label116; + GtkWidget *label152; GtkWidget *restore_select_cancel; - GtkWidget *label117; + GtkWidget *label1001; restore_file_selection = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_widget_set_size_request (restore_file_selection, 640, 480); gtk_window_set_title (GTK_WINDOW (restore_file_selection), _("Restore File Selection")); gtk_window_set_modal (GTK_WINDOW (restore_file_selection), TRUE); - gtk_window_set_default_size (GTK_WINDOW (restore_file_selection), 640, 400); + gtk_window_set_default_size (GTK_WINDOW (restore_file_selection), 700, 450); vbox13 = gtk_vbox_new (FALSE, 0); gtk_widget_show (vbox13); @@ -1175,37 +1231,49 @@ create_restore_file_selection (void) gtk_widget_show (restore_dir); gtk_box_pack_start (GTK_BOX (hbox38), restore_dir, TRUE, TRUE, 0); + hpaned1 = gtk_hpaned_new (); + gtk_widget_show (hpaned1); + gtk_box_pack_start (GTK_BOX (vbox13), hpaned1, TRUE, TRUE, 0); + + tree = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (tree); + gtk_paned_pack1 (GTK_PANED (hpaned1), tree, FALSE, TRUE); + gtk_widget_set_size_request (tree, 164, 78); + scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_widget_show (scrolled); - gtk_box_pack_start (GTK_BOX (vbox13), scrolled, TRUE, TRUE, 0); + gtk_paned_pack2 (GTK_PANED (hpaned1), scrolled, TRUE, TRUE); - hbox44 = gtk_hbox_new (TRUE, 0); + hbox44 = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox44); - gtk_box_pack_start (GTK_BOX (vbox13), hbox44, FALSE, TRUE, 7); + gtk_box_pack_start (GTK_BOX (vbox13), hbox44, FALSE, TRUE, 5); + gtk_widget_set_size_request (hbox44, 301, 30); - label115 = gtk_label_new (_(" ")); - gtk_widget_show (label115); - gtk_box_pack_start (GTK_BOX (hbox44), label115, TRUE, TRUE, 0); - gtk_label_set_justify (GTK_LABEL (label115), GTK_JUSTIFY_LEFT); - gtk_misc_set_alignment (GTK_MISC (label115), 0.94, 0.5); + FilesSelected = gtk_label_new (_("Files Selected: ")); + gtk_widget_show (FilesSelected); + gtk_box_pack_start (GTK_BOX (hbox44), FilesSelected, TRUE, TRUE, 0); + gtk_label_set_justify (GTK_LABEL (FilesSelected), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (FilesSelected), 0.02, 0.5); restore_select_ok = gtk_button_new_from_stock ("gtk-ok"); gtk_widget_show (restore_select_ok); gtk_box_pack_start (GTK_BOX (hbox44), restore_select_ok, FALSE, TRUE, 0); + gtk_widget_set_size_request (restore_select_ok, 72, 30); - label116 = gtk_label_new (""); - gtk_widget_show (label116); - gtk_box_pack_start (GTK_BOX (hbox44), label116, FALSE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (label116), GTK_JUSTIFY_LEFT); + label152 = gtk_label_new (""); + gtk_widget_show (label152); + gtk_box_pack_start (GTK_BOX (hbox44), label152, FALSE, FALSE, 0); + gtk_widget_set_size_request (label152, 34, 16); + gtk_label_set_justify (GTK_LABEL (label152), GTK_JUSTIFY_LEFT); restore_select_cancel = gtk_button_new_from_stock ("gtk-cancel"); gtk_widget_show (restore_select_cancel); gtk_box_pack_start (GTK_BOX (hbox44), restore_select_cancel, FALSE, TRUE, 0); - label117 = gtk_label_new (""); - gtk_widget_show (label117); - gtk_box_pack_start (GTK_BOX (hbox44), label117, FALSE, FALSE, 0); - gtk_label_set_justify (GTK_LABEL (label117), GTK_JUSTIFY_LEFT); + label1001 = gtk_label_new (_(" ")); + gtk_widget_show (label1001); + gtk_box_pack_start (GTK_BOX (hbox44), label1001, FALSE, FALSE, 8); + gtk_label_set_justify (GTK_LABEL (label1001), GTK_JUSTIFY_LEFT); g_signal_connect ((gpointer) restore_file_selection, "delete_event", G_CALLBACK (on_restore_files_delete_event), @@ -1258,13 +1326,15 @@ create_restore_file_selection (void) GLADE_HOOKUP_OBJECT (restore_file_selection, hbox38, "hbox38"); GLADE_HOOKUP_OBJECT (restore_file_selection, label88, "label88"); GLADE_HOOKUP_OBJECT (restore_file_selection, restore_dir, "restore_dir"); + GLADE_HOOKUP_OBJECT (restore_file_selection, hpaned1, "hpaned1"); + GLADE_HOOKUP_OBJECT (restore_file_selection, tree, "tree"); GLADE_HOOKUP_OBJECT (restore_file_selection, scrolled, "scrolled"); GLADE_HOOKUP_OBJECT (restore_file_selection, hbox44, "hbox44"); - GLADE_HOOKUP_OBJECT (restore_file_selection, label115, "label115"); + GLADE_HOOKUP_OBJECT (restore_file_selection, FilesSelected, "FilesSelected"); GLADE_HOOKUP_OBJECT (restore_file_selection, restore_select_ok, "restore_select_ok"); - GLADE_HOOKUP_OBJECT (restore_file_selection, label116, "label116"); + GLADE_HOOKUP_OBJECT (restore_file_selection, label152, "label152"); GLADE_HOOKUP_OBJECT (restore_file_selection, restore_select_cancel, "restore_select_cancel"); - GLADE_HOOKUP_OBJECT (restore_file_selection, label117, "label117"); + GLADE_HOOKUP_OBJECT (restore_file_selection, label1001, "label1001"); return restore_file_selection; } @@ -1796,3 +1866,72 @@ create_RestoreDialog (void) return RestoreDialog; } +GtkWidget* +create_progress_dialog (void) +{ + GtkWidget *progress_dialog; + GtkWidget *dialog_vbox11; + GtkWidget *vbox19; + GtkWidget *label1002; + GtkWidget *label1003; + GtkWidget *progressbar1; + GtkWidget *label1004; + GtkWidget *dialog_action_area10; + GtkWidget *closebutton1; + + progress_dialog = gtk_dialog_new (); + gtk_window_set_title (GTK_WINDOW (progress_dialog), _("Progress")); + + dialog_vbox11 = GTK_DIALOG (progress_dialog)->vbox; + gtk_widget_show (dialog_vbox11); + + vbox19 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox19); + gtk_box_pack_start (GTK_BOX (dialog_vbox11), vbox19, TRUE, TRUE, 0); + + label1002 = gtk_label_new (""); + gtk_widget_show (label1002); + gtk_box_pack_start (GTK_BOX (vbox19), label1002, FALSE, FALSE, 0); + gtk_widget_set_size_request (label1002, 0, 43); + gtk_label_set_justify (GTK_LABEL (label1002), GTK_JUSTIFY_LEFT); + + label1003 = gtk_label_new (""); + gtk_widget_show (label1003); + gtk_box_pack_start (GTK_BOX (vbox19), label1003, FALSE, FALSE, 0); + gtk_widget_set_size_request (label1003, 0, 36); + gtk_label_set_justify (GTK_LABEL (label1003), GTK_JUSTIFY_LEFT); + + progressbar1 = gtk_progress_bar_new (); + gtk_widget_show (progressbar1); + gtk_box_pack_start (GTK_BOX (vbox19), progressbar1, TRUE, FALSE, 0); + gtk_widget_set_size_request (progressbar1, 150, 33); + + label1004 = gtk_label_new (""); + gtk_widget_show (label1004); + gtk_box_pack_start (GTK_BOX (vbox19), label1004, FALSE, FALSE, 0); + gtk_widget_set_size_request (label1004, 0, 52); + gtk_label_set_justify (GTK_LABEL (label1004), GTK_JUSTIFY_LEFT); + + dialog_action_area10 = GTK_DIALOG (progress_dialog)->action_area; + gtk_widget_show (dialog_action_area10); + gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area10), GTK_BUTTONBOX_END); + + closebutton1 = gtk_button_new_from_stock ("gtk-close"); + gtk_widget_show (closebutton1); + gtk_dialog_add_action_widget (GTK_DIALOG (progress_dialog), closebutton1, GTK_RESPONSE_CLOSE); + GTK_WIDGET_SET_FLAGS (closebutton1, GTK_CAN_DEFAULT); + + /* Store pointers to all widgets, for use by lookup_widget(). */ + GLADE_HOOKUP_OBJECT_NO_REF (progress_dialog, progress_dialog, "progress_dialog"); + GLADE_HOOKUP_OBJECT_NO_REF (progress_dialog, dialog_vbox11, "dialog_vbox11"); + GLADE_HOOKUP_OBJECT (progress_dialog, vbox19, "vbox19"); + GLADE_HOOKUP_OBJECT (progress_dialog, label1002, "label1002"); + GLADE_HOOKUP_OBJECT (progress_dialog, label1003, "label1003"); + GLADE_HOOKUP_OBJECT (progress_dialog, progressbar1, "progressbar1"); + GLADE_HOOKUP_OBJECT (progress_dialog, label1004, "label1004"); + GLADE_HOOKUP_OBJECT_NO_REF (progress_dialog, dialog_action_area10, "dialog_action_area10"); + GLADE_HOOKUP_OBJECT (progress_dialog, closebutton1, "closebutton1"); + + return progress_dialog; +} + diff --git a/bacula/src/gnome2-console/interface.h b/bacula/src/gnome2-console/interface.h index 928ec69e48..899d3c4806 100644 --- a/bacula/src/gnome2-console/interface.h +++ b/bacula/src/gnome2-console/interface.h @@ -9,3 +9,4 @@ GtkWidget* create_RunDialog (void); GtkWidget* create_restore_file_selection (void); GtkWidget* create_label_dialog (void); GtkWidget* create_RestoreDialog (void); +GtkWidget* create_progress_dialog (void); diff --git a/bacula/src/lib/Makefile.in b/bacula/src/lib/Makefile.in index 28cab1eed2..f3fcaa480f 100644 --- a/bacula/src/lib/Makefile.in +++ b/bacula/src/lib/Makefile.in @@ -39,7 +39,7 @@ LIBSRCS = alloc.c attr.c base64.c bsys.c bget_msg.c \ md5.c message.c mem_pool.c parse_conf.c \ queue.c rwlock.c scan.c serial.c sha1.c \ semlock.c signal.c smartall.c tree.c \ - util.c var.c watchdog.c workq.c timers.c + util.c var.c watchdog.c workq.c btimers.c LIBOBJS = alloc.o attr.o base64.o bsys.o bget_msg.o \ @@ -50,7 +50,7 @@ LIBOBJS = alloc.o attr.o base64.o bsys.o bget_msg.o \ md5.o message.o mem_pool.o parse_conf.o \ queue.o rwlock.o scan.o serial.o sha1.o \ semlock.o signal.o smartall.o tree.o \ - util.o var.o watchdog.o workq.o timers.o + util.o var.o watchdog.o workq.o btimers.o EXTRAOBJS = @OBJLIST@ diff --git a/bacula/src/lib/btimers.c b/bacula/src/lib/btimers.c new file mode 100644 index 0000000000..d3de55373e --- /dev/null +++ b/bacula/src/lib/btimers.c @@ -0,0 +1,247 @@ +/* + * Process and thread timer routines, built on top of watchdogs. + * + * Nic Bellamy , October 2004. + * +*/ +/* + 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 + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + 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 along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + */ + +#include "bacula.h" +#include "jcr.h" + +/* Forward referenced functions */ +static void stop_btimer(btimer_t *wid); +static btimer_t *btimer_start_common(uint32_t wait); + +/* Forward referenced callback functions */ +static void callback_child_timer(watchdog_t *self); +static void callback_thread_timer(watchdog_t *self); +#ifdef xxx +static void destructor_thread_timer(watchdog_t *self); +static void destructor_child_timer(watchdog_t *self); +#endif + +/* + * Start a timer on a child process of pid, kill it after wait seconds. + * + * Returns: btimer_t *(pointer to btimer_t struct) on success + * NULL on failure + */ +btimer_t *start_child_timer(pid_t pid, uint32_t wait) +{ + btimer_t *wid; + + wid = btimer_start_common(wait); + if (wid == NULL) { + return NULL; + } + wid->type = TYPE_CHILD; + wid->pid = pid; + wid->killed = false; + + wid->wd->callback = callback_child_timer; + wid->wd->one_shot = false; + wid->wd->interval = wait; + register_watchdog(wid->wd); + + Dmsg3(200, "Start child timer %p, pid %d for %d secs.\n", wid, pid, wait); + return wid; +} + +/* + * Stop child timer + */ +void stop_child_timer(btimer_t *wid) +{ + if (wid == NULL) { + Dmsg0(200, "stop_child_timer called with NULL btimer_id\n"); + return; + } + Dmsg2(200, "Stop child timer %p pid %d\n", wid, wid->pid); + stop_btimer(wid); +} + +#ifdef xxx +static void destructor_child_timer(watchdog_t *self) +{ + btimer_t *wid = (btimer_t *)self->data; + free(wid->wd); + free(wid); +} +#endif + +static void callback_child_timer(watchdog_t *self) +{ + btimer_t *wid = (btimer_t *)self->data; + + if (!wid->killed) { + /* First kill attempt; try killing it softly (kill -SONG) first */ + wid->killed = true; + + Dmsg2(200, "watchdog %p term PID %d\n", self, wid->pid); + + /* Kill -TERM the specified PID, and reschedule a -KILL for 3 seconds + * later. + */ + kill(wid->pid, SIGTERM); + self->interval = 3; + } else { + /* This is the second call - terminate with prejudice. */ + Dmsg2(200, "watchdog %p kill PID %d\n", self, wid->pid); + + kill(wid->pid, SIGKILL); + + /* Setting one_shot to true before we leave ensures we don't get + * rescheduled. + */ + self->one_shot = true; + } +} + +/* + * Start a timer on a thread. kill it after wait seconds. + * + * Returns: btimer_t *(pointer to btimer_t struct) on success + * NULL on failure + */ +btimer_t *start_thread_timer(pthread_t tid, uint32_t wait) +{ + btimer_t *wid; + wid = btimer_start_common(wait); + if (wid == NULL) { + return NULL; + } + wid->type = TYPE_PTHREAD; + wid->tid = tid; + + wid->wd->callback = callback_thread_timer; + wid->wd->one_shot = true; + wid->wd->interval = wait; + register_watchdog(wid->wd); + + Dmsg3(200, "Start thread timer %p tid %p for %d secs.\n", wid, tid, wait); + + return wid; +} + +/* + * Start a timer on a BSOCK. kill it after wait seconds. + * + * Returns: btimer_t *(pointer to btimer_t struct) on success + * NULL on failure + */ +btimer_t *start_bsock_timer(BSOCK *bsock, uint32_t wait) +{ + btimer_t *wid; + wid = btimer_start_common(wait); + if (wid == NULL) { + return NULL; + } + wid->type = TYPE_BSOCK; + wid->tid = pthread_self(); + wid->bsock = bsock; + + wid->wd->callback = callback_thread_timer; + wid->wd->one_shot = true; + wid->wd->interval = wait; + register_watchdog(wid->wd); + + Dmsg3(200, "Start thread timer %p tip %p for %d secs.\n", wid, wid->tid, wait); + + return wid; +} + +/* + * Stop bsock timer + */ +void stop_bsock_timer(btimer_t *wid) +{ + if (wid == NULL) { + Dmsg0(200, "stop_bsock_timer called with NULL btimer_id\n"); + return; + } + Dmsg2(200, "Stop bsock timer %p tid %p.\n", wid, wid->tid); + stop_btimer(wid); +} + + +/* + * Stop thread timer + */ +void stop_thread_timer(btimer_t *wid) +{ + if (wid == NULL) { + Dmsg0(200, "stop_thread_timer called with NULL btimer_id\n"); + return; + } + Dmsg2(200, "Stop thread timer %p tid %p.\n", wid, wid->tid); + stop_btimer(wid); +} + +#ifdef xxx +static void destructor_thread_timer(watchdog_t *self) +{ + btimer_t *wid = (btimer_t *)self->data; + free(wid->wd); + free(wid); +} +#endif + +static void callback_thread_timer(watchdog_t *self) +{ + btimer_t *wid = (btimer_t *)self->data; + + Dmsg2(200, "watchdog %p kill thread %d\n", self, wid->tid); + + if (wid->type == TYPE_BSOCK && wid->bsock) { + Dmsg0(200, "kill type bsock ...\n"); + wid->bsock->timed_out = true; + } + pthread_kill(wid->tid, TIMEOUT_SIGNAL); +} + +static btimer_t *btimer_start_common(uint32_t wait) +{ + btimer_t *wid = (btimer_t *)malloc(sizeof(btimer_t)); + + wid->wd = new_watchdog(); + if (wid->wd == NULL) { + free(wid); + return NULL; + } + wid->wd->data = wid; + wid->killed = FALSE; + + return wid; +} + +/* + * Stop btimer + */ +static void stop_btimer(btimer_t *wid) +{ + if (wid == NULL) { + Emsg0(M_ABORT, 0, "stop_btimer called with NULL btimer_id\n"); + } + unregister_watchdog(wid->wd); + free(wid->wd); + free(wid); +} diff --git a/bacula/src/lib/btimers.h b/bacula/src/lib/btimers.h new file mode 100644 index 0000000000..6b14b53d3b --- /dev/null +++ b/bacula/src/lib/btimers.h @@ -0,0 +1,36 @@ +/* + * Process and thread timer routines, built on top of watchdogs. + * + * Nic Bellamy , October 2003. + * +*/ +/* + Copyright (C) 2003-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 + published by the Free Software Foundation; either version 2 of + the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + 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 along with this program; if not, write to the Free + Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, + MA 02111-1307, USA. + + */ + +typedef struct s_btimer_t { + watchdog_t *wd; /* Parent watchdog */ + int type; + bool killed; + pid_t pid; /* process id if TYPE_CHILD */ + pthread_t tid; /* thread id if TYPE_PTHREAD */ + BSOCK *bsock; /* Pointer to BSOCK */ +} btimer_t; + +/* EOF */ diff --git a/bacula/src/lib/lib.h b/bacula/src/lib/lib.h index 00934170bf..89d9c2948d 100644 --- a/bacula/src/lib/lib.h +++ b/bacula/src/lib/lib.h @@ -51,7 +51,7 @@ #include "sha1.h" #include "tree.h" #include "watchdog.h" -#include "timers.h" +#include "btimers.h" #include "bpipe.h" #include "attr.h" #include "var.h" diff --git a/bacula/src/stored/block.c b/bacula/src/stored/block.c index 47c48ca5f1..85f92eed33 100644 --- a/bacula/src/stored/block.c +++ b/bacula/src/stored/block.c @@ -688,6 +688,9 @@ int read_block_from_dev(JCR *jcr, DEVICE *dev, DEV_BLOCK *block, bool check_bloc int retry; DCR *dcr = jcr->dcr; + if (!dcr) { + Jmsg(jcr, M_ABORT, 0, _("DCR is NULL!\n")); + } if (dev_state(dev, ST_EOT)) { return 0; } diff --git a/bacula/src/stored/btape.c b/bacula/src/stored/btape.c index dd6546324a..1515549408 100644 --- a/bacula/src/stored/btape.c +++ b/bacula/src/stored/btape.c @@ -942,7 +942,11 @@ read_again: Pmsg0(-1, _("Got EOF on tape.\n")); goto read_again; } - Pmsg1(0, _("Read block failed! ERR=%s\n"), strerror(dev->dev_errno)); + Pmsg1(0, _("Read block failed! ERR=%s\n\n"), strerror(dev->dev_errno)); + Pmsg0(0, _("This may be because the tape drive block size is not\n" + " set to variable blocking as normally used by Bacula.\n" + " Please see the Tape Testing chapter in the manual and \n" + " look for using mt with defblksize and setoptions\n")); goto bail_out; } memset(rec->data, 0, rec->data_len); diff --git a/bacula/src/stored/dev.h b/bacula/src/stored/dev.h index 580c3f6aa0..e7dbf04a26 100644 --- a/bacula/src/stored/dev.h +++ b/bacula/src/stored/dev.h @@ -29,6 +29,8 @@ #ifndef __DEV_H #define __DEV_H 1 +#undef DCR /* used by Bacula */ + /* #define NEW_LOCK 1 */ #define new_lock_device(dev) _new_lock_device(__FILE__, __LINE__, (dev)) diff --git a/bacula/src/stored/spool.c b/bacula/src/stored/spool.c index 902661543b..65e86d3384 100644 --- a/bacula/src/stored/spool.c +++ b/bacula/src/stored/spool.c @@ -67,13 +67,13 @@ void list_spool_stats(BSOCK *bs) { char ed1[30], ed2[30]; if (spool_stats.data_jobs || spool_stats.max_data_size) { - bnet_fsend(bs, "Data spooling: %d active jobs %s bytes; %d total jobs %s max bytes/job.\n", + bnet_fsend(bs, "Data spooling: %d active jobs, %s bytes; %d total jobs, %s max bytes/job.\n", spool_stats.data_jobs, edit_uint64_with_commas(spool_stats.data_size, ed1), spool_stats.total_data_jobs, edit_uint64_with_commas(spool_stats.max_data_size, ed2)); } if (spool_stats.attr_jobs || spool_stats.max_attr_size) { - bnet_fsend(bs, "Attr spooling: %d active jobs; %d total jobs %s max bytes/job.\n", + bnet_fsend(bs, "Attr spooling: %d active jobs; %d total jobs, %s max bytes/job.\n", spool_stats.attr_jobs, spool_stats.total_attr_jobs, edit_uint64_with_commas(spool_stats.max_attr_size, ed1)); } @@ -109,8 +109,12 @@ bool discard_data_spool(JCR *jcr) bool commit_data_spool(JCR *jcr) { bool stat; + char ec1[40]; + if (jcr->dcr->spooling) { Dmsg0(100, "Committing spooled data\n"); + Jmsg(jcr, M_INFO, 0, _("Writing spooled data to Volume. Despooling %s bytes ...\n"), + edit_uint64_with_commas(jcr->dcr->dev->spool_size, ec1)); stat = despool_data(jcr->dcr); if (!stat) { Dmsg1(000, "Bad return from despool WroteVol=%d\n", jcr->dcr->WroteVol); @@ -339,8 +343,9 @@ bool write_block_to_spool_file(DCR *dcr, DEV_BLOCK *block) } V(mutex); if (despool) { + char ec1[30]; #ifdef xDEBUG - char ec1[30], ec2[30], ec3[30], ec4[30]; + char ec2[30], ec3[30], ec4[30]; Dmsg4(100, "Despool in write_block_to_spool_file max_size=%s size=%s " "max_job_size=%s job_size=%s\n", edit_uint64_with_commas(dcr->max_spool_size, ec1), @@ -348,12 +353,13 @@ bool write_block_to_spool_file(DCR *dcr, DEV_BLOCK *block) edit_uint64_with_commas(dcr->dev->max_spool_size, ec3), edit_uint64_with_commas(dcr->dev->spool_size, ec4)); #endif - Jmsg(dcr->jcr, M_INFO, 0, _("User specified spool size reached. Despooling ...\n")); + Jmsg(dcr->jcr, M_INFO, 0, _("User specified spool size reached. Despooling %s bytes ...\n"), + edit_uint64_with_commas(dcr->dev->spool_size, ec1)); if (!despool_data(dcr)) { Dmsg0(000, "Bad return from despool in write_block.\n"); return false; } - /* Despooling cleard these variables so reset them */ + /* Despooling cleared these variables so reset them */ P(dcr->dev->spool_mutex); dcr->spool_size += hlen + wlen; dcr->dev->spool_size += hlen + wlen; diff --git a/bacula/src/version.h b/bacula/src/version.h index 0996e32887..058077b0ae 100644 --- a/bacula/src/version.h +++ b/bacula/src/version.h @@ -2,8 +2,8 @@ #undef VERSION #define VERSION "1.34.3" #define VSTRING "1" -#define BDATE "01 May 2004" -#define LSMDATE "01May04" +#define BDATE "28 May 2004" +#define LSMDATE "28May04" /* Debug flags */ #undef DEBUG