Hello Allan, This patch looks perfectly good to me -- you have even nicely optimized the free_jcr() code.
I have now applied it to the trunk (to be committed today), and will probably commit it to Branch-2.2 so that it will appear in version 2.2.10-b4 and later. Thanks for the contribution, Kern On Wednesday 21 May 2008 16:03:00 Allan Black wrote: > This has been discussed a few times. My original email is below. > > In a nutshell: if a "status director" command is issued using the > console AND there is at least one scheduled job reported, then the > console session will cause num_jobs_run to be incremented when the > console disconnects. > > The attached patch (which I have been running live now for several > weeks, and also passes the regression tests against trunk) fixes > this. I had to implement option (1) from my original email. (2) did > not work at all, for various reasons. > > The patch does 2 things: > > 1) Saves and restores the console JCR's job type > > 2) Only increments num_jobs_run if jcr->JobId > 0 > > Allan > > -------- Original Message -------- > Subject: Status Command Changes The Job Type > Date: Wed, 13 Feb 2008 20:23:21 +0000 > From: Allan Black <[EMAIL PROTECTED]> > To: [email protected] > > Just had a look at ua_status.c, because of something which > has been annoying me for a while. > > If there are any scheduled jobs, the "st dir" command causes > num_jobs_run to be incremented when the console disconnects. > > [ I noticed this while I was testing a script, and could not > understand why the "jobs run since started" kept increasing > every time I ran it ] > > What is happening is this: > > The console's JCR starts off with its JobType set to JT_ADMIN. > The list_scheduled_jobs() function calls prt_runtime() on any > jobs in the sched list. prt_runtime re-uses the console's JCR > to emulate the job which is being examined, and to do so, it > has to change some of the JCR's values. > > In particular, prt_runtime() calls complete_jcr_for_job(), > which in turn calls set_jcr_defaults(), which sets the JCR's > JobType to be the Job's JobType, i.e. JT_BACKUP. > > prt_runtime() restores the JCR's db field to its original > value (which is in the UAContext), but not any of the other > values. > > As a result, when the console disconnects, the director frees > the JCR and increments num_jobs_run, because jcr->JobType is > set to JT_BACKUP. > > This is a trivial bug, but of more concern to me is the fact > that the console's JCR has been 'corrupted'. > > I would like to fix this, but would appreciate your opinions > on the correct way to go about it: > > 1) Restore the JobType to the correct value at the end of > prt_runtime(), either by saving it, or by explicitly > setting it to JT_ADMIN (I would probably prefer to > save/restore, just in case). > > 2) Create and destroy a new JCR object in prt_runtime() > instead of re-using the console's JCR. > > I think 2 is technically the correct way to do it, since > there may be other fields in the JCR which are changed, but > it may be more difficult. > > Allan ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Bacula-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/bacula-devel
