// Process one queue's batch requests. void* batch_process_queue(void* q_to_wait_on) { cf_queue* worker_queue = (cf_queue*)q_to_wait_on; batch_transaction btr; uint64_t start; while (1) { if (cf_queue_pop(worker_queue, &btr, CF_QUEUE_FOREVER) != 0) { cf_crash(AS_BATCH, "Failed to pop from batch worker queue."); } // Check for timeouts. if (btr.end_time != 0 && cf_getns() > btr.end_time) { cf_atomic_int_incr(&g_config.batch_timeout); if (btr.fd_h) { as_msg_send_reply(btr.fd_h, AS_PROTO_RESULT_FAIL_TIMEOUT, 0, 0, 0, 0, 0, 0, 0, btr.trid, NULL); btr.fd_h = 0; } batch_transaction_done(&btr); continue; } // Process batch request. start = cf_getns(); batch_process_request(&btr); histogram_insert_data_point(g_config.batch_q_process_hist, start); } return 0; }
// Process one queue's batch requests. static void batch_worker(void* udata) { batch_transaction* btr = (batch_transaction*)udata; // Check for timeouts. if (btr->end_time != 0 && cf_getns() > btr->end_time) { cf_atomic_int_incr(&g_config.batch_timeout); if (btr->fd_h) { as_msg_send_reply(btr->fd_h, AS_PROTO_RESULT_FAIL_TIMEOUT, 0, 0, 0, 0, 0, 0, 0, btr->trid, NULL); btr->fd_h = 0; } batch_transaction_done(btr, false); return; } // Process batch request. uint64_t start = cf_getns(); batch_process_request(btr); histogram_insert_data_point(g_config.batch_q_process_hist, start); }