1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
// **********************************************************************
//
// Copyright (c) 2003-2015 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
//
// **********************************************************************
#ifndef INSTANCE_H
#define INSTANCE_H
#include <Ice/CommunicatorF.h>
#include <Ice/ObjectAdapterF.h>
#include <Ice/PropertiesF.h>
#include <IceUtil/Time.h>
#include <IceStorm/Election.h>
#include <IceStorm/Instrumentation.h>
#include <IceStorm/Util.h>
namespace IceUtil
{
class Timer;
typedef IceUtil::Handle<Timer> TimerPtr;
}
namespace IceStormElection
{
class Observers;
typedef IceUtil::Handle<Observers> ObserversPtr;
class NodeI;
typedef IceUtil::Handle<NodeI> NodeIPtr;
}
namespace IceStorm
{
class TraceLevels;
typedef IceUtil::Handle<TraceLevels> TraceLevelsPtr;
class TopicReaper : public IceUtil::Shared, private IceUtil::Mutex
{
public:
void add(const std::string&);
std::vector<std::string> consumeReapedTopics();
private:
std::vector<std::string> _topics;
};
typedef IceUtil::Handle<TopicReaper> TopicReaperPtr;
class Instance : public IceUtil::Shared
{
public:
Instance(const std::string&, const std::string&, const Ice::CommunicatorPtr&, const Ice::ObjectAdapterPtr&,
const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr& = 0, const IceStormElection::NodePrx& = 0);
~Instance();
void setNode(const IceStormElection::NodeIPtr&);
std::string instanceName() const;
std::string serviceName() const;
Ice::CommunicatorPtr communicator() const;
Ice::PropertiesPtr properties() const;
Ice::ObjectAdapterPtr publishAdapter() const;
Ice::ObjectAdapterPtr topicAdapter() const;
Ice::ObjectAdapterPtr nodeAdapter() const;
IceStormElection::ObserversPtr observers() const;
IceStormElection::NodeIPtr node() const;
IceStormElection::NodePrx nodeProxy() const;
TraceLevelsPtr traceLevels() const;
IceUtil::TimerPtr batchFlusher() const;
IceUtil::TimerPtr timer() const;
Ice::ObjectPrx topicReplicaProxy() const;
Ice::ObjectPrx publisherReplicaProxy() const;
IceStorm::Instrumentation::TopicManagerObserverPtr observer() const;
TopicReaperPtr topicReaper() const;
IceUtil::Time discardInterval() const;
IceUtil::Time flushInterval() const;
int sendTimeout() const;
void shutdown();
virtual void destroy();
private:
const std::string _instanceName;
const std::string _serviceName;
const Ice::CommunicatorPtr _communicator;
const Ice::ObjectAdapterPtr _publishAdapter;
const Ice::ObjectAdapterPtr _topicAdapter;
const Ice::ObjectAdapterPtr _nodeAdapter;
const IceStormElection::NodePrx _nodeProxy;
const TraceLevelsPtr _traceLevels;
const IceUtil::Time _discardInterval;
const IceUtil::Time _flushInterval;
const int _sendTimeout;
const Ice::ObjectPrx _topicReplicaProxy;
const Ice::ObjectPrx _publisherReplicaProxy;
const TopicReaperPtr _topicReaper;
IceStormElection::NodeIPtr _node;
IceStormElection::ObserversPtr _observers;
IceUtil::TimerPtr _batchFlusher;
IceUtil::TimerPtr _timer;
IceStorm::Instrumentation::TopicManagerObserverPtr _observer;
};
typedef IceUtil::Handle<Instance> InstancePtr;
typedef IceDB::ReadWriteCursor<SubscriberRecordKey, SubscriberRecord, IceDB::IceContext, Ice::OutputStream>
SubscriberMapRWCursor;
class PersistentInstance : public Instance
{
public:
PersistentInstance(const std::string&, const std::string&, const Ice::CommunicatorPtr&,
const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr& = 0,
const IceStormElection::NodePrx& = 0);
const IceDB::Env& dbEnv() const { return _dbEnv; }
LLUMap lluMap() const { return _lluMap; }
SubscriberMap subscriberMap() const { return _subscriberMap; }
virtual void destroy();
private:
IceUtilInternal::FileLock _dbLock;
IceDB::Env _dbEnv;
LLUMap _lluMap;
SubscriberMap _subscriberMap;
};
typedef IceUtil::Handle<PersistentInstance> PersistentInstancePtr;
} // End namespace IceStorm
#endif
|