X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fjcr.h;h=f227bbf5198befd4dbc7eab6b7abd935fb7531de;hb=7f66c308ba02b0597a7e5cfc95b151c5448bc236;hp=74ddc8e4754b3c9b2609e8377f319307234e957d;hpb=0ff951be8f889d423aaa5111e4639de192555df6;p=bacula%2Fbacula diff --git a/bacula/src/jcr.h b/bacula/src/jcr.h index 74ddc8e475..f227bbf519 100644 --- a/bacula/src/jcr.h +++ b/bacula/src/jcr.h @@ -1,7 +1,7 @@ /* Bacula® - The Network Backup Solution - Copyright (C) 2000-2008 Free Software Foundation Europe e.V. + Copyright (C) 2000-2009 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. @@ -60,11 +60,12 @@ #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 */ +#define JT_CONSOLE 'U' /* console program */ #define JT_SYSTEM 'I' /* internal system "job" */ #define JT_ADMIN 'D' /* admin job */ #define JT_ARCHIVE 'A' /* Archive Job */ -#define JT_COPY 'C' /* Copy Job */ +#define JT_JOB_COPY 'C' /* Copy of a Job */ +#define JT_COPY 'c' /* Copy Job */ #define JT_MIGRATE 'g' /* Migration Job */ #define JT_SCAN 'S' /* Scan Job */ @@ -73,6 +74,7 @@ #define JS_Running 'R' /* running */ #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 */ @@ -99,6 +101,7 @@ enum { MT_OLDEST_VOL, MT_POOL_OCCUPANCY, MT_POOL_TIME, + MT_POOL_UNCOPIED_JOBS, MT_CLIENT, MT_VOLUME, MT_JOB, @@ -141,6 +144,7 @@ struct B_DB; struct ATTR_DBR; struct Plugin; struct save_pkt; +struct bpContext; #ifdef FILE_DAEMON class htable; @@ -180,6 +184,8 @@ public: 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 */ @@ -197,22 +203,26 @@ 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; uint32_t JobFiles; /* Number of files written, this job */ - uint32_t JobErrors; /* */ + uint32_t JobErrors; /* Number of non-fatal errors this job */ + uint32_t JobWarnings; /* Number of warning messages */ uint64_t JobBytes; /* Number of bytes processed this job */ uint64_t ReadBytes; /* Bytes read -- before compression */ - uint32_t Errors; /* Number of non-fatal errors */ + FileId_t FileId; /* Last FileId used */ volatile int32_t JobStatus; /* ready, running, blocked, terminated */ 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 */ @@ -239,11 +249,12 @@ public: 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 */ @@ -281,7 +292,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 */ @@ -316,6 +326,7 @@ public: bool VSS; /* VSS used by FD */ bool Encrypt; /* Encryption used by FD */ 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 */ #endif /* DIRECTOR_DAEMON */ @@ -323,11 +334,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 */ @@ -350,7 +363,7 @@ public: CRYPTO_CTX crypto; /* Crypto ctx */ DIRRES* director; /* Director resource */ bool VSS; /* VSS used by FD */ - rblist *file_list; /* Previous file list (accurate mode) */ + htable *file_list; /* Previous file list (accurate mode) */ #endif /* FILE_DAEMON */ @@ -387,8 +400,6 @@ public: 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 */ /* Parmaters for Open Read Session */ BSR *bsr; /* Bootstrap record -- has everything */ @@ -410,6 +421,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. @@ -425,8 +445,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]; }; @@ -452,4 +472,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_ */