summaryrefslogtreecommitdiff
path: root/cpp/src/IceStorm/TopicManagerI.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceStorm/TopicManagerI.h')
-rw-r--r--cpp/src/IceStorm/TopicManagerI.h78
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