Changeset 1ff13958e898b8d1e9c69aca6255e0127516e804

Show
Ignore:
Timestamp:
06/30/11 15:31:56 (3 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1309447916 -0400
git-parent:

[9a7a2027dffd0153012a872c18fb583cf26e6d90]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1309447916 -0400
Message:

more dtrace stuff in the core for production debugging

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • .gitignore

    r1c72b25 r1ff1395  
    1212Makefile 
    1313sql/reconnoiter_ddl_dump.sql 
     14src/dtrace_probes.h 
    1415src/lua/src/lua 
    1516src/noit_version.h 
  • src/Makefile.in

    r29fae1d r1ff1395  
    150150stratcond.o:    man/stratcond.usage.h 
    151151 
     152stratcon_jlog_streamer.o:       @DTRACEHDR@ 
     153 
     154@DTRACEOBJ@:    $(OBJS) 
     155        @-test -n "@DTRACE@" && \ 
     156        @DTRACE@ @DTRACEFLAGS@ -G -s dtrace_probes.d -o @DTRACEOBJ@ $(OBJS) 
     157 
     158@DTRACEHDR@:    dtrace_probes.d 
     159        @-test -n "@DTRACE@" && @DTRACE@ -h -s dtrace_probes.d 
     160 
    152161noitd:  $(NOIT_OBJS) $(NOIT_LIB_FILES) man/noitd.usage.h 
    153162        @echo "- linking $@" 
    154163        @$(CC) -o $@ $(NOIT_OBJS) \ 
    155164                udns/libudns.o \ 
     165                @DTRACEOBJ@ \ 
    156166                $(LDFLAGS) \ 
    157167                $(WHOLE_ARCHIVE) \ 
     
    168178        @$(CC) -o $@ $(STRATCON_OBJS) \ 
    169179                udns/libudns.o \ 
     180                @DTRACEOBJ@ \ 
    170181                $(LDFLAGS) \ 
    171182                $(WHOLE_ARCHIVE) \ 
  • src/stratcon_jlog_streamer.c

    r0b4c123 r1ff1395  
    3232 
    3333#include "noit_defines.h" 
     34#include "dtrace_probes.h" 
    3435#include "eventer/eventer.h" 
    3536#include "noit_conf.h" 
     
    7475  return "unknown"; 
    7576} 
     77 
     78#define GET_EXPECTED_CN(nctx, cn) do { \ 
     79  void *vcn; \ 
     80  cn = NULL; \ 
     81  if(nctx->config && \ 
     82     noit_hash_retrieve(nctx->config, "cn", 2, &vcn)) { \ 
     83     cn = vcn; \ 
     84  } \ 
     85} while(0) 
     86#define GET_FEEDTYPE(nctx, feedtype) do { \ 
     87  jlog_streamer_ctx_t *_jctx = nctx->consumer_ctx; \ 
     88  feedtype = "unknown"; \ 
     89  if(_jctx->push == stratcon_datastore_push) \ 
     90    feedtype = "storage"; \ 
     91  else if(_jctx->push == stratcon_iep_line_processor) \ 
     92    feedtype = "iep"; \ 
     93} while(0) 
    7694 
    7795static int 
     
    223241                                   struct timeval *now) { 
    224242  struct timeval __now, interval; 
    225   const char *v
     243  const char *v, *feedtype, *cn_expected
    226244  u_int32_t min_interval = 1000, max_interval = 8000; 
    227245 
     
    265283  ctx->retry_event->mask = EVENTER_TIMER; 
    266284  add_timeval(*now, interval, &ctx->retry_event->whence); 
     285  GET_EXPECTED_CN(ctx, cn_expected); 
     286  GET_FEEDTYPE(ctx, feedtype); 
     287  STRATCON_NOIT_RESCHEDULE(-1, (char *)feedtype, ctx->remote_str, 
     288                           (char *)cn_expected, ctx->current_backoff); 
    267289  eventer_add(ctx->retry_event); 
    268290} 
     
    370392  int len; 
    371393  jlog_id n_chkpt; 
     394  const char *cn_expected, *feedtype; 
     395  GET_EXPECTED_CN(nctx, cn_expected); 
     396  GET_FEEDTYPE(nctx, feedtype); 
    372397 
    373398  if(mask & EVENTER_EXCEPTION || nctx->wants_shutdown) { 
     
    375400      noitL(noit_error, "socket error: %s\n", strerror(errno)); 
    376401 socket_error: 
     402    STRATCON_NOIT_CONNECT_CLOSE(e->fd, (char *)feedtype, nctx->remote_str, 
     403                                (char *)cn_expected, 
     404                                nctx->wants_shutdown, errno); 
    377405    ctx->state = JLOG_STREAMER_WANT_INITIATE; 
    378406    ctx->count = 0; 
     
    422450        ctx->needs_chkpt = 0; 
    423451        free(ctx->buffer); ctx->buffer = NULL; 
     452        STRATCON_NOIT_STREAM_COUNT(e->fd, (char *)feedtype, 
     453                                   nctx->remote_str, (char *)cn_expected, 
     454                                   ctx->count); 
    424455        if(ctx->count < 0) 
    425456          ctx->state = JLOG_STREAMER_WANT_ERROR; 
     
    440471        ctx->header.tv_usec = ntohl(dummy.header.tv_usec); 
    441472        ctx->header.message_len = ntohl(dummy.header.message_len); 
     473        STRATCON_NOIT_STREAM_HEADER(e->fd, (char *)feedtype, 
     474                                    nctx->remote_str, (char *)cn_expected, 
     475                                    ctx->header.chkpt.log, ctx->header.chkpt.marker, 
     476                                    ctx->header.tv_sec, ctx->header.tv_usec, 
     477                                    ctx->header.message_len); 
    442478        free(ctx->buffer); ctx->buffer = NULL; 
    443479        ctx->state = JLOG_STREAMER_WANT_BODY; 
     
    446482      case JLOG_STREAMER_WANT_BODY: 
    447483        FULLREAD(e, ctx, (unsigned long)ctx->header.message_len); 
     484        STRATCON_NOIT_STREAM_BODY(e->fd, (char *)feedtype, 
     485                                  nctx->remote_str, (char *)cn_expected, 
     486                                  ctx->header.chkpt.log, ctx->header.chkpt.marker, 
     487                                  ctx->header.tv_sec, ctx->header.tv_usec, 
     488                                  ctx->buffer); 
    448489        if(ctx->header.message_len > 0) { 
    449490          ctx->needs_chkpt = 1; 
     
    501542          goto socket_error; 
    502543        } 
     544        STRATCON_NOIT_STREAM_CHECKPOINT(e->fd, (char *)feedtype, 
     545                                        nctx->remote_str, (char *)cn_expected, 
     546                                        ctx->header.chkpt.log, ctx->header.chkpt.marker); 
    503547        ctx->state = JLOG_STREAMER_WANT_COUNT; 
    504548        break; 
     
    513557  noit_connection_ctx_t *nctx = closure; 
    514558  int rv; 
    515   const char *error = NULL; 
    516  
     559  const char *error = NULL, *cn_expected, *feedtype; 
     560 
     561  GET_EXPECTED_CN(nctx, cn_expected); 
     562  GET_FEEDTYPE(nctx, feedtype); 
     563  STRATCON_NOIT_CONNECT_SSL(e->fd, (char *)feedtype, nctx->remote_str, 
     564                            (char *)cn_expected); 
    517565  rv = eventer_SSL_connect(e, &mask); 
    518566  if(rv > 0) { 
     
    524572    if((sslctx = eventer_get_eventer_ssl_ctx(e)) != NULL) { 
    525573      const char *cn, *end; 
    526       void *vcn; 
    527574      cn = eventer_ssl_get_peer_subject(sslctx); 
    528575      if(cn && (cn = strstr(cn, "CN=")) != NULL) { 
     
    534581        nctx->remote_cn[end-cn] = '\0'; 
    535582      } 
    536       if(nctx->config && 
    537          noit_hash_retrieve(nctx->config, "cn", 2, &vcn)) { 
    538         const char *cn_expected = vcn; 
    539         if(!nctx->remote_cn || 
    540            strcmp(nctx->remote_cn, cn_expected)) { 
    541           error = "jlog connect CN mismatch\n"; 
    542           goto error; 
    543         } 
     583      if(cn_expected && (!nctx->remote_cn || 
     584                         strcmp(nctx->remote_cn, cn_expected))) { 
     585        error = "jlog connect CN mismatch\n"; 
     586        goto error; 
    544587      } 
    545588    } 
     589    STRATCON_NOIT_CONNECT_SSL_SUCCESS(e->fd, (char *)feedtype, 
     590                                      nctx->remote_str, (char *)cn_expected); 
    546591    return e->callback(e, mask, e->closure, now); 
    547592  } 
     
    550595 
    551596 error: 
     597  STRATCON_NOIT_CONNECT_SSL_FAILED(e->fd, (char *)feedtype, 
     598                                   nctx->remote_str, (char *)cn_expected, 
     599                                   (char *)error, errno); 
    552600  if(error) noitL(noit_error, "%s", error); 
    553601  eventer_remove_fd(e->fd); 
     
    561609                                 struct timeval *now) { 
    562610  noit_connection_ctx_t *nctx = closure; 
    563   const char *cert, *key, *ca, *ciphers, *crl = NULL
     611  const char *cert, *key, *ca, *ciphers, *crl = NULL, *cn_expected, *feedtype
    564612  char remote_str[128], tmp_str[128]; 
    565613  eventer_ssl_ctx_t *sslctx; 
     
    567615  socklen_t aerrno_len = sizeof(aerrno); 
    568616 
     617  GET_EXPECTED_CN(nctx, cn_expected); 
     618  GET_FEEDTYPE(nctx, feedtype); 
    569619  if(getsockopt(e->fd,SOL_SOCKET,SO_ERROR, &aerrno, &aerrno_len) == 0) 
    570620    if(aerrno != 0) goto connect_error; 
     
    598648    noitL(noit_error, "Error connecting to %s: %s\n", 
    599649          remote_str, strerror(aerrno)); 
     650    STRATCON_NOIT_CONNECT_FAILED(e->fd, (char *)feedtype, remote_str, 
     651                                 (char *)cn_expected, aerrno); 
    600652    eventer_remove_fd(e->fd); 
    601653    nctx->e = NULL; 
     
    628680  EVENTER_ATTACH_SSL(e, sslctx); 
    629681  e->callback = noit_connection_ssl_upgrade; 
     682  STRATCON_NOIT_CONNECT_SUCCESS(e->fd, (char *)feedtype, nctx->remote_str, 
     683                                (char *)cn_expected); 
    630684  return e->callback(e, mask, closure, now); 
    631685} 
     
    633687noit_connection_initiate_connection(noit_connection_ctx_t *nctx) { 
    634688  struct timeval __now; 
     689  const char *cn_expected, *feedtype; 
    635690  eventer_t e; 
    636691  int rv, fd = -1; 
     
    640695#endif 
    641696 
     697  GET_EXPECTED_CN(nctx, cn_expected); 
     698  GET_FEEDTYPE(nctx, feedtype); 
    642699  nctx->e = NULL; 
    643700  if(nctx->wants_permanent_shutdown) { 
     701    STRATCON_NOIT_SHUTDOWN_PERMANENT(-1, (char *)feedtype, 
     702                                     nctx->remote_str, (char *)cn_expected); 
    644703    noit_connection_ctx_dealloc(nctx); 
    645704    return; 
     
    689748  eventer_add(e); 
    690749 
     750  STRATCON_NOIT_CONNECT(e->fd, (char *)feedtype, nctx->remote_str, 
     751                        (char *)cn_expected); 
    691752  noit_connection_update_timeout(nctx); 
    692753  return; 
     
    10111072  char str[1024], *wr; 
    10121073  int len; 
    1013   void *vcn; 
    10141074  const char *cn_expected; 
    10151075  const char *feedtype = "unknown"; 
    10161076 
    1017   if(jctx->push == stratcon_datastore_push) 
    1018     feedtype = "storage"; 
    1019   else if(jctx->push == stratcon_iep_line_processor) 
    1020     feedtype = "iep"; 
     1077  GET_FEEDTYPE(nctx, feedtype); 
    10211078  if(NULL != (wr = strchr(feedtype, '/'))) feedtype = wr+1; 
    10221079 
    1023   noit_hash_retrieve(nctx->config, "cn", 2, &vcn); 
    1024   if(!vcn) return; 
    1025   cn_expected = vcn; 
     1080  GET_EXPECTED_CN(nctx, cn_expected); 
     1081  if(!cn_expected) return; 
    10261082 
    10271083  snprintf(str, sizeof(str), "M\t%lu.%03lu\t%s\t%s`%s`",