Beispiel #1
0
static void
fq_client_signal(fq_client conn, cmd_instr *e) 
{
  fq_conn_s *conn_s = conn;
  ck_fifo_spsc_enqueue_lock(&conn_s->cmdq);
  ck_fifo_spsc_entry_t *fifo_entry = ck_fifo_spsc_recycle(&conn_s->cmdq);
  if (fifo_entry == NULL) {
    fifo_entry = malloc(sizeof(ck_fifo_spsc_entry_t));
  }
  ck_fifo_spsc_enqueue(&conn_s->cmdq, fifo_entry, e);
  ck_fifo_spsc_enqueue_unlock(&conn_s->cmdq);
}
Beispiel #2
0
static void
enqueue_cmd_hook_req(fq_conn_s *conn_s, cmd_instr *e) {
  ck_fifo_spsc_enqueue_lock(&conn_s->backq);
  ck_fifo_spsc_entry_t *fifo_entry = ck_fifo_spsc_recycle(&conn_s->backq);
  if (unlikely(fifo_entry == NULL)) {
    fifo_entry = malloc(sizeof(ck_fifo_spsc_entry_t));
  }
  hook_req_t *hreq = calloc(1,sizeof(*hreq));
  hreq->type = CMD_HOOK_TYPE;
  hreq->entry = e;
  ck_fifo_spsc_enqueue(&conn_s->backq, fifo_entry, MARKED_HOOK_REQ_PTR(hreq));
  ck_fifo_spsc_enqueue_unlock(&conn_s->backq);
}
Beispiel #3
0
static void
enqueue_auth_hook_req(fq_conn_s *conn_s, int rv) 
{
  ck_fifo_spsc_enqueue_lock(&conn_s->backq);
  ck_fifo_spsc_entry_t *fifo_entry = ck_fifo_spsc_recycle(&conn_s->backq);
  if (unlikely(fifo_entry == NULL)) {
    fifo_entry = malloc(sizeof(ck_fifo_spsc_entry_t));
  }
  hook_req_t *hreq = calloc(1,sizeof(*hreq));
  hreq->type = AUTH_HOOK_TYPE;
  hreq->entry = calloc(1, sizeof(*hreq->entry));
  hreq->entry->data.return_value = 0;
  ck_fifo_spsc_enqueue(&conn_s->backq, fifo_entry, MARKED_HOOK_REQ_PTR(hreq));
  ck_fifo_spsc_enqueue_unlock(&conn_s->backq);
}
Beispiel #4
0
static void
fq_client_read_complete(void *closure, fq_msg *msg) {
  fq_conn_s *conn_s = (fq_conn_s *)closure;

  if(conn_s->message_hook && conn_s->message_hook(conn_s, msg)) {
    fq_msg_deref(msg);
  }
  else {

    ck_fifo_spsc_enqueue_lock(&conn_s->backq);
    ck_fifo_spsc_entry_t *fifo_entry = ck_fifo_spsc_recycle(&conn_s->backq);
    if (unlikely(fifo_entry == NULL)) {
      fifo_entry = malloc(sizeof(ck_fifo_spsc_entry_t));
    }
    ck_fifo_spsc_enqueue(&conn_s->backq, fifo_entry, msg);
    ck_fifo_spsc_enqueue_unlock(&conn_s->backq);
  }
}
static void
distribute_message_with_interests(caql_cnt_t *interests, noit_metric_message_t *message) {
  mtev_atomic_inc64(&number_of_messages_received);

  int i;
  for(i = 0; i < nthreads; i++) {
    if(interests[i] > 0) {
      ck_fifo_spsc_t *fifo = (ck_fifo_spsc_t *) thread_queues[i];
      ck_fifo_spsc_entry_t *fifo_entry;
      ck_fifo_spsc_enqueue_lock(fifo);
      fifo_entry = ck_fifo_spsc_recycle(fifo);
      if(!fifo_entry) fifo_entry = malloc(sizeof(ck_fifo_spsc_entry_t));
      noit_metric_director_message_ref(message);
      ck_fifo_spsc_enqueue(fifo, fifo_entry, message);
      ck_fifo_spsc_enqueue_unlock(fifo);

      mtev_atomic_inc64(&number_of_messages_distributed);
    }
  }
}