diff options
author | Alan Conway <aconway@apache.org> | 2009-01-27 02:08:25 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2009-01-27 02:08:25 +0000 |
commit | 306114207d6ff6c3ec6d63f5ab6b4ff9e1dd7d4e (patch) | |
tree | 04c1f8f85b0cf469c7c7e526f436e09cd12e350a /cpp/src/qpid/cluster/UpdateClient.h | |
parent | 57acf95c94d52b15b2ad6e6038bf3390d9063282 (diff) | |
download | qpid-python-306114207d6ff6c3ec6d63f5ab6b4ff9e1dd7d4e.tar.gz |
Cluster rename: dump -> update, newbie -> joiner
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@737971 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/cluster/UpdateClient.h')
-rw-r--r-- | cpp/src/qpid/cluster/UpdateClient.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/cpp/src/qpid/cluster/UpdateClient.h b/cpp/src/qpid/cluster/UpdateClient.h new file mode 100644 index 0000000000..93dca9f0c6 --- /dev/null +++ b/cpp/src/qpid/cluster/UpdateClient.h @@ -0,0 +1,101 @@ +#ifndef QPID_CLUSTER_UPDATECLIENT_H +#define QPID_CLUSTER_UPDATECLIENT_H + +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +#include "ClusterMap.h" +#include "qpid/client/Connection.h" +#include "qpid/client/AsyncSession.h" +#include "qpid/broker/SemanticState.h" +#include "qpid/sys/Runnable.h" +#include <boost/shared_ptr.hpp> + + +namespace qpid { + +class Url; + +namespace broker { + +class Broker; +class Queue; +class Exchange; +class QueueBindings; +class QueueBinding; +class QueuedMessage; +class SessionHandler; +class DeliveryRecord; +class SessionState; +class SemanticState; + +} // namespace broker + +namespace cluster { + +class Cluster; +class Connection; +class ClusterMap; + +/** + * A client that updates the contents of a local broker to a remote one using AMQP. + */ +class UpdateClient : public sys::Runnable { + public: + static const std::string UPDATE; // Name for special update queue and exchange. + + UpdateClient(const MemberId& updater, const MemberId& updatee, const Url&, + broker::Broker& donor, const ClusterMap& map, const std::vector<boost::intrusive_ptr<Connection> >& , + const boost::function<void()>& done, + const boost::function<void(const std::exception&)>& fail); + + ~UpdateClient(); + void update(); + void run(); // Will delete this when finished. + + void updateUnacked(const broker::DeliveryRecord&); + + private: + void updateQueue(const boost::shared_ptr<broker::Queue>&); + void updateExchange(const boost::shared_ptr<broker::Exchange>&); + void updateMessage(const broker::QueuedMessage&); + void updateMessageTo(const broker::QueuedMessage&, const std::string& queue, client::Session s); + void updateBinding(const std::string& queue, const broker::QueueBinding& binding); + void updateConnection(const boost::intrusive_ptr<Connection>& connection); + void updateSession(broker::SessionHandler& s); + void updateTxState(broker::SemanticState& s); + void updateConsumer(const broker::SemanticState::ConsumerImpl*); + + MemberId updaterId; + MemberId updateeId; + Url updateeUrl; + broker::Broker& updaterBroker; + ClusterMap map; + std::vector<boost::intrusive_ptr<Connection> > connections; + client::Connection connection, shadowConnection; + client::AsyncSession session, shadowSession; + boost::function<void()> done; + boost::function<void(const std::exception& e)> failed; +}; + +}} // namespace qpid::cluster + +#endif /*!QPID_CLUSTER_UPDATECLIENT_H*/ |