|
|
|
@ -57,8 +57,8 @@ struct ETCP_LINK* etcp_loadbalancer_select_link(struct ETCP_CONN* etcp) { |
|
|
|
|
|
|
|
|
|
|
|
if (available_count == 0) { |
|
|
|
if (available_count == 0) { |
|
|
|
if (etcp->links) |
|
|
|
if (etcp->links) |
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_ETCP, "[%s] no suitable link found: inf:%s, tmr:%s",
|
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_ETCP, "[%s] no suitable link found: tmr:%s", |
|
|
|
etcp->log_name, etcp->links->send_blocked_inflight?"wait":"rdy", etcp->links->shaper_timer?"wait":"rdy"); |
|
|
|
etcp->log_name, etcp->links->shaper_timer?"wait":"rdy"); |
|
|
|
return NULL; |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -181,20 +181,8 @@ void etcp_loadbalancer_send(struct ETCP_DGRAM* dgram) { |
|
|
|
int loadbalancer_link_can_send(struct ETCP_LINK* link) { |
|
|
|
int loadbalancer_link_can_send(struct ETCP_LINK* link) { |
|
|
|
if (!link) return 0; |
|
|
|
if (!link) return 0; |
|
|
|
if (link->burst_active) return 1; // burst bypasses all limits
|
|
|
|
if (link->burst_active) return 1; // burst bypasses all limits
|
|
|
|
int can = 1; |
|
|
|
if (link->shaper_timer) return 0; |
|
|
|
if (link->inflight_bytes >= link->inflight_lim_bytes) { |
|
|
|
return 1; |
|
|
|
link->send_blocked_inflight = 1; |
|
|
|
|
|
|
|
can = 0; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
link->send_blocked_inflight = 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (link->shaper_timer) { |
|
|
|
|
|
|
|
// link->send_blocked_bandwidth = 1;
|
|
|
|
|
|
|
|
can = 0; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
// link->send_blocked_bandwidth = 0;
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return can; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void loadbalancer_link_ready(struct ETCP_LINK* link) { |
|
|
|
void loadbalancer_link_ready(struct ETCP_LINK* link) { |
|
|
|
@ -202,8 +190,8 @@ void loadbalancer_link_ready(struct ETCP_LINK* link) { |
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_ETCP, "invalid link (%p)", link); |
|
|
|
DEBUG_WARN(DEBUG_CATEGORY_ETCP, "invalid link (%p)", link); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (loadbalancer_link_can_send(link) == 0) { |
|
|
|
if (link->shaper_timer) { |
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "link still blocked"); |
|
|
|
DEBUG_DEBUG(DEBUG_CATEGORY_ETCP, "link still blocked by shaper"); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
DEBUG_TRACE(DEBUG_CATEGORY_ETCP, "link=%p now ready, notifying ETCP_CONN", link); |
|
|
|
DEBUG_TRACE(DEBUG_CATEGORY_ETCP, "link=%p now ready, notifying ETCP_CONN", link); |
|
|
|
|