]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/jcr.h
backport code from master
[bacula/bacula] / bacula / src / jcr.h
index 7cc61482e6a33dfa57dad65440199b365f2b3701..a017d1b04d270209f10f7fa11d60dcd3efb7cfd2 100644 (file)
@@ -1,12 +1,12 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2009 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2012 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    This program is Free Software; you can redistribute it and/or
-   modify it under the terms of version two of the GNU General Public
+   modify it under the terms of version three of the GNU Affero General Public
    License as published by the Free Software Foundation and included
    in the file LICENSE.
 
@@ -15,7 +15,7 @@
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
    General Public License for more details.
 
-   You should have received a copy of the GNU General Public License
+   You should have received a copy of the GNU Affero General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
@@ -33,7 +33,6 @@
  *
  * Kern Sibbald, Nov MM
  *
- *   Version $Id$
  */
 
 
 #define JT_SCAN                  'S'  /* Scan Job */
 
 /* Job Status. Some of these are stored in the DB */
-#define JS_Created               'C'  /* created but not yet running */
-#define JS_Running               'R'  /* running */
+#define JS_Canceled              'A'  /* canceled by user */
 #define JS_Blocked               'B'  /* blocked */
-#define JS_Terminated            'T'  /* terminated normally */
-#define JS_Warnings              'W'  /* Terminated normally with warnings */
-#define JS_ErrorTerminated       'E'  /* Job terminated in error */
-#define JS_Error                 'e'  /* Non-fatal error */
-#define JS_FatalError            'f'  /* Fatal error */
+#define JS_Created               'C'  /* created but not yet running */
 #define JS_Differences           'D'  /* Verify differences */
-#define JS_Canceled              'A'  /* canceled by user */
-#define JS_Incomplete            'I'  /* Incomplete Job */
+#define JS_ErrorTerminated       'E'  /* Job terminated in error */
 #define JS_WaitFD                'F'  /* waiting on File daemon */
-#define JS_WaitSD                'S'  /* waiting on the Storage daemon */
-#define JS_WaitMedia             'm'  /* waiting for new media */
+#define JS_Incomplete            'I'  /* Incomplete Job */
+#define JS_DataCommitting        'L'  /* Committing data (last despool) */
 #define JS_WaitMount             'M'  /* waiting for Mount */
-#define JS_WaitStoreRes          's'  /* Waiting for storage resource */
-#define JS_WaitJobRes            'j'  /* Waiting for job resource */
+#define JS_Running               'R'  /* running */
+#define JS_WaitSD                'S'  /* waiting on the Storage daemon */
+#define JS_Terminated            'T'  /* terminated normally */
+#define JS_Warnings              'W'  /* Terminated normally with warnings */
+
+#define JS_AttrDespooling        'a'  /* SD despooling attributes */
 #define JS_WaitClientRes         'c'  /* Waiting for Client resource */
 #define JS_WaitMaxJobs           'd'  /* Waiting for maximum jobs */
-#define JS_WaitStartTime         't'  /* Waiting for start time */
-#define JS_WaitPriority          'p'  /* Waiting for higher priority jobs to finish */
-#define JS_AttrDespooling        'a'  /* SD despooling attributes */
+#define JS_Error                 'e'  /* Non-fatal error */
+#define JS_FatalError            'f'  /* Fatal error */
 #define JS_AttrInserting         'i'  /* Doing batch insert file records */
+#define JS_WaitJobRes            'j'  /* Waiting for job resource */
 #define JS_DataDespooling        'l'  /* Doing data despooling */
