http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/Cache.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/Cache.hpp b/src/cppcache/include/geode/Cache.hpp index 30332a6..b414d5e 100644 --- a/src/cppcache/include/geode/Cache.hpp +++ b/src/cppcache/include/geode/Cache.hpp @@ -1,8 +1,3 @@ -#pragma once - -#ifndef GEODE_CACHE_H_ -#define GEODE_CACHE_H_ - /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -19,6 +14,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +#pragma once + +#ifndef GEODE_CACHE_H_ +#define GEODE_CACHE_H_ + +#include <string> + #include "geode_globals.hpp" #include "geode_types.hpp" #include "GeodeCache.hpp" @@ -30,7 +33,8 @@ #include "RegionShortcut.hpp" #include "RegionFactory.hpp" #include "InternalCacheTransactionManager2PC.hpp" - +#include "statistics/StatisticsFactory.hpp" +#include "geode/TypeRegistry.hpp" /** * @file */ @@ -39,6 +43,7 @@ namespace apache { namespace geode { namespace client { +class PoolManager; class CacheFactory; class CacheRegionHelper; class Pool; @@ -84,7 +89,7 @@ class CPPCACHE_EXPORT Cache : public GeodeCache, /** Returns the name of this cache. * @return the string name of this cache */ - virtual const char* getName() const; + virtual const std::string& getName() const; /** * Indicates if this cache has been closed. @@ -100,7 +105,7 @@ class CPPCACHE_EXPORT Cache : public GeodeCache, * Returns the distributed system that this cache was * {@link CacheFactory::createCacheFactory created} with. */ - virtual DistributedSystemPtr getDistributedSystem() const; + virtual DistributedSystem& getDistributedSystem() const; /** * Terminates this object cache and releases all the local resources. @@ -211,6 +216,8 @@ class CPPCACHE_EXPORT Cache : public GeodeCache, */ virtual bool getPdxReadSerialized(); + virtual TypeRegistry& getTypeRegistry(); + /** * Returns a factory that can create a {@link PdxInstance}. * @param className the fully qualified class name that the PdxInstance will @@ -221,6 +228,14 @@ class CPPCACHE_EXPORT Cache : public GeodeCache, */ virtual PdxInstanceFactoryPtr createPdxInstanceFactory(const char* className); + virtual statistics::StatisticsFactory* getStatisticsFactory() const; + + virtual std::unique_ptr<DataInput> createDataInput(const uint8_t* m_buffer, + int32_t len) const; + virtual std::unique_ptr<DataOutput> createDataOutput() const; + + virtual PoolManager& getPoolManager() const; + /** * @brief destructor */ @@ -230,10 +245,11 @@ class CPPCACHE_EXPORT Cache : public GeodeCache, /** * @brief constructors */ - Cache(const char* name, DistributedSystemPtr sys, const char* id_data, + Cache(const std::string& name, PropertiesPtr dsProp, bool ignorePdxUnreadFields, bool readPdxSerialized); std::unique_ptr<CacheImpl> m_cacheImpl; + std::unique_ptr<TypeRegistry> m_typeRegistry; protected: Cache() = delete;
http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/CacheFactory.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/CacheFactory.hpp b/src/cppcache/include/geode/CacheFactory.hpp index 885b8d1..82dc9a9 100644 --- a/src/cppcache/include/geode/CacheFactory.hpp +++ b/src/cppcache/include/geode/CacheFactory.hpp @@ -30,8 +30,6 @@ * @file */ -#define DEFAULT_POOL_NAME "default_geodeClientPool" - namespace apache { namespace geode { namespace client { @@ -45,7 +43,8 @@ class CppCacheLibrary; * For the default values for the pool attributes see {@link PoolFactory}. * To create additional {@link Pool}s see {@link PoolManager} */ -class CPPCACHE_EXPORT CacheFactory : public std::enable_shared_from_this<CacheFactory> { +class CPPCACHE_EXPORT CacheFactory + : public std::enable_shared_from_this<CacheFactory> { public: /** * To create the instance of {@link CacheFactory} @@ -60,38 +59,6 @@ class CPPCACHE_EXPORT CacheFactory : public std::enable_shared_from_this<CacheFa */ CachePtr create(); - /** - * Gets the instance of {@link Cache} produced by an - * earlier call to {@link CacheFactory::create}. - * @param system the <code>DistributedSystem</code> the cache was created - * with. - * @return the {@link Cache} associated with the specified system. - * @throws CacheClosedException if a cache has not been created - * or the created one is {@link Cache::isClosed closed} - * @throws EntryNotFoundException if a cache with specified system not found - */ - static CachePtr getInstance(const DistributedSystemPtr& system); - - /** - * Gets the instance of {@link Cache} produced by an - * earlier call to {@link CacheFactory::create}, even if it has been closed. - * @param system the <code>DistributedSystem</code> the cache was created - * with. - * @return the {@link Cache} associated with the specified system. - * @throws CacheClosedException if a cache has not been created - * @throws EntryNotFoundException if a cache with specified system is not - * found - */ - static CachePtr getInstanceCloseOk(const DistributedSystemPtr& system); - - /** - * Gets an arbitrary open instance of {@link Cache} produced by an - * earlier call to {@link CacheFactory::create}. - * @throws CacheClosedException if a cache has not been created - * or the only created one is {@link Cache::isClosed closed} - */ - static CachePtr getAnyInstance(); - /** Returns the version of the cache implementation. * For the 1.0 release of Geode, the string returned is <code>1.0</code>. * @return the version of the cache implementation as a <code>String</code> @@ -103,350 +70,46 @@ class CPPCACHE_EXPORT CacheFactory : public std::enable_shared_from_this<CacheFa static const char* getProductDescription(); /** - * Sets the free connection timeout for this pool. - * If the pool has a max connections setting, operations will block - * if all of the connections are in use. The free connection timeout - * specifies how long those operations will block waiting for - * a free connection before receiving - * an {@link AllConnectionsInUseException}. If max connections - * is not set this setting has no effect. - * @see #setMaxConnections(int) - * @param connectionTimeout is the connection timeout in milliseconds - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>connectionTimeout</code> - * is less than or equal to <code>0</code>. - */ - CacheFactoryPtr setFreeConnectionTimeout(int connectionTimeout); - /** - * Sets the load conditioning interval for this pool. - * This interval controls how frequently the pool will check to see if - * a connection to a given server should be moved to a different - * server to improve the load balance. - * <p>A value of <code>-1</code> disables load conditioning - * @param loadConditioningInterval is the connection lifetime in milliseconds - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>connectionLifetime</code> - * is less than <code>-1</code>. - */ - CacheFactoryPtr setLoadConditioningInterval(int loadConditioningInterval); - /** - * Sets the socket buffer size for each connection made in this pool. - * Large messages can be received and sent faster when this buffer is larger. - * Larger buffers also optimize the rate at which servers can send events - * for client subscriptions. - * @param bufferSize is the size of the socket buffers used for reading and - * writing on each connection in this pool. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>bufferSize</code> - * is less than or equal to <code>0</code>. - */ - CacheFactoryPtr setSocketBufferSize(int bufferSize); - - /** - * Sets the thread local connections policy for this pool. - * If <code>true</code> then any time a thread goes to use a connection - * from this pool it will check a thread local cache and see if it already - * has a connection in it. If so it will use it. If not it will get one from - * this pool and cache it in the thread local. This gets rid of thread - * contention - * for the connections but increases the number of connections the servers - * see. - * <p>If <code>false</code> then connections are returned to the pool as soon - * as the operation being done with the connection completes. This allows - * connections to be shared amonst multiple threads keeping the number of - * connections down. - * @param threadLocalConnections if <code>true</code> then enable thread local - * connections. - * @return a reference to <code>this</code> - */ - CacheFactoryPtr setThreadLocalConnections(bool threadLocalConnections); - - /** - * Sets the number of milliseconds to wait for a response from a server before - * timing out the operation and trying another server (if any are available). - * @param timeout is the number of milliseconds to wait for a response from a - * server - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>timeout</code> - * is less than or equal to <code>0</code>. - */ - CacheFactoryPtr setReadTimeout(int timeout); - - /** - * Sets the minimum number of connections to keep available at all times. - * When the pool is created, it will create this many connections. - * If <code>0</code> then connections will not be made until an actual - * operation - * is done that requires client-to-server communication. - * @param minConnections is the initial number of connections - * this pool will create. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>minConnections</code> - * is less than <code>0</code>. - */ - CacheFactoryPtr setMinConnections(int minConnections); - - /** - * Sets the max number of client to server connections that the pool will - * create. If all of - * the connections are in use, an operation requiring a client to server - * connection - * will block until a connection is available. - * @see #setFreeConnectionTimeout(int) - * @param maxConnections is the maximum number of connections in the pool. - * <code>-1</code> indicates that there is no maximum number of connections - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>maxConnections</code> - * is less than <code>minConnections</code>. - */ - CacheFactoryPtr setMaxConnections(int maxConnections); - - /** - * Sets the amount of time a connection can be idle before expiring the - * connection. - * If the pool size is greater than the minimum specified by - * {@link PoolFactory#setMinConnections(int)}, connections which have been - * idle - * for longer than the idleTimeout will be closed. - * @param idleTimeout is the amount of time in milliseconds that an idle - * connection - * should live before expiring. -1 indicates that connections should never - * expire. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>idleTimout</code> - * is less than <code>0</code>. - */ - CacheFactoryPtr setIdleTimeout(long idleTimeout); - - /** - * Set the number of times to retry a request after timeout/exception. - * @param retryAttempts is the number of times to retry a request - * after timeout/exception. -1 indicates that a request should be - * tried against every available server before failing - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>idleTimout</code> - * is less than <code>0</code>. - */ - CacheFactoryPtr setRetryAttempts(int retryAttempts); - - /** - * The frequency with which servers must be pinged to verify that they are - * still alive. - * Each server will be sent a ping every <code>pingInterval</code> if there - * has not - * been any other communication with the server. + * Control whether pdx ignores fields that were unread during deserialization. + * The default is to preserve unread fields be including their data during + * serialization. + * But if you configure the cache to ignore unread fields then their data will + * be lost + * during serialization. + * <P>You should only set this attribute to <code>true</code> if you know this + * member + * will only be reading cache data. In this use case you do not need to pay + * the cost of preserving the unread fields since you will never be + * reserializing pdx data. * - * These pings are used by the server to monitor the health of - * the client. Make sure that the <code>pingInterval</code> is less than the - * maximum time between pings allowed by the bridge server. - * @param pingInterval is the amount of time in milliseconds between - * pings. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>pingInterval</code> - * is less than <code>0</code>. - */ - CacheFactoryPtr setPingInterval(long pingInterval); - - /** - * The frequency with which client updates the locator list. To disable this - * set its - * value to 0. - * @param updateLocatorListInterval is the amount of time in milliseconds - * between - * checking locator list at locator. - */ - CacheFactoryPtr setUpdateLocatorListInterval(long updateLocatorListInterval); - - /** - * The frequency with which the client statistics must be sent to the server. - * Doing this allows <code>GFMon</code> to monitor clients. - * <p>A value of <code>-1</code> disables the sending of client statistics - * to the server. + * @param ignore <code>true</code> if fields not read during pdx + * deserialization should be ignored; + * <code>false</code>, the default, if they should be preserved. * - * @param statisticInterval is the amount of time in milliseconds between - * sends of client statistics to the server. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>statisticInterval</code> - * is less than <code>-1</code>. - */ - CacheFactoryPtr setStatisticInterval(int statisticInterval); - - /** - * Configures the group which contains all the servers that this pool connects - * to. - * @param group is the server group that this pool will connect to. - * If the value is <code>null</code> or <code>""</code> then the pool connects - * to all servers. - * @return a reference to <code>this</code> - */ - CacheFactoryPtr setServerGroup(const char* group); - - /** - * Adds a locator, given its host and port, to this factory. - * The locator must be a server locator and will be used to discover other - * running - * bridge servers and locators. - * @param host is the host name or ip address that the locator is listening - * on. - * @param port is the port that the locator is listening on. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if the <code>host</code> is an unknown - * host - * according to {@link java.net.InetAddress#getByName} or if the port is - * outside - * the valid range of [1..65535] inclusive. - * @throws IllegalStateException if the locator has already been {@link - * #addServer added} to this factory. - */ - CacheFactoryPtr addLocator(const char* host, int port); - - /** - * Adds a server, given its host and port, to this factory. - * The server must be a bridge server and this client will - * directly connect to the server without consulting a server locator. - * @param host is the host name or ip address that the server is listening on. - * @param port is the port that the server is listening on. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if the <code>host</code> is an unknown - * host - * according to {@link java.net.InetAddress#getByName} or if the port is - * outside - * the valid range of [1..65535] inclusive. - * @throws IllegalStateException if the server has already been {@link - * #addLocator added} to this factory. - */ - CacheFactoryPtr addServer(const char* host, int port); - - /** - * If set to <code>true</code> then the created pool will have - * server-to-client - * subscriptions enabled. - * If set to <code>false</code> then all <code>Subscription*</code> attributes - * are ignored at the time of creation. - * @return a reference to <code>this</code> - */ - CacheFactoryPtr setSubscriptionEnabled(bool enabled); - /** - * Sets the redundancy level for this pools server-to-client subscriptions. - * If <code>0</code> then no redundant copies are kept on the servers. - * Otherwise an effort is made to maintain the requested number of - * copies of the server-to-client subscriptions. At most, one copy per server - * is - * made up to the requested level. - * @param redundancy is the number of redundant servers for this client's - * subscriptions. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>redundancyLevel</code> - * is less than <code>-1</code>. - */ - CacheFactoryPtr setSubscriptionRedundancy(int redundancy); - /** - * Sets the messageTrackingTimeout attribute which is the time-to-live period, - * in - * milliseconds, for subscription events the client has received from the - * server. It is used - * to minimize duplicate events. - * Entries that have not been modified for this amount of time - * are expired from the list. - * @param messageTrackingTimeout is the number of milliseconds to set the - * timeout to. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>messageTrackingTimeout</code> - * is less than or equal to <code>0</code>. - */ - CacheFactoryPtr setSubscriptionMessageTrackingTimeout( - int messageTrackingTimeout); - - /** - * Sets the is the interval in milliseconds - * to wait before sending acknowledgements to the bridge server for - * events received from the server subscriptions. * - * @param ackInterval is the number of milliseconds to wait before sending - * event - * acknowledgements. - * @return a reference to <code>this</code> - * @throws IllegalArgumentException if <code>ackInterval</code> - * is less than or equal to <code>0</code>. - */ - CacheFactoryPtr setSubscriptionAckInterval(int ackInterval); - - /** - * Sets whether Pool is in multi user secure mode. - * If its in multiuser mode then app needs to get RegionService instance of - * Cache, to do the operations on cache. - * Deafult value is false. - * @param multiuserAuthentication - * to set the pool in multiuser mode. - * @return a reference to <code>this</code> + * @return this CacheFactory + * @since 3.6 */ - CacheFactoryPtr setMultiuserAuthentication(bool multiuserAuthentication); - - /** - * By default setPRSingleHopEnabled is true<br> - * The client is aware of location of partitions on servers hosting - * {@link Region}s. - * Using this information, the client routes the client cache operations - * directly to the server which is hosting the required partition for the - * cache operation. - * If setPRSingleHopEnabled is false the client can do an extra hop on servers - * to go to the required partition for that cache operation. - * The setPRSingleHopEnabled avoids extra hops only for following cache - * operations:<br> - * 1. {@link Region#put(Object, Object)}<br> - * 2. {@link Region#get(Object)}<br> - * 3. {@link Region#destroy(Object)}<br> - * 4. {@link Region#getAll(Object, object)}<br> - * If true, works best when {@link PoolFactory#setMaxConnections(int)} is set - * to -1. - * @param name is boolean whether PR Single Hop optimization is enabled or - * not. - * @return a reference to <code>this</code> - */ - CacheFactoryPtr setPRSingleHopEnabled(bool enabled); - - /** - * Control whether pdx ignores fields that were unread during deserialization. - * The default is to preserve unread fields be including their data during - * serialization. - * But if you configure the cache to ignore unread fields then their data will - * be lost - * during serialization. - * <P>You should only set this attribute to <code>true</code> if you know this - * member - * will only be reading cache data. In this use case you do not need to pay the - * cost - * of preserving the unread fields since you will never be reserializing pdx - * data. - * - * @param ignore <code>true</code> if fields not read during pdx - * deserialization should be ignored; - * <code>false</code>, the default, if they should be preserved. - * - * - * @return this CacheFactory - * @since 3.6 - */ CacheFactoryPtr setPdxIgnoreUnreadFields(bool ignore); /** Sets the object preference to PdxInstance type. - * When a cached object that was serialized as a PDX is read - * from the cache a {@link PdxInstance} will be returned instead of the actual - * domain class. - * The PdxInstance is an interface that provides run time access to - * the fields of a PDX without deserializing the entire PDX. - * The PdxInstance implementation is a light weight wrapper - * that simply refers to the raw bytes of the PDX that are kept - * in the cache. Using this method applications can choose to - * access PdxInstance instead of C++ object. - * <p>Note that a PdxInstance is only returned if a serialized PDX is found in - * the cache. - * If the cache contains a deserialized PDX, then a domain class instance is - * returned instead of a PdxInstance. - * - * @param pdxReadSerialized true to prefer PdxInstance - * @return this ClientCacheFactory - */ + * When a cached object that was serialized as a PDX is read + * from the cache a {@link PdxInstance} will be returned instead of the actual + * domain class. + * The PdxInstance is an interface that provides run time access to + * the fields of a PDX without deserializing the entire PDX. + * The PdxInstance implementation is a light weight wrapper + * that simply refers to the raw bytes of the PDX that are kept + * in the cache. Using this method applications can choose to + * access PdxInstance instead of C++ object. + * <p>Note that a PdxInstance is only returned if a serialized PDX is found in + * the cache. + * If the cache contains a deserialized PDX, then a domain class instance is + * returned instead of a PdxInstance. + * + * @param pdxReadSerialized true to prefer PdxInstance + * @return this ClientCacheFactory + */ CacheFactoryPtr setPdxReadSerialized(bool pdxReadSerialized); /** @@ -459,20 +122,16 @@ class CPPCACHE_EXPORT CacheFactory : public std::enable_shared_from_this<CacheFa CacheFactoryPtr set(const char* name, const char* value); private: - PoolFactoryPtr pf; PropertiesPtr dsProp; bool ignorePdxUnreadFields; bool pdxReadSerialized; - PoolFactoryPtr getPoolFactory(); - - CachePtr create(const char* name, DistributedSystemPtr system = nullptr, - const char* cacheXml = 0, + CachePtr create(const char* name, const CacheAttributesPtr& attrs = nullptr); - static void create_(const char* name, DistributedSystemPtr& system, - const char* id_data, CachePtr& cptr, - bool ignorePdxUnreadFields, bool readPdxSerialized); + void create_(const char* name, const char* id_data, + CachePtr& cptr, + bool readPdxSerialized); // no instances allowed CacheFactory(); @@ -481,21 +140,6 @@ class CPPCACHE_EXPORT CacheFactory : public std::enable_shared_from_this<CacheFa private: ~CacheFactory(); - PoolPtr determineDefaultPool(CachePtr cachePtr); - - static CachePtr getAnyInstance(bool throwException); - static GfErrType basicGetInstance(const DistributedSystemPtr& system, - bool closeOk, CachePtr& cptr); - - // Set very first time some creates cache - // TODO shared_ptr - remove or refactor with global work - static CacheFactoryPtr* default_CacheFactory; - static PoolPtr createOrGetDefaultPool(); - static void* m_cacheMap; - static void init(); - static void cleanup(); - static void handleXML(CachePtr& cachePtr, const char* cachexml, - DistributedSystemPtr& system); friend class CppCacheLibrary; friend class RegionFactory; friend class RegionXmlCreation; http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/CqOperation.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/CqOperation.hpp b/src/cppcache/include/geode/CqOperation.hpp index b625ae6..a779de8 100644 --- a/src/cppcache/include/geode/CqOperation.hpp +++ b/src/cppcache/include/geode/CqOperation.hpp @@ -34,7 +34,6 @@ namespace client { * Enumerated type for Operation actions. */ class CPPCACHE_EXPORT CqOperation { - // public static methods public: // types of operation CORESPONDING TO THE ONES in geode.cache.Operation http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/DataInput.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/DataInput.hpp b/src/cppcache/include/geode/DataInput.hpp index 1976dde..61b768e 100644 --- a/src/cppcache/include/geode/DataInput.hpp +++ b/src/cppcache/include/geode/DataInput.hpp @@ -46,6 +46,9 @@ namespace client { extern int gf_sprintf(char* buffer, const char* fmt, ...); +class SerializationRegistry; +class DataInputInternal; + /** * Provide operations for reading primitive data values, byte arrays, * strings, <code>Serializable</code> objects from a byte stream. @@ -891,13 +894,6 @@ class CPPCACHE_EXPORT DataInput { return decodedLen; } - /** constructor given a pre-allocated byte array with size */ - DataInput(const uint8_t* m_buffer, int32_t len) - : m_buf(m_buffer), - m_bufHead(m_buffer), - m_bufLength(len), - m_poolName(nullptr) {} - /** destructor */ ~DataInput() {} @@ -964,11 +960,25 @@ class CPPCACHE_EXPORT DataInput { */ void setPoolName(const char* poolName) { m_poolName = poolName; } + virtual const Cache* getCache(); + + protected: + /** constructor given a pre-allocated byte array with size */ + DataInput(const uint8_t* m_buffer, int32_t len, const Cache* cache) + : m_buf(m_buffer), + m_bufHead(m_buffer), + m_bufLength(len), + m_poolName(nullptr), + m_cache(cache) {} + + virtual const SerializationRegistry& getSerializationRegistry() const; + private: const uint8_t* m_buf; const uint8_t* m_bufHead; int32_t m_bufLength; const char* m_poolName; + const Cache* m_cache; void readObjectInternal(SerializablePtr& ptr, int8_t typeId = -1); @@ -1072,9 +1082,12 @@ class CPPCACHE_EXPORT DataInput { } // disable other constructors and assignment - DataInput(); - DataInput(const DataInput&); - DataInput& operator=(const DataInput&); + DataInput() = delete; + DataInput(const DataInput&) = delete; + DataInput& operator=(const DataInput&) = delete; + + friend Cache; + friend DataInputInternal; }; } // namespace client } // namespace geode http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/DataOutput.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/DataOutput.hpp b/src/cppcache/include/geode/DataOutput.hpp index c087c4d..7c2aa84 100644 --- a/src/cppcache/include/geode/DataOutput.hpp +++ b/src/cppcache/include/geode/DataOutput.hpp @@ -37,7 +37,8 @@ namespace apache { namespace geode { namespace client { - +class SerializationRegistry; +class DataOutputInternal; /** * C style memory allocation that throws OutOfMemoryException * if it fails @@ -74,11 +75,6 @@ namespace client { class CPPCACHE_EXPORT DataOutput { public: /** - * Construct a new DataOutput. - */ - DataOutput(); - - /** * Write an unsigned byte to the <code>DataOutput</code>. * * @param value the unsigned byte to be written @@ -724,10 +720,17 @@ class CPPCACHE_EXPORT DataOutput { static void safeDelete(uint8_t* src) { GF_SAFE_DELETE(src); } - static DataOutput* getDataOutput() { return new DataOutput(); } - static void releaseDataOutput(DataOutput* dataOutput) { - GF_SAFE_DELETE(dataOutput); - } + virtual const Cache* getCache(); + + protected: + /** + * Construct a new DataOutput. + */ + DataOutput(const Cache* cache); + + DataOutput() : DataOutput(nullptr) {} + + virtual const SerializationRegistry& getSerializationRegistry() const; private: void writeObjectInternal(const Serializable* ptr, bool isDelta = false); @@ -747,6 +750,7 @@ class CPPCACHE_EXPORT DataOutput { static uint32_t m_highWaterMark; // flag to indicate we have a big buffer volatile bool m_haveBigBuffer; + const Cache* m_cache; inline static void getEncodedLength(const char val, int32_t& encodedLen) { if ((val == 0) || (val & 0x80)) { @@ -813,6 +817,9 @@ class CPPCACHE_EXPORT DataOutput { // disable copy constructor and assignment DataOutput(const DataOutput&); DataOutput& operator=(const DataOutput&); + + friend Cache; + friend DataOutputInternal; }; } // namespace client } // namespace geode http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/Delta.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/Delta.hpp b/src/cppcache/include/geode/Delta.hpp index c0c4285..8b9f8dc 100644 --- a/src/cppcache/include/geode/Delta.hpp +++ b/src/cppcache/include/geode/Delta.hpp @@ -91,6 +91,10 @@ class Delta { virtual DeltaPtr clone(); virtual ~Delta() {} + + protected: + Delta(Cache* cache); + Cache* m_cache; }; } // namespace client } // namespace geode http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/DistributedSystem.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/DistributedSystem.hpp b/src/cppcache/include/geode/DistributedSystem.hpp index c633616..b547e6e 100644 --- a/src/cppcache/include/geode/DistributedSystem.hpp +++ b/src/cppcache/include/geode/DistributedSystem.hpp @@ -1,8 +1,3 @@ -#pragma once - -#ifndef GEODE_DISTRIBUTEDSYSTEM_H_ -#define GEODE_DISTRIBUTEDSYSTEM_H_ - /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -20,9 +15,15 @@ * limitations under the License. */ +#pragma once + +#ifndef GEODE_DISTRIBUTEDSYSTEM_H_ +#define GEODE_DISTRIBUTEDSYSTEM_H_ + /** * @file */ +#include <memory> #include "geode_globals.hpp" #include "geode_types.hpp" @@ -32,6 +33,11 @@ namespace apache { namespace geode { + +namespace statistics { +class StatisticsManager; +} // namespace statistics + namespace client { /** * @class DistributedSystem DistributedSystem.hpp @@ -56,44 +62,39 @@ class CPPCACHE_EXPORT DistributedSystem { * Initializes the Native Client system to be able to connect to the * Geode Java servers. If the name string is empty, then the default * "NativeDS" is used as the name of distributed system. - * @throws LicenseException if no valid license is found. * @throws IllegalStateException if GFCPP variable is not set and * product installation directory cannot be determined - * @throws IllegalArgument exception if DS name is nullptr - * @throws AlreadyConnectedException if this call has succeeded once before - *for this process **/ - static DistributedSystemPtr connect(const char* name, - const PropertiesPtr& configPtr = nullptr); + static std::unique_ptr<DistributedSystem> create( + const std::string& name, Cache* cache, + const PropertiesPtr& configPtr = nullptr); + + /** + * @brief connects from the distributed system + * @throws AlreadyConnectedException if this call has succeeded once before + */ + void connect(); /** - *@brief disconnect from the distributed system - *@throws IllegalStateException if not connected + * @brief disconnect from the distributed system + * @throws IllegalStateException if not connected */ - static void disconnect(); + void disconnect(); /** Returns the SystemProperties that were used to create this instance of the * DistributedSystem - * @return SystemProperties + * @return SystemProperties */ - static SystemProperties* getSystemProperties(); + SystemProperties& getSystemProperties() const; /** Returns the name that identifies the distributed system instance * @return name */ - virtual const char* getName() const; + virtual const std::string& getName() const; - /** Returns true if connected, false otherwise - * - * @return true if connected, false otherwise - */ - static bool isConnected(); - - /** Returns a pointer to the DistributedSystem instance - * - * @return instance - */ - static DistributedSystemPtr getInstance(); + statistics::StatisticsManager* getStatisticsManager() { + return m_statisticsManager.get(); + } /** * @brief destructor @@ -104,16 +105,20 @@ class CPPCACHE_EXPORT DistributedSystem { /** * @brief constructors */ - DistributedSystem(const char* name); + DistributedSystem(const std::string& name, + std::unique_ptr<statistics::StatisticsManager> statMngr, + std::unique_ptr<SystemProperties> sysProps); private: - char* m_name; - static bool m_connected; - static DistributedSystemPtr* m_instance_ptr; - // static DistributedSystemImpl *m_impl; + std::string m_name; + bool m_connected; + + std::unique_ptr<statistics::StatisticsManager> m_statisticsManager; + + std::unique_ptr<SystemProperties> m_sysProps; public: - static DistributedSystemImpl* m_impl; + DistributedSystemImpl* m_impl; friend class CacheRegionHelper; friend class DistributedSystemImpl; friend class TcrConnection; @@ -121,6 +126,8 @@ class CPPCACHE_EXPORT DistributedSystem { private: DistributedSystem(const DistributedSystem&); const DistributedSystem& operator=(const DistributedSystem&); + + void logSystemInformation(); }; } // namespace client } // namespace geode http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/GeodeCache.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/GeodeCache.hpp b/src/cppcache/include/geode/GeodeCache.hpp index 37ac98d..78c91de 100644 --- a/src/cppcache/include/geode/GeodeCache.hpp +++ b/src/cppcache/include/geode/GeodeCache.hpp @@ -32,6 +32,8 @@ namespace apache { namespace geode { namespace client { +class DistributedSystem; + /** * GeodeCache represents the singleton cache that must be created * in order to connect to Geode server. @@ -52,7 +54,7 @@ class CPPCACHE_EXPORT GeodeCache : public RegionService { /** Returns the name of this cache. * @return the string name of this cache */ - virtual const char* getName() const = 0; + virtual const std::string& getName() const = 0; /** * Initializes the cache from an xml file @@ -63,10 +65,10 @@ class CPPCACHE_EXPORT GeodeCache : public RegionService { virtual void initializeDeclarativeCache(const char* cacheXml) = 0; /** - * Returns the distributed system that this cache was - * {@link CacheFactory::createCacheFactory created} with. - */ - virtual DistributedSystemPtr getDistributedSystem() const = 0; + * Returns the distributed system that this cache was + * {@link CacheFactory::createCacheFactory created} with. + */ + virtual DistributedSystem& getDistributedSystem() const = 0; /** * Returns whether Cache saves unread fields for Pdx types. @@ -74,9 +76,9 @@ class CPPCACHE_EXPORT GeodeCache : public RegionService { virtual bool getPdxIgnoreUnreadFields() = 0; /** - * Returns whether { @link PdxInstance} is preferred for PDX types instead of - * C++ object. - */ + * Returns whether { @link PdxInstance} is preferred for PDX types instead of + * C++ object. + */ virtual bool getPdxReadSerialized() = 0; }; } // namespace client http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/PdxInstance.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/PdxInstance.hpp b/src/cppcache/include/geode/PdxInstance.hpp index e5b8b53..3e92515 100644 --- a/src/cppcache/include/geode/PdxInstance.hpp +++ b/src/cppcache/include/geode/PdxInstance.hpp @@ -60,7 +60,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable { * registered. * @return the deserialized domain object. * - * @see Serializable::registerPdxType + * @see serializationRegistry->addPdxType */ virtual PdxSerializablePtr getObject() = 0; @@ -83,7 +83,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable { * For deserialization C++ Native Client requires the domain class to be * registered. * - * @see Serializable::registerPdxType + * @see serializationRegistry->addPdxType * @see PdxInstance#hasField */ virtual void getField(const char* fieldname, CacheablePtr& value) const = 0; @@ -432,7 +432,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable { * @param value value of the field to be set with CacheableObjectArrayPtr type. * @throws IllegalStateException if PdxInstance doesn't has the named field. * - * @see Serializable::registerPdxType + * @see serializationRegistry->addPdxType * @see PdxInstance#hasField */ virtual void getField(const char* fieldname, @@ -476,7 +476,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable { * @throws IllegalStateException if the field contains an element that is not * of CacheableKey derived type. * - * @see Serializable::registerPdxType + * @see serializationRegistry->addPdxType */ virtual int32_t hashcode() const = 0; @@ -489,7 +489,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable { * For deserialization C++ Native Client requires the domain class to be * registered. * - * @see Serializable::registerPdxType + * @see serializationRegistry->addPdxType */ virtual CacheableStringPtr toString() const = 0; @@ -549,7 +549,7 @@ class CPPCACHE_EXPORT PdxInstance : public PdxSerializable { * @throws IllegalStateException if the field contains an element that is not * of CacheableKey derived type. * - * @see Serializable::registerPdxType + * @see serializationRegistry->addPdxType */ virtual bool operator==(const CacheableKey& other) const = 0; http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/PdxSerializable.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/PdxSerializable.hpp b/src/cppcache/include/geode/PdxSerializable.hpp index e38abbc..eb096d0 100644 --- a/src/cppcache/include/geode/PdxSerializable.hpp +++ b/src/cppcache/include/geode/PdxSerializable.hpp @@ -26,8 +26,6 @@ namespace apache { namespace geode { namespace client { -typedef PdxSerializable* (*PdxTypeFactoryMethod)(); - class CPPCACHE_EXPORT PdxSerializable : public CacheableKey { public: PdxSerializable(); http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/PdxWrapper.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/PdxWrapper.hpp b/src/cppcache/include/geode/PdxWrapper.hpp index 4212328..594fb08 100644 --- a/src/cppcache/include/geode/PdxWrapper.hpp +++ b/src/cppcache/include/geode/PdxWrapper.hpp @@ -1,8 +1,3 @@ -#pragma once - -#ifndef GEODE_PDXWRAPPER_H_ -#define GEODE_PDXWRAPPER_H_ - /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -20,6 +15,11 @@ * limitations under the License. */ +#pragma once + +#ifndef GEODE_PDXWRAPPER_H_ +#define GEODE_PDXWRAPPER_H_ + #include "PdxSerializer.hpp" #include "PdxSerializable.hpp" @@ -43,7 +43,8 @@ class CPPCACHE_EXPORT PdxWrapper : public PdxSerializable { * @param className the fully qualified class name to map this user object to * the Java side. */ - PdxWrapper(void* userObject, const char* className); + PdxWrapper(void* userObject, const char* className, + PdxSerializerPtr pdxSerializerPtr); /** * Returns the pointer to the user object which is deserialized with a @@ -112,7 +113,7 @@ class CPPCACHE_EXPORT PdxWrapper : public PdxSerializable { private: /** hide default constructor */ PdxWrapper(); - PdxWrapper(const char* className); + PdxWrapper(const char* className, PdxSerializerPtr pdxSerializerPtr); FRIEND_STD_SHARED_PTR(PdxWrapper) @@ -122,7 +123,7 @@ class CPPCACHE_EXPORT PdxWrapper : public PdxSerializable { UserObjectSizer m_sizer; char* m_className; - friend class SerializationRegistry; + // friend class SerializationRegistry; PdxWrapper(const PdxWrapper&); http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/Pool.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/Pool.hpp b/src/cppcache/include/geode/Pool.hpp index e3a0d7d..40ad247 100644 --- a/src/cppcache/include/geode/Pool.hpp +++ b/src/cppcache/include/geode/Pool.hpp @@ -114,10 +114,10 @@ class CPPCACHE_EXPORT Pool : public std::enable_shared_from_this<Pool> { */ int getRetryAttempts() const; /** - * Returns the true if a server-to-client subscriptions are enabled on this - * pool. - * @see PoolFactory#setSubscriptionEnabled - */ + * Returns the true if a server-to-client subscriptions are enabled on this + * pool. + * @see PoolFactory#setSubscriptionEnabled + */ bool getSubscriptionEnabled() const; /** * Returns the subscription redundancy level of this pool. @@ -272,7 +272,8 @@ class CPPCACHE_EXPORT Pool : public std::enable_shared_from_this<Pool> { * @returns Logical instance of cache to do operations on behalf of one * particular user. */ - virtual RegionServicePtr createSecureUserCache(PropertiesPtr credentials); + virtual RegionServicePtr createSecureUserCache(PropertiesPtr credentials, + CacheImpl* cacheImpl); Pool(const Pool&); http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/PoolFactory.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/PoolFactory.hpp b/src/cppcache/include/geode/PoolFactory.hpp index 3d39009..5369f97 100644 --- a/src/cppcache/include/geode/PoolFactory.hpp +++ b/src/cppcache/include/geode/PoolFactory.hpp @@ -62,7 +62,7 @@ class PoolAttributes; * </ul> * */ -class CPPCACHE_EXPORT PoolFactory { +class CPPCACHE_EXPORT PoolFactory { public: /** * The default amount of time, in milliseconds, which we will wait for a free @@ -180,7 +180,7 @@ class CPPCACHE_EXPORT PoolFactory { * The default server group. * <p>Current value: <code>""</code>. */ - static const char* DEFAULT_SERVER_GROUP; + static constexpr const char* DEFAULT_SERVER_GROUP = ""; /** * Whether thread local connection is enabled. * <p>Current value: <code>"false"</code>. @@ -520,12 +520,14 @@ class CPPCACHE_EXPORT PoolFactory { ~PoolFactory(); private: - PoolFactory(); + PoolFactory(const Cache& cache); PoolFactory(const PoolFactory&); void addCheck(const char* host, int port); PoolAttributesPtr m_attrs; bool m_isSubscriptionRedundancy; bool m_addedServerOrLocator; + const Cache& m_cache; + friend class Cache; friend class PoolManager; friend class CacheFactory; http://git-wip-us.apache.org/repos/asf/geode-native/blob/da389793/src/cppcache/include/geode/PoolManager.hpp ---------------------------------------------------------------------- diff --git a/src/cppcache/include/geode/PoolManager.hpp b/src/cppcache/include/geode/PoolManager.hpp index 6b808ae..26dd85a 100644 --- a/src/cppcache/include/geode/PoolManager.hpp +++ b/src/cppcache/include/geode/PoolManager.hpp @@ -26,6 +26,7 @@ #include "geode_globals.hpp" #include "geode_types.hpp" +#include "Cache.hpp" #include "Pool.hpp" #include "PoolFactory.hpp" #include "Region.hpp" @@ -34,6 +35,7 @@ namespace apache { namespace geode { namespace client { +class ThinClientPoolDM; typedef std::unordered_map<std::string, PoolPtr> HashMapOfPools; /** @@ -49,12 +51,14 @@ typedef std::unordered_map<std::string, PoolPtr> HashMapOfPools; */ class CPPCACHE_EXPORT PoolManager { public: + PoolManager(const Cache& cache); + /** * Creates a new {@link PoolFactory pool factory}, * which is used to configure and create new {@link Pool}s. * @return the new pool factory */ - static PoolFactoryPtr createFactory(); + PoolFactoryPtr createFactory(); /** * Returns a map containing all the pools in this manager. @@ -66,7 +70,7 @@ class CPPCACHE_EXPORT PoolManager { * @return a Map that is a snapshot of all the pools currently known to this * manager. */ - static const HashMapOfPools& getAll(); + const HashMapOfPools& getAll(); /** * Find by name an existing connection pool returning @@ -75,7 +79,7 @@ class CPPCACHE_EXPORT PoolManager { * @return the existing connection pool or <code>nullptr</code> if it does not * exist. */ - static PoolPtr find(const char* name); + PoolPtr find(const char* name); /** * Find the pool used by the given region. @@ -84,7 +88,7 @@ class CPPCACHE_EXPORT PoolManager { * region does * not have a pool. */ - static PoolPtr find(RegionPtr region); + PoolPtr find(RegionPtr region); /** * Unconditionally destroys all created pools that are in this manager. @@ -93,10 +97,24 @@ class CPPCACHE_EXPORT PoolManager { * @see DistributedSystem#connect for a description of * <code>durable-client-timeout</code>. */ - static void close(bool keepAlive = false); + void close(bool keepAlive = false); private: - PoolManager(); + void removePool(const char* name); + + void addPool(const char* name, const PoolPtr& pool); + + PoolPtr getDefaultPool(); + + class Impl; + std::unique_ptr<Impl, void (*)(Impl*)> m_pimpl; + + friend Cache; + friend CacheImpl; + friend RegionFactory; + friend PoolFactory; + friend ThinClientPoolDM; + friend FunctionService; }; } // namespace client } // namespace geode