Details
-
Enhancement
-
Resolution: Won't Do
-
Major
-
None
-
None
-
None
Description
Currently we set a transaction timeout (e.g. in TestRollbackOnly.cxx we call tx_set_transaction_timeout)
This ends up putting a timetolive on the message of the same duration.
Now, if this message is not received within the period of time it will expire.
However we also use a block forever waiting for the response.
This can lead to a call never returning.
i.e.
server advertises queue
client sends message with small timeout (e.g. 4) and then blocks forever waiting response
server gets round to advertising queue 5 seconds later but never sees the clients initial request
client is blocked forever
I realise that we are meant to block forever when a client issues a tpcall under transactional conditions but something needs to be done as this can easily happen on slow machines?
Perhaps we need to make use of the DLQ to wake up the blocked client with an error message??
Perhaps the client doesn't block forever and just calls txrollback if nothing is heard back??