/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2010 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2012 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.
#define JS_DataDespooling 'l' /* Doing data despooling */
#define JS_WaitMedia 'm' /* waiting for new media */
#define JS_WaitPriority 'p' /* Waiting for higher priority jobs to finish */
+#define JS_WaitDevice 'q' /* Queued waiting for device */
#define JS_WaitStoreRes 's' /* Waiting for storage resource */
#define JS_WaitStartTime 't' /* Waiting for start time */
+
/* Migration selection types */
enum {
MT_SMALLEST_VOL = 1,
#define job_canceled(jcr) \
(jcr->JobStatus == JS_Canceled || \
jcr->JobStatus == JS_ErrorTerminated || \
- jcr->JobStatus == JS_FatalError || \
- jcr->JobStatus == JS_Incomplete \
+ jcr->JobStatus == JS_FatalError \
)
#define job_waiting(jcr) \
jcr->JobStatus == JS_WaitPriority || \
jcr->SDJobStatus == JS_WaitMedia || \
jcr->SDJobStatus == JS_WaitMount || \
+ jcr->SDJobStatus == JS_WaitDevice || \
jcr->SDJobStatus == JS_WaitMaxJobs)
/* Forward referenced structures */
class JCR;
+class BSOCK;
struct FF_PKT;
-struct B_DB;
+class B_DB;
struct ATTR_DBR;
-struct Plugin;
+class Plugin;
struct save_pkt;
struct bpContext;
struct xattr_private_data_t;
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); };
- void set_JobLevel(int32_t JobLevel) { m_JobLevel = JobLevel; };
+ bool is_canceled() {return job_canceled(this); };
+ bool is_incomplete() { return JobStatus == JS_Incomplete; };
+ bool is_JobLevel(int32_t JobLevel) { return JobLevel == m_JobLevel; };
+ bool is_JobType(int32_t JobType) { return JobType == m_JobType; };
+ bool is_JobStatus(int32_t aJobStatus) { return aJobStatus == JobStatus; };
void setJobLevel(int32_t JobLevel) { m_JobLevel = JobLevel; };
- void set_JobType(int32_t JobType) { m_JobType = JobType; };
void setJobType(int32_t JobType) { m_JobType = JobType; };
+ void forceJobStatus(int32_t aJobStatus) { JobStatus = aJobStatus; };
int32_t getJobType() const { return m_JobType; };
int32_t getJobLevel() const { return m_JobLevel; };
int32_t getJobStatus() const { return JobStatus; };
};
const char *get_OperationName(); /* in lib/jcr.c */
const char *get_ActionName(bool past); /* in lib/jcr.c */
- void setJobStatus(int JobStatus); /* in lib/jcr.c */
+ void setJobStatus(int newJobStatus); /* in lib/jcr.c */
+ bool sendJobStatus(); /* in lib/jcr.c */
+ bool sendJobStatus(int newJobStatus); /* in lib/jcr.c */
bool JobReads(); /* in lib/jcr.c */
void my_thread_send_signal(int sig); /* in lib/jcr.c */
void set_killable(bool killable); /* in lib/jcr.c */
uint32_t JobFiles; /* Number of files written, this job */
uint32_t JobErrors; /* Number of non-fatal errors this job */
uint32_t JobWarnings; /* Number of warning messages */
+ uint32_t LastRate; /* Last sample bytes/sec */
uint64_t JobBytes; /* Number of bytes processed this job */
+ uint64_t LastJobBytes; /* Last sample number bytes */
uint64_t ReadBytes; /* Bytes read -- before compression */
FileId_t FileId; /* Last FileId used */
volatile int32_t JobStatus; /* ready, running, blocked, terminated */
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 last_time; /* Last sample time */
time_t end_time; /* job end time */
time_t wait_time_sum; /* cumulative wait time since job start */
time_t wait_time; /* timestamp when job have started to wait */
bool prefix_links; /* Prefix links with Where path */
bool gui; /* set if gui using console */
bool authenticated; /* set when client authenticated */
+ bool cached_attribute; /* set if attribute is cached */
+ bool batch_started; /* is batch mode already started ? */
+ bool cmd_plugin; /* Set when processing a command Plugin = */
+ bool opt_plugin; /* Set when processing an option Plugin = */
+ bool keep_path_list; /* Keep newly created path in a hash */
+ bool accurate; /* true if job is accurate */
+ bool HasBase; /* True if job use base jobs */
+ bool rerunning; /* rerunning an incomplete job */
+
void *Python_job; /* Python Job Object */
void *Python_events; /* Python Events Object */
-
- 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 and accurate */
- bool batch_started; /* is batch mode already started ? */
- bool HasBase; /* True if job use base jobs */
uint64_t nb_base_files; /* Number of base files */
uint64_t nb_base_files_used; /* Number of useful files in base */
ATTR_DBR *ar; /* DB attribute record */
guid_list *id_list; /* User/group id to name list */
- bool accurate; /* true if job is accurate */
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 = */
POOLMEM *comment; /* Comment for this Job */
+ int64_t max_bandwidth; /* Bandwidth limit for this Job */
+ htable *path_list; /* Directory list (used by findlib) */
/* Daemon specific part of JCR */
/* This should be empty in the library */
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 */
- volatile bool sd_msg_thread_done; /* Set when Storage message thread done */
BSOCK *ua; /* User agent */
JOB *job; /* Job resource */
JOB *verify_job; /* Job resource of verify previous job */
POOL *full_pool; /* Full backup pool resource */
POOL *inc_pool; /* Incremental 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;
- bool sd_canceled; /* set if SD canceled */
FILESET *fileset; /* FileSet resource */
CAT *catalog; /* Catalog resource */
MSGS *messages; /* Default message handler */
uint32_t ExpectedFiles; /* Expected restore files */
uint32_t MediaId; /* DB record IDs associated with this job */
uint32_t FileIndex; /* Last FileIndex processed */
+ utime_t MaxRunSchedTime; /* max run time in seconds from Scheduled time*/
POOLMEM *fname; /* name to put into catalog */
+ POOLMEM *component_fname; /* Component info file name */
+ FILE *component_fd; /* Component info file desc */
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 *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 */
+ char PrevJob[MAX_NAME_LENGTH]; /* Previous job name assiciated with since time */
union {
JobId_t RestoreJobId; /* Id specified by UA */
JobId_t MigrateJobId;
int32_t reschedule_count; /* Number of times rescheduled */
int32_t FDVersion; /* File daemon version number */
int64_t spool_size; /* Spool size for this job */
+ volatile bool sd_msg_thread_done; /* Set when Storage message thread done */
+ bool wasVirtualFull; /* set if job was VirtualFull */
+ bool IgnoreDuplicateJobChecking; /* set in migration jobs */
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 */
bool no_maxtime; /* Don't check Max*Time for this JCR */
bool keep_sd_auth_key; /* Clear or not the SD auth key after connection*/
bool use_accurate_chksum; /* Use or not checksum option in accurate code */
+ bool run_pool_override;
+ bool run_full_pool_override;
+ bool run_inc_pool_override;
+ bool run_diff_pool_override;
+ bool sd_canceled; /* set if SD canceled */
+ bool RescheduleIncompleteJobs; /* set if incomplete can be rescheduled */
#endif /* DIRECTOR_DAEMON */
POOLMEM *compress_buf; /* Compression buffer */
int32_t compress_buf_size; /* Length of compression buffer */
void *pZLIB_compress_workset; /* zlib compression session data */
+ void *LZO_compress_workset; /* lzo compression session data */
int32_t replace; /* Replace options */
int32_t buf_size; /* length of buffer */
FF_PKT *ff; /* Find Files packet */
char stored_addr[MAX_NAME_LENGTH]; /* storage daemon address */
+ char PrevJob[MAX_NAME_LENGTH]; /* Previous job name assiciated with since time */
+ uint32_t ExpectedFiles; /* Expected restore files */
uint32_t StartFile;
uint32_t EndFile;
uint32_t StartBlock;
CRYPTO_CTX crypto; /* Crypto ctx */
DIRRES* director; /* Director resource */
bool VSS; /* VSS used by FD */
+ bool got_metadata; /* set when found job_metatdata */
bool multi_restore; /* Dir can do multiple storage restore */
htable *file_list; /* Previous file list (accurate mode) */
uint64_t base_size; /* compute space saved with base job */
bool write_part_after_job; /* Set to write part after job */
bool PreferMountedVols; /* Prefer mounted vols rather than new */
bool Resched; /* Job may be rescheduled */
+ bool bscan_insert_jobmedia_records; /*Bscan: needs to insert job media records */
/* Parmaters for Open Read Session */
BSR *bsr; /* Bootstrap record -- has everything */