You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ac...@apache.org on 2008/10/17 18:13:14 UTC
svn commit: r705661 - in /incubator/qpid/trunk/qpid/cpp/src:
qpid/client/Connector.cpp qpid/client/Dispatcher.cpp
qpid/sys/BlockingQueue.h tests/XmlClientSessionTest.cpp
tests/cluster_test.cpp
Author: aconway
Date: Fri Oct 17 09:13:13 2008
New Revision: 705661
URL: http://svn.apache.org/viewvc?rev=705661&view=rev
Log:
Suppress logging expected errors in tests.
Improved log messages for connection, session errors.
Modified:
incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/client/Dispatcher.cpp
incubator/qpid/trunk/qpid/cpp/src/qpid/sys/BlockingQueue.h
incubator/qpid/trunk/qpid/cpp/src/tests/XmlClientSessionTest.cpp
incubator/qpid/trunk/qpid/cpp/src/tests/cluster_test.cpp
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp?rev=705661&r1=705660&r2=705661&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Connector.cpp Fri Oct 17 09:13:13 2008
@@ -394,7 +394,7 @@
aio->queueForDeletion();
socket.close();
} catch (const std::exception& e) {
- QPID_LOG(error, e.what());
+ QPID_LOG(error, QPID_MSG("FAIL " << identifier << ": " << e.what()));
handleClosed();
}
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/client/Dispatcher.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/client/Dispatcher.cpp?rev=705661&r1=705660&r2=705661&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/client/Dispatcher.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/client/Dispatcher.cpp Fri Oct 17 09:13:13 2008
@@ -72,7 +72,7 @@
boost::state_saver<bool> reset(running); // Reset to false on exit.
running = true;
try {
- while (true) {
+ while (!queue->isClosed()) {
Mutex::ScopedUnlock u(lock);
FrameSet::shared_ptr content = queue->pop();
if (content->isA<MessageTransferBody>()) {
@@ -92,18 +92,19 @@
}
}
}
+ session.sync(); // Make sure all our acks are received before returning.
}
- catch (const ClosedException& e) {
- QPID_LOG(debug, "Dispatch thread exiting, session closed: " << session.getId());
- try {
- session.sync(); // Make sure all our acks are received before returning.
- }
- catch(...) {}
+ catch (const ClosedException&) {
+ QPID_LOG(debug, QPID_MSG(session.getId() << ": closed by peer"));
}
catch (const std::exception& e) {
- QPID_LOG(error, "Exception in client dispatch thread: " << e.what());
- if ( failoverHandler )
+ if ( failoverHandler ) {
+ QPID_LOG(debug, QPID_MSG(session.getId() << " failover: " << e.what()));
failoverHandler();
+ }
+ else {
+ QPID_LOG(error, session.getId() << " error: " << e.what());
+ }
}
}
Modified: incubator/qpid/trunk/qpid/cpp/src/qpid/sys/BlockingQueue.h
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/qpid/sys/BlockingQueue.h?rev=705661&r1=705660&r2=705661&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/qpid/sys/BlockingQueue.h (original)
+++ incubator/qpid/trunk/qpid/cpp/src/qpid/sys/BlockingQueue.h Fri Oct 17 09:13:13 2008
@@ -73,7 +73,9 @@
return result;
}
- /** Push a value onto the queue */
+ /** Push a value onto the queue.
+ * Note it is not an error to push onto a closed queue.
+ */
void push(const T& t) {
Mutex::ScopedLock l(waitable);
queue.push(t);
Modified: incubator/qpid/trunk/qpid/cpp/src/tests/XmlClientSessionTest.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/XmlClientSessionTest.cpp?rev=705661&r1=705660&r2=705661&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/XmlClientSessionTest.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/XmlClientSessionTest.cpp Fri Oct 17 09:13:13 2008
@@ -18,7 +18,9 @@
* under the License.
*
*/
+
#include "unit_test.h"
+#include "test_tools.h"
#include "BrokerFixture.h"
#include "qpid/sys/Shlib.h"
#include "qpid/sys/Monitor.h"
@@ -124,31 +126,31 @@
QPID_AUTO_TEST_CASE(testXmlBinding) {
- ClientSessionFixture f;
+ ClientSessionFixture f;
- SubscriptionManager subscriptions(f.session);
- SubscribedLocalQueue localQueue(subscriptions);
+ SubscriptionManager subscriptions(f.session);
+ SubscribedLocalQueue localQueue(subscriptions);
- f.session.exchangeDeclare(qpid::client::arg::exchange="xml", qpid::client::arg::type="xml");
- f.session.queueDeclare(qpid::client::arg::queue="odd_blue");
- subscriptions.subscribe(localQueue, "odd_blue");
+ f.session.exchangeDeclare(qpid::client::arg::exchange="xml", qpid::client::arg::type="xml");
+ f.session.queueDeclare(qpid::client::arg::queue="odd_blue");
+ subscriptions.subscribe(localQueue, "odd_blue");
- FieldTable binding;
- binding.setString("xquery", "declare variable $color external;"
- "(./message/id mod 2 = 1) and ($color = 'blue')");
- f.session.exchangeBind(qpid::client::arg::exchange="xml", qpid::client::arg::queue="odd_blue", qpid::client::arg::bindingKey="query_name", qpid::client::arg::arguments=binding);
+ FieldTable binding;
+ binding.setString("xquery", "declare variable $color external;"
+ "(./message/id mod 2 = 1) and ($color = 'blue')");
+ f.session.exchangeBind(qpid::client::arg::exchange="xml", qpid::client::arg::queue="odd_blue", qpid::client::arg::bindingKey="query_name", qpid::client::arg::arguments=binding);
- Message message;
- message.getDeliveryProperties().setRoutingKey("query_name");
+ Message message;
+ message.getDeliveryProperties().setRoutingKey("query_name");
- message.getHeaders().setString("color", "blue");
- string m = "<message><id>1</id></message>";
- message.setData(m);
+ message.getHeaders().setString("color", "blue");
+ string m = "<message><id>1</id></message>";
+ message.setData(m);
- f.session.messageTransfer(qpid::client::arg::content=message, qpid::client::arg::destination="xml");
+ f.session.messageTransfer(qpid::client::arg::content=message, qpid::client::arg::destination="xml");
- Message m2 = localQueue.get();
- BOOST_CHECK_EQUAL(m, m2.getData());
+ Message m2 = localQueue.get();
+ BOOST_CHECK_EQUAL(m, m2.getData());
}
/**
@@ -186,48 +188,49 @@
// raise an exception, the content is not required to be XML.
QPID_AUTO_TEST_CASE(testXMLSendBadXML) {
- ClientSessionFixture f;
+ ClientSessionFixture f;
- f.session.exchangeDeclare(arg::exchange="xml", arg::type="xml");
- f.session.queueDeclare(arg::queue="blue", arg::exclusive=true, arg::autoDelete=true)\
- ;
- f.session.queueDeclare(arg::queue="red", arg::exclusive=true, arg::autoDelete=true);
-
- FieldTable blue;
- blue.setString("xquery", "./colour = 'blue'");
- f.session.exchangeBind(arg::exchange="xml", arg::queue="blue", arg::bindingKey="by-c\
+ f.session.exchangeDeclare(arg::exchange="xml", arg::type="xml");
+ f.session.queueDeclare(arg::queue="blue", arg::exclusive=true, arg::autoDelete=true)\
+ ;
+ f.session.queueDeclare(arg::queue="red", arg::exclusive=true, arg::autoDelete=true);
+
+ FieldTable blue;
+ blue.setString("xquery", "./colour = 'blue'");
+ f.session.exchangeBind(arg::exchange="xml", arg::queue="blue", arg::bindingKey="by-c\
olour", arg::arguments=blue);
- FieldTable red;
- red.setString("xquery", "./colour = 'red'");
- f.session.exchangeBind(arg::exchange="xml", arg::queue="red", arg::bindingKey="by-co\
+ FieldTable red;
+ red.setString("xquery", "./colour = 'red'");
+ f.session.exchangeBind(arg::exchange="xml", arg::queue="red", arg::bindingKey="by-co\
lour", arg::arguments=red);
- Message sent1("<>colour>blue</colour>", "by-colour");
- f.session.messageTransfer(arg::content=sent1, arg::destination="xml");
+ Message sent1("<>colour>blue</colour>", "by-colour");
+ f.session.messageTransfer(arg::content=sent1, arg::destination="xml");
- BOOST_CHECK_EQUAL(1, 1);
+ BOOST_CHECK_EQUAL(1, 1);
}
//### Test: Bad XQuery does not kill the server, but does raise an exception
QPID_AUTO_TEST_CASE(testXMLBadXQuery) {
- ClientSessionFixture f;
+ ClientSessionFixture f;
- f.session.exchangeDeclare(arg::exchange="xml", arg::type="xml");
- f.session.queueDeclare(arg::queue="blue", arg::exclusive=true, arg::autoDelete=true)\
- ;
+ f.session.exchangeDeclare(arg::exchange="xml", arg::type="xml");
+ f.session.queueDeclare(arg::queue="blue", arg::exclusive=true, arg::autoDelete=true)\
+ ;
- try {
- FieldTable blue;
- blue.setString("xquery", "./colour $=! 'blue'");
- f.session.exchangeBind(arg::exchange="xml", arg::queue="blue", arg::bindingKey="by-c\
+ try {
+ ScopedSuppressLogging sl; // Supress logging of error messages for expected error.
+ FieldTable blue;
+ blue.setString("xquery", "./colour $=! 'blue'");
+ f.session.exchangeBind(arg::exchange="xml", arg::queue="blue", arg::bindingKey="by-c\
olour", arg::arguments=blue);
- }
- catch (const InternalErrorException& e) {
- return;
- }
- BOOST_ERROR("A bad XQuery must raise an exception when used in an XML Binding.");
+ }
+ catch (const InternalErrorException& e) {
+ return;
+ }
+ BOOST_ERROR("A bad XQuery must raise an exception when used in an XML Binding.");
}
Modified: incubator/qpid/trunk/qpid/cpp/src/tests/cluster_test.cpp
URL: http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/cpp/src/tests/cluster_test.cpp?rev=705661&r1=705660&r2=705661&view=diff
==============================================================================
--- incubator/qpid/trunk/qpid/cpp/src/tests/cluster_test.cpp (original)
+++ incubator/qpid/trunk/qpid/cpp/src/tests/cluster_test.cpp Fri Oct 17 09:13:13 2008
@@ -92,11 +92,19 @@
void add0(bool force);
void setup();
+ /** Kill a forked broker with sig, or shutdown broker0 if n==0. */
void kill(size_t n, int sig=SIGINT) {
if (n) forkedBrokers[n-1].kill(sig);
else broker0->broker->shutdown();
}
+ /** Kill a broker and suppress errors from connection. */
+ void killWithSilencer(size_t n, client::Connection& c, int sig=SIGINT) {
+ ScopedSuppressLogging sl;
+ kill(n,sig);
+ try { c.close(); } catch(...) {}
+ }
+
void waitFor(size_t n) {
for (size_t retry = 1000; retry && getGlobalCluster().getUrls().size() != n; --retry)
::usleep(1000);
@@ -218,7 +226,8 @@
BOOST_CHECK_EQUAL(kb2,kb0);
BOOST_CHECK_EQUAL(kb2,kb1);
- cluster.kill(1,9);
+ cluster.killWithSilencer(1,c1.connection,9);
+ cluster.waitFor(2);
kb0 = knownBrokerPorts(c0.connection, 2);
kb2 = knownBrokerPorts(c2.connection, 2);
BOOST_CHECK_EQUAL(kb0.size(), 2u);
@@ -257,13 +266,8 @@
BOOST_CHECK_EQUAL(c2.session.queueQuery("q").getMessageCount(), 0u);
// Kill the subscribing member, ensure further messages are not removed.
- {
- ScopedSuppressLogging sl;
- cluster.kill(1,9);
- cluster.waitFor(2);
- try { c1.connection.close(); }
- catch (...) {}
- }
+ cluster.killWithSilencer(1,c1.connection,9);
+ cluster.waitFor(2);
for (int i = 0; i < 10; ++i) {
c0.session.messageTransfer(arg::content=Message("bbb", "q"));
BOOST_REQUIRE(c0.subs.get(m, "q", TIME_SEC));