Print this page
Revert "NEX-5801 Snapshots left over after failed backups"
This reverts commit f182fb95f09036db71fbfc6f0a6b90469b761f21.
NEX-5801 Snapshots left over after failed backups
Reviewed by: Rick Mesta <rick.mesta@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
NEX-2911 NDMP logging should use syslog and is too chatty
        
*** 37,46 ****
--- 37,47 ----
   * POSSIBILITY OF SUCH DAMAGE.
   */
  
  #include <sys/param.h>
  #include <sys/types.h>
+ #include <syslog.h>
  #include <ctype.h>
  #include <errno.h>
  #include <fcntl.h>
  #include <limits.h>
  #include <stdarg.h>
*** 48,58 ****
  #include <stdlib.h>
  #include <string.h>
  #include <time.h>
  #include <unistd.h>
  #include <libnvpair.h>
- #include "ndmpd_log.h"
  #include "ndmpd.h"
  
  /*
   * The dumpdates file on file system.
   */
--- 49,58 ----
*** 159,169 ****
          then.tm_min = atoi(&dbuf[E_MINUTE]);
          then.tm_sec = atoi(&dbuf[E_SECOND]);
          then.tm_year = atoi(&dbuf[E_YEAR]) - 1900;
          then.tm_isdst = ndmp_isdst;
  
!         NDMP_LOG(LOG_DEBUG,
              "yday %d wday %d %d/%d/%d %02d:%02d:%02d",
              then.tm_yday, then.tm_wday, then.tm_year, then.tm_mon,
              then.tm_mday, then.tm_hour, then.tm_min, then.tm_sec);
  
          *t = mktime(&then);
--- 159,169 ----
          then.tm_min = atoi(&dbuf[E_MINUTE]);
          then.tm_sec = atoi(&dbuf[E_SECOND]);
          then.tm_year = atoi(&dbuf[E_YEAR]) - 1900;
          then.tm_isdst = ndmp_isdst;
  
!         syslog(LOG_DEBUG,
              "yday %d wday %d %d/%d/%d %02d:%02d:%02d",
              then.tm_yday, then.tm_wday, then.tm_year, then.tm_mon,
              then.tm_mday, then.tm_hour, then.tm_min, then.tm_sec);
  
          *t = mktime(&then);
*** 296,306 ****
  
          /*
           * For 'F', 'A', 'I', and 'D' return the character itself.
           */
          if (IS_LBR_BKTYPE(*t)) {
!                 NDMP_LOG(LOG_DEBUG, "Lbr bk type %c", *t);
                  /*
                   * Skip the backup type character and null terminate the
                   * string.
                   */
                  *++t = '\0';
--- 296,306 ----
  
          /*
           * For 'F', 'A', 'I', and 'D' return the character itself.
           */
          if (IS_LBR_BKTYPE(*t)) {
!                 syslog(LOG_DEBUG, "Lbr bk type %c", *t);
                  /*
                   * Skip the backup type character and null terminate the
                   * string.
                   */
                  *++t = '\0';
*** 392,403 ****
          char tbuf[64];
  
          if (!fp)
                  return;
  
-         NDMP_LOG(LOG_DEBUG, "[%u]", t);
- 
          (void) ctime_r(&t, tbuf, sizeof (tbuf));
          /* LINTED variable format specifier */
          (void) fprintf(fp, tbuf);
  }
  
--- 392,401 ----
*** 444,463 ****
           */
          if (!ddp || !tbuf)
                  rv = -1;
          else if (!(nmp = get_ddname(&tbuf))) {
                  rv = -1;
!                 NDMP_LOG(LOG_DEBUG, "get_ddname failed 0x%p", nmp);
          } else if ((ddp->dd_level = get_ddlevel(&tbuf)) < 0) {
                  rv = -1;
!                 NDMP_LOG(LOG_DEBUG, "dd_level < 0 %d", ddp->dd_level);
          } else if (!(un_buf = get_ddate(&tbuf))) {
                  rv = -1;
!                 NDMP_LOG(LOG_DEBUG, "get_ddate failed 0x%p", un_buf);
          } else if (unctime(un_buf, &ddp->dd_ddate) < 0) {
                  rv = -1;
!                 NDMP_LOG(LOG_DEBUG, "unctime failed \"%s\"", un_buf);
          } else {
                  (void) strlcpy(ddp->dd_name, nmp, TLM_MAX_PATH_NAME);
                  rv = 0;
          }
  
--- 442,461 ----
           */
          if (!ddp || !tbuf)
                  rv = -1;
          else if (!(nmp = get_ddname(&tbuf))) {
                  rv = -1;
!                 syslog(LOG_ERR, "get_ddname failed 0x%p", nmp);
          } else if ((ddp->dd_level = get_ddlevel(&tbuf)) < 0) {
                  rv = -1;
!                 syslog(LOG_ERR, "dd_level < 0 %d", ddp->dd_level);
          } else if (!(un_buf = get_ddate(&tbuf))) {
                  rv = -1;
!                 syslog(LOG_ERR, "get_ddate failed 0x%p", un_buf);
          } else if (unctime(un_buf, &ddp->dd_ddate) < 0) {
                  rv = -1;
!                 syslog(LOG_ERR, "unctime failed \"%s\"", un_buf);
          } else {
                  (void) strlcpy(ddp->dd_name, nmp, TLM_MAX_PATH_NAME);
                  rv = 0;
          }
  
*** 487,508 ****
                  if (getaline(fp, tbuf, sizeof (tbuf)) != tbuf)
                          return (-1);
          } while (!*tbuf);
  
          if (makedumpdate(ddatep, tbuf) < 0)
