Ejemplo n.º 1
0
static void print_sandbox_log(char *sandbox_log)
{
	int sandbox_log_file;
	size_t len;
	char buffer[8192];

	sandbox_log_file = sb_open(sandbox_log, O_RDONLY, 0);
	if (-1 == sandbox_log_file) {
		sb_pwarn("could not open log file: %s", sandbox_log);
		return;
	}

	sb_eerror("--------------------------- ACCESS VIOLATION SUMMARY ---------------------------\n");
	sb_eerror("LOG FILE: \"%s\"\n", sandbox_log);

	while (1) {
		len = sb_read(sandbox_log_file, buffer, sizeof(buffer));
		if (len == -1) {
			sb_pwarn("sb_read(logfile) failed");
			break;
		} else if (!len)
			break;
		sb_eerror("\n%s", buffer);
	}
	sb_close(sandbox_log_file);

	sb_eerror("--------------------------------------------------------------------------------\n");
}
Ejemplo n.º 2
0
static void
command_handler (aeEventLoop * el, int fd, void *data, int mask)
{
  int ret;
  workerState *ws = (workerState *) data;
  simpleBuf *sb = &ws->cin;
  char *cp;
  int is_quit = 0;
  int i;

  ret = sb_read (sb, fd);
  // master quits this fd instead
  assert (ret != -1);

  cp = sb->buf;
  while (!is_quit && sb->cp - cp >= sizeof (workerCmd *))
    {
      workerCmd *cmd = NULL;

      memcpy ((char *) &cmd, cp, sizeof (workerCmd *));
      switch (cmd->command)
	{
	case CMD_SIZE:
	  ws->size = cmd->ival;
	  cmd->ret = 0;
	  break;
	case CMD_TPS:
	  ws->tps = cmd->ival;
	  cmd->ret = 0;
	  break;
	case CMD_START:
	  cmd->ret = command_start (ws, cmd->ebuf, sizeof (cmd->ebuf));
	  break;
	case CMD_STOP:
	  free_connection (ws, 0);
	  cmd->ret = 0;
	  break;
	case CMD_STAT:
	  cmd->num_rqst = ws->num_rqst;
	  cmd->num_resp = ws->num_resp;
	  cmd->num_reconn = ws->num_reconn;
	  for (i = 0; i < MAX_HISTO; i++)
	    {
	      cmd->histo[i].count = ws->histo[i].count;
	      cmd->histo[i].sum = ws->histo[i].sum;
	    }
	  cmd->ret = 0;
	  break;
	case CMD_QUIT:
	  free_connection (ws, 0);
	  aeStop (ws->el);
	  cmd->ret = 0;
	  is_quit = 1;
	  break;
	default:
	  fprintf (stdout, "-ERR invalid command:%d\n", cmd->command);
	  abort ();
	}
      write (ws->arg->wfd, "k", 1);
      cp += sizeof (workerCmd *);
    }

  memmove (sb->buf, cp, sb->cp - cp);
  sb->cp = sb->buf + (sb->cp - cp);
}
Ejemplo n.º 3
0
static void
response_handler (aeEventLoop * el, int fd, void *data, int mask)
{
  workerState *ws = (workerState *) data;
  simpleBuf *sb = &ws->in;
  int tr;
  int ret;

  tr = sb_read (sb, fd);
  if (tr < 0)
    {
      fprintf (stderr, "[smr-client] failed to sb_read:%d\n", tr);
      free_connection (ws, 1);
      return;
    }

  if (sb->cp - sb->buf > 2 && *(sb->cp - 2) == '\r' && *(sb->cp - 1) == '\n')
    {
      int crc;

      if (sb->buf[0] != '+' || sb->buf[1] != 'O' || sb->buf[2] != 'K'
	  || sb->buf[3] != ' ')
	{
	  fprintf (stdout, "-ERR protocol error\n");
	  abort ();
	}
      crc = atoi (&sb->buf[4]);

      // update ks_crc
      ks_crc[ws->key] = crc;

      // check response
      if (ws->is_sync)
	{
	  ks_crc_next[ws->key] = crc;
	  ws->is_sync = 0;
	}
      else
	{
	  if (crc != ks_crc_next[ws->key])
	    {
	      fprintf (stdout,
		       "-ERR inconsistency detected. expected:%d received:%d\n",
		       ks_crc_next[ws->key], crc);
	      abort ();
	    }
	  // update stat

	  update_histo (ws);
	  ws->num_resp++;
	}

      // reset response
      sb->cp = sb->buf;
      ws->key = -1;

      ret = emit_command (ws);
      assert (ret >= 0);
    }
  return;
}