Beispiel #1
0
static void spool_sub_dequeue_callback(subscriber_t *sub, void *data) {
  spooled_subscriber_cleanup_t  *d = (spooled_subscriber_cleanup_t *)data;
  subscriber_pool_t             *spool = d->spool;
  
  DBG("sub %p dequeue callback", sub);
  
  assert(sub == d->ssub->sub);
  spool_remove_subscriber(spool, d->ssub);
  spool_bubbleup_dequeue_handler(spool, sub, spool->spooler);
  
/*
  if(spool->bulk_dequeue_handler) {
    void         *pd = spool->bulk_dequeue_handler_privdata;
    if(spool->type == SHORTLIVED) {
      if(spool->generation == 0) {
        //just some random aborted subscriber
        spool->bulk_dequeue_handler(spool, sub->type, 1, pd);
      }
      else {
        //first response. pretend to dequeue everything right away
        if(spool->responded_shortlived_subs == 1) {
          //assumes all SHORTLIVED subs are the same type. This is okay for now, but may lead to bugs.
          spool->bulk_dequeue_handler(spool, sub->type, spool->shortlived_sub_count + 1, pd);
        }
      }
    }
    else {
      spool->bulk_dequeue_handler(spool, sub->type, 1, pd);
    }
  }
*/

}
Beispiel #2
0
static void spool_sub_dequeue_callback(subscriber_t *sub, void *data) {
  spooled_subscriber_cleanup_t  *d = (spooled_subscriber_cleanup_t *)data;
  subscriber_pool_t             *spool = d->spool;
  
  DBG("sub %p dequeue callback", sub);
  
  assert(sub == d->ssub->sub);
  spool_remove_subscriber(spool, d->ssub);
  spool_bubbleup_dequeue_handler(spool, sub, spool->spooler);
  
  if(sub->type != INTERNAL && spool->spooler->publish_events) {
    nchan_maybe_send_channel_event_message(sub->request, SUB_DEQUEUE);
  }
}
Beispiel #3
0
static ngx_int_t spool_transfer_subscribers(subscriber_pool_t *spool, subscriber_pool_t *newspool, uint8_t update_subscriber_last_msgid) {
  ngx_int_t               count = 0;
  subscriber_t           *sub;
  spooled_subscriber_t   *cur;
  
  assert(spool->spooler == newspool->spooler);
  
  if(spool == NULL || newspool == NULL) {
    ERR("failed to transfer spool subscribers");
    return 0;
  }
  for(cur = spool->first; cur != NULL; cur = spool->first) {
    sub = cur->sub;
    spool_remove_subscriber(spool, cur);
    if(update_subscriber_last_msgid) {
      sub->last_msg_id=newspool->id;
    }
    spool_add_subscriber(newspool, sub, 0);
    count++;
  }
  
  return count;
}