!                 NDMP_LOG(LOG_DEBUG,
                      "Unknown intermediate format in %s, line %d", tbuf, *recno);
  
          (*recno)++;
  
-         if (IS_LBR_BKTYPE(ddatep->dd_level & 0xff)) {
-                 NDMP_LOG(LOG_DEBUG, "Lbr: [%s][%c][%u]",
-                     ddatep->dd_name, ddatep->dd_level, ddatep->dd_ddate);
-         } else
-                 NDMP_LOG(LOG_DEBUG, "[%s][%d][%u]",
-                     ddatep->dd_name, ddatep->dd_level, ddatep->dd_ddate);
- 
          return (0);
  }
  
  
  /*
--- 485,499 ----
                  if (getaline(fp, tbuf, sizeof (tbuf)) != tbuf)
                          return (-1);
          } while (!*tbuf);
  
          if (makedumpdate(ddatep, tbuf) < 0)
!                 syslog(LOG_ERR,
                      "Unknown intermediate format in %s, line %d", tbuf, *recno);
  
          (*recno)++;
  
          return (0);
  }
  
  
  /*
*** 553,569 ****
  dumprecout(FILE *fp, dumpdates_t *ddp)
  {
          if (!ddp)
                  return;
  
-         if (IS_LBR_BKTYPE(ddp->dd_level)) {
-                 NDMP_LOG(LOG_DEBUG, "Lbr: [%s][%c][%u]",
-                     ddp->dd_name, ddp->dd_level, ddp->dd_ddate);
-         } else
-                 NDMP_LOG(LOG_DEBUG, "[%s][%d][%u]",
-                     ddp->dd_name, ddp->dd_level, ddp->dd_ddate);
- 
          put_ddname(fp, ddp->dd_name);
          (void) fputc('\t', fp);
          put_ddlevel(fp, ddp->dd_level);
          (void) fputc('\t', fp);
          put_ddate(fp, ddp->dd_ddate);
--- 544,553 ----
*** 594,622 ****
                  return (-1);
  
          fp = fopen(fname, "r");
          if (!fp) {
                  if (errno != ENOENT) {
!                         NDMP_LOG(LOG_ERR, "Cannot read %s: %m.", fname);
                          return (-1);
                  }
                  /*
                   * Dumpdates does not exist, make an empty one.
                   */
!                 NDMP_LOG(LOG_DEBUG,
                      "No file `%s', making an empty one", fname);
  
                  fp = fopen(fname, "w");
                  if (!fp) {
!                         NDMP_LOG(LOG_ERR, "Cannot create %s: %m.", fname);
                          return (-1);
                  }
                  (void) fclose(fp);
  
                  fp = fopen(fname, "r");
                  if (!fp) {
!                         NDMP_LOG(LOG_ERR,
                              "Cannot read %s after creating it. %m.", fname);
                          return (-1);
                  }
          }
  
