struct msg * dnode_req_send_next(struct context *ctx, struct conn *conn) { rstatus_t status; ASSERT(conn->type == CONN_DNODE_PEER_SERVER); uint32_t now = time(NULL); //throttling the sending traffics here if (!conn->same_dc) { if (conn->last_sent != 0) { uint32_t elapsed_time = now - conn->last_sent; uint32_t earned_tokens = elapsed_time * msgs_per_sec(); conn->avail_tokens = (conn->avail_tokens + earned_tokens) < msgs_per_sec()? conn->avail_tokens + earned_tokens : msgs_per_sec(); } conn->last_sent = now; if (conn->avail_tokens > 0) { conn->avail_tokens--; return req_send_next(ctx, conn); } //requeue status = event_add_out(ctx->evb, conn); IGNORE_RET_VAL(status); return NULL; } conn->last_sent = now; return req_send_next(ctx, conn); }
struct msg * dnode_req_send_next(struct context *ctx, struct conn *conn) { rstatus_t status; struct msg *msg, *nmsg; /* current and next message */ ASSERT(!conn->dnode_client && !conn->dnode_server); return req_send_next(ctx, conn); }