X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fjcr.h;h=8a47e2e6c36acbe29f2800004c8a2c1901a5c40b;hb=a55d20a08dc8c4a530bfb2011c7fcc8c8da217f6;hp=d65f747c12e5630e04ffeaa5355ce813289ba147;hpb=458061b568c4451c7f1d2212879645b2625651fb;p=bacula%2Fbacula diff --git a/bacula/src/jcr.h b/bacula/src/jcr.h index d65f747c12..8a47e2e6c3 100644 --- a/bacula/src/jcr.h +++ b/bacula/src/jcr.h @@ -40,8 +40,10 @@ #define L_VERIFY_CATALOG 'C' /* verify from catalog */ #define L_VERIFY_INIT 'V' /* verify save (init DB) */ #define L_VERIFY_VOLUME_TO_CATALOG 'O' /* verify Volume to catalog entries */ +#define L_VERIFY_DISK_TO_CATALOG 'd' /* verify Disk attributes to catalog */ #define L_VERIFY_DATA 'A' /* verify data on volume */ #define L_BASE 'B' /* Base level job */ +#define L_NONE ' ' /* None, for Restore and Admin */ /* Job Types. These are stored in the DB */ @@ -71,6 +73,7 @@ #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 job_canceled(jcr) \ (jcr->JobStatus == JS_Canceled || \ @@ -78,20 +81,21 @@ jcr->JobStatus == JS_FatalError) -typedef void (JCR_free_HANDLER)(struct s_jcr *jcr); +struct JCR; +typedef void (JCR_free_HANDLER)(JCR *jcr); /* Job Control Record (JCR) */ -struct s_jcr { +struct JCR { /* Global part of JCR common to all daemons */ - struct s_jcr *next; - struct s_jcr *prev; + JCR *next; + JCR *prev; + volatile int use_count; /* use count */ pthread_t my_thread_id; /* id of thread controlling jcr */ pthread_mutex_t mutex; /* jcr mutex */ BSOCK *dir_bsock; /* Director bsock or NULL if we are him */ BSOCK *store_bsock; /* Storage connection socket */ BSOCK *file_bsock; /* File daemon connection socket */ JCR_free_HANDLER *daemon_free_jcr; /* Local free routine */ - int use_count; /* use count */ POOLMEM *errmsg; /* edited error message */ char Job[MAX_NAME_LENGTH]; /* Unique name of this Job */ uint32_t JobId; /* Director's JobId */ @@ -102,9 +106,10 @@ struct s_jcr { uint64_t JobBytes; /* Number of bytes processed this job */ uint64_t ReadBytes; /* Bytes read -- before compression */ uint32_t Errors; /* Number of non-fatal errors */ - int JobStatus; /* ready, running, blocked, terminated */ + volatile int JobStatus; /* ready, running, blocked, terminated */ int JobType; /* backup, restore, verify ... */ int JobLevel; /* Job level */ + int JobPriority; /* Job priority */ int authenticated; /* set when client authenticated */ time_t sched_time; /* job schedule time, i.e. when it should start */ time_t start_time; /* when job actually started */ @@ -112,10 +117,14 @@ struct s_jcr { time_t end_time; /* job end time */ POOLMEM *VolumeName; /* Volume name desired -- pool_memory */ POOLMEM *client_name; /* client name */ - char *RestoreBootstrap; /* Bootstrap file to restore */ + POOLMEM *RestoreBootstrap; /* Bootstrap file to restore */ char *sd_auth_key; /* SD auth key */ MSGS *jcr_msgs; /* Copy of message resource -- actually used */ uint32_t ClientId; /* Client associated with Job */ + char *where; /* prefix to restore files to */ + int prefix_links; /* Prefix links with Where path */ + int cached_pnl; /* cached path length */ + POOLMEM *cached_path; /* cached path */ /* Daemon specific part of JCR */ /* This should be empty in the library */ @@ -125,7 +134,7 @@ struct s_jcr { 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 */ - int msg_thread_done; /* Set when Storage message thread terms */ + volatile bool sd_msg_thread_done; /* Set when Storage message thread terms */ BSOCK *ua; /* User agent */ JOB *job; /* Job resource */ STORE *store; /* Storage resource */ @@ -134,9 +143,11 @@ struct s_jcr { FILESET *fileset; /* FileSet resource */ CAT *catalog; /* Catalog resource */ MSGS *messages; /* Default message handler */ - int SDJobStatus; /* Storage Job Status */ - int FDJobStatus; /* File daemon Job Status */ - int mode; /* manual/auto run */ + uint32_t SDJobFiles; /* Number of files written, this job */ + uint64_t SDJobBytes; /* Number of bytes processed this job */ + uint32_t SDErrors; /* Number of non-fatal errors */ + volatile int SDJobStatus; /* Storage Job Status */ + volatile int FDJobStatus; /* File daemon Job Status */ B_DB *db; /* database pointer */ uint32_t MediaId; /* DB record IDs associated with this job */ uint32_t PoolId; /* Pool record id */ @@ -145,12 +156,14 @@ struct s_jcr { POOLMEM *fname; /* name to put into catalog */ int fn_printed; /* printed filename */ POOLMEM *stime; /* start time for incremental/differential */ - JOB_DBR jr; /* Job record in Database */ + JOB_DBR jr; /* Job DB record for current job */ + JOB_DBR *verify_jr; /* Pointer to target job */ uint32_t RestoreJobId; /* Id specified by UA */ - char *RestoreWhere; /* Where to restore the files */ POOLMEM *client_uname; /* client uname */ int replace; /* Replace option */ - int acquired_resource_locks; /* set if resource locks acquired */ + bool acquired_resource_locks; /* set if resource locks acquired */ + int NumVols; /* Number of Volume used in pool */ + int reschedule_count; /* Number of times rescheduled */ #endif /* DIRECTOR_DAEMON */ @@ -161,16 +174,13 @@ struct s_jcr { /*********FIXME********* add missing files and files to be retried */ int incremental; /* set if incremental for SINCE */ time_t mtime; /* begin time for SINCE */ - int mode; /* manual/auto run */ - int status; /* job status */ + int mtime_only; /* compare only mtime and not ctime as well */ + int listing; /* job listing in estimate */ long Ticket; /* Ticket */ - int save_level; /* save level */ char *big_buf; /* I/O buffer */ POOLMEM *compress_buf; /* Compression buffer */ int32_t compress_buf_size; /* Length of compression buffer */ - POOLMEM *where; /* Root where to restore */ int replace; /* Replace options */ - int prefix_links; /* Prefix links with Where path */ int buf_size; /* length of buffer */ void *ff; /* Find Files packet */ char stored_addr[MAX_NAME_LENGTH]; /* storage daemon address */ @@ -178,16 +188,16 @@ struct s_jcr { uint32_t EndFile; uint32_t StartBlock; uint32_t EndBlock; - int use_win_backup_api; /* set to use native Win API */ pthread_t heartbeat_id; /* id of heartbeat thread */ - BSOCK *hb_bsock; /* duped SD socket */ + volatile BSOCK *hb_bsock; /* duped SD socket */ + POOLMEM *RunAfterJob; /* Command to run after job */ #endif /* FILE_DAEMON */ #ifdef STORAGE_DAEMON /* Storage Daemon specific part of JCR */ - struct s_jcr *next_dev; /* next JCR attached to device */ - struct s_jcr *prev_dev; /* previous JCR attached to device */ + JCR *next_dev; /* next JCR attached to device */ + JCR *prev_dev; /* previous JCR attached to device */ pthread_cond_t job_start_wait; /* Wait for FD to start Job */ int type; DEVRES *device; /* device to use */ @@ -200,9 +210,8 @@ struct s_jcr { POOLMEM *media_type; /* media type */ POOLMEM *dev_name; /* device name */ VOL_LIST *VolList; /* list to read */ - long NumVolumes; /* number of volumes used */ - long CurVolume; /* current volume number */ - int mode; /* manual/auto run */ + int32_t NumVolumes; /* number of volumes used */ + int32_t CurVolume; /* current volume number */ int spool_attributes; /* set if spooling attributes */ int no_attributes; /* set if no attributes wanted */ int label_status; /* device volume label status */ @@ -210,12 +219,18 @@ struct s_jcr { int session_opened; DEV_RECORD rec; /* Read/Write record */ long Ticket; /* ticket for this job */ - uint32_t VolFirstFile; /* First file index this Volume */ + uint32_t VolFirstIndex; /* First file index this Volume */ + uint32_t VolLastIndex; /* Last file index this Volume */ uint32_t FileIndex; /* Current File Index */ uint32_t EndFile; /* End file written */ uint32_t StartFile; /* Start write file */ uint32_t StartBlock; /* Start write block */ uint32_t EndBlock; /* Ending block written */ + bool NewVol; /* set when new Volume mounted */ + bool WroteVol; /* set when Volume written */ + bool NewFile; /* set when EOF written */ + int CurVol; /* Current Volume count */ + uint32_t FileId; /* Last file id inserted */ /* Parmaters for Open Read Session */ @@ -238,9 +253,11 @@ struct s_jcr { * info on the last job run. */ struct s_last_job { + dlink link; int NumJobs; int JobType; int JobStatus; + int JobLevel; uint32_t JobId; uint32_t VolSessionId; uint32_t VolSessionTime; @@ -251,10 +268,8 @@ struct s_last_job { char Job[MAX_NAME_LENGTH]; }; -extern struct s_last_job last_job; - -#undef JCR -typedef struct s_jcr JCR; +extern struct s_last_job last_job; +extern dlist *last_jobs; /* The following routines are found in lib/jcr.c */