diff options
author | Alan Conway <aconway@apache.org> | 2012-11-14 16:04:04 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2012-11-14 16:04:04 +0000 |
commit | 3b9fdc8e68cb42e6ebfa75f3dc756fd54369f735 (patch) | |
tree | 128d1ac54182753c4d8f2d49ce38a5d88bea7909 /qpid/cpp/src/qpid/ha/Primary.h | |
parent | bce4ad2c993a34d240b1166ab6321bc14b78c612 (diff) | |
download | qpid-python-3b9fdc8e68cb42e6ebfa75f3dc756fd54369f735.tar.gz |
QPID-4428: HA add UUID tag to avoid using an out of date queue/exchange.
Imagine a cluster with primary A and backups B and C. A queue Q is created on A
and replicated to B, C. Now A dies and B takes over as primary. Before C can
connect to B, a client destroys Q and creates a new queue with the same name.
When B connects it sees Q and incorrectly assumes it is the same Q that it has
already replicated. Now C has an inconsistent replica of Q.
The fix is to tag queues/exchanges with a UUID so a backup can tell if a queue
is not the same as the one it has already replicated, even if the names are the
same. This all also applies to exchanges.
- Minor imrovements to printing UUIDs in a FieldTable.
- Fix comparison of void Variants, added operator !=
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1409241 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src/qpid/ha/Primary.h')
-rw-r--r-- | qpid/cpp/src/qpid/ha/Primary.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/qpid/cpp/src/qpid/ha/Primary.h b/qpid/cpp/src/qpid/ha/Primary.h index 22b231ed72..c713115176 100644 --- a/qpid/cpp/src/qpid/ha/Primary.h +++ b/qpid/cpp/src/qpid/ha/Primary.h @@ -60,6 +60,7 @@ class Primary { public: typedef boost::shared_ptr<broker::Queue> QueuePtr; + typedef boost::shared_ptr<broker::Exchange> ExchangePtr; static Primary* get() { return instance; } @@ -72,6 +73,8 @@ class Primary // Called via ConfigurationObserver void queueCreate(const QueuePtr&); void queueDestroy(const QueuePtr&); + void exchangeCreate(const ExchangePtr&); + void exchangeDestroy(const ExchangePtr&); // Called via ConnectionObserver void opened(broker::Connection& connection); |