X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Fdriverio.h;h=b965550df474d75a134eb649e6a888bc352678e8;hb=94a044f90357edefa6f4ae9f0b1d5885b0e34aee;hp=0d53c94c4cbd3052ef078a8bc06b6d9a19d9ae41;hpb=1194fb66aa28d9929c3f2bef3cc6c1c3f40a60a4;p=debian%2Famanda diff --git a/server-src/driverio.h b/server-src/driverio.h index 0d53c94..b965550 100644 --- a/server-src/driverio.h +++ b/server-src/driverio.h @@ -25,18 +25,19 @@ * University of Maryland at College Park */ /* - * $Id: driverio.h,v 1.32 2005/12/03 13:27:43 martinea Exp $ + * $Id: driverio.h,v 1.35 2006/05/25 01:47:19 johnfranks Exp $ * * driver-related helper functions */ +#ifndef DRIVERIO_H +#define DRIVERIO_H #include "event.h" +#include "amanda.h" #include "holding.h" #include "server_util.h" -#define MAX_DUMPERS 63 - #ifndef GLOBAL #define GLOBAL extern #endif @@ -45,7 +46,7 @@ typedef struct chunker_s { char *name; /* name of this chunker */ - int pid; /* its pid */ + pid_t pid; /* its pid */ int down; /* state */ int fd; /* read/write */ int result; @@ -57,7 +58,7 @@ typedef struct chunker_s { typedef struct dumper_s { char *name; /* name of this dumper */ - int pid; /* its pid */ + pid_t pid; /* its pid */ int busy, down; /* state */ int fd; /* read/write */ int result; @@ -67,24 +68,39 @@ typedef struct dumper_s { chunker_t *chunker; } dumper_t; +/* holding disk reservation structure; this is built as a list parallel + * to the configuration's linked list of holding disks. */ + +typedef struct holdalloc_s { + struct holdalloc_s *next; + holdingdisk_t *hdisk; + + off_t disksize; + int allocated_dumpers; + off_t allocated_space; +} holdalloc_t; + typedef struct assignedhd_s { - holdingdisk_t *disk; - long used; - long reserved; + holdalloc_t *disk; + off_t used; + off_t reserved; char *destname; } assignedhd_t; /* schedule structure */ typedef struct sched_s { - int attempted, priority; + int dump_attempted; + int taper_attempted; + int priority; int level, degr_level; - long est_time, degr_time; - unsigned long est_size, degr_size, act_size; - unsigned long origsize, dumpsize; - unsigned long dumptime, tapetime; + unsigned long est_time, degr_time; + off_t est_nsize, est_csize, est_size; + off_t degr_nsize, degr_csize, act_size; + off_t origsize, dumpsize; + time_t dumptime, tapetime; char *dumpdate, *degr_dumpdate; - int est_kps, degr_kps; + unsigned long est_kps, degr_kps; char *destname; /* file/port name */ dumper_t *dumper; assignedhd_t **holdp; @@ -97,38 +113,46 @@ typedef struct sched_s { #define sched(dp) ((sched_t *) (dp)->up) -/* holding disk reservation structure */ - -typedef struct holdalloc_s { - int allocated_dumpers; - long allocated_space; -} holdalloc_t; - -#define holdalloc(hp) ((holdalloc_t *) (hp)->up) - GLOBAL dumper_t dmptable[MAX_DUMPERS]; GLOBAL chunker_t chktable[MAX_DUMPERS]; /* command/result tokens */ -GLOBAL int taper, taper_busy, taper_pid; +typedef enum { + TAPER_STATE_DEFAULT = 0, + TAPER_STATE_DUMP_TO_TAPE = (1 << 0), // if taper is doing a dump to tape + TAPER_STATE_WAIT_FOR_TAPE = (1 << 1), // if taper wait for a tape, after a + // REQUEST-NEW-TAPE + TAPER_STATE_TAPE_STARTED = (1 << 2) // taper already started to write to + // a tape. +} TaperState; + +GLOBAL int taper, taper_busy; +GLOBAL int taper_sendresult; +GLOBAL char *taper_input_error; +GLOBAL char *taper_tape_error; +GLOBAL pid_t taper_pid; +GLOBAL int taper_result; +GLOBAL dumper_t *taper_dumper; GLOBAL event_handle_t *taper_ev_read; - -void init_driverio P((void)); -void startup_tape_process P((char *taper_program)); -void startup_dump_process P((dumper_t *dumper, char *dumper_program)); -void startup_dump_processes P((char *dumper_program, int inparallel)); -void startup_chunk_process P((chunker_t *chunker, char *chunker_program)); - -cmd_t getresult P((int fd, int show, int *result_argc, char **result_argv, int max_arg)); -int taper_cmd P((cmd_t cmd, void *ptr, char *destname, int level, char *datestamp)); -int dumper_cmd P((dumper_t *dumper, cmd_t cmd, disk_t *dp)); -int chunker_cmd P((chunker_t *chunker, cmd_t cmd, disk_t *dp)); -disk_t *serial2disk P((char *str)); -void free_serial P((char *str)); -void free_serial_dp P((disk_t *dp)); -void check_unfree_serial P(()); -char *disk2serial P((disk_t *dp)); -void update_info_dumper P((disk_t *dp, long origsize, long dumpsize, long dumptime)); -void update_info_taper P((disk_t *dp, char *label, int filenum, int level)); -void free_assignedhd P((assignedhd_t **holdp)); +GLOBAL char *taper_first_label; +GLOBAL off_t taper_first_fileno; +GLOBAL TaperState taper_state; +GLOBAL off_t taper_written; // Number of kb already written to tape + // for the DLE. + +void init_driverio(void); +void startup_tape_process(char *taper_program); +void startup_dump_process(dumper_t *dumper, char *dumper_program); +void startup_dump_processes(char *dumper_program, int inparallel, char *timestamp); +void startup_chunk_process(chunker_t *chunker, char *chunker_program); + +disk_t *serial2disk(char *str); +void free_serial(char *str); +void free_serial_dp(disk_t *dp); +void check_unfree_serial(void); +char *disk2serial(disk_t *dp); +void update_info_dumper(disk_t *dp, off_t origsize, off_t dumpsize, time_t dumptime); +void update_info_taper(disk_t *dp, char *label, off_t filenum, int level); +void free_assignedhd(assignedhd_t **holdp); +#endif /* !DRIVERIO_H */