From: <ke...@us...> - 2007-12-10 17:54:41
|
Revision: 6033 http://bacula.svn.sourceforge.net/bacula/?rev=6033&view=rev Author: kerns Date: 2007-12-10 09:54:41 -0800 (Mon, 10 Dec 2007) Log Message: ----------- Correct a problem where the maximum concurrent storage jobs counter gets out of sync during restore jobs causing jobs to 'wait on max Storage jobs'. Fixes bug #1009. Modified Paths: -------------- branches/Branch-2.2/bacula/examples/nagios/nagios_plugin_check_bacula.tgz branches/Branch-2.2/bacula/src/cats/create_postgresql_database.in branches/Branch-2.2/bacula/src/dird/jobq.c branches/Branch-2.2/bacula/technotes-2.1 Modified: branches/Branch-2.2/bacula/examples/nagios/nagios_plugin_check_bacula.tgz =================================================================== (Binary files differ) Modified: branches/Branch-2.2/bacula/src/cats/create_postgresql_database.in =================================================================== --- branches/Branch-2.2/bacula/src/cats/create_postgresql_database.in 2007-12-10 17:34:38 UTC (rev 6032) +++ branches/Branch-2.2/bacula/src/cats/create_postgresql_database.in 2007-12-10 17:54:41 UTC (rev 6033) @@ -9,9 +9,15 @@ # use SQL_ASCII to be able to put any filename into # the database even those created with unusual character sets ENCODING="ENCODING 'SQL_ASCII'" + # use UTF8 if you are using standard Unix/Linux LANG specifications # that use UTF8 -- this is normally the default and *should* be -# your standard. Bacula consoles work correctly *only* with UTF8. +# your standard. Bacula works correctly *only* with correct UTF8. +# +# Note, with this encoding, if you have any "weird" filenames on +# your system (names generated from Win32 or Mac OS), you may +# get Bacula batch insert failures. +# #ENCODING="ENCODING 'UTF8'" Modified: branches/Branch-2.2/bacula/src/dird/jobq.c =================================================================== --- branches/Branch-2.2/bacula/src/dird/jobq.c 2007-12-10 17:34:38 UTC (rev 6032) +++ branches/Branch-2.2/bacula/src/dird/jobq.c 2007-12-10 17:54:41 UTC (rev 6033) @@ -1,23 +1,4 @@ /* - * Bacula job queue routines. - * - * This code consists of three queues, the waiting_jobs - * queue, where jobs are initially queued, the ready_jobs - * queue, where jobs are placed when all the resources are - * allocated and they can immediately be run, and the - * running queue where jobs are placed when they are - * running. - * - * Kern Sibbald, July MMIII - * - * Version $Id$ - * - * This code was adapted from the Bacula workq, which was - * adapted from "Programming with POSIX Threads", by - * David R. Butenhof - * - */ -/* Bacula® - The Network Backup Solution Copyright (C) 2003-2007 Free Software Foundation Europe e.V. @@ -44,6 +25,25 @@ (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, Switzerland, email:ft...@fs.... */ +/* + * Bacula job queue routines. + * + * This code consists of three queues, the waiting_jobs + * queue, where jobs are initially queued, the ready_jobs + * queue, where jobs are placed when all the resources are + * allocated and they can immediately be run, and the + * running queue where jobs are placed when they are + * running. + * + * Kern Sibbald, July MMIII + * + * Version $Id$ + * + * This code was adapted from the Bacula workq, which was + * adapted from "Programming with POSIX Threads", by + * David R. Butenhof + * + */ #include "bacula.h" #include "dird.h" @@ -453,6 +453,7 @@ } } jq->running_jobs->append(je); +// set_jcr_in_tsd(jcr); Dmsg1(2300, "Took jobid=%d from ready and appended to run\n", jcr->JobId); /* Release job queue lock */ @@ -682,14 +683,13 @@ jcr->acquired_resource_locks = false; if (jcr->rstore) { Dmsg1(200, "Rstore=%s\n", jcr->rstore->name()); - if (jcr->rstore->NumConcurrentJobs == 0 && - jcr->rstore->NumConcurrentJobs < jcr->rstore->MaxConcurrentJobs) { - /* Simple case, first job */ + /* + * Let only one Restore/Verify job run at a time regardless + * of MaxConcurrentjobs. + */ + if (jcr->rstore->NumConcurrentJobs == 0) { jcr->rstore->NumConcurrentJobs = 1; Dmsg0(200, "Set rncj=1\n"); - } else if (jcr->rstore->NumConcurrentJobs < jcr->rstore->MaxConcurrentJobs) { - jcr->rstore->NumConcurrentJobs++; - Dmsg1(200, "Inc rncj=%d\n", jcr->rstore->NumConcurrentJobs); } else { Dmsg1(200, "Fail rncj=%d\n", jcr->rstore->NumConcurrentJobs); set_jcr_job_status(jcr, JS_WaitStoreRes); @@ -700,7 +700,7 @@ if (jcr->wstore) { Dmsg1(200, "Wstore=%s\n", jcr->wstore->name()); if (jcr->rstore == jcr->wstore) { /* deadlock */ - jcr->rstore->NumConcurrentJobs--; /* back out rstore */ + jcr->rstore->NumConcurrentJobs = 0; /* back out rstore */ Jmsg(jcr, M_FATAL, 0, _("Job canceled. Attempt to read and write same device.\n" " Read storage \"%s\" (From %s) -- Write storage \"%s\" (From %s)\n"), jcr->rstore->name(), jcr->rstore_source, jcr->wstore->name(), jcr->wstore_source); @@ -716,7 +716,7 @@ jcr->wstore->NumConcurrentJobs++; Dmsg1(200, "Inc wncj=%d\n", jcr->wstore->NumConcurrentJobs); } else if (jcr->rstore) { - jcr->rstore->NumConcurrentJobs--; /* back out rstore */ + jcr->rstore->NumConcurrentJobs = 0; /* back out rstore */ Dmsg1(200, "Fail wncj=%d\n", jcr->wstore->NumConcurrentJobs); skip_this_jcr = true; } else { @@ -738,7 +738,7 @@ Dmsg1(200, "Dec wncj=%d\n", jcr->wstore->NumConcurrentJobs); } if (jcr->rstore) { - jcr->rstore->NumConcurrentJobs--; + jcr->rstore->NumConcurrentJobs = 0; Dmsg1(200, "Dec rncj=%d\n", jcr->rstore->NumConcurrentJobs); } set_jcr_job_status(jcr, JS_WaitClientRes); @@ -753,7 +753,7 @@ Dmsg1(200, "Dec wncj=%d\n", jcr->wstore->NumConcurrentJobs); } if (jcr->rstore) { - jcr->rstore->NumConcurrentJobs--; + jcr->rstore->NumConcurrentJobs = 0; Dmsg1(200, "Dec rncj=%d\n", jcr->rstore->NumConcurrentJobs); } jcr->client->NumConcurrentJobs--; Modified: branches/Branch-2.2/bacula/technotes-2.1 =================================================================== --- branches/Branch-2.2/bacula/technotes-2.1 2007-12-10 17:34:38 UTC (rev 6032) +++ branches/Branch-2.2/bacula/technotes-2.1 2007-12-10 17:54:41 UTC (rev 6033) @@ -1,6 +1,10 @@ Technical notes on version 2.2 General: +10Dec07 +kes This patch corrects a problem where the maximum concurrent storage + jobs counter gets out of sync during restore jobs causing jobs to + 'wait on max Storage jobs'. This patch fixes bug #1009. 08Dec07 kes Add new include to postgresql.c suggested by Marc Cousins so that it compiles correctly with pgre version 8.3. Also fix This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |