> On Sept. 12, 2016, 5:03 p.m., Alan Conway wrote: > > I think this is good although we need a bit more control over retries: a > > time maxRetryInterval as well as/instead of maxRetryAttempts. The client > > has no way to predict how long retries will take so may have no reasonable > > way to set the count, but they may have reasonable expectations for max > > back-end recovery times. > > > > There is an issue of load on the router: this client will re-send as fast > > as the router can release. The router is not the problem, it is the > > back-end service *behind* the router that has failed. So hammering the > > router as fast as possible while the back-end recovers is not productive > > and a potential retry-storm at the router. However, the router should > > protect *itself* from naive clients and *not* assume the clients are well > > behaved. The router should manage exponentail retries and/or deliberately > > hold releases till back-ends come back up to make sure the client gets the > > right re-try semantics with the minimal useless traffic. Again this makes > > it important to code the client in terms of time delays not retry attempts > > because the router may deliberately hold of on releasing based on its > > knowledge of back-end conditions. > > Gordon Sim wrote: > The router won't renew credit if it has nowhere to route messages from a > given sender. So e.g. if there is only one receiver on the router network, > and it fall sover midstream, the unacked messages will be 'released', but the > sender will quickly have exhausted its credit so there won't be indefinite > pounding on the router.
Good point, that's exactly what we want. But again - that means retries need to be limited by time inteval, the max number of retries is meaningless. If you have a ton of outstanding credit you can do a ton of retries very quickly and still the back end may not have recovered. A time limit based on expected back-end recovery time is the only useful measure. - Alan ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/51638/#review148511 ----------------------------------------------------------- On Sept. 7, 2016, 11:01 a.m., Gordon Sim wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/51638/ > ----------------------------------------------------------- > > (Updated Sept. 7, 2016, 11:01 a.m.) > > > Review request for qpid and Alan Conway. > > > Repository: qpid-cpp > > > Description > ------- > > Introduces two new connection options (AMQP 1.0 only): > > * max_delivery_count determines how many times we try to resend a 'released' > message. A value of 0, which is the default, retries indefinitely. > * raise_rejected determines whether an MessageRejected exception is raised > when a message is 'rejected', the default is true > > A message is considered 'released' if the outcome is relased, or if the > outcome as modified and the 'undeliverable-here' flag is not set. A message > is considered 'rejected' if the outcome is rejected, if the outcome is > modified *and* the 'undeliverable-here' flag is set, or if it was 'released' > but we have reached the maximum nuber of delivery attempts. > > Original behaviour can be obtained by setting max_delivery_count=1 and > raise_rejected=false. > > > Diffs > ----- > > src/qpid/messaging/ConnectionOptions.h c8c8798 > src/qpid/messaging/ConnectionOptions.cpp d956e9a > src/qpid/messaging/amqp/ConnectionContext.cpp 25dd68d > src/qpid/messaging/amqp/EncodedMessage.cpp cf60046 > src/qpid/messaging/amqp/SenderContext.h 467a8e0 > src/qpid/messaging/amqp/SenderContext.cpp fe8b4d3 > src/qpid/messaging/amqp/SessionContext.h 67b3c1e > src/qpid/messaging/amqp/SessionContext.cpp 92bdea7 > src/qpid/messaging/amqp/Transaction.cpp 754b00d > > Diff: https://reviews.apache.org/r/51638/diff/ > > > Testing > ------- > > > Thanks, > > Gordon Sim > >