--- 578,606 ----
                  return (-1);
  
          fp = fopen(fname, "r");
          if (!fp) {
                  if (errno != ENOENT) {
!                         syslog(LOG_ERR, "Cannot read %s: %m.", fname);
                          return (-1);
                  }
                  /*
                   * Dumpdates does not exist, make an empty one.
                   */
!                 syslog(LOG_DEBUG,
                      "No file `%s', making an empty one", fname);
  
                  fp = fopen(fname, "w");
                  if (!fp) {
!                         syslog(LOG_ERR, "Cannot create %s: %m.", fname);
                          return (-1);
                  }
                  (void) fclose(fp);
  
                  fp = fopen(fname, "r");
                  if (!fp) {
!                         syslog(LOG_ERR,
                              "Cannot read %s after creating it. %m.", fname);
                          return (-1);
                  }
          }
  
*** 649,683 ****
  
          if (!path)
                  return (-1);
  
          if (IS_LBR_BKTYPE(level)) {
!                 NDMP_LOG(LOG_DEBUG, "Lbr: [%s][%c][%u]", path, level, ddate);
          } else {
!                 NDMP_LOG(LOG_DEBUG, "[%s][%d][%u]", path, level, ddate);
          }
  
          if (!ddates_pathname(fname)) {
!                 NDMP_LOG(LOG_ERR, "Cannot get dumpdate file path name.");
                  return (-1);
          }
  
          rfp = fopen(fname, "r");
          if (!rfp) {
!                 NDMP_LOG(LOG_DEBUG, "Creating %s.", fname);
                  (void) memset((void *)&ddhead, 0, sizeof (ddhead));
                  if (initdumptimes(&ddhead) < 0) {
!                         NDMP_LOG(LOG_ERR, "Could not initialize %s.",
                              NDMP_DUMPDATES);
                          dd_free(&ddhead);
                          return (-1);
                  }
          } else {
                  rv = readdumptimes(rfp, &ddhead);
  
                  if (rv < 0) {
!                         NDMP_LOG(LOG_ERR, "Error reading dumpdates file.");
                          (void) fclose(rfp);
                          dd_free(&ddhead);
                          return (-1);
                  }
                  (void) fclose(rfp);
--- 633,667 ----
  
          if (!path)
                  return (-1);
  
          if (IS_LBR_BKTYPE(level)) {
!                 syslog(LOG_DEBUG, "Lbr: [%s][%c][%u]", path, level, ddate);
          } else {
!                 syslog(LOG_DEBUG, "[%s][%d][%u]", path, level, ddate);
          }
  
          if (!ddates_pathname(fname)) {
!                 syslog(LOG_ERR, "Cannot get dumpdate file path name.");
                  return (-1);
          }
  
          rfp = fopen(fname, "r");
          if (!rfp) {
!                 syslog(LOG_DEBUG, "Creating %s.", fname);
                  (void) memset((void *)&ddhead, 0, sizeof (ddhead));
                  if (initdumptimes(&ddhead) < 0) {
!                         syslog(LOG_ERR, "Could not initialize %s.",
                              NDMP_DUMPDATES);
                          dd_free(&ddhead);
                          return (-1);
                  }
          } else {
                  rv = readdumptimes(rfp, &ddhead);
  
                  if (rv < 0) {
!                         syslog(LOG_ERR, "Error reading dumpdates file.");
                          (void) fclose(rfp);
                          dd_free(&ddhead);
                          return (-1);
                  }
                  (void) fclose(rfp);
*** 684,716 ****
          }
  
          (void) snprintf(bakfname, PATH_MAX, "%s.bak", fname);
          wfp = fopen(bakfname, "w");
          if (!wfp) {
!                 NDMP_LOG(LOG_ERR, "Cannot open %s: %m.", bakfname);
                  dd_free(&ddhead);
                  return (-1);
          }
  
!         NDMP_LOG(LOG_DEBUG, "[%s][%s]", fname, bakfname);
  
          /* try to locate the entry in the file */
          found = 0;
          for (ddp = ddhead.dd_next; ddp; ddp = ddp->dd_next) {
                  if (ddp->dd_level != level)
                          continue;
                  if (strcmp(path, ddp->dd_name))
                          continue;
  
!                 NDMP_LOG(LOG_DEBUG, "Found: [%s][%d][%u]",
                      ddp->dd_name, ddp->dd_level, ddp->dd_ddate);
  
                  /* update the record for the entry */
                  found = 1;
                  ddp->dd_ddate = ddate;
  
!                 NDMP_LOG(LOG_DEBUG,
                      "Updated to: [%s][%d][%u]",
                      ddp->dd_name, ddp->dd_level, ddp->dd_ddate);
          }
  
          /* dump all the read records */
--- 668,700 ----
          }
  
          (void) snprintf(bakfname, PATH_MAX, "%s.bak", fname);
          wfp = fopen(bakfname, "w");
          if (!wfp) {
!                 syslog(LOG_ERR, "Cannot open %s: %m.", bakfname);
                  dd_free(&ddhead);
                  return (-1);
          }
  
