]> git.sur5r.net Git - bacula/bacula/commitdiff
Restore JobIds in right order + Tru64 porting
authorKern Sibbald <kern@sibbald.com>
Sat, 24 Jul 2004 10:26:51 +0000 (10:26 +0000)
committerKern Sibbald <kern@sibbald.com>
Sat, 24 Jul 2004 10:26:51 +0000 (10:26 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1488 91ce42f0-d328-0410-95d8-f526ca767f89

12 files changed:
bacula/autoconf/config.h.in
bacula/autoconf/configure.in
bacula/configure
bacula/kernstodo
bacula/src/baconfig.h
bacula/src/dird/dird.c
bacula/src/dird/query.sql
bacula/src/dird/sql_cmds.c
bacula/src/filed/backup.c
bacula/src/lib/bsys.c
bacula/src/lib/btimers.c
bacula/src/lib/watchdog.c

index b0222086756eda15e14a68f2172fd4f8b2f7f379..eb39c8f7d80c13c4179bee2b9cf56de1d08eca6c 100644 (file)
    `HAVE_STRUCT_STAT_ST_RDEV' instead. */
 #undef HAVE_ST_RDEV
 
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
 /* Define to 1 if you have the <sys/byteorder.h> header file. */
 #undef HAVE_SYS_BYTEORDER_H
 
index fff33f7ac109d64ef5e7e5095ee09148c527e05c..b9b99087c9bc7f0df5a3750fa44ca8e1b01e982e 100644 (file)
@@ -972,6 +972,7 @@ AC_CHECK_HEADERS( \
        string.h \
        termios.h \
        unistd.h \
+       sys/bitypes.h \
        sys/byteorder.h \
        sys/ioctl.h \
        sys/select.h \
@@ -1228,6 +1229,38 @@ if test -z "$have_u_intxx_t" ; then
    fi
 fi
 
+if (test -z "$have_u_int64_t" || test -z "$have_int64_t" && \
+         test "x$ac_cv_header_sys_bitypes_h" = "xyes")
+then
+   AC_MSG_CHECKING([for int64_t and u_int64_t types in sys/bitypes.h])
+   AC_TRY_COMPILE(
+      [ #include <sys/bitypes.h>  ], 
+      [ int64_t a; u_int64_t b; 
+       a = b = 1;  ], 
+      [ AC_DEFINE(HAVE_U_INT64_T)
+       AC_DEFINE(HAVE_INT64_T)
+       AC_MSG_RESULT(yes) ],
+      [ AC_MSG_RESULT(no)]
+   ) 
+fi
+
+if (test -z "$have_uintxx_t" && \
+         test "x$ac_cv_header_sys_bitypes_h" = "xyes")
+then
+   AC_MSG_CHECKING([for uintXX_t types in sys/bitypes.h])
+   AC_TRY_COMPILE(
+      [ #include <sys/bitypes.h>  ], 
+       [ uint8_t a; uint16_t b; 
+         uint32_t c; a = b = c = 1; ], 
+      [ AC_DEFINE(HAVE_UINTXX_T)
+       AC_MSG_RESULT(yes) ],
+      [ AC_MSG_RESULT(no)]
+   ) 
+
+fi
+
+
+
 
 dnl# --------------------------------------------------------------------------
 dnl# CHECKING FOR REQUIRED LIBRARY FUNCTIONS
index a355cebc110699650688f08d83b4c28bd1ab8e5a..836e187dd45560abef08beb0b117f14bb0e72552 100755 (executable)
@@ -9136,6 +9136,7 @@ fi
 
 
 
+
 
 
 for ac_header in \
@@ -9151,6 +9152,7 @@ for ac_header in \
        string.h \
        termios.h \
        unistd.h \
+       sys/bitypes.h \
        sys/byteorder.h \
        sys/ioctl.h \
        sys/select.h \
@@ -15062,6 +15064,115 @@ _ACEOF
    fi
 fi
 
+if (test -z "$have_u_int64_t" || test -z "$have_int64_t" && \
+         test "x$ac_cv_header_sys_bitypes_h" = "xyes")
+then
+   echo "$as_me:$LINENO: checking for int64_t and u_int64_t types in sys/bitypes.h" >&5
+echo $ECHO_N "checking for int64_t and u_int64_t types in sys/bitypes.h... $ECHO_C" >&6
+   cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+ #include <sys/bitypes.h>
+int
+main ()
+{
+ int64_t a; u_int64_t b;
+       a = b = 1;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+   cat >>confdefs.h <<\_ACEOF
+#define HAVE_U_INT64_T 1
+_ACEOF
+
+       cat >>confdefs.h <<\_ACEOF
+#define HAVE_INT64_T 1
+_ACEOF
+
+       echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+fi
+
+if (test -z "$have_uintxx_t" && \
+         test "x$ac_cv_header_sys_bitypes_h" = "xyes")
+then
+   echo "$as_me:$LINENO: checking for uintXX_t types in sys/bitypes.h" >&5
+echo $ECHO_N "checking for uintXX_t types in sys/bitypes.h... $ECHO_C" >&6
+   cat >conftest.$ac_ext <<_ACEOF
+#line $LINENO "configure"
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+ #include <sys/bitypes.h>
+int
+main ()
+{
+ uint8_t a; uint16_t b;
+         uint32_t c; a = b = c = 1;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+         { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+   cat >>confdefs.h <<\_ACEOF
+#define HAVE_UINTXX_T 1
+_ACEOF
+
+       echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.$ac_objext conftest.$ac_ext
+
+fi
+
+
+
 
 
 
index e949a44cbc56dcc648aa0edd9335e5466f8de57e..50cc64f0a410493e5a5ae7363c079ef8bdbe9f68 100644 (file)
@@ -4,12 +4,12 @@
 1.35 Items to do:
 - Do tape alerts -- see tapealert.txt
 - Fix errno handling in win32 compat routines.
+- Add better error codes to run_program (10000+)
 - Revisit and revise Disaster Recovery (fix SCSI and RAID 
   disk detection)
 - Document a get out of jail procedure if everything breaks if 
   you lost/broke the Catalog -- do the same for "I know my
   file is there how do I get it back?".
-- Add better error codes to run_program (10000+)
 - When passwords do not match, print message that points the
   user to the doc.
 - Make Verify jobs require exclusive use of Volume as Restore 
@@ -23,6 +23,8 @@
   devices by a single job.
 - bscan does not put first of two volumes back with all info in
   bscan-test.
+- Fix restore ++++ that get intermingled with "Building directory tree"
+- Solve the termcap.h problem on Solaris configure.
 
 Documentation to do: (any release a little bit at a time)
 - Document query file format.
@@ -1105,3 +1107,10 @@ Block Position: 0
 - Fix GROUP BYs in all SQL (done by Dan -- thanks)
 - Make entering multiple Storage names in Dir illegal.
 - Make btape release the drive during the "test" append.
+- Fix restore:
+   You have selected the following JobIds: 739,856,797
+   Building directory tree for JobId 739 ...
+   Building directory tree for JobId 856 ...
+   Building directory tree for JobId 797 ...3 
+   Jobs inserted into the tree.
+
index 31441a85762c4826d33b36677c64143713e6821d..455e498bbbe9136d943eac781d5aab65eacea731 100644 (file)
@@ -483,6 +483,12 @@ extern "C" int getdomainname(char *name, int len);
 
 #ifdef HAVE_AIX_OS
 #endif
+
+#ifdef HAVE_OSF1_OS
+#undef HAVE_CHFLAGS  /* chflags is incorrectly detected */
+extern "C" int fchdir(int filedes);
+extern "C" long gethostid(void);
+#endif
  
 /* This probably should be done on a machine by machine basic, but it works */
 #define ALIGN_SIZE (sizeof(double))
index 38a6678a6efa18fec3bbe52c38460a197e6bbd9a..a7afb0f5bfdbc6038d7946e1d1a67afaa62cae09 100644 (file)
@@ -318,7 +318,7 @@ static void free_saved_resources(int table)
  */
 static void reload_job_end_cb(JCR *jcr, void *ctx)
 {
-   int reload_id = (int)ctx;
+   int reload_id = (int)((long int)ctx);
    Dmsg3(100, "reload job_end JobId=%d table=%d cnt=%d\n", jcr->JobId,
       reload_id, reload_table[reload_id].job_count);
    lock_jcr_chain();
@@ -419,7 +419,7 @@ void reload_config(int sig)
       foreach_jcr(jcr) {
         if (jcr->JobType != JT_SYSTEM) {
            reload_table[table].job_count++;
-           job_end_push(jcr, reload_job_end_cb, (void *)table);
+           job_end_push(jcr, reload_job_end_cb, (void *)((long int)table));
            njobs++;
         }
         free_locked_jcr(jcr);
index 9df7ec16cfd565cc6af16036dca634577dae0e98..29787b9c402b764b44ace9de689b881967a688e7 100644 (file)
@@ -1,14 +1,15 @@
 :List Job totals:
-SELECT  count(*) AS Jobs, sum(JobFiles) AS Files, 
- sum(JobBytes) AS Bytes, Name AS Job FROM Job GROUP BY Name;
-SELECT max(JobId) AS Jobs,sum(JobFiles) AS Files,
- sum(JobBytes) As Bytes FROM Job;
+SELECT count(*) AS Jobs,sum(JobFiles) AS Files, 
+  sum(JobBytes) AS Bytes,Name AS Job 
+ FROM Job 
+ GROUP BY Name;
+SELECT max(JobId) AS Jobs,sum(JobFiles) AS Files,sum(JobBytes) As Bytes 
+ FROM Job;
 # 2 
 :List where a File is saved regardless of the directory:
 *Enter Filename (no path):
 SELECT DISTINCT Job.JobId as JobId, Client.Name as Client,
- Path.Path,Filename.Name,
- StartTime,Level,JobFiles,JobBytes
+  Path.Path,Filename.Name,StartTime,Level,JobFiles,JobBytes
  FROM Client,Job,File,Filename,Path WHERE Client.ClientId=Job.ClientId
  AND JobStatus='T' AND Job.JobId=File.JobId
  AND Path.PathId=File.PathId AND Filename.FilenameId=File.FilenameId
@@ -35,7 +36,7 @@ SELECT DISTINCT Job.JobId,StartTime AS JobStartTime,VolumeName,Client.Name AS Cl
 :List last 20 Full Backups for a Client:
 *Enter Client name:
 SELECT DISTINCT Job.JobId,Client.Name AS Client,StartTime,JobFiles,JobBytes,
-JobMedia.StartFile as VolFile,VolumeName
+  JobMedia.StartFile as VolFile,VolumeName
  FROM Client,Job,JobMedia,Media
  WHERE Client.Name='%1'
  AND Client.ClientId=Job.ClientId
@@ -47,28 +48,28 @@ JobMedia.StartFile as VolFile,VolumeName
 *Enter Client Name:
 *Enter time in YYYY-MM-DD HH:MM:SS format:
 SELECT DISTINCT Job.JobId,Client.Name as Client,Level,StartTime,JobFiles,JobBytes,VolumeName
 FROM Client,Job,JobMedia,Media
 WHERE Client.Name='%1'
 AND Client.ClientId=Job.ClientId
 AND JobStatus='T'
 AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId
 AND Job.StartTime >= '%2'
 ORDER BY Job.StartTime;
+ FROM Client,Job,JobMedia,Media
+ WHERE Client.Name='%1'
+ AND Client.ClientId=Job.ClientId
+ AND JobStatus='T'
+ AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId
+ AND Job.StartTime >= '%2'
+ ORDER BY Job.StartTime;
 # 6
 :List all backups for a Client
 *Enter Client Name:
 SELECT DISTINCT Job.JobId,Client.Name as Client,Level,StartTime,JobFiles,JobBytes,VolumeName
 FROM Client,Job,JobMedia,Media
 WHERE Client.Name='%1'
 AND Client.ClientId=Job.ClientId
 AND JobStatus='T'
 AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId
 ORDER BY Job.StartTime;
+ FROM Client,Job,JobMedia,Media
+ WHERE Client.Name='%1'
+ AND Client.ClientId=Job.ClientId
+ AND JobStatus='T'
+ AND JobMedia.JobId=Job.JobId AND JobMedia.MediaId=Media.MediaId
+ ORDER BY Job.StartTime;
 # 7
 :List Volume Attributes for a selected Volume:
 *Enter Volume name:
 SELECT Slot,MaxVolBytes,VolCapacityBytes,VolStatus,Recycle,VolRetention,
- VolUseDuration,MaxVolJobs,MaxVolFiles
 VolUseDuration,MaxVolJobs,MaxVolFiles
  FROM Media   
  WHERE VolumeName='%1';
 # 8
@@ -102,7 +103,7 @@ CREATE TABLE temp2 (JobId BIGINT NOT NULL,
  VolSessionTime BIGINT);
 # Select last Full save
 INSERT INTO temp SELECT Job.JobId,JobTDate,Job.ClientId,Job.Level,
-   StartTime,VolumeName,JobMedia.StartFile,VolSessionId,VolSessionTime
+  StartTime,VolumeName,JobMedia.StartFile,VolSessionId,VolSessionTime
  FROM Client,Job,JobMedia,Media WHERE Client.Name='%1'
  AND Client.ClientId=Job.ClientId
  AND Level='F' AND JobStatus='T'
@@ -111,14 +112,14 @@ INSERT INTO temp SELECT Job.JobId,JobTDate,Job.ClientId,Job.Level,
  ORDER BY Job.JobTDate DESC LIMIT 1;
 # Copy into temp 2 getting all volumes of Full save
 INSERT INTO temp2 SELECT Job.JobId,Job.StartTime,Media.VolumeName,Job.Level,
-   JobMedia.StartFile,Job.VolSessionId,Job.VolSessionTime
+  JobMedia.StartFile,Job.VolSessionId,Job.VolSessionTime
  FROM temp,Job,JobMedia,Media WHERE temp.JobId=Job.JobId
  AND Job.Level='F' AND Job.JobStatus='T'
  AND JobMedia.JobId=Job.JobId
  AND JobMedia.MediaId=Media.MediaId;
 # Now add subsequent incrementals
 INSERT INTO temp2 SELECT DISTINCT Job.JobId,Job.StartTime,Media.VolumeName,
-   Job.Level,JobMedia.StartFile,Job.VolSessionId,Job.VolSessionTime
+  Job.Level,JobMedia.StartFile,Job.VolSessionId,Job.VolSessionTime
  FROM Job,temp,JobMedia,Media
  WHERE Job.JobTDate>temp.JobTDate 
  AND Job.ClientId=temp.ClientId
@@ -137,13 +138,11 @@ SELECT Recycle,VolRetention,VolUseDuration,MaxVolJobs,MaxVolFiles,MaxVolBytes
  WHERE Name='%1';
 # 11
 :List total files/bytes by Job:
-SELECT count(*) AS Jobs, sum(JobFiles) AS Files,
- sum(JobBytes) AS Bytes, Name AS Job
+SELECT count(*) AS Jobs,sum(JobFiles) AS Files,sum(JobBytes) AS Bytes,Name AS Job
  FROM Job GROUP by Name;
 # 12
 :List total files/bytes by Volume:
-SELECT count(*) AS Jobs, sum(JobFiles) AS Files,
- sum(JobBytes) AS Bytes, VolumeName
+SELECT count(*) AS Jobs,sum(JobFiles) AS Files,sum(JobBytes) AS Bytes,VolumeName
  FROM Job,JobMedia,Media
  WHERE JobMedia.JobId=Job.JobId
  AND JobMedia.MediaId=Media.MediaId
@@ -151,8 +150,7 @@ SELECT count(*) AS Jobs, sum(JobFiles) AS Files,
 # 13
 :List Files for a selected JobId:
 *Enter JobId:
-SELECT Path.Path,Filename.Name FROM File,
- Filename,Path WHERE File.JobId=%1 
+SELECT Path.Path,Filename.Name FROM File,Filename,Path WHERE File.JobId=%1 
  AND Filename.FilenameId=File.FilenameId 
  AND Path.PathId=File.PathId ORDER BY
  Path.Path,Filename.Name;
@@ -160,19 +158,19 @@ SELECT Path.Path,Filename.Name FROM File,
 :List Jobs stored in a selected MediaId:
 *Enter MediaId:
 SELECT DISTINCT Job.JobId,Job.Name,Job.StartTime,Job.Type,
- Job.Level,Job.JobFiles,Job.JobBytes,Job.JobStatus
 FROM JobMedia,Job
 WHERE JobMedia.JobId=Job.JobId
 AND JobMedia.MediaId=%1 
 ORDER by Job.StartTime;
 Job.Level,Job.JobFiles,Job.JobBytes,Job.JobStatus
+ FROM JobMedia,Job
+ WHERE JobMedia.JobId=Job.JobId
+ AND JobMedia.MediaId=%1 
+ ORDER by Job.StartTime;
 # 15  
 :List Jobs stored for a given Volume name:
 *Enter Volume name:
 SELECT DISTINCT Job.JobId as JobId,Job.Name as Name,Job.StartTime as StartTime,
   Job.Type as Type,Job.Level as Level,Job.JobFiles as Files,
   Job.JobBytes as Bytes,Job.JobStatus as Status
 FROM Media,JobMedia,Job
 WHERE Media.VolumeName='%1'
 AND Media.MediaId=JobMedia.MediaId              
 AND JobMedia.JobId=Job.JobId
 ORDER by Job.StartTime;
+ FROM Media,JobMedia,Job
+ WHERE Media.VolumeName='%1'
+ AND Media.MediaId=JobMedia.MediaId              
+ AND JobMedia.JobId=Job.JobId
+ ORDER by Job.StartTime;
index 26afbc4e9f9f401223f79f7472300c2af52e309d..fa983d374e8b6f441b36a97e436c74a4a5d0b557 100644 (file)
@@ -284,7 +284,7 @@ const char *uar_list_temp =
    "ORDER BY StartTime ASC";
 
 
-const char *uar_sel_jobid_temp = "SELECT JobId FROM temp";
+const char *uar_sel_jobid_temp = "SELECT JobId FROM temp ORDER BY StartTime ASC";
 
 const char *uar_sel_all_temp1 = "SELECT * FROM temp1";
 
index 8680c9ea64e86cfaacd962b27e5ebeb6fe7cade0..aa9d4a191619d6f36c624a6de7e1d91b778bd075 100644 (file)
@@ -239,10 +239,16 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
          Jmsg(jcr, M_NOTSAVED, -1, _("     Cannot open %s: ERR=%s.\n"), ff_pkt->fname, 
              berror(&ff_pkt->bfd));
         jcr->Errors++;
-        stop_thread_timer(tid);
+        if (tid) {
+           stop_thread_timer(tid);
+           tid = NULL;
+        }
         return 1;
       }
-      stop_thread_timer(tid);
+      if (tid) {
+        stop_thread_timer(tid);
+        tid = NULL;
+      }
    }
 
    Dmsg1(130, "bfiled: sending %s to stored\n", ff_pkt->fname);
index a375d728aca5800405b9644744bebe35ccddf5c5..bb36376c16301ff81c75406975a0a87716506423 100644 (file)
@@ -509,11 +509,14 @@ int bmicrosleep(time_t sec, long usec)
       timeout.tv_sec++;
    }
 
-   Dmsg1(200, "pthread_cond_timedwait sec=%d\n", timeout.tv_sec);
+   Dmsg2(200, "pthread_cond_timedwait sec=%d usec=%d\n", sec, usec);
    /* Note, this unlocks mutex during the sleep */
    P(timer_mutex);
    stat = pthread_cond_timedwait(&timer, &timer_mutex, &timeout);
-   Dmsg1(200, "pthread_cond_timedwait stat=%d\n", stat);
+   if (stat != 0) {
+      Dmsg2(200, "pthread_cond_timedwait stat=%d ERR=%s\n", stat,
+        strerror(stat));
+   }
    V(timer_mutex);
    return stat;
 }
index d3de55373ee4bbbbd2d882c4a1d2200f66176c18..d9acb56996476b3deccf35e1ac3532bfa7f6c226 100644 (file)
@@ -127,6 +127,7 @@ btimer_t *start_thread_timer(pthread_t tid, uint32_t wait)
    btimer_t *wid;
    wid = btimer_start_common(wait);
    if (wid == NULL) {
+      Dmsg1(200, "start_thread_timer return NULL from common. wait=%d.\n", wait);
       return NULL;
    }
    wid->type = TYPE_PTHREAD;
index fb03a8b3751c839f80fb0f504f2fc2297c14bdf9..916a0748d36455f09eb5837afc7791c58dd24554 100755 (executable)
@@ -32,7 +32,7 @@
 
 /* Exported globals */
 time_t watchdog_time = 0;            /* this has granularity of SLEEP_TIME */
-time_t watchdog_sleep_time = 1;       /* examine things every second */
+time_t watchdog_sleep_time = 10;      /* examine things every 10 seconds */
 
 
 /* Forward referenced functions */