qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kim van der Riet" <kim.vdr...@redhat.com>
Subject Review Request 24251: QPID-5948: Broker restart failure with durable topic using non-durable exchange
Date Mon, 04 Aug 2014 19:16:28 GMT

-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/24251/
-----------------------------------------------------------

Review request for qpid, Andrew Stitcher, Gordon Sim, and Justin Ross.


Bugs: QPID-5948
    https://issues.apache.org/jira/browse/QPID-5948


Repository: qpid


Description
-------

The broker fails to recover after a restart while using the linearstore and the following:
1. A non-durable exchange;
2. A topic that uses the non-durable exchange;
3. The amqp.so AMQP library.

Attempting to start the broker results in the error message:
 [Broker] critical Unexpected error: not-found: Exchange not found: test.ex (/builddir/build/BUILD/qpid-0.22/cpp/src/qpid/broker/ExchangeRegistry.cpp:144)

This failure occurs when the amqp module recovers the persistent topic, but does not handle
the exception that is thrown when the exchange upon which it depends does not exist. This
is a serious problem because it is a condition which can be relatively easliy created undetected,
and which prevents the broker from starting. This condition can only be resolved by truncating
the store or erasing the store directory.

The simplest solution is to handle the error condition. This is done by catching the error
within qpid::broker::ObjectFactory::recoverObject() function, and simply making sure that
the boolean false value is returned. This in turn causes an error message to be printed to
the log:

[Broker] warning Failed to recover object test.topic of type topic

but the broker continues to recover and starts normally. Adding a more verbose/noisy/specific
error message would not be too difficlut either, but would probably need to be handled lower
down in TopicRegistry::recoverObject(), but this would contaminate this part of the code with
ugly string handling and/or logging includes and statements.

I am unfamiliar with this part of the broker code, so some additional review would be appreciated.


Diffs
-----

  /trunk/qpid/cpp/src/qpid/broker/ObjectFactory.cpp 1614097 

Diff: https://reviews.apache.org/r/24251/diff/


Testing
-------

Recovery of the scenario described in QPID-5948 results in a full broker recovery, but with
the error message:

[Broker] warning Failed to recover object test.topic of type topic


Thanks,

Kim van der Riet


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message