-#define JS_DataCommitting        'L'  /* Committing data (last despool) */
+#define JS_WaitMedia             'm'  /* waiting for new media */
+#define JS_WaitPriority          'p'  /* Waiting for higher priority jobs to finish */
+#define JS_WaitDevice            'q'  /* Queued waiting for device */
+#define JS_WaitStoreRes          's'  /* Waiting for storage resource */
+#define JS_WaitStartTime         't'  /* Waiting for start time */ 
+
 
 /* Migration selection types */
 enum {
@@ -112,8 +114,7 @@ enum {
 #define job_canceled(jcr) \
   (jcr->JobStatus == JS_Canceled || \
    jcr->JobStatus == JS_ErrorTerminated || \
-   jcr->JobStatus == JS_FatalError ||
-   jcr->JobStatus == JS_Incomplete \
+   jcr->JobStatus == JS_FatalError \
   )
 
 #define job_waiting(jcr) \
@@ -128,6 +129,7 @@ enum {
    jcr->JobStatus == JS_WaitPriority || \
    jcr->SDJobStatus == JS_WaitMedia  || \
    jcr->SDJobStatus == JS_WaitMount  || \
+   jcr->SDJobStatus == JS_WaitDevice || \
    jcr->SDJobStatus == JS_WaitMaxJobs)
 
 
@@ -142,15 +144,19 @@ enum {
 
 /* Forward referenced structures */
 class JCR;
+class BSOCK;
 struct FF_PKT;
-struct B_DB;
+class  B_DB;
 struct ATTR_DBR;
-struct Plugin;
+class Plugin;
 struct save_pkt;
 struct bpContext;
+struct xattr_private_data_t;
 
 #ifdef FILE_DAEMON
 class htable;
+struct acl_data_t;
+struct xattr_data_t;
 
 struct CRYPTO_CTX {
    bool pki_sign;                     /* Enable PKI Signatures? */
@@ -175,32 +181,40 @@ private:
    volatile int32_t _use_count;       /* use count */
    int32_t m_JobType;                 /* backup, restore, verify ... */
    int32_t m_JobLevel;                /* Job level */
+   bool my_thread_killable;           /* can we kill the thread? */
 public:
    void lock() {P(mutex); };
    void unlock() {V(mutex); };
    void inc_use_count(void) {lock(); _use_count++; unlock(); };
    void dec_use_count(void) {lock(); _use_count--; unlock(); };
-   int32_t use_count() { return _use_count; };
+   int32_t use_count() const { return _use_count; };
    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 getJobType() { return m_JobType; };
-   int32_t get_JobLevel() { return m_JobLevel; };
-   int32_t getJobLevel() { return m_JobLevel; };
-   bool no_client_used() {
+   bool is_canceled() {return job_canceled(this); };
+   bool is_incomplete() { return JobStatus == JS_Incomplete; };
+   bool is_JobLevel(int32_t JobLevel) { return JobLevel == m_JobLevel; };
+   bool is_JobType(int32_t JobType) { return JobType == m_JobType; };
+   bool is_JobStatus(int32_t aJobStatus) { return aJobStatus == JobStatus; };
+   void setJobLevel(int32_t JobLevel) { m_JobLevel = JobLevel; };
+   void setJobType(int32_t JobType) { m_JobType = JobType; };
+   void forceJobStatus(int32_t aJobStatus) { JobStatus = aJobStatus; };
+   int32_t getJobType() const { return m_JobType; };
+   int32_t getJobLevel() const { return m_JobLevel; };
+   int32_t getJobStatus() const { return JobStatus; };
+   bool no_client_used() const {
       return (m_JobType == JT_MIGRATE || m_JobType == JT_COPY ||
               m_JobLevel == L_VIRTUAL_FULL);
    };
    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 setJobLevel(int32_t JobLevel);    /* in lib/jcr.c */
-   void set_JobType(int32_t JobType);     /* in lib/jcr.c */
-   void setJobType(int32_t JobType);      /* in lib/jcr.c */
-   void setJobStatus(int JobStatus);      /* in lib/jcr.c */
+   void setJobStatus(int newJobStatus);   /* in lib/jcr.c */
+   bool sendJobStatus();                  /* in lib/jcr.c */
+   bool sendJobStatus(int newJobStatus);  /* in lib/jcr.c */
    bool JobReads();                       /* in lib/jcr.c */
-   
+   void my_thread_send_signal(int sig);   /* in lib/jcr.c */
+   void set_killable(bool killable);      /* in lib/jcr.c */
+   bool is_killable() const { return my_thread_killable; };
 
    /* Global part of JCR common to all daemons */
    dlink link;                        /* JCR chain link */
@@ -210,8 +224,9 @@ public:
    BSOCK *file_bsock;                 /* File daemon connection socket */
    JCR_free_HANDLER *daemon_free_jcr; /* Local free routine */
    dlist *msg_queue;                  /* Queued messages */
+   pthread_mutex_t msg_queue_mutex;   /* message queue mutex */
+   bool dequeuing_msgs;               /* Set when dequeuing messages */
    alist job_end_push;                /* Job end pushed calls */
-   bool dequeuing;                    /* dequeuing messages */
    POOLMEM *VolumeName;               /* Volume name desired -- pool_memory */
    POOLMEM *errmsg;                   /* edited error message */
    char Job[MAX_NAME_LENGTH];         /* Unique name of this Job */
@@ -224,7 +239,9 @@ public:
    uint32_t JobFiles;                 /* Number of files written, this job */
    uint32_t JobErrors;                /* Number of non-fatal errors this job */
    uint32_t JobWarnings;              /* Number of warning messages */
+   uint32_t LastRate;                 /* Last sample bytes/sec */
    uint64_t JobBytes;                 /* Number of bytes processed this job */
+   uint64_t LastJobBytes;             /* Last sample number bytes */
    uint64_t ReadBytes;                /* Bytes read -- before compression */
    FileId_t FileId;                   /* Last FileId used */
    volatile int32_t JobStatus;        /* ready, running, blocked, terminated */
@@ -232,10 +249,12 @@ public:
    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 last_time;                  /* Last sample time */
    time_t end_time;                   /* job end time */
    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 *JobIds;                   /* User entered string of JobIds */
    POOLMEM *RestoreBootstrap;         /* Bootstrap file to restore */
    POOLMEM *stime;                    /* start time for incremental/differential */
    char *sd_auth_key;                 /* SD auth key */
@@ -249,24 +268,34 @@ public:
    bool prefix_links;                 /* Prefix links with Where path */
    bool gui;                          /* set if gui using console */
    bool authenticated;                /* set when client authenticated */
+   bool cached_attribute;             /* set if attribute is cached */
+   bool batch_started;                /* is batch mode already started ? */
+   bool cmd_plugin;                   /* Set when processing a command Plugin = */
+   bool opt_plugin;                   /* Set when processing an option Plugin = */
+   bool keep_path_list;               /* Keep newly created path in a hash */
+   bool accurate;                     /* true if job is accurate */
+   bool HasBase;                      /* True if job use base jobs */
+   bool rerunning;                    /* rerunning an incomplete job */
+
    void *Python_job;                  /* Python Job Object */
    void *Python_events;               /* Python Events Object */
-
-   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 and accurate */
-   bool batch_started;                /* is batch mode already started ? */
+   uint64_t nb_base_files;            /* Number of base files */
+   uint64_t nb_base_files_used;       /* Number of useful files in base */
+
    ATTR_DBR *ar;                      /* DB attribute record */
    guid_list *id_list;                /* User/group id to name list */
-   bool accurate;                     /* true if job is accurate */
 
    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 = */
+   POOLMEM *comment;                  /* Comment for this Job */
+   int64_t max_bandwidth;             /* Bandwidth limit for this Job */
+   htable *path_list;                 /* Directory list (used by findlib) */
 
    /* Daemon specific part of JCR */
    /* This should be empty in the library */
@@ -276,7 +305,6 @@ 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 done */
    BSOCK *ua;                         /* User agent */
    JOB *job;                          /* Job resource */
    JOB *verify_job;                   /* Job resource of verify previous job */
@@ -290,10 +318,6 @@ public:
    POOL *full_pool;                   /* Full backup pool resource */
    POOL *inc_pool;                    /* Incremental backup pool resource */
    POOL *diff_pool;                   /* Differential backup pool resource */
-   bool run_pool_override;
-   bool run_full_pool_override;
-   bool run_inc_pool_override;
-   bool run_diff_pool_override;
    FILESET *fileset;                  /* FileSet resource */
    CAT *catalog;                      /* Catalog resource */
    MSGS *messages;                    /* Default message handler */
@@ -305,13 +329,17 @@ public:
    uint32_t ExpectedFiles;            /* Expected restore files */
    uint32_t MediaId;                  /* DB record IDs associated with this job */
    uint32_t FileIndex;                /* Last FileIndex processed */
+   utime_t MaxRunSchedTime;           /* max run time in seconds from Scheduled time*/
    POOLMEM *fname;                    /* name to put into catalog */
+   POOLMEM *component_fname;          /* Component info file name */
+   FILE *component_fd;                /* Component info file desc */
    JOB_DBR jr;                        /* Job DB record for current job */
    JOB_DBR previous_jr;               /* previous job database record */
    JOB *previous_job;                 /* Job resource of migration previous job */
    JCR *mig_jcr;                      /* JCR for migration/copy job */
    char FSCreateTime[MAX_TIME_LENGTH]; /* FileSet CreateTime as returned from DB */
    char since[MAX_TIME_LENGTH];       /* since time */
+   char PrevJob[MAX_NAME_LENGTH];     /* Previous job name assiciated with since time */
    union {
       JobId_t RestoreJobId;           /* Id specified by UA */
       JobId_t MigrateJobId;
@@ -327,6 +355,9 @@ public:
    int32_t reschedule_count;          /* Number of times rescheduled */
    int32_t FDVersion;                 /* File daemon version number */
    int64_t spool_size;                /* Spool size for this job */
+   volatile bool sd_msg_thread_done;  /* Set when Storage message thread done */
+   bool wasVirtualFull;               /* set if job was VirtualFull */
+   bool IgnoreDuplicateJobChecking;   /* set in migration jobs */
    bool spool_data;                   /* Spool data in SD */
    bool acquired_resource_locks;      /* set if resource locks acquired */
    bool term_wait_inited;             /* Set when cond var inited */
@@ -340,6 +371,13 @@ public:
    bool stats_enabled;                /* Keep all job records in a table for long term statistics */
    bool no_maxtime;                   /* Don't check Max*Time for this JCR */
    bool keep_sd_auth_key;             /* Clear or not the SD auth key after connection*/
+   bool use_accurate_chksum;          /* Use or not checksum option in accurate code */
+   bool run_pool_override;
+   bool run_full_pool_override;
+   bool run_inc_pool_override;
+   bool run_diff_pool_override;
+   bool sd_canceled;                  /* set if SD canceled */
+   bool RescheduleIncompleteJobs;     /* set if incomplete can be rescheduled */
 #endif /* DIRECTOR_DAEMON */
 
 
@@ -347,10 +385,9 @@ public:
    /* File Daemon specific part of JCR */
    uint32_t num_files_examined;       /* files examined this job */
    POOLMEM *last_fname;               /* last file saved/verified */
-   POOLMEM *acl_data;                 /* data with ACLs for backup/restore */
-   uint32_t acl_data_len;             /* length of acl data buffer */
-   POOLMEM *xattr_data;               /* data with Extended Attributes for backup/restore */
-   uint32_t xattr_data_len;           /* length of xattr_data buffer */
+   POOLMEM *job_metadata;             /* VSS job metadata */
+   acl_data_t *acl_data;              /* ACLs for backup/restore */
+   xattr_data_t *xattr_data;          /* Extended Attributes for backup/restore */
    int32_t last_type;                 /* type of last file saved/verified */
    int incremental;                   /* set if incremental for SINCE */
    utime_t mtime;                     /* begin time for SINCE */
@@ -360,10 +397,13 @@ public:
    POOLMEM *compress_buf;             /* Compression buffer */
    int32_t compress_buf_size;         /* Length of compression buffer */
    void *pZLIB_compress_workset;      /* zlib compression session data */
+   void *LZO_compress_workset;        /* lzo compression session data */
    int32_t replace;                   /* Replace options */
    int32_t buf_size;                  /* length of buffer */
    FF_PKT *ff;                        /* Find Files packet */
    char stored_addr[MAX_NAME_LENGTH]; /* storage daemon address */
+   char PrevJob[MAX_NAME_LENGTH];     /* Previous job name assiciated with since time */
+   uint32_t ExpectedFiles;            /* Expected restore files */
    uint32_t StartFile;
    uint32_t EndFile;
    uint32_t StartBlock;
@@ -376,8 +416,10 @@ public:
    CRYPTO_CTX crypto;                 /* Crypto ctx */
    DIRRES* director;                  /* Director resource */
    bool VSS;                          /* VSS used by FD */
+   bool got_metadata;                 /* set when found job_metatdata */
    bool multi_restore;                /* Dir can do multiple storage restore */
    htable *file_list;                 /* Previous file list (accurate mode) */
+   uint64_t base_size;                /* compute space saved with base job */
 #endif /* FILE_DAEMON */
 
 
@@ -413,6 +455,8 @@ 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 Resched;                      /* Job may be rescheduled */
+   bool bscan_insert_jobmedia_records; /*Bscan: needs to insert job media records */
 
    /* Parmaters for Open Read Session */
    BSR *bsr;                          /* Bootstrap record -- has everything */
@@ -464,7 +508,7 @@ struct s_last_job {
 };
 
 extern struct s_last_job last_job;
-extern DLL_IMP_EXP dlist * last_jobs;
+extern DLL_IMP_EXP dlist *last_jobs;
 
 
 /* The following routines are found in lib/jcr.c */