]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/jcr.h
ebl Update after fatal signal debugging
[bacula/bacula] / bacula / src / jcr.h
index 7d4c0cb8f6d779f1ba7fd1f4d4a43d4ea1dc13d4..b228073caea075b643fc0d93189e3c771ae05a76 100644 (file)
@@ -20,7 +20,7 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Bacula® is a registered trademark of John Walker.
+   Bacula® is a registered trademark of Kern Sibbald.
    The licensor of Bacula is the Free Software Foundation Europe
    (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
    Switzerland, email:ftf@fsfeurope.org.
@@ -52,6 +52,7 @@
 #define L_VERIFY_DATA            'A'  /* verify data on volume */
 #define L_BASE                   'B'  /* Base level job */
 #define L_NONE                   ' '  /* None, for Restore and Admin */
+#define L_VIRTUAL_FULL           'f'  /* Virtual full backup */
 
 
 /* Job Types. These are stored in the DB */
@@ -98,6 +99,7 @@ enum {
    MT_OLDEST_VOL,
    MT_POOL_OCCUPANCY,
    MT_POOL_TIME,
+   MT_POOL_UNCOPIED_JOBS,
    MT_CLIENT,
    MT_VOLUME,
    MT_JOB,
@@ -140,6 +142,7 @@ struct B_DB;
 struct ATTR_DBR;
 struct Plugin;
 struct save_pkt;
+struct bpContext;
 
 #ifdef FILE_DAEMON
 class htable;
@@ -165,6 +168,8 @@ class JCR {
 private:
    pthread_mutex_t mutex;             /* jcr mutex */
    volatile int32_t _use_count;       /* use count */
+   int32_t m_JobType;                 /* backup, restore, verify ... */
+   int32_t m_JobLevel;                /* Job level */
 public:
    void lock() {P(mutex); };
    void unlock() {V(mutex); };
@@ -174,6 +179,14 @@ public:
    void init_mutex(void) {pthread_mutex_init(&mutex, NULL); };
    void destroy_mutex(void) {pthread_mutex_destroy(&mutex); };
    bool is_job_canceled() {return job_canceled(this); };
+   int32_t get_JobType() { return m_JobType; };
+   int32_t get_JobLevel() { return m_JobLevel; };
+
+   const char *get_OperationName();    /* in lib/jcr.c */
+   const char *get_ActionName(bool past); /* in lib/jcr.c */
+   void set_JobLevel(int32_t JobLevel); /* in lib/jcr.c */
+   void set_JobType(int32_t JobType);  /* in lib/jcr.c */
+   bool JobReads();                    /* in lib/jcr.c */
 
    /* Global part of JCR common to all daemons */
    dlink link;                        /* JCR chain link */
@@ -198,14 +211,13 @@ public:
    uint64_t ReadBytes;                /* Bytes read -- before compression */
    uint32_t Errors;                   /* Number of non-fatal errors */
    volatile int32_t JobStatus;        /* ready, running, blocked, terminated */
-   int32_t JobType;                   /* backup, restore, verify ... */
-   int32_t JobLevel;                  /* Job level */
    int32_t JobPriority;               /* Job priority */
    time_t sched_time;                 /* job schedule time, i.e. when it should start */
    time_t start_time;                 /* when job actually started */
    time_t run_time;                   /* used for computing speed */
    time_t end_time;                   /* job end time */
-   time_t wait_time;                  /* when job have started to wait */
+   time_t wait_time_sum;              /* cumulative wait time since job start */
+   time_t wait_time;                  /* timestamp when job have started to wait */
    POOLMEM *client_name;              /* client name */
    POOLMEM *RestoreBootstrap;         /* Bootstrap file to restore */
    POOLMEM *stime;                    /* start time for incremental/differential */
@@ -226,16 +238,18 @@ public:
    bool cached_attribute;             /* set if attribute is cached */
    POOLMEM *attr;                     /* Attribute string from SD */
    B_DB *db;                          /* database pointer */
-   B_DB *db_batch;                    /* database pointer for batch insert */
+   B_DB *db_batch;                    /* database pointer for batch and accurate */
+   bool batch_started;                /* is batch mode already started ? */
    ATTR_DBR *ar;                      /* DB attribute record */
    guid_list *id_list;                /* User/group id to name list */
    bool accurate;                     /* true if job is accurate */
 
-   void *plugin_ctx_list;             /* list of contexts for plugins */
-   void *plugin_ctx;                  /* current plugin context */
+   bpContext *plugin_ctx_list;        /* list of contexts for plugins */
+   bpContext *plugin_ctx;             /* current plugin context */
    Plugin *plugin;                    /* plugin instance */
    save_pkt *plugin_sp;               /* plugin save packet */
    char *plugin_options;              /* user set options for plugin */
+   bool cmd_plugin;                   /* Set when processing a command Plugin = */
 
    /* Daemon specific part of JCR */
    /* This should be empty in the library */
@@ -245,7 +259,7 @@ public:
    pthread_t SD_msg_chan;             /* Message channel thread id */
    pthread_cond_t term_wait;          /* Wait for job termination */
    workq_ele_t *work_item;            /* Work queue item if scheduled */
-   volatile bool sd_msg_thread_done;  /* Set when Storage message thread terms */
+   volatile bool sd_msg_thread_done;  /* Set when Storage message thread done */
    BSOCK *ua;                         /* User agent */
    JOB *job;                          /* Job resource */
    JOB *verify_job;                   /* Job resource of verify previous job */
@@ -317,7 +331,6 @@ public:
    POOLMEM *last_fname;               /* last file saved/verified */
    POOLMEM *acl_text;                 /* text of ACL for backup */
    int32_t last_type;                 /* type of last file saved/verified */
-   /*********FIXME********* add missing files and files to be retried */
    int incremental;                   /* set if incremental for SINCE */
    time_t mtime;                      /* begin time for SINCE */
    int listing;                       /* job listing in estimate */
@@ -335,18 +348,14 @@ public:
    uint32_t StartBlock;
    uint32_t EndBlock;
    pthread_t heartbeat_id;            /* id of heartbeat thread */
+   volatile bool hb_started;          /* heartbeat running */
    BSOCK *hb_bsock;                   /* duped SD socket */
    BSOCK *hb_dir_bsock;               /* duped DIR socket */
    alist *RunScripts;                 /* Commands to run before and after job */
    CRYPTO_CTX crypto;                 /* Crypto ctx */
    DIRRES* director;                  /* Director resource */
    bool VSS;                          /* VSS used by FD */
-#ifdef USE_TCADB
-   TCADB *file_list;                  /* Previous file list (accurate mode) */
-   POOLMEM *hash_name;
-#else
    htable *file_list;                 /* Previous file list (accurate mode) */
-#endif
 #endif /* FILE_DAEMON */
 
 
@@ -382,6 +391,7 @@ public:
    alist *reserve_msgs;               /* reserve fail messages */
    bool write_part_after_job;         /* Set to write part after job */
    bool PreferMountedVols;            /* Prefer mounted vols rather than new */
+   bool need_fd;                      /* set if we need FD connection */
    
    uint32_t FileId;                   /* Last file id inserted */
 
@@ -405,6 +415,15 @@ public:
 
 };
 
+/*
+ * Setting a NULL in tsd doesn't clear the tsd but instead tells
+ *   pthreads not to call the tsd destructor. Consequently, we 
+ *   define this *invalid* jcr address and stuff it in the tsd
+ *   when the jcr is not valid.
+ */
+#define INVALID_JCR ((JCR *)(-1))
+
+
 /*
  * Structure for all daemons that keeps some summary
  *  info on the last job run.
@@ -447,4 +466,8 @@ extern void b_free_jcr(const char *file, int line, JCR *jcr);
 extern void free_jcr(JCR *jcr);
 #endif
 
+/* Used to display job information after a fatal signal */
+typedef void (dbg_jcr_hook)(JCR *jcr, FILE *fp);
+void dbg_add_hook(dbg_jcr_hook *fct);
+
 #endif /* __JCR_H_ */