!         syslog(LOG_DEBUG, "[%s][%s]", fname, bakfname);
  
          /* try to locate the entry in the file */
          found = 0;
          for (ddp = ddhead.dd_next; ddp; ddp = ddp->dd_next) {
                  if (ddp->dd_level != level)
                          continue;
                  if (strcmp(path, ddp->dd_name))
                          continue;
  
!                 syslog(LOG_DEBUG, "Found: [%s][%d][%u]",
                      ddp->dd_name, ddp->dd_level, ddp->dd_ddate);
  
                  /* update the record for the entry */
                  found = 1;
                  ddp->dd_ddate = ddate;
  
!                 syslog(LOG_DEBUG,
                      "Updated to: [%s][%d][%u]",
                      ddp->dd_name, ddp->dd_level, ddp->dd_ddate);
          }
  
          /* dump all the read records */
*** 748,766 ****
  
          if (!fname || !*fname || !path || !*path)
                  return (-1);
  
          if (IS_LBR_BKTYPE(level & 0xff)) {
!                 NDMP_LOG(LOG_DEBUG,
                      "Lbr: [%s][%s][%c][%u]",
                      fname, path, level, ddate);
          } else
!                 NDMP_LOG(LOG_DEBUG, "[%s][%s][%d][%u]",
                      fname, path, level, ddate);
  
          if (!ndmpd_make_bk_dir_path(fpath, fname)) {
!                 NDMP_LOG(LOG_ERR, "Cannot get dumpdate file path name %s.",
                      fname);
                  return (-1);
          }
  
          (void) snprintf(bakfpath, PATH_MAX, "%s.bak", fpath);
--- 732,750 ----
  
          if (!fname || !*fname || !path || !*path)
                  return (-1);
  
          if (IS_LBR_BKTYPE(level & 0xff)) {
!                 syslog(LOG_DEBUG,
                      "Lbr: [%s][%s][%c][%u]",
                      fname, path, level, ddate);
          } else
!                 syslog(LOG_DEBUG, "[%s][%s][%d][%u]",
                      fname, path, level, ddate);
  
          if (!ndmpd_make_bk_dir_path(fpath, fname)) {
!                 syslog(LOG_ERR, "Cannot get dumpdate file path name %s.",
                      fname);
                  return (-1);
          }
  
          (void) snprintf(bakfpath, PATH_MAX, "%s.bak", fpath);
*** 771,794 ****
           */
          fp = fopen(fpath, "r");
          if (fp) {
                  (void) fclose(fp);
                  if (filecopy(bakfpath, fpath) != 0) {
!                         NDMP_LOG(LOG_ERR, "Cannot copy %s to %s: %m.",
                              fpath, bakfpath);
                          return (-1);
                  }
          }
  
          /* open the new copy to append the record to it */
          fp = fopen(bakfpath, "a");
          if (!fp) {
!                 NDMP_LOG(LOG_ERR, "Cannot open %s: %m.", bakfpath);
                  return (-1);
          }
  
