]> git.sur5r.net Git - bacula/bacula/commitdiff
Error message suppression
authorKern Sibbald <kern@sibbald.com>
Wed, 15 Jan 2003 08:42:31 +0000 (08:42 +0000)
committerKern Sibbald <kern@sibbald.com>
Wed, 15 Jan 2003 08:42:31 +0000 (08:42 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@295 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/filed/backup.c
bacula/src/filed/job.c
bacula/src/lib/bnet.c
bacula/src/lib/bsock.h
bacula/src/lib/protos.h
bacula/src/stored/fd_cmds.c

index 63becda5fa414bacc842ea3a3a601904663db179..9dca295e71617df8e012ce4eeea0bf531ef2c180 100644 (file)
@@ -394,10 +394,13 @@ static int save_file(FF_PKT *ff_pkt, void *ijcr)
            ff_pkt->fname, strerror(errno));
       }
 
+      close(ff_pkt->fid);            /* close file */
 #ifndef NO_FD_SEND_TEST
-      bnet_sig(sd, BNET_EOD);        /* indicate end of file data */
+      if (!bnet_sig(sd, BNET_EOD)) {    /* indicate end of file data */
+        set_jcr_job_status(jcr, JS_ErrorTerminated);
+        return 0;
+      }
 #endif /* NO_FD_SEND_TEST */
-      close(ff_pkt->fid);            /* close file */
    }
 
 
