Print this page
NEX-2911 NDMP logging should use syslog and is too chatty
NEX-559 NDMP cannot backup/restore a file which spans multiple tapes

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/ndmpd/ndmp/ndmpd_callbacks.c
          +++ new/usr/src/cmd/ndmpd/ndmp/ndmpd_callbacks.c
   1    1  /*
   2    2   * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
        3 + * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
   3    4   */
   4    5  
   5    6  /*
   6    7   * BSD 3 Clause License
   7    8   *
   8    9   * Copyright (c) 2007, The Storage Networking Industry Association.
   9   10   *
  10   11   * Redistribution and use in source and binary forms, with or without
  11   12   * modification, are permitted provided that the following conditions
  12   13   * are met:
↓ open down ↓ 20 lines elided ↑ open up ↑
  33   34   * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  34   35   * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  35   36   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  36   37   * POSSIBILITY OF SUCH DAMAGE.
  37   38   */
  38   39  /* Copyright (c) 2007, The Storage Networking Industry Association. */
  39   40  /* Copyright (c) 1996, 1997 PDC, Network Appliance. All Rights Reserved */
  40   41  /* Copyright 2014 Nexenta Systems, Inc. All rights reserved. */
  41   42  
  42   43  #include <sys/types.h>
       44 +#include <syslog.h>
  43   45  #include <stdlib.h>
  44   46  #include <errno.h>
  45   47  #include <stdarg.h>
  46   48  #include <stdio.h>
  47   49  #include <string.h>
  48   50  #include "ndmpd.h"
  49   51  
  50   52  
  51   53  /*
  52   54   * Message Id counter.  This number is increased by MOD_LOGV3 macro.
↓ open down ↓ 28 lines elided ↑ open up ↑
  81   83          ndmpd_session_t *session = (ndmpd_session_t *)cookie;
  82   84          ndmp_notify_data_halted_request req_v2;
  83   85  
  84   86          if (session == NULL)
  85   87                  return;
  86   88  
  87   89          if (session->ns_data.dd_state == NDMP_DATA_STATE_IDLE ||
  88   90              session->ns_data.dd_state == NDMP_DATA_STATE_HALTED)
  89   91                  return;
  90   92  
  91      -        NDMP_LOG(LOG_DEBUG, "data.operation: %d",
       93 +        syslog(LOG_DEBUG, "data.operation: %d",
  92   94              session->ns_data.dd_operation);
  93   95  
  94   96          if (session->ns_data.dd_operation == NDMP_DATA_OP_BACKUP) {
  95   97                  /*
  96   98                   * Send/discard any buffered file history data.
  97   99                   */
  98  100                  ndmpd_file_history_cleanup(session, (err == 0 ? TRUE : FALSE));
  99  101  
 100  102                  /*
 101  103                   * If mover local and successfull backup, write any
↓ open down ↓ 18 lines elided ↑ open up ↑
 120  122          case EIO:
 121  123                  session->ns_data.dd_halt_reason = NDMP_DATA_HALT_CONNECT_ERROR;
 122  124                  break;
 123  125          default:
 124  126                  session->ns_data.dd_halt_reason = NDMP_DATA_HALT_INTERNAL_ERROR;
 125  127          }
 126  128  
 127  129          req_v2.reason = session->ns_data.dd_halt_reason;
 128  130          req_v2.text_reason = "";
 129  131  
 130      -        NDMP_LOG(LOG_DEBUG, "ndmp_send_request(NDMP_NOTIFY_DATA_HALTED)");
      132 +        syslog(LOG_DEBUG, "ndmp_send_request(NDMP_NOTIFY_DATA_HALTED)");
 131  133  
 132  134          if (ndmp_send_request_lock(session->ns_connection,
 133  135              NDMP_NOTIFY_DATA_HALTED, NDMP_NO_ERR, (void *)&req_v2, 0) < 0)
 134      -                NDMP_LOG(LOG_DEBUG, "Sending notify_data_halted request");
      136 +                syslog(LOG_DEBUG, "Sending notify_data_halted request");
 135  137  
 136  138          if (session->ns_data.dd_mover.addr_type == NDMP_ADDR_TCP) {
 137  139  
 138  140                  if (session->ns_mover.md_sock != session->ns_data.dd_sock) {
 139  141                          (void) close(session->ns_data.dd_sock);
 140  142                  } else {
 141      -                        NDMP_LOG(LOG_DEBUG, "Not closing as used by mover");
      143 +                        syslog(LOG_DEBUG, "Not closing as used by mover");
 142  144                  }
 143  145  
 144  146                  session->ns_data.dd_sock = -1;
 145  147          } else {
 146  148                  ndmpd_mover_error(session, NDMP_MOVER_HALT_CONNECT_CLOSED);
 147  149          }
 148  150  }
 149  151  
 150  152  
 151  153  /*
↓ open down ↓ 27 lines elided ↑ open up ↑
 179  181  
 180  182          /*LINTED variable format specifier */
 181  183          (void) vsnprintf(buf, sizeof (buf), format, ap);
 182  184          va_end(ap);
 183  185  
 184  186          request.entry = buf;
 185  187  
 186  188  
 187  189          if (ndmp_send_request(session->ns_connection, _NDMP_LOG_LOG,
 188  190              NDMP_NO_ERR, (void *)&request, 0) < 0) {
 189      -                NDMP_LOG(LOG_DEBUG, "Sending log request");
      191 +                syslog(LOG_ERR, "Sending log request");
 190  192                  return (-1);
 191  193          }
 192  194          return (0);
 193  195  
 194  196  }
 195  197  
 196  198  
 197  199  /*
 198  200   * ndmpd_api_read_v2
 199  201   *
↓ open down ↓ 68 lines elided ↑ open up ↑
 268  270                  session->ns_mover.md_bytes_left_to_read = length;
 269  271                  session->ns_mover.md_position = offset;
 270  272  
 271  273                  request.offset = long_long_to_quad(offset);
 272  274                  request.length = long_long_to_quad(length);
 273  275  
 274  276                  if (ndmp_send_request_lock(session->ns_connection,
 275  277                      NDMP_NOTIFY_DATA_READ, NDMP_NO_ERR,
 276  278                      (void *)&request, 0) < 0) {
 277  279  
 278      -                        NDMP_LOG(LOG_DEBUG,
      280 +                        syslog(LOG_ERR,
 279  281                              "Sending notify_data_read request");
 280  282                          return (-1);
 281  283                  }
 282  284                  return (0);
 283  285          }
 284  286          /* Mover is local. */
 285  287  
 286  288          err = ndmpd_mover_seek(session, offset, length);
 287  289          if (err < 0) {
 288  290                  ndmpd_mover_error(session, NDMP_MOVER_HALT_INTERNAL_ERROR);
↓ open down ↓ 43 lines elided ↑ open up ↑
 332  334                  break;
 333  335          case ENOENT:
 334  336                  request.error = NDMP_FILE_NOT_FOUND_ERR;
 335  337                  break;
 336  338          default:
 337  339                  request.error = NDMP_PERMISSION_ERR;
 338  340          }
 339  341  
 340  342          if (ndmp_send_request_lock(session->ns_connection, NDMP_LOG_FILE,
 341  343              NDMP_NO_ERR, (void *)&request, 0) < 0) {
 342      -                NDMP_LOG(LOG_DEBUG, "Sending log file request");
      344 +                syslog(LOG_ERR, "Sending log file request");
 343  345                  return (-1);
 344  346          }
 345  347          return (0);
 346  348  }
 347  349  
 348  350  
 349  351  /*
 350  352   * ndmpd_api_write_v2
 351  353   *
 352  354   * Callback function called by the backup/restore module.
↓ open down ↓ 106 lines elided ↑ open up ↑
 459  461          /*LINTED variable format specifier */
 460  462          (void) vsnprintf(buf, sizeof (buf), format, ap);
 461  463          va_end(ap);
 462  464  
 463  465          request.entry = buf;
 464  466          request.log_type = type;
 465  467          request.message_id = msg_id;
 466  468  
 467  469          if (ndmp_send_request(session->ns_connection, NDMP_LOG_MESSAGE,
 468  470              NDMP_NO_ERR, (void *)&request, 0) < 0) {
 469      -                NDMP_LOG(LOG_DEBUG, "Error sending log message request.");
      471 +                syslog(LOG_ERR, "Error sending log message request.");
 470  472                  return (-1);
 471  473          }
 472  474          return (0);
 473  475  }
 474  476  
 475  477  
 476  478  /*
 477  479   * ndmpd_api_write_v3
 478  480   *
 479  481   * Callback function called by the backup/restore module.
↓ open down ↓ 132 lines elided ↑ open up ↑
 612  614                  break;
 613  615          case ENOENT:
 614  616                  request.error = NDMP_FILE_NOT_FOUND_ERR;
 615  617                  break;
 616  618          default:
 617  619                  request.error = NDMP_PERMISSION_ERR;
 618  620          }
 619  621  
 620  622          if (ndmp_send_request_lock(session->ns_connection, NDMP_LOG_FILE,
 621  623              NDMP_NO_ERR, (void *)&request, 0) < 0) {
 622      -                NDMP_LOG(LOG_DEBUG, "Error sending log file request");
      624 +                syslog(LOG_ERR, "Error sending log file request");
 623  625                  return (-1);
 624  626          }
 625  627  
 626  628          return (0);
 627  629  }
 628  630  
 629  631  
 630  632  /*
 631  633   * ndmpd_api_seek_v3
 632  634   *
↓ open down ↓ 31 lines elided ↑ open up ↑
 664  666                      session->ns_data.dd_bytes_left_to_read;
 665  667                  session->ns_data.dd_bytes_left_to_read = length;
 666  668                  session->ns_data.dd_position = offset;
 667  669  
 668  670                  request.offset = long_long_to_quad(offset);
 669  671                  request.length = long_long_to_quad(length);
 670  672  
 671  673                  if (ndmp_send_request_lock(session->ns_connection,
 672  674                      NDMP_NOTIFY_DATA_READ, NDMP_NO_ERR,
 673  675                      (void *)&request, 0) < 0) {
 674      -                        NDMP_LOG(LOG_DEBUG,
      676 +                        syslog(LOG_ERR,
 675  677                              "Sending notify_data_read request");
 676  678                          return (-1);
 677  679                  }
 678  680  
 679  681                  return (0);
 680  682          }
 681  683  
 682  684          /* Mover is local. */
 683  685  
 684  686          err = ndmpd_mover_seek(session, offset, length);