!         NDMP_LOG(LOG_DEBUG, "[%s][%s]", fpath, bakfpath);
  
          /* append a new record */
          (void) strlcpy(tmpdd.dd_name, path, TLM_MAX_PATH_NAME);
          tmpdd.dd_level = level;
          tmpdd.dd_ddate = ddate;
--- 755,778 ----
           */
          fp = fopen(fpath, "r");
          if (fp) {
                  (void) fclose(fp);
                  if (filecopy(bakfpath, fpath) != 0) {
!                         syslog(LOG_ERR, "Cannot copy %s to %s: %m.",
                              fpath, bakfpath);
                          return (-1);
                  }
          }
  
          /* open the new copy to append the record to it */
          fp = fopen(bakfpath, "a");
          if (!fp) {
!                 syslog(LOG_ERR, "Cannot open %s: %m.", bakfpath);
                  return (-1);
          }
  
!         syslog(LOG_DEBUG, "[%s][%s]", fpath, bakfpath);
  
          /* append a new record */
          (void) strlcpy(tmpdd.dd_name, path, TLM_MAX_PATH_NAME);
          tmpdd.dd_level = level;
          tmpdd.dd_ddate = ddate;
*** 840,850 ****
          char *strval = NULL;
  
          if (!path || !level || !ddate)
                  return (-1);
  
!         NDMP_LOG(LOG_DEBUG, "[%s] level %d",
              path, *level);
  
          if (*level == 0) {
                  *ddate = (time_t)0;
                  return (0);
--- 824,834 ----
          char *strval = NULL;
  
          if (!path || !level || !ddate)
                  return (-1);
  
!         syslog(LOG_DEBUG, "[%s] level %d",
              path, *level);
  
          if (*level == 0) {
                  *ddate = (time_t)0;
                  return (0);
*** 911,921 ****
           * type.
           */
          if (IS_LBR_BKTYPE(*level & 0xff)) {
                  save = find_date(ddp, path, *level, *ddate);
  
!                 NDMP_LOG(LOG_DEBUG,
                      "LBR_BKTYPE save 0x%p", save);
  
                  *ddate = save ? save->dd_ddate : (time_t)0;
          } else {
                  /*
--- 895,905 ----
           * type.
           */
          if (IS_LBR_BKTYPE(*level & 0xff)) {
                  save = find_date(ddp, path, *level, *ddate);
  
!                 syslog(LOG_DEBUG,
                      "LBR_BKTYPE save 0x%p", save);
  
                  *ddate = save ? save->dd_ddate : (time_t)0;
          } else {
                  /*
*** 960,970 ****
          char vol[ZFS_MAX_DATASET_NAME_LEN];
          zfs_handle_t *zhp;
          char tbuf[64];
          int rv;
  
!         NDMP_LOG(LOG_DEBUG, "[%s][%d][%u]", path, level,
              ddate);
  
          /* Check if this is a ZFS dataset */
          (void) mutex_lock(&zlib_mtx);
          if ((zlibh != NULL) &&
--- 944,954 ----
          char vol[ZFS_MAX_DATASET_NAME_LEN];
          zfs_handle_t *zhp;
          char tbuf[64];
          int rv;
  
!         syslog(LOG_DEBUG, "[%s][%d][%u]", path, level,
              ddate);
  
          /* Check if this is a ZFS dataset */
          (void) mutex_lock(&zlib_mtx);
          if ((zlibh != NULL) &&
*** 997,1007 ****
          char vol[ZFS_MAX_DATASET_NAME_LEN];
          zfs_handle_t *zhp;
          char tbuf[64];
          int rv;
  
!         NDMP_LOG(LOG_DEBUG, "[%s][%s][%d][%u]", fname,
              path, level, ddate);
  
          /* Check if this is a ZFS dataset */
          (void) mutex_lock(&zlib_mtx);
          if ((zlibh != NULL) &&
--- 981,991 ----
          char vol[ZFS_MAX_DATASET_NAME_LEN];
          zfs_handle_t *zhp;
          char tbuf[64];
          int rv;
  
!         syslog(LOG_DEBUG, "[%s][%s][%d][%u]", fname,
              path, level, ddate);
  
          /* Check if this is a ZFS dataset */
          (void) mutex_lock(&zlib_mtx);
          if ((zlibh != NULL) &&