X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fjcr.h;h=88125948615b828fc9093674af375a32192ad532;hb=2d7f14816bf6d040014e7358c54dc4421286d040;hp=3808952c04efd1a59cf838440937a613f2aa99e9;hpb=31c85de2cec943e3949f9e694d991d1db26dae67;p=bacula%2Fbacula diff --git a/bacula/src/jcr.h b/bacula/src/jcr.h index 3808952c04..8812594861 100644 --- a/bacula/src/jcr.h +++ b/bacula/src/jcr.h @@ -1,3 +1,30 @@ +/* + Bacula® - The Network Backup Solution + + Copyright (C) 2000-2007 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 + License as published by the Free Software Foundation and included + in the file LICENSE. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + 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 + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + + Bacula® is a registered trademark of John Walker. + The licensor of Bacula is the Free Software Foundation Europe + (FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich, + Switzerland, email:ftf@fsfeurope.org. +*/ /* * Bacula JCR Structure definition for Daemons and the Library * This definition consists of a "Global" definition common @@ -8,20 +35,6 @@ * * Version $Id$ */ -/* - Copyright (C) 2000-2006 Kern Sibbald - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - version 2 as amended with additional clauses defined in the - file LICENSE in the main source directory. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - the file LICENSE for additional details. - - */ #ifndef __JCR_H_ @@ -43,6 +56,7 @@ /* Job Types. These are stored in the DB */ #define JT_BACKUP 'B' /* Backup Job */ +#define JT_MIGRATED_JOB 'M' /* A previous backup job that was migrated */ #define JT_VERIFY 'V' /* Verify Job */ #define JT_RESTORE 'R' /* Restore Job */ #define JT_CONSOLE 'c' /* console program */ @@ -50,7 +64,7 @@ #define JT_ADMIN 'D' /* admin job */ #define JT_ARCHIVE 'A' /* Archive Job */ #define JT_COPY 'C' /* Copy Job */ -#define JT_MIGRATE 'M' /* Migration Job */ +#define JT_MIGRATE 'g' /* Migration Job */ #define JT_SCAN 'S' /* Scan Job */ /* Job Status. Some of these are stored in the DB */ @@ -73,6 +87,8 @@ #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_AttrInserting 'i' /* Doing batch insert file records */ /* Migration selection types */ enum { @@ -113,13 +129,13 @@ private: pthread_mutex_t mutex; /* jcr mutex */ volatile int _use_count; /* use count */ public: - void inc_use_count(void) {P(mutex); _use_count++; V(mutex); }; - void dec_use_count(void) {P(mutex); _use_count--; V(mutex); }; + 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(); }; int use_count() { return _use_count; }; void init_mutex(void) {pthread_mutex_init(&mutex, NULL); }; void destroy_mutex(void) {pthread_mutex_destroy(&mutex); }; - void lock() {P(mutex); }; - void unlock() {V(mutex); }; bool is_job_canceled() {return job_canceled(this); }; /* Global part of JCR common to all daemons */ @@ -159,6 +175,8 @@ public: MSGS *jcr_msgs; /* Copy of message resource -- actually used */ uint32_t ClientId; /* Client associated with Job */ char *where; /* prefix to restore files to */ + char *RegexWhere; /* file relocation in restore */ + alist *where_bregexp; /* BREGEXP alist for path manipulation */ int cached_pnl; /* cached path length */ POOLMEM *cached_path; /* cached path */ bool prefix_links; /* Prefix links with Where path */ @@ -170,7 +188,9 @@ 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 */ ATTR_DBR *ar; /* DB attribute record */ + guid_list *id_list; /* User/group id to name list */ /* Daemon specific part of JCR */ /* This should be empty in the library */ @@ -184,13 +204,20 @@ public: BSOCK *ua; /* User agent */ JOB *job; /* Job resource */ JOB *verify_job; /* Job resource of verify previous job */ - alist *storage; /* Storage possibilities */ - STORE *store; /* Storage daemon selected */ + alist *rstorage; /* Read storage possibilities */ + STORE *rstore; /* Selected read storage */ + alist *wstorage; /* Write storage possibilities */ + STORE *wstore; /* Selected write storage */ CLIENT *client; /* Client resource */ - POOL *pool; /* Pool resource */ + POOL *pool; /* Pool resource = write for migration */ + POOL *rpool; /* Read pool. Used only in migration */ POOL *full_pool; /* Full backup pool resource */ POOL *inc_pool; /* Incremental backup pool resource */ - POOL *dif_pool; /* Differential 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 */ @@ -207,7 +234,7 @@ public: 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 *previous_jcr; /* previous job control record */ + 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 */ union { @@ -215,9 +242,14 @@ public: JobId_t MigrateJobId; }; POOLMEM *client_uname; /* client uname */ + POOLMEM *pool_source; /* Where pool came from */ + POOLMEM *rpool_source; /* Where migrate read pool came from */ + POOLMEM *rstore_source; /* Where read storage came from */ + POOLMEM *wstore_source; /* Where write storage came from */ int replace; /* Replace option */ int NumVols; /* Number of Volume used in pool */ int reschedule_count; /* Number of times rescheduled */ + int64_t spool_size; /* Spool size for this job */ 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 */ @@ -226,6 +258,8 @@ public: bool needs_sd; /* set if SD needed by Job */ bool cloned; /* set if cloned */ bool unlink_bsr; /* Unlink bsr file created */ + bool VSS; /* VSS used by FD */ + bool Encrypt; /* Encryption used by FD */ #endif /* DIRECTOR_DAEMON */ @@ -234,6 +268,7 @@ public: uint32_t num_files_examined; /* files examined this job */ POOLMEM *last_fname; /* last file saved/verified */ POOLMEM *acl_text; /* text of ACL for backup */ + int 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 */ @@ -252,9 +287,9 @@ public: uint32_t StartBlock; uint32_t EndBlock; pthread_t heartbeat_id; /* id of heartbeat thread */ - volatile BSOCK *hb_bsock; /* duped SD socket */ - volatile BSOCK *hb_dir_bsock; /* duped DIR socket */ - POOLMEM *RunAfterJob; /* Command to run after job */ + BSOCK *hb_bsock; /* duped SD socket */ + BSOCK *hb_dir_bsock; /* duped DIR socket */ + alist *RunScripts; /* Commands to run before and after job */ bool pki_sign; /* Enable PKI Signatures? */ bool pki_encrypt; /* Enable PKI Encryption? */ DIGEST *digest; /* Last file's digest context */ @@ -262,8 +297,8 @@ public: alist *pki_signers; /* Trusted Signers */ alist *pki_recipients; /* Trusted Recipients */ CRYPTO_SESSION *pki_session; /* PKE Public Keys + Symmetric Session Keys */ - void *pki_session_encoded; /* Cached DER-encoded copy of pki_session */ - size_t pki_session_encoded_size; /* Size of DER-encoded pki_session */ + uint8_t *pki_session_encoded; /* Cached DER-encoded copy of pki_session */ + int32_t pki_session_encoded_size; /* Size of DER-encoded pki_session */ POOLMEM *crypto_buf; /* Encryption/Decryption buffer */ DIRRES* director; /* Director resource */ #endif /* FILE_DAEMON */ @@ -282,14 +317,16 @@ public: POOLMEM *fileset_name; /* FileSet */ POOLMEM *fileset_md5; /* MD5 for FileSet */ VOL_LIST *VolList; /* list to read */ - int32_t NumVolumes; /* number of volumes used */ - int32_t CurVolume; /* current volume number */ + int32_t NumWriteVolumes; /* number of volumes written */ + int32_t NumReadVolumes; /* total number of volumes to read */ + int32_t CurReadVolume; /* current read volume number */ int label_errors; /* count of label errors */ bool session_opened; long Ticket; /* ticket for this job */ bool ignore_label_errors; /* ignore Volume label errors */ bool spool_attributes; /* set if spooling attributes */ bool no_attributes; /* set if no attributes wanted */ + int64_t spool_size; /* Spool size for this job */ bool spool_data; /* set to spool data */ int CurVol; /* Current Volume count */ DIRRES* director; /* Director resource */ @@ -322,8 +359,6 @@ public: }; - - /* * Structure for all daemons that keeps some summary * info on the last job run. @@ -345,7 +380,7 @@ struct s_last_job { }; extern struct s_last_job last_job; -extern dlist *last_jobs; +extern DLL_IMP_EXP dlist * last_jobs; /* The following routines are found in lib/jcr.c */ @@ -357,6 +392,7 @@ extern JCR *get_jcr_by_partial_name(char *Job); extern JCR *get_jcr_by_full_name(char *Job); extern JCR *get_next_jcr(JCR *jcr); extern void set_jcr_job_status(JCR *jcr, int JobStatus); +extern int DLL_IMP_EXP num_jobs_run; #ifdef DEBUG extern void b_free_jcr(const char *file, int line, JCR *jcr);