↓ open down ↓ 64 lines elided ↑ open up ↑
 749  751          va_end(ap);
 750  752  
 751  753          request.entry = buf;
 752  754          request.log_type = type;
 753  755          request.message_id = msg_id;
 754  756          request.associated_message_valid = NDMP_NO_ASSOCIATED_MESSAGE;
 755  757          request.associated_message_sequence = 0;
 756  758  
 757  759          if (ndmp_send_request(session->ns_connection, NDMP_LOG_MESSAGE,
 758  760              NDMP_NO_ERR, (void *)&request, 0) < 0) {
 759      -                NDMP_LOG(LOG_DEBUG, "Error sending log message request.");
      761 +                syslog(LOG_ERR, "Error sending log message request.");
 760  762                  return (-1);
 761  763          }
 762  764          return (0);
 763  765  }
 764  766  
 765  767  
 766  768  /*
 767  769   * ndmpd_api_file_recovered_v4
 768  770   *
 769  771   * Notify the NDMP client that the specified file was recovered.
↓ open down ↓ 41 lines elided ↑ open up ↑
 811  813          case EEXIST:
 812  814                  request.recovery_status = NDMP_RECOVERY_FAILED_FILE_PATH_EXISTS;
 813  815                  break;
 814  816          default:
 815  817                  request.recovery_status = NDMP_RECOVERY_FAILED_UNDEFINED_ERROR;
 816  818                  break;
 817  819          }
 818  820  
 819  821          if (ndmp_send_request_lock(session->ns_connection, NDMP_LOG_FILE,
 820  822              NDMP_NO_ERR, (void *)&request, 0) < 0) {
 821      -                NDMP_LOG(LOG_DEBUG, "Error sending log file request");
      823 +                syslog(LOG_ERR, "Error sending log file request");
 822  824                  return (-1);
 823  825          }
 824  826  
 825  827          return (0);
 826  828  }
 827  829  
 828  830  
 829  831  /*
 830  832   * ************************************************************************
 831  833   * LOCALS
↓ open down ↓ 83 lines elided ↑ open up ↑
 915  917          char *namebuf;
 916  918          char *valbuf;
 917  919  
 918  920          if (session == NULL)
 919  921                  return (-1);
 920  922  
 921  923          session->ns_data.dd_env = realloc((void *)session->ns_data.dd_env,
 922  924              sizeof (ndmp_pval) * (session->ns_data.dd_env_len + 1));
 923  925  
 924  926          if (session->ns_data.dd_env == NULL) {
 925      -                NDMP_LOG(LOG_ERR, "Out of memory.");
      927 +                syslog(LOG_ERR, "Out of memory.");
 926  928                  return (-1);
 927  929          }
 928  930          namebuf = strdup(name);
 929  931          if (namebuf == NULL)
 930  932                  return (-1);
 931  933  
 932  934          valbuf = strdup(value);
 933  935          if (valbuf == NULL) {
 934  936                  free(namebuf);
 935  937                  return (-1);
↓ open down ↓ 177 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX