X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=server-src%2Fdriverio.h;h=794c0fa013c0912afacae59c9428df77cf300d25;hb=b116e9366c7b2ea2c2eb53b0a13df4090e176235;hp=0d53c94c4cbd3052ef078a8bc06b6d9a19d9ae41;hpb=1194fb66aa28d9929c3f2bef3cc6c1c3f40a60a4;p=debian%2Famanda diff --git a/server-src/driverio.h b/server-src/driverio.h index 0d53c94..794c0fa 100644 --- a/server-src/driverio.h +++ b/server-src/driverio.h @@ -25,27 +25,44 @@ * 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 "amanda.h" #include "event.h" - #include "holding.h" #include "server_util.h" -#define MAX_DUMPERS 63 - #ifndef GLOBAL #define GLOBAL extern #endif +typedef enum { + TAPER_STATE_DEFAULT = 0, // 0 Before TAPER-START + TAPER_STATE_INIT = (1 << 0), // 1 Between TAPE-START and TAPE-OK + TAPER_STATE_RESERVATION = (1 << 1), // 2 Have a reservation + TAPER_STATE_IDLE = (1 << 2), // 4 tape started and do nothing + TAPER_STATE_DUMP_TO_TAPE = (1 << 3), // 8 Doing a PORT-WRITE + TAPER_STATE_FILE_TO_TAPE = (1 << 4), // 16 Doing a FILE-WRITE + TAPER_STATE_TAPE_REQUESTED = (1 << 5), // 32 REQUEST-NEW-TAPE received + TAPER_STATE_WAIT_FOR_TAPE = (1 << 6), // 64 if taper wait for a tape, + // after a START-SCAN send + TAPER_STATE_WAIT_NEW_TAPE = (1 << 7), // 128 AFTER NEW-TAPE sent and before + // NEW-TAPE received + TAPER_STATE_TAPE_STARTED = (1 << 8), // 256 taper already started to write + // to a tape. + TAPER_STATE_DONE = (1 << 9), +} TaperState; + /* chunker process structure */ 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 +74,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,68 +84,92 @@ typedef struct dumper_s { chunker_t *chunker; } dumper_t; +typedef struct taper_s { + char *name; /* name of this taper */ + int sendresult; + char *input_error; + char *tape_error; + int result; + dumper_t *dumper; + disk_t *disk; + char *first_label; + off_t first_fileno; + TaperState state; + off_t left; + off_t written; // Number of kb already written to tape +} taper_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; + taper_t *taper; assignedhd_t **holdp; time_t timestamp; char *datestamp; int activehd; int no_space; + char *degr_mesg; } sched_t; #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]; +GLOBAL taper_t *tapetable; /* command/result tokens */ -GLOBAL int taper, taper_busy, taper_pid; +GLOBAL int taper_fd; +GLOBAL pid_t taper_pid; 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 int taper_nb_wait_reply; + +void init_driverio(void); +void startup_tape_process(char *taper_program, int taper_parallel_write, gboolean no_taper); +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); + +cmd_t getresult(int fd, int show, int *result_argc, char ***result_argv); +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 */