Archived

This forum has been archived. Please start a new discussion on GitHub.

Async retry mechanism

AMI generated skeleton has __response() function. This function is called from OutgoingAsync::_finished() method. If inside of try/catch block some local exception occurred, another _finish (with exception argument) is called. That second __finish, for ICE functions with nonmutating prefix, tries to resend the message again, re-inserting this particular OutgoingAsync object into message’s _asyncRequest set. Just because this call is asynchronous internal second __fihish doesn’t wait when new reply comes back and external __finish that is calling __repsonse invokes cleanup() effectively destroying OutgoingAsync object that is still in _asyncRequest set!

In addition I'd like to say that not all LocalException descendants should cause the retry call. In my particular case, UnmarshallBoundException tells that another side probably has incorrect ICE stub and no further action is required upon its receiving.

Comments

  • marc
    marc Florida
    Sorry, we didn't have a chance to look at this yet. If you have an urgent commercial need to get this resolved, please contact us at info@zeroc.com.