summaryrefslogtreecommitdiff
path: root/cpp/examples/failover/resuming_receiver.cpp
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2008-11-06 16:45:27 +0000
committerGordon Sim <gsim@apache.org>2008-11-06 16:45:27 +0000
commitf5371ed7a94deb0c261d1ca8b5185d8c94cdf325 (patch)
tree142d6b52c36c4b50e0079d296f6ce5be5a58f364 /cpp/examples/failover/resuming_receiver.cpp
parent357557ff3f16b3dc0e6dacfab00e2d0a84f5c8fb (diff)
downloadqpid-python-f5371ed7a94deb0c261d1ca8b5185d8c94cdf325.tar.gz
* fix bug causing last message to occasionally be lost on replay
* make presence of gaps an error condition in the resuming_receiver example * add ability to apply functor to replay buffer git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@711903 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/examples/failover/resuming_receiver.cpp')
-rw-r--r--cpp/examples/failover/resuming_receiver.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/cpp/examples/failover/resuming_receiver.cpp b/cpp/examples/failover/resuming_receiver.cpp
index 6ac67d8edb..3c1df92ed1 100644
--- a/cpp/examples/failover/resuming_receiver.cpp
+++ b/cpp/examples/failover/resuming_receiver.cpp
@@ -41,14 +41,16 @@ class Listener : public MessageListener, public FailoverManager::Command
Listener();
void received(Message& message);
void execute(AsyncSession& session, bool isRetry);
+ void check();
private:
Subscription subscription;
uint count;
uint skipped;
uint lastSn;
+ bool gaps;
};
-Listener::Listener() : count(0), skipped(0), lastSn(0) {}
+Listener::Listener() : count(0), skipped(0), lastSn(0), gaps(false) {}
void Listener::received(Message & message)
{
@@ -62,7 +64,8 @@ void Listener::received(Message & message)
uint sn = message.getHeaders().getAsInt("sn");
if (lastSn < sn) {
if (sn - lastSn > 1) {
- std::cout << "Warning: gap in sequence between " << lastSn << " and " << sn << std::endl;
+ std::cout << "Error: gap in sequence between " << lastSn << " and " << sn << std::endl;
+ gaps = true;
}
lastSn = sn;
++count;
@@ -72,6 +75,11 @@ void Listener::received(Message & message)
}
}
+void Listener::check()
+{
+ if (gaps) throw Exception("Detected gaps in sequence; messages appear to have been lost.");
+}
+
void Listener::execute(AsyncSession& session, bool isRetry)
{
if (isRetry) {
@@ -94,6 +102,7 @@ int main(int argc, char ** argv)
try {
connection.execute(listener);
connection.close();
+ listener.check();
std::cout << "Completed without error." << std::endl;
return 0;
} catch(const std::exception& error) {