[
https://issues.apache.org/jira/browse/AMQ-5488?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Timothy Bish closed AMQ-5488.
-----------------------------
Resolution: Fixed
Other fixes have sorted this so that these logs are no longer seen.
> Broker should not log IOExceptions from TransportConnection class on WARN
> level when shutting down
> --------------------------------------------------------------------------------------------------
>
> Key: AMQ-5488
> URL: https://issues.apache.org/jira/browse/AMQ-5488
> Project: ActiveMQ
> Issue Type: Bug
> Components: Broker
> Affects Versions: 5.10.0
> Reporter: Pero Atanasov
> Priority: Minor
> Attachments: AMQ5488.patch
>
>
> If the broker is in the process of shutting down, then prior function calls
> into the persistence adapter layer could result in and bubble back up with an
> IOException due to the fact that the broker is shutting down. Currently, such
> TransportConnection IOException(s) are handled and logged on the WARN level
> when actually they are harmless as the broker is shutting down. For one such
> example, please consider the following code blocks from activemq-5.10.0:
> activemq\activemq-broker\src\main\java\org\apache\activemq\broker\TransportConnection.java
> Lines 933 - 937
> try {
> broker.preProcessDispatch(messageDispatch);
> } catch (RuntimeException convertToIO) {
> throw new IOException(convertToIO);
> }
> When this block throws the IOException, it is caught and further thrown from
> Lines 941 - 951
> } catch (IOException e) {
> if (messageDispatch != null) {
> TransmitCallback sub = messageDispatch.getTransmitCallback();
> broker.postProcessDispatch(messageDispatch);
> if (sub != null) {
> sub.onFailure();
> }
> messageDispatch = null;
> throw e;
> }
> }
> When this block throws the exception, it is further caught and serviced by
> Lines 989 - 995
> } catch (IOException e) {
> if (dispatchStopped.compareAndSet(false, true)) {
> dispatchStoppedLatch.countDown();
> }
> serviceExceptionAsync(e);
> return false;
> }
> Lines 267 - 276 (serviceExceptionAsync) create a new "Async Exception
> Handler" thread which will invoke serviceException
> Lines 287 - 289
> if (e instanceof IOException) {
> serviceTransportException((IOException) e);
> }
> This will evaluate to true and hence serviceTransportException is invoked
> Lines 242 - 246
> if (TRANSPORTLOG.isDebugEnabled()) {
> TRANSPORTLOG.debug(this + " failed: " + e, e);
> } else if (TRANSPORTLOG.isWarnEnabled() && !expected(e)) {
> TRANSPORTLOG.warn(this + " failed: " + e);
> }
> If debug is enabled, then it is OK for all IOExceptions to be logged.
> However, in the "else if" case, it is not considered if this
> TransportConnection IOException is being handled while the broker is shutting
> down. The suggestion is to consider the value of
> this.broker.getBrokerService().isStopping() as part of the expected(e) call
> to limit the amount of benign WARN messages that can show up in the log and
> cause confusion as the broker is shutting down.
> A patch for this fix will be provided.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)