index b1579624cb8224333c3a84562f19a385f99b4ec4..11c9a06efbcbfb3469ace21bc9bc834760ccc8c3 100644 (file)
@@ -548,9 +548,11 @@ static int backup_cmd(JCR *jcr)
    Dmsg1(110, "begin blast ff=%p\n", (FF_PKT *)jcr->ff);
    if (!blast_data_to_storage_daemon(jcr, NULL)) {
       set_jcr_job_status(jcr, JS_ErrorTerminated);
+      bnet_suppress_error_messages(sd, 1);
    } else {
       set_jcr_job_status(jcr, JS_Terminated);
       if (jcr->JobStatus != JS_Terminated) {
+        bnet_suppress_error_messages(sd, 1);
         goto cleanup;                /* bail out now */
       }
       /* 
index 72f39161aa1c5a9bf9b5b35d1b05ddc6c7b00d93..e8ef5c122de7368e0e1b887ec8b5927f9b2ed64a 100644 (file)
@@ -231,6 +231,20 @@ int is_bnet_error(BSOCK *bsock)
    return bsock->errors;
 }
 
+/*
+ * Call here after error during closing to suppress error
+ *  messages which are due to the other end shutting down too.
+ */
+void
+bnet_suppress_error_messages(BSOCK *bsock, int flag)
+{      
+   bsock->suppress_error_msgs = flag;
+}
+
+
+/*
+ * Transmit spooled data now
+ */
 int bnet_despool(BSOCK *bsock)
 {
    int32_t pktsiz;
@@ -291,8 +305,10 @@ bnet_send(BSOCK *bsock)
         bsock->b_errno = errno;
       }
       if (rc < 0) {
-         Jmsg4(bsock->jcr, M_ERROR, 0, _("Write error sending to %s:%s:%d: ERR=%s\n"), 
-              bsock->who, bsock->host, bsock->port,  bnet_strerror(bsock));
+        if (!bsock->suppress_error_msgs) {
+            Jmsg4(bsock->jcr, M_ERROR, 0, _("Write error sending to %s:%s:%d: ERR=%s\n"), 
+                 bsock->who, bsock->host, bsock->port,  bnet_strerror(bsock));
+        }
       } else {
          Jmsg5(bsock->jcr, M_ERROR, 0, _("Wrote %d bytes to %s:%s:%d, but only %d accepted.\n"), 
               bsock->who, bsock->host, bsock->port, bsock->msglen, rc);
@@ -318,8 +334,10 @@ bnet_send(BSOCK *bsock)
         bsock->b_errno = errno;
       }
       if (rc < 0) {
-         Jmsg4(bsock->jcr, M_ERROR, 0, _("Write error sending to %s:%s:%d: ERR=%s\n"), 
-              bsock->who, bsock->host, bsock->port,  bnet_strerror(bsock));
+        if (!bsock->suppress_error_msgs) {
+            Jmsg4(bsock->jcr, M_ERROR, 0, _("Write error sending to %s:%s:%d: ERR=%s\n"), 
+                 bsock->who, bsock->host, bsock->port,  bnet_strerror(bsock));
+        }
       } else {
          Jmsg5(bsock->jcr, M_ERROR, 0, _("Wrote %d bytes to %s:%s:%d, but only %d accepted.\n"), 
               bsock->who, bsock->host, bsock->port, bsock->msglen, rc);
index f519d7150c555ff721c8bf98fad626af39d8652a..5e0806da0cfd45e845b594852188dec45d1e4168 100644 (file)
  */
 
 typedef struct s_bsock {
-   uint64_t read_seqno;               /* read sequence number */
-   uint32_t in_msg_no;                /* intput message number */
-   uint32_t out_msg_no;               /* output message number */
-   int fd;                            /* socket file descriptor */
-   int32_t msglen;                    /* message length */
-   int port;                          /* desired port */
-   int errors;                        /* set if errors on socket */
-   int b_errno;                       /* bsock errno */
-   time_t timer_start;                /* time started read/write */
-   int timed_out;                     /* timed out in read/write */
-   int timeout;                       /* time out after this value */
-   int terminated;                    /* set when BNET_TERMINATE arrives */
-   int duped;                         /* set if duped BSOCK */
-   POOLMEM *msg;                      /* message pool buffer */
-   char *who;                         /* Name of daemon to which we are talking */
-   char *host;                        /* Host name/IP */
-   POOLMEM *errmsg;                   /* edited error message (to be implemented) */
-   RES *res;                          /* Resource to which we are connected */
-   struct s_bsock *next;              /* next BSOCK if duped */
-   int spool;                         /* set for spooling */
-   FILE *spool_fd;                    /* spooling file */
-   void *jcr;                         /* jcr or NULL for error msgs */
+   uint64_t read_seqno;              /* read sequence number */
+   uint32_t in_msg_no;               /* intput message number */
+   uint32_t out_msg_no;              /* output message number */
+   int fd;                           /* socket file descriptor */
+   int32_t msglen;                   /* message length */
+   int port;                         /* desired port */
+   int errors;                       /* set if errors on socket */
+   int suppress_error_msgs;          /* set to suppress error messages */
+   int b_errno;                      /* bsock errno */
+   time_t timer_start;               /* time started read/write */
+   int timed_out;                    /* timed out in read/write */
+   int timeout;                      /* time out after this value */
+   int terminated;                   /* set when BNET_TERMINATE arrives */
+   int duped;                        /* set if duped BSOCK */
+   POOLMEM *msg;                     /* message pool buffer */
+   char *who;                        /* Name of daemon to which we are talking */
+   char *host;                       /* Host name/IP */
+   POOLMEM *errmsg;                  /* edited error message (to be implemented) */
+   RES *res;                         /* Resource to which we are connected */
+   struct s_bsock *next;             /* next BSOCK if duped */
+   int spool;                        /* set for spooling */
+   FILE *spool_fd;                   /* spooling file */
+   void *jcr;                        /* jcr or NULL for error msgs */
 } BSOCK;
 
 /* Signal definitions for use in bnet_sig() */
-#define BNET_EOD         -1           /* End of data stream, new data may follow */
-#define BNET_EOD_POLL    -2           /* End of data and poll all in one */
-#define BNET_STATUS      -3           /* Send full status */
-#define BNET_TERMINATE   -4           /* Conversation terminated, doing close() */
+#define BNET_EOD        -1           /* End of data stream, new data may follow */
+#define BNET_EOD_POLL   -2           /* End of data and poll all in one */
+#define BNET_STATUS     -3           /* Send full status */
+#define BNET_TERMINATE  -4           /* Conversation terminated, doing close() */
 #define BNET_POLL        -5           /* Poll request, I'm hanging on a read */
-#define BNET_HEARTBEAT   -6           /* Heartbeat Response requested */
-#define BNET_HB_RESPONSE -7           /* Only response permited to HB */
-#define BNET_PROMPT      -8           /* Prompt for UA */
+#define BNET_HEARTBEAT  -6           /* Heartbeat Response requested */
+#define BNET_HB_RESPONSE -7          /* Only response permited to HB */
+#define BNET_PROMPT     -8           /* Prompt for UA */
 
-#define BNET_SETBUF_READ  1           /* Arg for bnet_set_buffer_size */
-#define BNET_SETBUF_WRITE 2           /* Arg for bnet_set_buffer_size */
+#define BNET_SETBUF_READ  1          /* Arg for bnet_set_buffer_size */
+#define BNET_SETBUF_WRITE 2          /* Arg for bnet_set_buffer_size */
 
 /* Return status from bnet_recv() */
 #define BNET_SIGNAL  -1
@@ -78,17 +79,17 @@ typedef struct s_bsock {
  * This is the structure of the in memory BPKT
  */
 typedef struct s_bpkt {
-   char *id;                          /* String identifier or name of field */
-   uint8_t type;                      /* field type */
-   uint32_t len;                      /* field length for string, name, bytes */
-   void *value;                       /* pointer to value */
+   char *id;                         /* String identifier or name of field */
+   uint8_t type;                     /* field type */
+   uint32_t len;                     /* field length for string, name, bytes */
+   void *value;                      /* pointer to value */
 } BPKT;
 
 /*  
  * These are the data types that can be sent.
  * For all values other than string, the storage space
  *  is assumed to be allocated in the receiving packet.
- *  For BP_STRING if the *value is non-zero, it is a        
+ *  For BP_STRING if the *value is non-zero, it is a       
  *  pointer to a POOLMEM buffer, and the Memory Pool
  *  routines will be used to assure that the length is
  *  adequate. NOTE!!! This pointer will be changed
@@ -96,13 +97,13 @@ typedef struct s_bpkt {
  *  does). If the pointer is NULL, a POOLMEM
  *  buffer will be allocated.
  */
-#define BP_EOF       0                /* end of file */
-#define BP_CHAR      1                /* Character */
-#define BP_INT32     1                /* 32 bit integer */
-#define BP_UINT32    3                /* Unsigned 32 bit integer */
-#define BP_INT64     4                /* 64 bit integer */
-#define BP_STRING    5                /* string */
-#define BP_NAME      6                /* Name string -- limited length */
-#define BP_BYTES     7                /* Binary bytes */
-#define BP_FLOAT32   8                /* 32 bit floating point */
-#define BP_FLOAT64   9                /* 64 bit floating point */
+#define BP_EOF      0                /* end of file */
+#define BP_CHAR      1               /* Character */
+#define BP_INT32     1               /* 32 bit integer */
+#define BP_UINT32    3               /* Unsigned 32 bit integer */
+#define BP_INT64     4               /* 64 bit integer */
+#define BP_STRING    5               /* string */
+#define BP_NAME      6               /* Name string -- limited length */
+#define BP_BYTES     7               /* Binary bytes */
+#define BP_FLOAT32   8               /* 32 bit floating point */
+#define BP_FLOAT64   9               /* 64 bit floating point */
index c05a1476e130f5f722ee355ad18f0833aa4f6bbb..2efa5524de1d178bf64d2a75411cb6f499c711cc 100644 (file)
  */
 
 /* base64.c */
-void      base64_init            (void);
-int       to_base64              (intmax_t value, char *where);
-int       from_base64            (intmax_t *value, char *where);
-int       bin_to_base64          (char *buf, char *bin, int len);
+void     base64_init            (void);
+int      to_base64              (intmax_t value, char *where);
+int      from_base64            (intmax_t *value, char *where);
+int      bin_to_base64          (char *buf, char *bin, int len);
 
 /* bmisc.c */
-char     *bstrncpy               (char *dest, const char *src, int maxlen);
-char     *bstrncat               (char *dest, const char *src, int maxlen);
-void     *b_malloc               (char *file, int line, size_t size);
+char    *bstrncpy               (char *dest, const char *src, int maxlen);
+char    *bstrncat               (char *dest, const char *src, int maxlen);
+void    *b_malloc               (char *file, int line, size_t size);
 #ifndef DEBUG
-void     *bmalloc                (size_t size);
+void    *bmalloc                (size_t size);
 #endif
-void     *brealloc               (void *buf, size_t size);
-void     *bcalloc                (size_t size1, size_t size2);
-int       bsnprintf              (char *str, size_t size, const  char  *format, ...);
-int       bvsnprintf             (char *str, size_t size, const char  *format, va_list ap);
-int       pool_sprintf           (char *pool_buf, char *fmt, ...);
-void      create_pid_file        (char *dir, char *progname, int port);
-int       delete_pid_file        (char *dir, char *progname, int port);
+void    *brealloc               (void *buf, size_t size);
+void    *bcalloc                (size_t size1, size_t size2);
+int      bsnprintf              (char *str, size_t size, const  char  *format, ...);
+int      bvsnprintf             (char *str, size_t size, const char  *format, va_list ap);
+int      pool_sprintf           (char *pool_buf, char *fmt, ...);
+void     create_pid_file        (char *dir, char *progname, int port);
+int      delete_pid_file        (char *dir, char *progname, int port);
 
 
 /* bnet.c */
-int32_t    bnet_recv             (BSOCK *bsock);
-int        bnet_send             (BSOCK *bsock);
-int        bnet_fsend              (BSOCK *bs, char *fmt, ...);
-int        bnet_set_buffer_size    (BSOCK *bs, uint32_t size, int rw);
-int        bnet_sig                (BSOCK *bs, int sig);
-BSOCK *    bnet_connect            (void *jcr, int retry_interval,
-               int max_retry_time, char *name, char *host, char *service, 
-               int port, int verbose);
-int        bnet_wait_data         (BSOCK *bsock, int sec);
-void       bnet_close            (BSOCK *bsock);
-BSOCK *    init_bsock            (void *jcr, int sockfd, char *who, char *ip, int port);
-BSOCK *    dup_bsock             (BSOCK *bsock);
-void       term_bsock            (BSOCK *bsock);
-char *     bnet_strerror         (BSOCK *bsock);
-char *     bnet_sig_to_ascii     (BSOCK *bsock);
-int        bnet_wait_data        (BSOCK *bsock, int sec);
-int        bnet_despool          (BSOCK *bsock);
-int        is_bnet_stop          (BSOCK *bsock);
-int        is_bnet_error         (BSOCK *bsock);
+int32_t    bnet_recv            (BSOCK *bsock);
+int       bnet_send             (BSOCK *bsock);
+int       bnet_fsend              (BSOCK *bs, char *fmt, ...);
+int       bnet_set_buffer_size    (BSOCK *bs, uint32_t size, int rw);
+int       bnet_sig                (BSOCK *bs, int sig);
+BSOCK *    bnet_connect           (void *jcr, int retry_interval,
+              int max_retry_time, char *name, char *host, char *service, 
+              int port, int verbose);
+int       bnet_wait_data         (BSOCK *bsock, int sec);
+void      bnet_close            (BSOCK *bsock);
+BSOCK *    init_bsock           (void *jcr, int sockfd, char *who, char *ip, int port);
+BSOCK *    dup_bsock            (BSOCK *bsock);
+void      term_bsock            (BSOCK *bsock);
+char *    bnet_strerror         (BSOCK *bsock);
+char *    bnet_sig_to_ascii     (BSOCK *bsock);
+int       bnet_wait_data        (BSOCK *bsock, int sec);
+int       bnet_despool          (BSOCK *bsock);
+int       is_bnet_stop          (BSOCK *bsock);
+int       is_bnet_error         (BSOCK *bsock);
+void      bnet_suppress_error_messages(BSOCK *bsock, int flag);
 
 
 /* cram-md5.c */
 int cram_md5_get_auth(BSOCK *bs, char *password);
 int cram_md5_auth(BSOCK *bs, char *password);
 void hmac_md5(uint8_t* text, int text_len, uint8_t*  key,
-              int key_len, uint8_t *hmac);
+             int key_len, uint8_t *hmac);
 
 /* crc32.c */
 uint32_t bcrc32(uint8_t *buf, int len);
 
 /* daemon.c */
-void     daemon_start            ();
+void    daemon_start            ();
 
 /* edit.c */
-uint64_t         str_to_uint64(char *str);
-int64_t          str_to_int64(char *str);
-char *           edit_uint64_with_commas   (uint64_t val, char *buf);
-char *           add_commas              (char *val, char *buf);
-char *           edit_uint64             (uint64_t val, char *buf);
-int              duration_to_utime       (char *str, utime_t *value);
-int              size_to_uint64(char *str, int str_len, uint64_t *rtn_value);
-char             *edit_utime             (utime_t val, char *buf);
-int              is_a_number             (const char *num);
+uint64_t        str_to_uint64(char *str);
+int64_t         str_to_int64(char *str);
+char *          edit_uint64_with_commas   (uint64_t val, char *buf);
+char *          add_commas              (char *val, char *buf);
+char *          edit_uint64             (uint64_t val, char *buf);
+int             duration_to_utime       (char *str, utime_t *value);
+int             size_to_uint64(char *str, int str_len, uint64_t *rtn_value);
+char            *edit_utime             (utime_t val, char *buf);
+int             is_a_number             (const char *num);
 
 /* lex.c */
-LEX *     lex_close_file         (LEX *lf);
-LEX *     lex_open_file          (LEX *lf, char *fname, LEX_ERROR_HANDLER *scan_error);
-int       lex_get_char           (LEX *lf);
-void      lex_unget_char         (LEX *lf);
-char *    lex_tok_to_str         (int token);
-int       lex_get_token          (LEX *lf, int expect);
+LEX *    lex_close_file         (LEX *lf);
+LEX *    lex_open_file          (LEX *lf, char *fname, LEX_ERROR_HANDLER *scan_error);
+int      lex_get_char           (LEX *lf);
+void     lex_unget_char         (LEX *lf);
+char *   lex_tok_to_str         (int token);
+int      lex_get_token          (LEX *lf, int expect);
 
 /* message.c */
-void       my_name_is            (int argc, char *argv[], char *name);
-void       init_msg              (void *jcr, MSGS *msg);
-void       term_msg              (void);
-void       close_msg             (void *jcr);
-void       add_msg_dest          (MSGS *msg, int dest, int type, char *where, char *dest_code);
-void       rem_msg_dest          (MSGS *msg, int dest, int type, char *where);
-void       Jmsg                  (void *jcr, int type, int level, char *fmt, ...);
-void       dispatch_message      (void *jcr, int type, int level, char *buf);
-void       init_console_msg      (char *wd);
-void       free_msgs_res         (MSGS *msgs);
-int        open_spool_file       (void *jcr, BSOCK *bs);
-int        close_spool_file      (void *vjcr, BSOCK *bs);
+void      my_name_is            (int argc, char *argv[], char *name);
+void      init_msg              (void *jcr, MSGS *msg);
+void      term_msg              (void);
+void      close_msg             (void *jcr);
+void      add_msg_dest          (MSGS *msg, int dest, int type, char *where, char *dest_code);
+void      rem_msg_dest          (MSGS *msg, int dest, int type, char *where);
+void      Jmsg                  (void *jcr, int type, int level, char *fmt, ...);
+void      dispatch_message      (void *jcr, int type, int level, char *buf);
+void      init_console_msg      (char *wd);
+void      free_msgs_res         (MSGS *msgs);
+int       open_spool_file       (void *jcr, BSOCK *bs);
+int       close_spool_file      (void *vjcr, BSOCK *bs);
 
 
 /* bnet_server.c */
-void       bnet_thread_server(char *bind_addr, int port, int max_clients, workq_t *client_wq, 
-                   void handle_client_request(void *bsock));
-void             bnet_server             (int port, void handle_client_request(BSOCK *bsock));
-int              net_connect             (int port);
-BSOCK *          bnet_bind               (int port);
-BSOCK *          bnet_accept             (BSOCK *bsock, char *who);
+void      bnet_thread_server(char *bind_addr, int port, int max_clients, workq_t *client_wq, 
+                  void handle_client_request(void *bsock));
+void            bnet_server             (int port, void handle_client_request(BSOCK *bsock));
+int             net_connect             (int port);
+BSOCK *         bnet_bind               (int port);
+BSOCK *         bnet_accept             (BSOCK *bsock, char *who);
 
 /* signal.c */
-void             init_signals             (void terminate(int sig));
-void             init_stack_dump          (void);
+void            init_signals             (void terminate(int sig));
+void            init_stack_dump          (void);
 
 /* util.c */
-void             lcase                   (char *str);
-void             bash_spaces             (char *str);
-void             unbash_spaces           (char *str);
-void             strip_trailing_junk     (char *str);
-void             strip_trailing_slashes  (char *dir);
-int              skip_spaces             (char **msg);
-int              skip_nonspaces          (char **msg);
-int              fstrsch                 (char *a, char *b);
-char *           encode_time             (time_t time, char *buf);
-char *           encode_mode             (mode_t mode, char *buf);
-int              do_shell_expansion      (char *name);
-int              is_buf_zero             (char *buf, int len);
-void             jobstatus_to_ascii      (int JobStatus, char *msg, int maxlen);
-void             pm_strcat               (POOLMEM **pm, char *str);
-void             pm_strcpy               (POOLMEM **pm, char *str);
-int              run_program             (char *prog, int wait, POOLMEM *results);
-char *           job_type_to_str         (int type);
-char *           job_status_to_str       (int stat);
-char *           job_level_to_str        (int level);
-void             makeSessionKey          (char *key, char *seed, int mode);
-BPIPE *          open_bpipe(char *prog, int wait, char *mode);
-int              close_wpipe(BPIPE *bpipe);
-int              close_bpipe(BPIPE *bpipe);
-POOLMEM         *edit_job_codes(void *jcr, char *omsg, char *imsg, char *to);  
+void            lcase                   (char *str);
+void            bash_spaces             (char *str);
+void            unbash_spaces           (char *str);
+void            strip_trailing_junk     (char *str);
+void            strip_trailing_slashes  (char *dir);
+int             skip_spaces             (char **msg);
+int             skip_nonspaces          (char **msg);
+int             fstrsch                 (char *a, char *b);
+char *          encode_time             (time_t time, char *buf);
+char *          encode_mode             (mode_t mode, char *buf);
+int             do_shell_expansion      (char *name);
+int             is_buf_zero             (char *buf, int len);
+void            jobstatus_to_ascii      (int JobStatus, char *msg, int maxlen);
+void            pm_strcat               (POOLMEM **pm, char *str);
+void            pm_strcpy               (POOLMEM **pm, char *str);
+int             run_program             (char *prog, int wait, POOLMEM *results);
+char *          job_type_to_str         (int type);
+char *          job_status_to_str       (int stat);
+char *          job_level_to_str        (int level);
+void            makeSessionKey          (char *key, char *seed, int mode);
+BPIPE *         open_bpipe(char *prog, int wait, char *mode);
+int             close_wpipe(BPIPE *bpipe);
+int             close_bpipe(BPIPE *bpipe);
+POOLMEM        *edit_job_codes(void *jcr, char *omsg, char *imsg, char *to);  
 
 
 /* watchdog.c */
index ed1180c1537b3604aacfaaa0f7ceef3ad0732e97..84c52b5e4ddbb04de4a46bffb0f86e464a8f0fd9 100644 (file)
@@ -11,7 +11,7 @@
  * 
  */
 /*
-   Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+   Copyright (C) 2000-2003 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -176,6 +176,7 @@ static int append_data_cmd(JCR *jcr)
         jcr->JobType = JT_BACKUP;
         return 1;
       } else {
+        bnet_suppress_error_messages(fd, 1); /* ignore errors at this point */
         bnet_fsend(fd, ERROR_append);
         return 0;
       }