X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fjcr.h;h=fcda30cdb71e518a3935ccc051c9f29e922aac7a;hb=ebcac6d33874b4db1defa15fe9fb9ff19948b77c;hp=75db3edd3960ac8eee2f79a02f09858556caadb4;hpb=908d0c5a7c352c4473409fd01cab16d968c41b43;p=bacula%2Fbacula diff --git a/bacula/src/jcr.h b/bacula/src/jcr.h index 75db3edd39..fcda30cdb7 100644 --- a/bacula/src/jcr.h +++ b/bacula/src/jcr.h @@ -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 */ @@ -188,7 +201,9 @@ public: POOLMEM *VolumeName; /* Volume name desired -- pool_memory */ POOLMEM *errmsg; /* edited error message */ char Job[MAX_NAME_LENGTH]; /* Unique name of this Job */ - char event[MAX_NAME_LENGTH]; /* Current event */ + char event[MAX_NAME_LENGTH]; /* Current event (python) */ + uint32_t eventType; /* Current event type (plugin) */ + uint32_t JobId; /* Director's JobId */ uint32_t VolSessionId; uint32_t VolSessionTime; @@ -196,16 +211,16 @@ public: uint32_t JobErrors; /* */ uint64_t JobBytes; /* Number of bytes processed this job */ uint64_t ReadBytes; /* Bytes read -- before compression */ + FileId_t FileId; /* Last FileId used */ 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 +241,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 */ @@ -273,7 +290,6 @@ public: volatile int32_t FDJobStatus; /* File daemon Job Status */ uint32_t ExpectedFiles; /* Expected restore files */ uint32_t MediaId; /* DB record IDs associated with this job */ - FileId_t FileId; /* Last file id inserted */ uint32_t FileIndex; /* Last FileIndex processed */ POOLMEM *fname; /* name to put into catalog */ JOB_DBR jr; /* Job DB record for current job */ @@ -315,11 +331,13 @@ 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_text; /* text of ACL for backup */ + 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 */ 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 */ + utime_t mtime; /* begin time for SINCE */ int listing; /* job listing in estimate */ long Ticket; /* Ticket */ char *big_buf; /* I/O buffer */ @@ -342,12 +360,7 @@ public: 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 */ @@ -383,8 +396,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 */ - - uint32_t FileId; /* Last file id inserted */ + bool need_fd; /* set if we need FD connection */ /* Parmaters for Open Read Session */ BSR *bsr; /* Bootstrap record -- has everything */ @@ -406,6 +418,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. @@ -421,8 +442,8 @@ struct s_last_job { uint32_t VolSessionTime; uint32_t JobFiles; uint64_t JobBytes; - time_t start_time; - time_t end_time; + utime_t start_time; + utime_t end_time; char Job[MAX_NAME_LENGTH]; }; @@ -448,4 +469,8 @@ extern void b_free_jcr(const char *file, int line, JCR *jcr); extern void free_jcr(JCR *jcr); #endif +/* Used to display specific job information after a fatal signal */ +typedef void (dbg_jcr_hook_t)(JCR *jcr, FILE *fp); +extern void dbg_jcr_add_hook(dbg_jcr_hook_t *fct); + #endif /* __JCR_H_ */