summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/AdapterCache.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/AdapterCache.h')
-rw-r--r--cpp/src/IceGrid/AdapterCache.h95
1 files changed, 43 insertions, 52 deletions
diff --git a/cpp/src/IceGrid/AdapterCache.h b/cpp/src/IceGrid/AdapterCache.h
index bbe0bfeb794..3247315ef56 100644
--- a/cpp/src/IceGrid/AdapterCache.h
+++ b/cpp/src/IceGrid/AdapterCache.h
@@ -5,69 +5,60 @@
#ifndef ICE_GRID_ADAPTERCACHE_H
#define ICE_GRID_ADAPTERCACHE_H
-#include <IceUtil/Mutex.h>
-#include <IceUtil/Shared.h>
#include <IceGrid/Cache.h>
#include <IceGrid/Registry.h>
#include <IceGrid/Internal.h>
+#include <optional>
#include <set>
namespace IceGrid
{
class AdapterCache;
-
-class SynchronizationCallback;
-typedef IceUtil::Handle<SynchronizationCallback> SynchronizationCallbackPtr;
-
-class ServerEntry;
-typedef IceUtil::Handle<ServerEntry> ServerEntryPtr;
-typedef std::vector<ServerEntryPtr> ServerEntrySeq;
-
class AdapterEntry;
-typedef IceUtil::Handle<AdapterEntry> AdapterEntryPtr;
-
class ServerAdapterEntry;
-typedef IceUtil::Handle<ServerAdapterEntry> ServerAdapterEntryPtr;
+class ServerEntry;
+class SynchronizationCallback;
+
+using ServerEntrySeq = std::vector<std::shared_ptr<ServerEntry>>;
struct LocatorAdapterInfo
{
std::string id;
- AdapterPrx proxy;
- int activationTimeout;
- int deactivationTimeout;
+ std::shared_ptr<AdapterPrx> proxy;
+ std::chrono::seconds activationTimeout;
+ std::chrono::seconds deactivationTimeout;
};
-typedef std::vector<LocatorAdapterInfo> LocatorAdapterInfoSeq;
+using LocatorAdapterInfoSeq = std::vector<LocatorAdapterInfo>;
-class GetAdapterInfoResult : public IceUtil::Shared
+class GetAdapterInfoResult
{
public:
- void add(const ServerAdapterEntryPtr&);
+ void add(const ServerAdapterEntry*);
AdapterInfoSeq get();
private:
AdapterInfoSeq _adapters;
- std::vector<Ice::AsyncResultPtr> _results;
+ std::vector<std::optional<std::future<std::shared_ptr<Ice::ObjectPrx>>>> _results;
};
-typedef IceUtil::Handle<GetAdapterInfoResult> GetAdapterInfoResultPtr;
-class AdapterEntry : public virtual IceUtil::Shared
+class AdapterEntry
{
public:
AdapterEntry(AdapterCache&, const std::string&, const std::string&);
- virtual bool addSyncCallback(const SynchronizationCallbackPtr&, const std::set<std::string>&) = 0;
+ virtual bool addSyncCallback(const std::shared_ptr<SynchronizationCallback>&, const std::set<std::string>&) = 0;
virtual void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&, std::string&,
const std::set<std::string>&) = 0;
virtual float getLeastLoadedNodeLoad(LoadSample) const = 0;
virtual AdapterInfoSeq getAdapterInfoNoEndpoints() const = 0;
- virtual GetAdapterInfoResultPtr getAdapterInfoAsync() const = 0;
- virtual AdapterPrx getProxy(const std::string&, bool) const = 0;
+ virtual std::shared_ptr<GetAdapterInfoResult> getAdapterInfoAsync() const = 0;
+ virtual std::shared_ptr<AdapterPrx> getProxy(const std::string&, bool) const = 0;
virtual bool canRemove();
@@ -80,24 +71,23 @@ protected:
const std::string _id;
std::string _application;
};
-typedef IceUtil::Handle<AdapterEntry> AdapterEntryPtr;
-class ServerAdapterEntry : public AdapterEntry
+class ServerAdapterEntry final : public AdapterEntry
{
public:
ServerAdapterEntry(AdapterCache&, const std::string&, const std::string&, const std::string&, int,
- const ServerEntryPtr&);
+ const std::shared_ptr<ServerEntry>&);
- virtual bool addSyncCallback(const SynchronizationCallbackPtr&, const std::set<std::string>&);
+ bool addSyncCallback(const std::shared_ptr<SynchronizationCallback>&, const std::set<std::string>&) override;
- virtual void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&, std::string&,
- const std::set<std::string>&);
+ void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&, std::string&,
+ const std::set<std::string>&) override;
- virtual float getLeastLoadedNodeLoad(LoadSample) const;
- virtual AdapterInfoSeq getAdapterInfoNoEndpoints() const;
- virtual GetAdapterInfoResultPtr getAdapterInfoAsync() const;
- virtual AdapterPrx getProxy(const std::string&, bool) const;
+ float getLeastLoadedNodeLoad(LoadSample) const override;
+ AdapterInfoSeq getAdapterInfoNoEndpoints() const override;
+ std::shared_ptr<GetAdapterInfoResult> getAdapterInfoAsync() const override;
+ std::shared_ptr<AdapterPrx> getProxy(const std::string&, bool) const override;
void getLocatorAdapterInfo(LocatorAdapterInfoSeq&) const;
const std::string& getReplicaGroupId() const { return _replicaGroupId; }
@@ -110,68 +100,69 @@ private:
const std::string _replicaGroupId;
const int _priority;
- const ServerEntryPtr _server;
+ const std::shared_ptr<ServerEntry> _server;
};
-typedef IceUtil::Handle<ServerAdapterEntry> ServerAdapterEntryPtr;
-class ReplicaGroupEntry : public AdapterEntry, public IceUtil::Monitor<IceUtil::Mutex>
+class ReplicaGroupEntry final : public AdapterEntry
{
public:
- ReplicaGroupEntry(AdapterCache&, const std::string&, const std::string&, const LoadBalancingPolicyPtr&,
+ ReplicaGroupEntry(AdapterCache&, const std::string&, const std::string&, const std::shared_ptr<LoadBalancingPolicy>&,
const std::string&);
- virtual bool addSyncCallback(const SynchronizationCallbackPtr&, const std::set<std::string>&);
+ virtual bool addSyncCallback(const std::shared_ptr<SynchronizationCallback>&, const std::set<std::string>&);
virtual void getLocatorAdapterInfo(LocatorAdapterInfoSeq&, int&, bool&, bool&, std::string&,
const std::set<std::string>&);
virtual float getLeastLoadedNodeLoad(LoadSample) const;
virtual AdapterInfoSeq getAdapterInfoNoEndpoints() const;
- virtual GetAdapterInfoResultPtr getAdapterInfoAsync() const;
- virtual AdapterPrx getProxy(const std::string&, bool) const { return 0; }
+ virtual std::shared_ptr<GetAdapterInfoResult> getAdapterInfoAsync() const;
+ virtual std::shared_ptr<AdapterPrx> getProxy(const std::string&, bool) const { return nullptr; }
- void addReplica(const std::string&, const ServerAdapterEntryPtr&);
+ void addReplica(const std::string&, const std::shared_ptr<ServerAdapterEntry>&);
bool removeReplica(const std::string&);
- void update(const std::string&, const LoadBalancingPolicyPtr&, const std::string&);
+ void update(const std::string&, const std::shared_ptr<LoadBalancingPolicy>&, const std::string&);
bool hasAdaptersFromOtherApplications() const;
const std::string& getFilter() const { return _filter; }
private:
- LoadBalancingPolicyPtr _loadBalancing;
+ std::shared_ptr<LoadBalancingPolicy> _loadBalancing;
int _loadBalancingNReplicas;
LoadSample _loadSample;
std::string _filter;
- std::vector<ServerAdapterEntryPtr> _replicas;
+ std::vector<std::shared_ptr<ServerAdapterEntry>> _replicas;
int _lastReplica;
bool _requestInProgress;
+
+ mutable std::mutex _mutex;
+ std::condition_variable _condVar;
};
-typedef IceUtil::Handle<ReplicaGroupEntry> ReplicaGroupEntryPtr;
class AdapterCache : public CacheByString<AdapterEntry>
{
public:
- AdapterCache(const Ice::CommunicatorPtr&);
+ AdapterCache(const std::shared_ptr<Ice::Communicator>&);
- void addServerAdapter(const AdapterDescriptor&, const ServerEntryPtr&, const std::string&);
+ void addServerAdapter(const AdapterDescriptor&, const std::shared_ptr<ServerEntry>&, const std::string&);
void addReplicaGroup(const ReplicaGroupDescriptor&, const std::string&);
- AdapterEntryPtr get(const std::string&) const;
+ std::shared_ptr<AdapterEntry> get(const std::string&) const;
void removeServerAdapter(const std::string&);
void removeReplicaGroup(const std::string&);
protected:
- virtual AdapterEntryPtr addImpl(const std::string&, const AdapterEntryPtr&);
+ virtual std::shared_ptr<AdapterEntry> addImpl(const std::string&, const std::shared_ptr<AdapterEntry>&);
virtual void removeImpl(const std::string&);
private:
- const Ice::CommunicatorPtr _communicator;
+ const std::shared_ptr<Ice::Communicator> _communicator;
};
};