]> git.sur5r.net Git - bacula/bacula/blob - bacula/patches/testing/real_maxwaittime.patch
ebl try to get MaxWaitTime working like in manual...
[bacula/bacula] / bacula / patches / testing / real_maxwaittime.patch
1 Index: src/dird/job.c
2 ===================================================================
3 --- src/dird/job.c      (révision 4696)
4 +++ src/dird/job.c      (copie de travail)
5 @@ -487,21 +487,24 @@
6     if (job_canceled(jcr)) {
7        return false;                /* already canceled */
8     }
9 +   if (!job_waiting(jcr)) {
10 +      return false;
11 +   }
12     if (job->MaxWaitTime == 0 && job->FullMaxWaitTime == 0 &&
13         job->IncMaxWaitTime == 0 && job->DiffMaxWaitTime == 0) {
14        return false;
15     } 
16     if (jcr->JobLevel == L_FULL && job->FullMaxWaitTime != 0 &&
17 -         (watchdog_time - jcr->start_time) >= job->FullMaxWaitTime) {
18 +         (watchdog_time - jcr->wait_time) >= job->FullMaxWaitTime) {
19        cancel = true;
20     } else if (jcr->JobLevel == L_DIFFERENTIAL && job->DiffMaxWaitTime != 0 &&
21 -         (watchdog_time - jcr->start_time) >= job->DiffMaxWaitTime) {
22 +         (watchdog_time - jcr->wait_time) >= job->DiffMaxWaitTime) {
23        cancel = true;
24     } else if (jcr->JobLevel == L_INCREMENTAL && job->IncMaxWaitTime != 0 &&
25 -         (watchdog_time - jcr->start_time) >= job->IncMaxWaitTime) {
26 +         (watchdog_time - jcr->wait_time) >= job->IncMaxWaitTime) {
27        cancel = true;
28     } else if (job->MaxWaitTime != 0 &&
29 -         (watchdog_time - jcr->start_time) >= job->MaxWaitTime) {
30 +         (watchdog_time - jcr->wait_time) >= job->MaxWaitTime) {
31        cancel = true;
32     }
33  
34 Index: src/jcr.h
35 ===================================================================
36 --- src/jcr.h   (révision 4696)
37 +++ src/jcr.h   (copie de travail)
38 @@ -105,6 +105,18 @@
39     jcr->JobStatus == JS_ErrorTerminated || \
40     jcr->JobStatus == JS_FatalError)
41  
42 +#define job_waiting(jcr) \
43 +  (jcr->JobStatus == JS_WaitFD       || \
44 +   jcr->JobStatus == JS_WaitSD      || \
45 +   jcr->JobStatus == JS_WaitMedia    || \
46 +   jcr->JobStatus == JS_WaitMount    || \
47 +   jcr->JobStatus == JS_WaitStoreRes || \
48 +   jcr->JobStatus == JS_WaitJobRes   || \
49 +   jcr->JobStatus == JS_WaitClientRes|| \
50 +   jcr->JobStatus == JS_WaitMaxJobs  || \
51 +   jcr->JobStatus == JS_WaitPriority)
52 +
53 +
54  #define foreach_jcr(jcr) \
55     for (jcr=jcr_walk_start(); jcr; (jcr=jcr_walk_next(jcr)) )
56  
57 @@ -166,6 +178,7 @@
58     time_t start_time;                 /* when job actually started */
59     time_t run_time;                   /* used for computing speed */
60     time_t end_time;                   /* job end time */
61 +   time_t wait_time;                  /* when job have started to wait */
62     POOLMEM *client_name;              /* client name */
63     POOLMEM *RestoreBootstrap;         /* Bootstrap file to restore */
64     POOLMEM *stime;                    /* start time for incremental/differential */
65 Index: src/lib/jcr.c
66 ===================================================================
67 --- src/lib/jcr.c       (révision 4696)
68 +++ src/lib/jcr.c       (copie de travail)
69 @@ -546,18 +546,53 @@
70  
71  void set_jcr_job_status(JCR *jcr, int JobStatus)
72  {
73 +   bool set_waittime=false;
74 +
75 +   /* if wait state is new, we keep current time for watchdog MaxWaitTime */
76 +   switch (JobStatus) {
77 +      case JS_WaitFD:
78 +      case JS_WaitSD:
79 +      case JS_WaitMedia:
80 +      case JS_WaitMount:
81 +      case JS_WaitStoreRes:
82 +      case JS_WaitJobRes:
83 +      case JS_WaitClientRes:
84 +      case JS_WaitMaxJobs:
85 +      case JS_WaitPriority:
86 +        set_waittime = true;
87 +      default:
88 +        break;
89 +   }
90 +
91 +   switch (jcr->JobStatus) {
92     /*
93      * For a set of errors, ... keep the current status
94      *   so it isn't lost. For all others, set it.
95      */
96 -   switch (jcr->JobStatus) {
97     case JS_ErrorTerminated:
98     case JS_Error:
99     case JS_FatalError:
100     case JS_Differences:
101     case JS_Canceled:
102        break;
103 +   /*
104 +    * For a set of Wait situation, keep old time.
105 +    */
106 +   case JS_WaitFD:
107 +   case JS_WaitSD:
108 +   case JS_WaitMedia:
109 +   case JS_WaitMount:
110 +   case JS_WaitStoreRes:
111 +   case JS_WaitJobRes:
112 +   case JS_WaitClientRes:
113 +   case JS_WaitMaxJobs:
114 +   case JS_WaitPriority:  
115 +      set_waittime = false;    /* keep old time */
116     default:
117 +      if (set_waittime) {
118 +        /* set it before JobStatus */
119 +        jcr->wait_time = time(NULL);
120 +      }
121        jcr->JobStatus = JobStatus;
122     }
123  }