Łukasz Dywicki created PLC4X-257:
------------------------------------
Summary: Timedout operations can hang communication
Key: PLC4X-257
URL: https://issues.apache.org/jira/browse/PLC4X-257
Project: Apache PLC4X
Issue Type: Bug
Components: Core
Affects Versions: 0.8.0
Reporter: Łukasz Dywicki
Currently timed out reply handler registrations are removed. However their
{{onTimeout}} consumer does not gets called resulting in hanged transaction
which will never complete cause call of {{transaction.endRequest()}} will never
happen. SocketCAN transport does not have direct support for timeouts, some
messages just come later than expected due to bus arbitration process.
Not sure if same is case for IP based communication. Reproduction procedure is
rather straight - launch sample program going to s7 simulator and hold read
longer than configured timeout.
Faulty code:
{code:lang=java|title=Modifications to Plc4xNettyWrapper}
// Timeout?
if (registration.getTimeout().isBefore(Instant.now())) {
logger.debug("Removing {} as its timed out (was set till {})",
registration, registration.getTimeout());
+ // pass timeout back to handler so it can do ie. transaction
compensation
+ registration.getOnTimeoutConsumer().accept(new TimeoutException());
iter.remove();
continue;
}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)