#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 */
#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 || \
/* Global part of JCR common to all daemons */
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 */
- volatile 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 */
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 */
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 */
FILESET *fileset; /* FileSet resource */
CAT *catalog; /* Catalog resource */
MSGS *messages; /* Default message handler */
+ 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 */
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 */
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 */
int incremental; /* set if incremental for SINCE */
time_t mtime; /* begin time for SINCE */
int mtime_only; /* compare only mtime and not ctime as well */
- int mode; /* manual/auto run */
- int status; /* job status */
+ 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 */
uint32_t EndBlock;
pthread_t heartbeat_id; /* id of heartbeat thread */
volatile BSOCK *hb_bsock; /* duped SD socket */
+ POOLMEM *RunAfterJob; /* Command to run after job */
#endif /* FILE_DAEMON */
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 */
DEV_RECORD rec; /* Read/Write record */
long Ticket; /* ticket for this job */
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 */
* 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;
char Job[MAX_NAME_LENGTH];
};
-extern struct s_last_job last_job;
+extern struct s_last_job last_job;
+extern dlist *last_jobs;
/* The following routines are found in lib/jcr.c */