diff options
Diffstat (limited to 'cpp/src/IceStorm/TopicManagerI.h')
-rw-r--r-- | cpp/src/IceStorm/TopicManagerI.h | 78 |
1 files changed, 51 insertions, 27 deletions
diff --git a/cpp/src/IceStorm/TopicManagerI.h b/cpp/src/IceStorm/TopicManagerI.h index 2d817efd339..4e1619284ff 100644 --- a/cpp/src/IceStorm/TopicManagerI.h +++ b/cpp/src/IceStorm/TopicManagerI.h @@ -11,7 +11,13 @@ #define TOPIC_MANAGER_I_H #include <IceStorm/IceStorm.h> -#include <IceStorm/PersistentTopicMap.h> +#include <IceStorm/LLUMap.h> +#include <IceStorm/SubscriberMap.h> + +#include <IceStorm/Replica.h> +#include <IceStorm/Election.h> + +#include <IceUtil/RecMutex.h> namespace IceStorm { @@ -22,52 +28,70 @@ namespace IceStorm class Instance; typedef IceUtil::Handle<Instance> InstancePtr; -// -// Map of TopicI objects. -// -class TopicI; -typedef IceUtil::Handle<TopicI> TopicIPtr; - -typedef std::map<std::string, TopicIPtr> TopicIMap; +class TopicImpl; +typedef IceUtil::Handle<TopicImpl> TopicImplPtr; // // TopicManager implementation. // -class TopicManagerI : public TopicManager, public IceUtil::Mutex +class TopicManagerImpl : public IceStormElection::Replica, public IceUtil::RecMutex { public: - TopicManagerI(const InstancePtr&, - const Ice::ObjectAdapterPtr&, - const std::string&, - const std::string&); - ~TopicManagerI(); + TopicManagerImpl(const InstancePtr&); + ~TopicManagerImpl(); + + // TopicManager methods. + TopicPrx create(const std::string&); + TopicPrx retrieve(const std::string&) const; + TopicDict retrieveAll() const; + + // Observer methods. + void observerInit(const IceStormElection::LogUpdate&, const IceStormElection::TopicContentSeq&); + void observerCreateTopic(const IceStormElection::LogUpdate&, const std::string&); + void observerDestroyTopic(const IceStormElection::LogUpdate&, const std::string&); + void observerAddSubscriber(const IceStormElection::LogUpdate&, const std::string&, + const IceStorm::SubscriberRecord&); + void observerRemoveSubscriber(const IceStormElection::LogUpdate&, const std::string&, const Ice::IdentitySeq&); - virtual TopicPrx create(const std::string&, const Ice::Current&); - virtual TopicPrx retrieve(const std::string&, const Ice::Current&) const; - virtual TopicDict retrieveAll(const Ice::Current&) const; + // Sync methods. + void getContent(IceStormElection::LogUpdate&, IceStormElection::TopicContentSeq&); - virtual Ice::SliceChecksumDict getSliceChecksums(const Ice::Current&) const; + // Replica methods. + virtual IceStormElection::LogUpdate getLastLogUpdate() const; + virtual void sync(const Ice::ObjectPrx&); + virtual void initMaster(const std::set<IceStormElection::GroupNodeInfo>&, const IceStormElection::LogUpdate&); + virtual Ice::ObjectPrx getObserver() const; + virtual Ice::ObjectPrx getSync() const; void reap(); void shutdown(); + Ice::ObjectPtr getServant() const; + private: - TopicPrx installTopic(const std::string&, const Ice::Identity&, const LinkRecordSeq&, bool); - + TopicPrx installTopic(const std::string&, const Ice::Identity&, bool, + const IceStorm::SubscriberRecordSeq& = IceStorm::SubscriberRecordSeq()); + const InstancePtr _instance; - const Ice::ObjectAdapterPtr _topicAdapter; - const std::string _envName; - const std::string _dbName; + + // The connection and freeze maps. const Freeze::ConnectionPtr _connection; - PersistentTopicMap _topics; + LLUMap _llumap; + SubscriberMap _subscriberMap; - TopicIMap _topicIMap; -}; + std::map<std::string, TopicImplPtr> _topics; + + Ice::ObjectPtr _managerImpl; + Ice::ObjectPtr _observerImpl; + Ice::ObjectPrx _observer; + Ice::ObjectPtr _syncImpl; + Ice::ObjectPrx _sync; -typedef IceUtil::Handle<TopicManagerI> TopicManagerIPtr; +}; +typedef IceUtil::Handle<TopicManagerImpl> TopicManagerImplPtr; } // End namespace IceStorm |