[ https://issues.apache.org/jira/browse/DISPATCH-888?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ted Ross resolved DISPATCH-888. ------------------------------- Resolution: Fixed > Balanced distribution algorithm visits each link to determine the > best_eligible_link > ------------------------------------------------------------------------------------ > > Key: DISPATCH-888 > URL: https://issues.apache.org/jira/browse/DISPATCH-888 > Project: Qpid Dispatch > Issue Type: Improvement > Components: Container > Affects Versions: 1.0.0 > Reporter: Ganesh Murthy > Assignee: Ganesh Murthy > Priority: Minor > Fix For: 1.1.0 > > > 1. In forwarder.c (qdr_forward_balanced_CT()) the loop that selects the > best_eligible_link loops thru all rlinks as seen below > {noformat} > while (link_ref) { > qdr_link_t *link = link_ref->link; > uint32_t value = DEQ_SIZE(link->undelivered) + > DEQ_SIZE(link->unsettled); > bool eligible = link->capacity > value; > // > // If this is the best eligible link so far, record the fact. > // Otherwise, if this is the best ineligible link, make note of that. > // > if (eligible && eligible_link_value > value) { > best_eligible_link = link; > eligible_link_value = value; > } else if (!eligible && ineligible_link_value > value) { > best_ineligible_link = link; > ineligible_link_value = value; > } > link_ref = DEQ_NEXT(link_ref); > } > {noformat} > Instead the code can exit the loop if the value is 0 (zero). When there are > no outstanding deliveries on a link we can without doubt choose that link as > the best one to send the delivery. > 2. Rotate the rlinks list only if value is zero to avoid frequent list > rotation. In the synchronous case, the code still works. -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org