From a966c3d41acb68c8e8d5ca70ad2011ecf6c4be43 Mon Sep 17 00:00:00 2001 From: Senthil Nathan Date: Sun, 22 Nov 2020 23:20:57 -0500 Subject: [PATCH] TLS for Redis --- com.ibm.streamsx.dps/impl/Makefile | 28 +- .../impl/include/DpsConstants.h | 7 +- .../include/RedisClusterPlusPlusDBLayer.h | 170 + .../impl/include/RedisDBLayer.h | 3 +- .../impl/src/DistributedProcessStore.cpp | 41 +- .../impl/src/RedisClusterDBLayer.cpp | 13 +- .../impl/src/RedisClusterPlusPlusDBLayer.cpp | 5130 +++++++++++++++++ .../impl/src/RedisDBLayer.cpp | 805 ++- com.ibm.streamsx.dps/info.xml | 36 +- dependencies/Makefile | 1 + dependencies/hiredis/Makefile | 6 +- ...iredis-0.13.3-el6-ppc64-install-bin.tar.gz | Bin 97246 -> 0 bytes ...redis-0.13.3-el6-x86_64-install-bin.tar.gz | Bin 79944 -> 0 bytes ...iredis-0.13.3-el7-ppc64-install-bin.tar.gz | Bin 97247 -> 0 bytes ...edis-0.13.3-el7-ppc64le-install-bin.tar.gz | Bin 94225 -> 0 bytes ...redis-0.13.3-el7-x86_64-install-bin.tar.gz | Bin 91209 -> 0 bytes ...is-0.13.3-sles11-x86_64-install-bin.tar.gz | Bin 80098 -> 0 bytes ...is-0.13.3-sles12-x86_64-install-bin.tar.gz | Bin 92454 -> 0 bytes ...iredis-1.0.0-el7-x86_64-install-bin.tar.gz | Bin 0 -> 155357 bytes dependencies/hiredis/patch/sds.h.patch | 19 +- dependencies/hiredis/v0.13.3.tar.gz | Bin 58291 -> 0 bytes dependencies/hiredis/v1.0.0.tar.gz | Bin 0 -> 97507 bytes dependencies/redis-plus-plus/Makefile | 46 + .../redis-plus-plus/hiredis-1.0.0.tar.gz | Bin 0 -> 97507 bytes .../redis-plus-plus-1.2.1.tar.gz | Bin 0 -> 131282 bytes samples/DPSUsageFromCpp/Makefile | 11 +- .../etc/no-sql-kv-store-servers.cfg | 186 +- samples/DPSUsageFromJava/Makefile | 16 +- samples/DPSUsageFromJava/build.xml | 4 +- .../etc/no-sql-kv-store-servers.cfg | 186 +- .../java/src/application/DataStoreTester.java | 13 +- .../src/application/TickerIdGenerator.java | 9 +- samples/DPSUsageFromSPL/Makefile | 5 +- .../etc/no-sql-kv-store-servers.cfg | 186 +- samples/DpsTTLCompositesSample/Makefile | 5 +- .../etc/no-sql-kv-store-servers.cfg | 190 +- .../Makefile | 14 +- .../com.acme.test/Main.spl | 4 + .../etc/no-sql-kv-store-servers.cfg | 111 +- .../Makefile | 16 +- .../etc/no-sql-kv-store-servers.cfg | 111 +- .../Makefile | 33 +- .../build.xml | 6 +- .../etc/no-sql-kv-store-servers.cfg | 111 +- .../src/com/acme/test/TickerIdGenerator.java | 64 +- .../com/ibm/acme/test/DataStoreTester.java | 10 +- .../04_all_dps_apis_at_work_in_spl/Makefile | 5 +- .../com.acme.test/Main.splmm | 60 +- .../etc/no-sql-kv-store-servers.cfg | 111 +- 49 files changed, 7212 insertions(+), 560 deletions(-) create mode 100644 com.ibm.streamsx.dps/impl/include/RedisClusterPlusPlusDBLayer.h create mode 100644 com.ibm.streamsx.dps/impl/src/RedisClusterPlusPlusDBLayer.cpp delete mode 100644 dependencies/hiredis/hiredis-0.13.3-el6-ppc64-install-bin.tar.gz delete mode 100644 dependencies/hiredis/hiredis-0.13.3-el6-x86_64-install-bin.tar.gz delete mode 100644 dependencies/hiredis/hiredis-0.13.3-el7-ppc64-install-bin.tar.gz delete mode 100644 dependencies/hiredis/hiredis-0.13.3-el7-ppc64le-install-bin.tar.gz delete mode 100644 dependencies/hiredis/hiredis-0.13.3-el7-x86_64-install-bin.tar.gz delete mode 100644 dependencies/hiredis/hiredis-0.13.3-sles11-x86_64-install-bin.tar.gz delete mode 100644 dependencies/hiredis/hiredis-0.13.3-sles12-x86_64-install-bin.tar.gz create mode 100644 dependencies/hiredis/hiredis-1.0.0-el7-x86_64-install-bin.tar.gz delete mode 100644 dependencies/hiredis/v0.13.3.tar.gz create mode 100644 dependencies/hiredis/v1.0.0.tar.gz create mode 100644 dependencies/redis-plus-plus/Makefile create mode 100644 dependencies/redis-plus-plus/hiredis-1.0.0.tar.gz create mode 100644 dependencies/redis-plus-plus/redis-plus-plus-1.2.1.tar.gz mode change 100755 => 100644 samples/DPSUsageFromJava/etc/no-sql-kv-store-servers.cfg mode change 100755 => 100644 samples/DPSUsageFromSPL/etc/no-sql-kv-store-servers.cfg mode change 100755 => 100644 samples/DpsTTLCompositesSample/etc/no-sql-kv-store-servers.cfg diff --git a/com.ibm.streamsx.dps/impl/Makefile b/com.ibm.streamsx.dps/impl/Makefile index 28e269a..62ed77a 100644 --- a/com.ibm.streamsx.dps/impl/Makefile +++ b/com.ibm.streamsx.dps/impl/Makefile @@ -22,10 +22,11 @@ AERO_OBJ = AERO_LIB = COUCH_OBJ = CouchbaseDBLayer.o REDIS_CLUSTER_OBJ = RedisClusterDBLayer.o - - +REDIS_CLUSTER_PLUS_PLUS_OBJ = RedisClusterPlusPlusDBLayer.o + REDIS_LIB = $(LIB)/libDPSRedis.so REDIS_CLUSTER_LIB = $(LIB)/libDPSRedisCluster.so +REDIS_CLUSTER_PLUS_PLUS_LIB = $(LIB)/libDPSRedisClusterPlusPlus.so COUCH_LIB = $(LIB)/libDPSCouchbase.so HBASE_LIB = $(LIB)/libDPSHBase.so CASSANDRA_LIB = $(LIB)/libDPSCassandra.so @@ -34,6 +35,7 @@ MONGO_LIB = $(LIB)/libDPSMongo.so MEMCACHED_LIB = $(LIB)/libDPSMemcached.so HELPER_LIBS = $(REDIS_CLUSTER_LIB) +HELPER_LIBS += $(REDIS_CLUSTER_PLUS_PLUS_LIB) HELPER_LIBS += $(COUCH_LIB) HELPER_LIBS += $(REDIS_LIB) HELPER_LIBS += $(HBASE_LIB) @@ -58,7 +60,7 @@ SPL_COMPILE_OPTIONS = $(shell $(SPL_PKGCFG) --cflags $(SPL_PKG)) SPL_LINK_OPTIONS = $(shell $(SPL_PKGCFG) --libs $(SPL_PKG)) CPPFLAGS = -CPPFLAGS += -O3 -Wall -c -fmessage-length=0 -fPIC -D_REENTRANT +CPPFLAGS += -O3 -Wall -c -fmessage-length=0 -fPIC -D_REENTRANT CPPFLAGS += -I include CPPFLAGS += -I nl/include CPPFLAGS += -isystem ext/include @@ -91,7 +93,7 @@ all: check-streams $(DISTRIBUTED_PROCESS_STORE_LIB_STATIC) $(DISTRIBUTED_PROCESS check-streams: @echo "Checking to see if STREAMS_INSTALL is set..." test -d $(STREAMS_INSTALL) || false - + $(DISTRIBUTED_PROCESS_STORE_LIB): $(DISTRIBUTED_PROCESS_STORE_OBJS) mkdir -p $(LIB) $(CXX) $(LDFLAGS) -o $@ $^ @@ -108,15 +110,20 @@ $(DISTRIBUTED_PROCESS_STORE_LIB_STATIC): $(DISTRIBUTED_PROCESS_STORE_OBJS) $(COUCH_LIB): $(COUCH_OBJ) mkdir -p $(LIB) $(CXX) $(LDFLAGS) -o $@ $^ - + $(REDIS_LIB): $(REDIS_OBJ) mkdir -p $(LIB) $(CXX) $(LDFLAGS) -o $@ $^ - + $(REDIS_CLUSTER_LIB): $(REDIS_CLUSTER_OBJ) mkdir -p $(LIB) $(CXX) $(LDFLAGS) -o $@ $^ - + +$(REDIS_CLUSTER_PLUS_PLUS_LIB): CPPFLAGS+=-std=c++11 +$(REDIS_CLUSTER_PLUS_PLUS_LIB): $(REDIS_CLUSTER_PLUS_PLUS_OBJ) + mkdir -p $(LIB) + $(CXX) $(LDFLAGS) -o $@ $^ + $(HBASE_LIB): $(HBASE_OBJ) mkdir -p $(LIB) $(CXX) $(LDFLAGS) -o $@ $^ @@ -124,11 +131,11 @@ $(HBASE_LIB): $(HBASE_OBJ) $(CASSANDRA_LIB): $(CASSANDRA_OBJ) mkdir -p $(LIB) $(CXX) $(LDFLAGS) -o $@ $^ - + $(CLOUDANT_LIB): $(CLOUDANT_OBJ) mkdir -p $(LIB) $(CXX) $(LDFLAGS) -o $@ $^ - + $(MONGO_LIB): $(MONGO_OBJ) mkdir -p $(LIB) $(CXX) $(LDFLAGS) -o $@ $^ @@ -136,12 +143,13 @@ $(MONGO_LIB): $(MONGO_OBJ) $(MEMCACHED_LIB): $(MEMCACHED_OBJ) mkdir -p $(LIB) $(CXX) $(LDFLAGS) -o $@ $^ - + clean: rm -f $(DISTRIBUTED_PROCESS_STORE_OBJS) rm -f $(DISTRIBUTED_PROCESS_STORE_LIB) rm -f $(REDIS_LIB) $(REDIS_OBJ) rm -f $(REDIS_CLUSTER_LIB) $(REDIS_CLUSTER_OBJ) + rm -f $(REDIS_CLUSTER_PLUS_PLUS_LIB) $(REDIS_CLUSTER_PLUS_PLUS_OBJ) rm -f $(MEMCACHED_LIB) $(MEMCACHED_OBJ) rm -f $(CLOUDANT_LIB) $(CLOUDANT_OBJ) rm -f $(CASSANDRA_LIB) $(CASSANDRA_OBJ) diff --git a/com.ibm.streamsx.dps/impl/include/DpsConstants.h b/com.ibm.streamsx.dps/impl/include/DpsConstants.h index 7bdfa67..1117dfe 100644 --- a/com.ibm.streamsx.dps/impl/include/DpsConstants.h +++ b/com.ibm.streamsx.dps/impl/include/DpsConstants.h @@ -1,6 +1,6 @@ /* # Licensed Materials - Property of IBM -# Copyright IBM Corp. 2011, 2016 +# Copyright IBM Corp. 2011, 2020 # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with # IBM Corp. @@ -93,6 +93,7 @@ interface with many different back-end in-memory stores. #define COUCHBASE_NO_SQL_DB_NAME "couchbase" #define AEROSPIKE_NO_SQL_DB_NAME "aerospike" #define REDIS_CLUSTER_NO_SQL_DB_NAME "redis-cluster" +#define REDIS_CLUSTER_PLUS_PLUS_NO_SQL_DB_NAME "redis-cluster-plus-plus" #define HTTP_GET "GET" #define HTTP_PUT "PUT" #define HTTP_POST "POST" @@ -228,5 +229,9 @@ interface with many different back-end in-memory stores. #define DL_LOCK_NOT_FOUND_ERROR 514 #define DL_LOCK_REMOVAL_ERROR 515 #define AEROSPIKE_GET_STORE_ID_ERROR 516 +#define REDIS_PLUS_PLUS_NO_ERROR 0 +#define REDIS_PLUS_PLUS_CONNECTION_ERROR 1 +#define REDIS_PLUS_PLUS_REPLY_ERROR 2 +#define REDIS_PLUS_PLUS_OTHER_ERROR 3 #endif /* DPS_CONSTANTS_H_ */ diff --git a/com.ibm.streamsx.dps/impl/include/RedisClusterPlusPlusDBLayer.h b/com.ibm.streamsx.dps/impl/include/RedisClusterPlusPlusDBLayer.h new file mode 100644 index 0000000..ee1bf1f --- /dev/null +++ b/com.ibm.streamsx.dps/impl/include/RedisClusterPlusPlusDBLayer.h @@ -0,0 +1,170 @@ +/* +# Licensed Materials - Property of IBM +# Copyright IBM Corp. 2011, 2020 +# US Government Users Restricted Rights - Use, duplication or +# disclosure restricted by GSA ADP Schedule Contract with +# IBM Corp. +*/ +#ifndef REDIS_CLUSTER_PLUS_PLUS_DB_LAYER_H_ +#define REDIS_CLUSTER_PLUS_PLUS_DB_LAYER_H_ +/* +===================================================================== +Here is the copyright statement for our use of the hiredis APIs: + +Hiredis was written by Salvatore Sanfilippo (antirez at gmail) and +Pieter Noordhuis (pcnoordhuis at gmail) and is released under the +BSD license. + +Copyright (c) 2009-2011, Salvatore Sanfilippo +Copyright (c) 2010-2011, Pieter Noordhuis + +hiredis-cluster-plus-plus include files provide wrappers on top of the hiredis library. +This wrapper allows us to use the familiar hiredis APIs in the context of +a Redis cluster (Version 6 and higher) to provide HA facility for automatic +fail-over when a Redis instance or the entire machine crashes. +In addition, it provides the TLS/SSL support for the redis-cluster. +Please note that this hiredis-cluster-plus-plus wrapper supercedes the older +hiredis-cluster wrapper that we have in the DPS toolkit. If the Redis server +version is v5 and lower, one may continue to use the older hiredis-cluster in DPS. +If the Redis server version is v6 and higher, it is recommented to use the +hiredis-cluster-plus-plus in order to work with both non-TLS and TLS. + +The redis-plus-plus wrapper carries the Apache 2.0 copyright as shown in the following line. + +A permissive license whose main conditions require preservation of copyright and license notices. +Contributors provide an express grant of patent rights. Licensed works, modifications, and larger +works may be distributed under different terms and without source code. +===================================================================== +*/ +#include "DBLayer.h" + +#include +#include +#include +#include + +using namespace sw::redis; + +namespace com { +namespace ibm { +namespace streamsx { +namespace store { +namespace distributed +{ + class RedisClusterPlusPlusDBLayer; + + /// Class that implements the Iterator for Redis cluster + class RedisClusterPlusPlusDBLayerIterator : public DBLayer::Iterator + { + public: + uint64_t store; + std::string storeName; + std::vector dataItemKeys; + uint32_t sizeOfDataItemKeysVector; + uint32_t currentIndex; + bool hasData; + RedisClusterPlusPlusDBLayer *redisClusterPlusPlusDBLayerPtr; + + RedisClusterPlusPlusDBLayerIterator(); + ~RedisClusterPlusPlusDBLayerIterator(); + bool getNext(uint64_t store, unsigned char * & keyData, uint32_t & keySize, + unsigned char * & valueData, uint32_t & valueSize, PersistenceError & dbError); + }; + + /// Class that implements the DBLayer for Redis Cluster Plus Plus + class RedisClusterPlusPlusDBLayer : public DBLayer + { + private: + bool readStoreInformation(std::string const & storeIdString, PersistenceError & dbError, + uint32_t & dataItemCnt, std::string & storeName, + std::string & keySplTypeName, std::string & valueSplTypeName); + bool acquireStoreLock(std::string const & storeIdString); + void releaseStoreLock(std::string const & storeIdString); + bool readLockInformation(std::string const & storeIdString, PersistenceError & dbError, uint32_t & lockUsageCnt, + int32_t & lockExpirationTime, pid_t & lockOwningPid, std::string & lockName); + bool updateLockInformation(std::string const & lockIdString, PersistenceError & lkError, + uint32_t const & lockUsageCnt, int32_t const & lockExpirationTime, pid_t const & lockOwningPid); + bool lockIdExistsOrNot(std::string lockIdString, PersistenceError & lkError); + bool acquireGeneralPurposeLock(std::string const & entityName); + void releaseGeneralPurposeLock(std::string const & entityName); + int32_t getRedisServerPartitionIndex(std::string const & key); + + public: + RedisCluster *redis_cluster = NULL; + + /// Constructor + RedisClusterPlusPlusDBLayer(); + + /// Destructor + ~RedisClusterPlusPlusDBLayer(); + + // These are inherited from DBLayer, see DBLayer for descriptions + void connectToDatabase(std::set const & dbServers, PersistenceError & dbError); + + uint64_t createStore(std::string const & name, + std::string const & keySplTypeName, + std::string const & valueSplTypeName, + PersistenceError & dbError); + uint64_t createOrGetStore(std::string const & name, + std::string const & keySplTypeName, + std::string const & valueSplTypeName, + PersistenceError & dbError); + uint64_t findStore(std::string const & name, + PersistenceError & dbError); + bool removeStore(uint64_t store, PersistenceError & dbError); + + bool put(uint64_t store, char const * keyData, uint32_t keySize, + unsigned char const * valueData, uint32_t valueSize, PersistenceError & dbError); + bool putSafe(uint64_t store, char const * keyData, uint32_t keySize, + unsigned char const * valueData, uint32_t valueSize, PersistenceError & dbError); + bool putTTL(char const * keyData, uint32_t keySize, + unsigned char const * valueData, uint32_t valueSize, uint32_t ttl, PersistenceError & dbError, bool encodeKey=true, bool encodeValue=true); + bool get(uint64_t store, char const * keyData, uint32_t keySize, + unsigned char * & valueData, uint32_t & valueSize, + PersistenceError & dbError); + bool getSafe(uint64_t store, char const * keyData, uint32_t keySize, + unsigned char * & valueData, uint32_t & valueSize, + PersistenceError & dbError); + bool getTTL(char const * keyData, uint32_t keySize, + unsigned char * & valueData, uint32_t & valueSize, + PersistenceError & dbError, bool encodeKey=true); + bool remove(uint64_t store, char const * keyData, uint32_t keySize, PersistenceError & dbError); + bool removeTTL(char const * keyData, uint32_t keySize, PersistenceError & dbError, bool encodeKey=true); + bool has(uint64_t store, char const * keyData, uint32_t keySize, PersistenceError & dbError); + bool hasTTL(char const * keyData, uint32_t keySize, PersistenceError & dbError, bool encodeKey=true); + void clear(uint64_t store, PersistenceError & dbError); + uint64_t size(uint64_t store, PersistenceError & dbError); + void base64_encode(std::string const & str, std::string & base64); + void base64_decode(std::string & base64, std::string & result); + bool isConnected(); + bool reconnect(std::set & dbServers, PersistenceError & dbError); + + RedisClusterPlusPlusDBLayerIterator * newIterator(uint64_t store, PersistenceError & dbError); + void deleteIterator(uint64_t store, Iterator * iter, PersistenceError & dbError); + bool storeIdExistsOrNot(std::string storeIdString, PersistenceError & dbError); + bool getDataItemFromStore(std::string const & storeIdString, + std::string const & keyDataString, bool const & checkOnlyForDataItemExistence, + bool const & skipDataItemExistenceCheck, unsigned char * & valueData, + uint32_t & valueSize, PersistenceError & dbError); + std::string getStoreName(uint64_t store, PersistenceError & dbError); + std::string getSplTypeNameForKey(uint64_t store, PersistenceError & dbError); + std::string getSplTypeNameForValue(uint64_t store, PersistenceError & dbError); + std::string getNoSqlDbProductName(void); + void getDetailsAboutThisMachine(std::string & machineName, std::string & osVersion, std::string & cpuArchitecture); + bool runDataStoreCommand(std::string const & cmd, PersistenceError & dbError); + bool runDataStoreCommand(uint32_t const & cmdType, std::string const & httpVerb, + std::string const & baseUrl, std::string const & apiEndpoint, std::string const & queryParams, + std::string const & jsonRequest, std::string & jsonResponse, PersistenceError & dbError); + bool runDataStoreCommand(std::vector const & cmdList, std::string & resultValue, PersistenceError & dbError); + + // Lock related methods. + uint64_t createOrGetLock(std::string const & name, PersistenceError & lkError); + void releaseLock(uint64_t lock, PersistenceError & lkError); + bool acquireLock(uint64_t lock, double leaseTime, double maxWaitTimeToAcquireLock, PersistenceError & lkError); + bool removeLock(uint64_t lock, PersistenceError & lkError); + uint32_t getPidForLock(std::string const & name, PersistenceError & lkError); + void persist(PersistenceError & dbError); + + }; +} } } } } +#endif /* REDIS_CLUSTER_PLUS_PLUS_DB_LAYER_H_ */ diff --git a/com.ibm.streamsx.dps/impl/include/RedisDBLayer.h b/com.ibm.streamsx.dps/impl/include/RedisDBLayer.h index 5fe0615..dd6a327 100644 --- a/com.ibm.streamsx.dps/impl/include/RedisDBLayer.h +++ b/com.ibm.streamsx.dps/impl/include/RedisDBLayer.h @@ -1,6 +1,6 @@ /* # Licensed Materials - Property of IBM -# Copyright IBM Corp. 2011, 2014 +# Copyright IBM Corp. 2011, 2020 # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with # IBM Corp. @@ -49,6 +49,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "DBLayer.h" #include "hiredis/hiredis.h" +#include "hiredis/hiredis_ssl.h" #include #include #include diff --git a/com.ibm.streamsx.dps/impl/src/DistributedProcessStore.cpp b/com.ibm.streamsx.dps/impl/src/DistributedProcessStore.cpp index cf29192..d951484 100644 --- a/com.ibm.streamsx.dps/impl/src/DistributedProcessStore.cpp +++ b/com.ibm.streamsx.dps/impl/src/DistributedProcessStore.cpp @@ -1,6 +1,6 @@ /* # Licensed Materials - Property of IBM -# Copyright IBM Corp. 2011, 2014 +# Copyright IBM Corp. 2011, 2020 # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with # IBM Corp. @@ -267,6 +267,7 @@ namespace distributed void* handle1 = NULL; void* handle2 = NULL; void* handle3 = NULL; + void* handle4 = NULL; bool libraryLoadingError = false; std::string kvLibName = ""; std::string toolkitDir = ProcessingElement::pe().getToolkitDirectory("com.ibm.streamsx.dps") + "/impl/ext/lib" ; @@ -278,9 +279,15 @@ namespace distributed } else if (noSqlKvStoreProductName.compare("redis") == 0) { handle1 = load_dependent_lib(toolkitDir, "libuv.so"); handle2 = load_dependent_lib(toolkitDir, "libhiredis.so"); + // Oct/12/2020 to support "TLS for redis". If the user configures the DPS toolkit to + // use "TLS for redis", then this additional .so file will take care of that need. + // On the IBM Streams application Linux machines, it is a must to install opensssl and + // and openssl-devel RPM packages. The following libhiredis_ssl.so file has a dependency on the + // /lib64/libssl.so and /lib64/libcrypto.so libraries that are part of openssl. + handle3 = load_dependent_lib(toolkitDir, "libhiredis_ssl.so"); kvLibName= "libDPSRedis.so"; - if (handle1 == NULL || handle2 == NULL) { + if (handle1 == NULL || handle2 == NULL || handle3 == NULL) { libraryLoadingError = true; } } else if (noSqlKvStoreProductName.compare("cassandra") == 0) { @@ -344,6 +351,21 @@ namespace distributed if (handle1 == NULL || handle2 == NULL) { libraryLoadingError = true; } + } else if (noSqlKvStoreProductName.compare("redis-cluster-plus-plus") == 0) { + handle1 = load_dependent_lib(toolkitDir, "libuv.so"); + handle2 = load_dependent_lib(toolkitDir,"libhiredis.so"); + // Oct/12/2020 to support "TLS for redis". If the user configures the DPS toolkit to + // use "TLS for redis", then this additional .so file will take care of that need. + // On the IBM Streams application Linux machines, it is a must to install opensssl and + // and openssl-devel RPM packages. The following libhiredis_ssl.so file has a dependency on the + // /lib64/libssl.so and /lib64/libcrypto.so libraries that are part of openssl. + handle3 = load_dependent_lib(toolkitDir, "libhiredis_ssl.so"); + handle4 = load_dependent_lib(toolkitDir, "libredis++.so"); + kvLibName= "libDPSRedisClusterPlusPlus.so"; + + if (handle1 == NULL || handle2 == NULL || handle3 == NULL || handle4 == NULL) { + libraryLoadingError = true; + } } else { // Invalid no-sql store product name configured. Abort now. // SPLAPPLOG is causing it to get stuck in RHEL6/CentOS6 (RHEL7/CentOS7 is fine) when the @catch annotation is used in the calling SPL code. @@ -381,6 +403,11 @@ namespace distributed handle3 = NULL; } + if (handle4 != NULL) { + dlclose(handle4); + handle4 = NULL; + } + if (handle != NULL) { dlclose(handle); handle = NULL; @@ -416,6 +443,11 @@ namespace distributed handle3 = NULL; } + if (handle4 != NULL) { + dlclose(handle4); + handle4 = NULL; + } + if (handle != NULL) { dlclose(handle); handle = NULL; @@ -449,6 +481,11 @@ namespace distributed handle3 = NULL; } + if (handle4 != NULL) { + dlclose(handle4); + handle4 = NULL; + } + if (handle != NULL) { dlclose(handle); handle = NULL; diff --git a/com.ibm.streamsx.dps/impl/src/RedisClusterDBLayer.cpp b/com.ibm.streamsx.dps/impl/src/RedisClusterDBLayer.cpp index 61b34c6..85a6c89 100644 --- a/com.ibm.streamsx.dps/impl/src/RedisClusterDBLayer.cpp +++ b/com.ibm.streamsx.dps/impl/src/RedisClusterDBLayer.cpp @@ -1,6 +1,6 @@ /* # Licensed Materials - Property of IBM -# Copyright IBM Corp. 2011, 2017 +# Copyright IBM Corp. 2011, 2020 # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with # IBM Corp. @@ -79,14 +79,9 @@ It is important to note that a Streams application designer/developer should car of his/her application will access the store simultaneously i.e. who puts what, who gets what and at what frequency from where etc. -This C++ project has a companion SPL project (058_data_sharing_between_non_fused_spl_custom_and_cpp_primitive_operators). -Please refer to the commentary in that SPL project file for learning about the procedure to do an -end-to-end test run involving the SPL code, serialization/deserialization code, -redis-cluster interface code (this file), and your redis-cluster infrastructure. - -As a first step, you should run the ./mk script from the C++ project directory (DistributedProcessStoreLib). -That will take care of building the .so file for the dps and copy it to the SPL project's impl/lib directory. -================================================================================================================== +There are simple and advanced examples included in the DPS toolkit to test all the features described in the previous +paragraph. +======================================================================================================== */ #include "RedisClusterDBLayer.h" diff --git a/com.ibm.streamsx.dps/impl/src/RedisClusterPlusPlusDBLayer.cpp b/com.ibm.streamsx.dps/impl/src/RedisClusterPlusPlusDBLayer.cpp new file mode 100644 index 0000000..b2ec284 --- /dev/null +++ b/com.ibm.streamsx.dps/impl/src/RedisClusterPlusPlusDBLayer.cpp @@ -0,0 +1,5130 @@ +/* +# Licensed Materials - Property of IBM +# Copyright IBM Corp. 2011, 2020 +# US Government Users Restricted Rights - Use, duplication or +# disclosure restricted by GSA ADP Schedule Contract with +# IBM Corp. +*/ +/* +===================================================================== +Here is the copyright statement for our use of the hiredis APIs: + +Hiredis was written by Salvatore Sanfilippo (antirez at gmail) and +Pieter Noordhuis (pcnoordhuis at gmail) and is released under the +BSD license. + +Copyright (c) 2009-2011, Salvatore Sanfilippo +Copyright (c) 2010-2011, Pieter Noordhuis + +redis-plus-plus include files provide wrappers on top of the hiredis library. +This wrapper allows us to use the familiar hiredis APIs in the context of +a Redis cluster (Version 6 and higher) to provide HA facility for automatic +fail-over when a Redis instance or the entire machine crashes. +In addition, it provides the TLS/SSL support for the redis-cluster. +Please note that this redis-plus-plus wrapper supercedes the older +hiredis-cluster wrapper that we also use in the DPS toolkit. If the Redis server +version is v5 and lower, one may continue to use the older hiredis-cluster in DPS. +If the Redis server version is v6 and higher, it is recommended to use the +redis-cluster-plus-plus in order to work with both non-TLS and TLS. + +The redis-plus-plus wrapper carries the Apache 2.0 copyright as shown in the following line. + +A permissive license whose main conditions require preservation of copyright and license notices. +Contributors provide an express grant of patent rights. Licensed works, modifications, and larger +works may be distributed under different terms and without source code. +===================================================================== +*/ + +/* +================================================================================================================== +This CPP file contains the source code for the distributed process store (dps) back-end activities such as +insert, update, read, remove, etc. This dps implementation runs on top of the popular redis-cluster in-memory store. +Redis-Cluster is a simple, but a great open source effort that carries a BSD license. +Thanks to Salvatore Sanfilippo, who created Redis, when he was 30 years old in 2009. What an amazing raw talent!!! +In a (2011) interview, he nicely describes about the reason to start that marvelous project. + +http://www.thestartup.eu/2011/01/an-interview-with-salvatore-sanfilippo-creator-of-redis-cluster-working-out-of-sicily/ + +Redis-Cluster (Version 3 and higher) is a full fledged NoSQL data store with support for complex types such as list, +set, and hash. It also has APIs to perform store commands within a transaction block. Its replication, persistence, +and cluster features are far superior considering that its first release was done only in April/2015. +As of Nov/2020, Redis is at version 6 with many more enhancements including TLS/SSL. To work with Redis v6 and higher +in cluster mode, DPS toolkit introduces a new redis-cluster-plus-plus option which is implemented in this file using +the popular redis-plus-plus C++ library. (DPS toolkit also supports two other options: "redis" for non-cluster +configuration and "redis-cluster" for cluster mode configuration for Redis v5 and lower versions.) + +Any dpsXXXXX native function call made from a SPL composite will go through a serialization layer and then hit +this CPP file. Here, the purpose of such SPL native function calls will be fulfilled using the redis-plus-plus APIs. +After that, the results will be sent to a deserialization layer. From there, results will be transformed using the +correct SPL types and delivered back to the SPL composite. In general, our distributed process store provides +a "global + distributed" in-memory cache for different processes (multiple PEs from one or more Streams applications). +We provide a set of free for all native function APIs to create/read/update/delete data items on one or more stores. +In the worst case, there could be multiple writers and multiple readers for the same store. +It is important to note that a Streams application designer/developer should carefully address how different parts +of his/her application will access the store simultaneously i.e. who puts what, who gets what and at +what frequency from where etc. + +There are simple and advanced examples included in the DPS toolkit to test all the features described in the previous +paragraph. +======================================================================================================== +*/ + +#include "RedisClusterPlusPlusDBLayer.h" +#include "DpsConstants.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// On the IBM Streams application Linux machines, it is a must to install opensssl and +// and openssl-devel RPM packages. The TLS connection logic in the code below will +// require openssl to be available. +// In particular, it will use the /lib64/libssl.so and /lib64/libcrypto.so libraries +// that are part of openssl. + +using namespace std; +using namespace SPL; +using namespace streams_boost::archive::iterators; + +namespace com { +namespace ibm { +namespace streamsx { +namespace store { +namespace distributed +{ + RedisClusterPlusPlusDBLayer::RedisClusterPlusPlusDBLayer() + { + redis_cluster = NULL; + } // End of constructor. + + RedisClusterPlusPlusDBLayer::~RedisClusterPlusPlusDBLayer() + { + // Delete the cluster connection object. + delete redis_cluster; + } // End of destructor. + + void RedisClusterPlusPlusDBLayer::connectToDatabase(std::set const & dbServers, PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase", "RedisClusterPlusPlusDBLayer"); + + // Get the name, OS version and CPU type of this machine. + struct utsname machineDetails; + + if(uname(&machineDetails) < 0) { + dbError.set("Unable to get the machine/os/cpu details.", DPS_INITIALIZE_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed to get the machine/os/cpu details. " << DPS_INITIALIZE_ERROR, "RedisClusterPlusPlusDBLayer"); + return; + } else { + nameOfThisMachine = string(machineDetails.nodename); + osVersionOfThisMachine = string(machineDetails.sysname) + string(" ") + string(machineDetails.release); + cpuTypeOfThisMachine = string(machineDetails.machine); + } + + string redisClusterConnectionErrorMsg = "Unable to initialize the redis-cluster-plus-plus connection context."; + // Senthil added this block of code on May/02/2017. + // As part of the Redis configuration in the DPS config file, we now allow the user to specify + // an optional Redis authentication password as shown below. + // server:port:RedisPassword:ConnectionTimeoutValue:use_tls + string targetServerPassword = ""; + string targetServerName = ""; + int targetServerPort = 0; + int connectionTimeout = 0; + int useTls = -1; + string redisClusterCACertFileName = ""; + int connectionAttemptCnt = 0; + + // Get the current thread id that is trying to make a connection to redis cluster. + int threadId = (int)gettid(); + + // We need only one server in the Redis cluster to do the cluster based Redis HA operations. + for (std::set::iterator it=dbServers.begin(); it!=dbServers.end(); ++it) { + std::string serverName = *it; + // If the user has configured to use the unix domain socket, take care of that as well. + if (serverName == "unixsocket") { + // We will consider supporting this at a later time. + redisClusterConnectionErrorMsg += " UnixSocket is not supported when DPS is configured with redis-cluster-plus-plus."; + dbError.set(redisClusterConnectionErrorMsg, DPS_INITIALIZE_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed with an error '" << + redisClusterConnectionErrorMsg << "'. " << DPS_INITIALIZE_ERROR, "RedisClusterPlusPlusDBLayer"); + return; + } else { + // Redis server name can have port number, password, connection timeout value and + // use_tls=1 specified along with it --> MyHost:2345:xyz:5:use_tls + int32_t tokenCnt = 0; + // This technique to get the empty tokens while tokenizing a string is described in this URL: + // https://stackoverflow.com/questions/22331648/boosttokenizer-point-separated-but-also-keeping-empty-fields + typedef streams_boost::tokenizer > tokenizer; + streams_boost::char_separator sep( + ":", // dropped delimiters + "", // kept delimiters + streams_boost::keep_empty_tokens); // empty token policy + + STREAMS_BOOST_FOREACH(std::string token, tokenizer(serverName, sep)) { + tokenCnt++; + + if (tokenCnt == 1) { + // This must be our first token. + if (token != "") { + targetServerName = token; + } + } else if (tokenCnt == 2){ + // This must be our second token. + if (token != "") { + targetServerPort = atoi(token.c_str()); + } + + if (targetServerPort <= 0) { + targetServerPort = REDIS_SERVER_PORT; + } + } else if (tokenCnt == 3) { + // This must be our third token. + if (token != "") { + targetServerPassword = token; + } + } else if (tokenCnt == 4) { + // This must be our fourth token. + if (token != "") { + connectionTimeout = atoi(token.c_str()); + } + + if (connectionTimeout <= 0) { + // Set it to a default of 3 seconds. + connectionTimeout = 3; + } + } else if (tokenCnt == 5) { + // This must be our fifth token. + if (token != "") { + useTls = atoi(token.c_str()); + } + + if (useTls < 0) { + // Set it to a default of 0 i.e. no TLS needed. + useTls = 0; + } + + if (useTls > 0) { + // Set it to 1 i.e. TLS needed. + useTls = 1; + } + } else if (tokenCnt == 6) { + // This must be our sixth token. + if (token != "") { + // This is a fully qualified Redis cluster CA cert filename. + redisClusterCACertFileName = token; + } + } // End of the long if-else block. + } // End of the Boost FOREACH loop. + + if (targetServerName == "") { + // User only specified the server name and no port. + // (This is the case of server name followed by a : character with a missing port number) + targetServerName = serverName; + // In this case, use the default Redis server port. + targetServerPort = REDIS_SERVER_PORT; + } + + if (targetServerPort <= 0) { + // User didn't give a Redis server port. + // Only a server name was given not followed by a : character. + // Use the default Redis server port. + targetServerPort = REDIS_SERVER_PORT; + } + + // Password is already set to empty string at the time of variable declaration. + // Because of that, we are good even if the redis configuration string has this field as blank. + + if (connectionTimeout <= 0) { + // User didn't configure a connectionTimeout field at all. So, set it to 3 seconds. + connectionTimeout = 3; + } + + if (useTls < 0) { + // User didn't configure a useTls field at all, So, set it to 0 i.e. no TLS needed. + useTls = 0; + } + + // Use this line to test out the parsed tokens from the Redis configuration string. + connectionAttemptCnt++; + string clusterPasswordUsage = "a"; + + if (targetServerPassword.length() <= 0) { + clusterPasswordUsage = "no"; + } + + cout << connectionAttemptCnt << ") ThreadId=" << threadId << ". Attempting to connect to the Redis cluster node " << targetServerName << " on port " << targetServerPort << " with " << clusterPasswordUsage << " password. " << "connectionTimeout=" << connectionTimeout << ", use_tls=" << useTls << ", redisClusterCACertFileName=" << redisClusterCACertFileName << "." << endl; + + // Current redis cluster version as of Oct/29/2020 is 6.0.9 + // If the redis cluster node is inactive, the following statement may throw an exception. + // We will catch it, log it and proceed to connect with the next available redis cluster node. + try { + // Initialize the connection options with a master node and its port along with + // other options such as password authentication, TLS/SSL etc. + ConnectionOptions connection_options; + connection_options.host = targetServerName; + connection_options.port = targetServerPort; + + if(targetServerPassword.length() > 0) { + connection_options.password = targetServerPassword; + } + + // Set the TCP socket timeout in msec. + connection_options.socket_timeout = std::chrono::milliseconds(connectionTimeout * 1000); + // Set the connection timeout in msec. + connection_options.connect_timeout = std::chrono::milliseconds(connectionTimeout * 1000); + + // Set the desired TLS/SSL option. + if(useTls == 1) { + connection_options.tls.enabled = true; + connection_options.tls.cacert = redisClusterCACertFileName; + } + + // Get a redis-plus-plus cluster object for the given connection options. + // Automatically get other nodes' information. Then, make a (single) connection to + // every given master node. A single connection here means, we don't want a pool of + // connections to every master node. + redis_cluster = new RedisCluster(connection_options); + } catch (Error &ex) { + cout << "Caught an exception connecting to a redis cluster node at " << targetServerName << ":" << targetServerPort << " (" << ex.what() << "). Skipping it and moving on to a next available redis cluster node." << endl; + // Continue with the next iteration in the for loop. + continue; + } + } // End of if (serverName == "unixsocket") + + if (redis_cluster == NULL) { + redisClusterConnectionErrorMsg += " Connection error in the createCluster API."; + cout << "ThreadId=" << threadId << ". Unable to connect to the Redis cluster node " << targetServerName << " on port " << targetServerPort << endl; + } else { + // Reset the error string. + redisClusterConnectionErrorMsg = ""; + string passwordUsage = "a"; + + if (targetServerPassword.length() <= 0) { + passwordUsage = "no"; + } + + cout << "ThreadId=" << threadId << ". Successfully connected with " << passwordUsage << " password to the Redis cluster node " << targetServerName << " on port " << targetServerPort << endl; + // Break out of the for loop. + break; + } + } // End of the for loop. + + // Check if there was any connection error. + if (redisClusterConnectionErrorMsg != "") { + dbError.set(redisClusterConnectionErrorMsg, DPS_INITIALIZE_ERROR); + SPLAPPTRC(L_ERROR, "Inside connectToDatabase, it failed with an error '" << + redisClusterConnectionErrorMsg << "'. " << DPS_INITIALIZE_ERROR, "RedisClusterPlusPlusDBLayer"); + return; + } + + // We have now made connection to one server in a redis-cluster. + // Let us check if the global storeId key:value pair is already there in the cache. + string keyString = string(DPS_AND_DL_GUID_KEY); + long long exists_result_value = 0; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + exists_result_value = redis_cluster->exists(keyString); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_EXISTS_CMD: ") + exceptionString, DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside connectToDatabase, it failed with a Redis connection error for REDIS_EXISTS_CMD. Exception: " << exceptionString << " " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to check the existence of the dps GUID key. Error=" + exceptionString, DPS_KEY_EXISTENCE_CHECK_ERROR); + SPLAPPTRC(L_ERROR, "Inside connectToDatabase, it failed. Error=" << + exceptionString << ". rc=" << DPS_KEY_EXISTENCE_CHECK_ERROR, "RedisClusterPlusPlusDBLayer"); + return; + } + + if (exists_result_value == 0) { + // It could be that our global store id is not there now. + // Let us create one with an initial value of 0. + // Redis setnx is an atomic operation. It will succeed only for the very first operator that + // attempts to do this setting after a redis-cluster server is started fresh. If some other operator + // already raced us ahead and created this guid_key, then our attempt below will be safely rejected. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->setnx(keyString, string("0")); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + if(exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + dbError.set(string("Unable to connect to the redis-cluster server(s). ") + + string("Error in REDIS_SETNX_CMD. Exception=") + exceptionString, DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside connectToDatabase, it failed with an error for REDIS_SETNX_CMD. Exception=" << exceptionString << ". rc=" << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return; + } + } // End of if (exists_result_value == 0) + + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase done", "RedisClusterPlusPlusDBLayer"); + } // End of connectToDatabase. + + uint64_t RedisClusterPlusPlusDBLayer::createStore(std::string const & name, + std::string const & keySplTypeName, std::string const & valueSplTypeName, + PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside createStore for store " << name, "RedisClusterPlusPlusDBLayer"); + + string base64_encoded_name; + base64_encode(name, base64_encoded_name); + + // Get a general purpose lock so that only one thread can + // enter inside of this method at any given time with the same store name. + if (acquireGeneralPurposeLock(base64_encoded_name) == false) { + // Unable to acquire the general purpose lock. + dbError.set("Unable to get a generic lock for creating a store with its name as " + name + ".", DPS_GET_GENERIC_LOCK_ERROR); + SPLAPPTRC(L_DEBUG, "Inside createStore, it failed for an yet to be created store with its name as " << + name << ". " << DPS_GET_GENERIC_LOCK_ERROR, "RedisClusterPlusPlusDBLayer"); + // User has to retry again to create this store. + return 0; + } + + // Let us first see if a store with the given name already exists. + // + // Inside Redis, all our store names will have a mapping type indicator of + // "0" at the beginning followed by the actual store name. "0" + 'store name' + // (See the store layout description documented in the next page.) + // Additionally, in Redis, store names can have space characters in them. + string keyString = string(DPS_STORE_NAME_TYPE) + base64_encoded_name; + long long exists_result_value = 0; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + exists_result_value = redis_cluster->exists(keyString); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_EXISTS_CMD: ") + exceptionString + + string(" Application code may call the DPS reconnect API and then retry the failed operation. "), + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed for store " << name << " with a Redis connection error for REDIS_EXISTS_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to check the existence of a store with a name" + name + + ". Error=" + exceptionString, DPS_KEY_EXISTENCE_CHECK_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed to check for a store existence. Error=" << + exceptionString << ". rc=" << DPS_KEY_EXISTENCE_CHECK_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + if (exists_result_value == 1) { + // This store already exists in our cache. + // We can't create another one with the same name now. + dbError.set("A store named " + name + " already exists", DPS_STORE_EXISTS); + SPLAPPTRC(L_DEBUG, "Inside createStore, it failed for store " << name << " that already exists. " << DPS_STORE_EXISTS, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // If we reach here that means, the store doesn't exist at this time. + // We can go ahead and try to create that new store. + // Create a new store. + // At first, let us increment our global dps_guid to reserve a new store id. + keyString = string(DPS_AND_DL_GUID_KEY); + long long incr_result_value = 0; + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + uint64_t storeId = 0; + + try { + incr_result_value = redis_cluster->incr(keyString); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_INCR_CMD: ") + exceptionString + + string(" Application code may call the DPS reconnect API and then retry the failed operation. "), + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed for store " << name << " with a Redis connection error for REDIS_INCR_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to get a unique store id for a store with a name" + name + + ". Error=" + exceptionString, DPS_GUID_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed to create a unique store id for a store with a name " << name << ". Error=" << exceptionString << ". rc=" << DPS_GUID_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + storeId = incr_result_value; + + /* + We secured a guid. We can now create this store. Layout for a distributed process store (dps) looks like this. + 1) Create a root entry called "Store Name": '0' + 'store name' => 'store id' + 2) Create "Store Contents Hash": '1' + 'store id' => 'Redis Hash' + This hash will always have the following three metadata entries: + * a) dps_name_of_this_store ==> 'store name' + * b) dps_spl_type_name_of_key ==> 'spl type name for this store's key' + * c) dps_spl_type_name_of_value ==> 'spl type name for this store's value' + 3) In addition, we will also create and delete custom locks for modifying store contents in (2) above: '4' + 'store id' + 'dps_lock' => 1 + + 4) Create a root entry called "Lock Name": '5' + 'lock name' ==> 'lock id' [This lock is used for performing store commands in a transaction block.] + + 5) Create "Lock Info": '6' + 'lock id' ==> 'lock use count' + '_' + 'lock expiration time expressed as elapsed seconds since the epoch' + '_' + 'lock name' + + 6) In addition, we will also create and delete user-defined locks: '7' + 'lock id' + 'dl_lock' => 1 + 7) We will also allow general purpose locks to be created by any entity for sundry use: '501' + 'entity name' + 'generic_lock' => 1 + */ + + // + // 1) Create the Store Name + // '0' + 'store name' => 'store id' + std::ostringstream value; + value << storeId; + keyString = string(DPS_STORE_NAME_TYPE) + base64_encoded_name; + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->set(keyString, value.str()); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_SET_CMD: ") + exceptionString + + string(" Application code may call the DPS reconnect API and then retry the failed operation. "), + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed for store " << name << " with a Redis connection error for REDIS_SET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to set a K/V pair in a store with a name" + name + + ". Error=" + exceptionString, DPS_STORE_NAME_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed to set a K/V pair in a store with a name " << name << ". Error=" << exceptionString << ". rc=" << DPS_STORE_NAME_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + // We are simply leaving an incremented value for the dps_guid key in the cache that will never get used. + // Since it is harmless, there is no need to reduce this number by 1. It is okay that this guid number will remain unassigned to any store. + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // 2) Create the Store Contents Hash + // '1' + 'store id' => 'Redis Hash' + // Every store contents hash will always have these three metadata entries: + // dps_name_of_this_store ==> 'store name' + // dps_spl_type_name_of_key ==> 'spl type name for this store's key' + // dps_spl_type_name_of_value ==> 'spl type name for this store's value' + // + // Every store contents hash will have at least three elements in it carrying the actual store name, key spl type name and value spl type name. + // In addition, inside this store contents hash, we will house the + // actual key:value data items that user wants to keep in this store. + // Such a store contents hash is very useful for data item read, write, deletion, enumeration etc. + // Redis hash has the operational efficiency of O(1) i.e. constant time execution for get, put, and del with any hash size. + // 2a) Let us create a new store contents hash with a mandatory element that will carry the name of this store. + // (This mandatory entry will help us to do the reverse mapping from store id to store name.) + // StoreId becomes the new key now. + keyString = string(DPS_STORE_CONTENTS_HASH_TYPE) + value.str(); + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->hset(keyString, + string(REDIS_STORE_ID_TO_STORE_NAME_KEY), + base64_encoded_name); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HSET_CMD: ") + exceptionString + + string(" Application code may call the DPS reconnect API and then retry the failed operation. "), + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed for store " << name << " with a Redis connection error for REDIS_HSET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to create 'Store Contents Hash' in a store with a name" + name + + ". Error=" + exceptionString, DPS_STORE_HASH_METADATA1_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed to create 'Store Contents Hash' in a store with a name " << name << ". Error=" << exceptionString << ". rc=" << DPS_STORE_HASH_METADATA1_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + + // Delete the previous store name root entry we made. + keyString = string(DPS_STORE_NAME_TYPE) + base64_encoded_name; + + try { + redis_cluster->del(keyString); + } catch (const Error &ex) { + // It is not good if this one fails. We can't do much about that. + } + + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // 2b) We are now going to save the SPL type names of the key as part of this + // store's metadata. That will help us in the Java dps API "findStore" to cache the + // key and spl type names inside the Java StoreImpl object by querying from the store's metadata. + // Add the key spl type name metadata. + string base64_encoded_keySplTypeName; + base64_encode(keySplTypeName, base64_encoded_keySplTypeName); + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->hset(keyString, + string(REDIS_SPL_TYPE_NAME_OF_KEY), + base64_encoded_keySplTypeName); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HSET_CMD: ") + exceptionString + + string(" Application code may call the DPS reconnect API and then retry the failed operation. "), + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed for store " << name << " with a Redis connection error for REDIS_HSET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to create 'Store Contents Hash' in a store with a name" + name + + ". Error=" + exceptionString, DPS_STORE_HASH_METADATA2_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed to create 'Store Contents Hash' in a store with a name " << name << ". Error=" << exceptionString << ". rc=" << DPS_STORE_HASH_METADATA2_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + + // Delete the store contents hash with partial entries we created above. + try { + redis_cluster->del(keyString); + } catch (const Error &ex) { + // It is not good if this one fails. We can't do much about that. + } + + // We will also delete the store name root entry we made above. + keyString = string(DPS_STORE_NAME_TYPE) + base64_encoded_name; + + try { + redis_cluster->del(keyString); + } catch (const Error &ex) { + // It is not good if this one fails. We can't do much about that. + } + + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // 2c) We are now going to save the SPL type names of the value as part of this + // store's metadata. That will help us in the Java dps API "findStore" to cache the + // key and spl type names inside the Java StoreImpl object by querying from the store's metadata. + // Add the value spl type name metadata. + string base64_encoded_valueSplTypeName; + base64_encode(valueSplTypeName, base64_encoded_valueSplTypeName); + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->hset(keyString, + string(REDIS_SPL_TYPE_NAME_OF_VALUE), + base64_encoded_valueSplTypeName); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HSET_CMD: ") + exceptionString + + string(" Application code may call the DPS reconnect API and then retry the failed operation. "), + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed for store " << name << " with a Redis connection error for REDIS_HSET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to create 'Store Contents Hash' in a store with a name" + name + + ". Error=" + exceptionString, DPS_STORE_HASH_METADATA3_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "Inside createStore, it failed to create 'Store Contents Hash' in a store with a name " << name << ". Error=" << exceptionString << ". rc=" << DPS_STORE_HASH_METADATA3_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + + // Delete the store contents hash with partial entries we created above. + try { + redis_cluster->del(keyString); + } catch (const Error &ex) { + // It is not good if this one fails. We can't do much about that. + } + + // We will also delete the store name root entry we made above. + keyString = string(DPS_STORE_NAME_TYPE) + base64_encoded_name; + + try { + redis_cluster->del(keyString); + } catch (const Error &ex) { + // It is not good if this one fails. We can't do much about that. + } + + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // A new store is created now. + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } // End of createStore. + + uint64_t RedisClusterPlusPlusDBLayer::createOrGetStore(std::string const & name, + std::string const & keySplTypeName, std::string const & valueSplTypeName, + PersistenceError & dbError) + { + // We will rely on a method above this and another method below this to accomplish what is needed here. + SPLAPPTRC(L_DEBUG, "Inside createOrGetStore for store " << name, "RedisClusterPlusPlusDBLayer"); + + uint64_t storeId = createStore(name, keySplTypeName, valueSplTypeName, dbError); + + if (storeId > 0) { + // It must be a new store that just got created in the method call we made above. + return(storeId); + } + + // Check if any error code is set from the create store method call we made above.. + if ((dbError.hasError() == true) && (dbError.getErrorCode() != DPS_STORE_EXISTS)) { + // There was an error in creating the store. + return(0); + } + + // In all other cases, we are dealing with an existing store in our cache. + // We can get the storeId by calling the method below and return the result to the caller. + dbError.reset(); + return(findStore(name, dbError)); + } // End of createOrGetStore. + + uint64_t RedisClusterPlusPlusDBLayer::findStore(std::string const & name, PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside findStore for store " << name, "RedisClusterPlusPlusDBLayer"); + + string base64_encoded_name; + base64_encode(name, base64_encoded_name); + + // Let us first see if this store already exists. + // Inside Redis, all our store names will have a mapping type indicator of + // "0" at the beginning followed by the actual store name. "0" + 'store name' + std::string storeNameKey = DPS_STORE_NAME_TYPE + base64_encoded_name; + long long exists_result_value = 0; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + exists_result_value = redis_cluster->exists(storeNameKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_EXISTS_CMD: ") + exceptionString + + string(" Application code may call the DPS reconnect API and then retry the failed operation. "), + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside findStore, it failed for store " << name << " with a Redis connection error for REDIS_EXISTS_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return 0; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to check the existence of a store with a name" + name + + ". Error=" + exceptionString, DPS_STORE_EXISTENCE_CHECK_ERROR); + SPLAPPTRC(L_ERROR, "Inside findStore, it failed to check for a store existence. Error=" << + exceptionString << ". rc=" << DPS_STORE_EXISTENCE_CHECK_ERROR, "RedisClusterPlusPlusDBLayer"); + return 0; + } + + if (exists_result_value == 0) { + // This store is not there in our cache. + dbError.set("Store named " + name + " not found.", DPS_STORE_DOES_NOT_EXIST); + SPLAPPTRC(L_DEBUG, "Inside findStore, it couldn't find a store named " << name << ". " << DPS_STORE_DOES_NOT_EXIST, "RedisClusterPlusPlusDBLayer"); + return 0; + } + + // It is an existing store. + // We can get the storeId and return it to the caller. + string get_result_value = "0"; + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + auto val = redis_cluster->get(storeNameKey); + + if(val) { + get_result_value = *val; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_GET_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside findStore, unable to get the storeId for the storeName " << name << " with a Redis connection error for REDIS_GET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return 0; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to get the storeId for the storeName " + name + + ". Error=" + exceptionString, DPS_GET_STORE_ID_ERROR); + SPLAPPTRC(L_ERROR, "Inside findStore, unable to get the storeId for the storeName " << name << ". Error=" << exceptionString << ". rc=" << DPS_GET_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + return 0; + } + + if (get_result_value.length() <= 0) { + // Requested data item is not there in the cache. + dbError.set("Unable to get The store id for the store " + name + ".", DPS_DATA_ITEM_READ_ERROR); + SPLAPPTRC(L_DEBUG, "Inside findStore, it couldn't get the store id for store " << name << ". " << DPS_DATA_ITEM_READ_ERROR, "RedisClusterPlusPlusDBLayer"); + return(0); + } + + uint64_t storeId = streams_boost::lexical_cast(get_result_value); + return(storeId); + } // End of findStore. + + bool RedisClusterPlusPlusDBLayer::removeStore(uint64_t store, PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside removeStore for store id " << store, "RedisClusterPlusPlusDBLayer"); + + ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside removeStore, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside removeStore, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(false); + } + + // Lock the store first. + if (acquireStoreLock(storeIdString) == false) { + // Unable to acquire the store lock. + dbError.set("Unable to get store lock for the StoreId " + storeIdString + ".", DPS_GET_STORE_LOCK_ERROR); + SPLAPPTRC(L_DEBUG, "Inside removeStore, it failed for store id " << storeIdString << ". " << DPS_GET_STORE_LOCK_ERROR, "RedisClusterPlusPlusDBLayer"); + // User has to retry again to remove the store. + return(false); + } + + // Get rid of these two entries that are holding the store contents hash and the store name root entry. + // 1) Store Contents Hash + // 2) Store Name root entry + // + uint32_t dataItemCnt = 0; + string storeName = ""; + string keySplTypeName = ""; + string valueSplTypeName = ""; + + if (readStoreInformation(storeIdString, dbError, dataItemCnt, storeName, keySplTypeName, valueSplTypeName) == false) { + SPLAPPTRC(L_DEBUG, "Inside removeStore, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + // This is alarming. This will put this store in a bad state. Poor user has to deal with it. + return(false); + } + + // Let us delete the Store Contents Hash that contains all the active data items in this store. + // '1' + 'store id' => 'Redis Hash' [It will always have this entry: dps_name_of_this_store ==> 'store name'] + string storeContentsHashKey = string(DPS_STORE_CONTENTS_HASH_TYPE) + storeIdString; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->del(storeContentsHashKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_DEL_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside removeStore, it failed for store id " << storeIdString << " with a store name " << storeName << " with a Redis connection error for REDIS_DEL_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to delete a store with an id " + storeIdString + + " with a store name " + storeName + + ". Error=" + exceptionString, DPS_STORE_REMOVAL_ERROR); + SPLAPPTRC(L_ERROR, "Inside removeStore, it failed to delete a store with an id " << storeIdString << " with a store name " << storeName << ". Error=" << exceptionString << ". rc=" << DPS_STORE_REMOVAL_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return(false); + } + + // Finally, delete the StoreName key now. + string storeNameKey = string(DPS_STORE_NAME_TYPE) + storeName; + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->del(storeNameKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_DEL_CMD2: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside removeStore, it failed for store id " << storeIdString << " with a store name " << storeName << " with a Redis connection error for REDIS_DEL_CMD2. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to delete a store name with an id " + storeIdString + + " with a store name " + storeName + + ". Error=" + exceptionString, DPS_STORE_REMOVAL_ERROR); + SPLAPPTRC(L_ERROR, "Inside removeStore, it failed to delete a store name with an id " << storeIdString << " with a store name " << storeName << ". Error=" << exceptionString << ". rc=" << DPS_STORE_REMOVAL_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return(false); + } + + // Life of this store ended completely with no trace left behind. + releaseStoreLock(storeIdString); + return(true); + } // End of removeStore. + + // This is a lean and mean put operation into a store. + // It doesn't do any safety checks before putting a data item into a store. + // If you want to go through that rigor, please use the putSafe method below. + // This version will perform better since no safety checks are done in this. + bool RedisClusterPlusPlusDBLayer::put(uint64_t store, char const * keyData, uint32_t keySize, + unsigned char const * valueData, uint32_t valueSize, + PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside put for store id " << store, "RedisClusterPlusPlusDBLayer"); + + // Let us try to store this item irrespective of whether it is + // new or it is an existing item in the cache. + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // CAUTION: Regular and a faster version of dpsPut will simply create an incorrect store structure when an actual store doesn't exist. + // Because, faster version of dpsPut doesn't do any safety checks to validate the store existence. + // If users call dpsPut (faster version) on a non-existing store, that will surely cause all kinds of issues in the + // back-end data store by creating invalid store structures thereby producing dangling stores. Users should take proper care + // and call the faster version of the dpsPut API only on existing stores. If they ignore this rule, then the back-end data store + // will be in a big mess. + // Ideally, at this point here in this API, we can check for whether the store exists or not. But, that will slow down this + // faster put API. Hence, we are going to trust the users to call this faster API only on existing stores. + + // In our Redis dps implementation, data item keys can have space characters. + string data_item_key = string(keyData, keySize); + + // We are ready to either store a new data item or update an existing data item. + // This action is performed on the Store Contents Hash that takes the following format. + // '1' + 'store id' => 'Redis Hash' [It will always have this entry: dps_name_of_this_store ==> 'store name'] + // To support space characters in the data item key, let us base64 encode it. + string keyString = string(DPS_STORE_CONTENTS_HASH_TYPE) + storeIdString; + string base64_encoded_data_item_key; + base64_encode(data_item_key, base64_encoded_data_item_key); + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->hset(keyString, + base64_encoded_data_item_key, + string((const char*)valueData, (size_t)valueSize)); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HSET_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside put, it failed for store id " << storeIdString << " with a Redis connection error for REDIS_HSET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to store a data item in the store id " + storeIdString + + ". Error=" + exceptionString, DPS_DATA_ITEM_WRITE_ERROR); + SPLAPPTRC(L_ERROR, "Inside put, it failed for store id " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_DATA_ITEM_WRITE_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + return(true); + } // End of put. + + // This is a special bullet proof version that does several safety checks before putting a data item into a store. + // Because of these checks, it will be slower. If someone doesn't care about these safety checks, + // then the regular put method can be used. + // This version does all the safety checks and hence will have performance overhead. + bool RedisClusterPlusPlusDBLayer::putSafe(uint64_t store, char const * keyData, uint32_t keySize, + unsigned char const * valueData, uint32_t valueSize, + PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside putSafe for store id " << store, "RedisClusterPlusPlusDBLayer"); + + // Let us try to store this item irrespective of whether it is + // new or it is an existing item in the cache. + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside putSafe, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside putSafe, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(false); + } + + // In our Redis dps implementation, data item keys can have space characters. + string data_item_key = string(keyData, keySize); + + // Lock the store first. + if (acquireStoreLock(storeIdString) == false) { + // Unable to acquire the store lock. + dbError.set("Unable to get store lock for the StoreId " + storeIdString + ".", DPS_GET_STORE_LOCK_ERROR); + SPLAPPTRC(L_DEBUG, "Inside putSafe, it failed for store id " << storeIdString << ". " << DPS_GET_STORE_LOCK_ERROR, "RedisClusterPlusPlusDBLayer"); + // User has to retry again to put the data item in the store. + return(false); + } + + // We are ready to either store a new data item or update an existing data item. + // This action is performed on the Store Contents Hash that takes the following format. + // '1' + 'store id' => 'Redis Hash' [It will always have this entry: dps_name_of_this_store ==> 'store name'] + // To support space characters in the data item key, let us base64 encode it. + string keyString = string(DPS_STORE_CONTENTS_HASH_TYPE) + storeIdString; + string base64_encoded_data_item_key; + base64_encode(data_item_key, base64_encoded_data_item_key); + + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->hset(keyString, + base64_encoded_data_item_key, + string((const char*)valueData, (size_t)valueSize)); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HSET_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside putSafe, it failed for store id " << storeIdString << " with a Redis connection error for REDIS_HSET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to store a data item in the store id " + storeIdString + + ". Error=" + exceptionString, DPS_DATA_ITEM_WRITE_ERROR); + SPLAPPTRC(L_ERROR, "Inside put, it failed for store id " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_DATA_ITEM_WRITE_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return(false); + } + + releaseStoreLock(storeIdString); + return(true); + } // End of putSafe. + + // Put a data item with a TTL (Time To Live in seconds) value into the global area of the Redis DB. + bool RedisClusterPlusPlusDBLayer::putTTL(char const * keyData, uint32_t keySize, + unsigned char const * valueData, uint32_t valueSize, + uint32_t ttl, PersistenceError & dbError, bool encodeKey, bool encodeValue) + { + SPLAPPTRC(L_DEBUG, "Inside putTTL.", "RedisClusterPlusPlusDBLayer"); + + // In our Redis dps implementation, data item keys can have space characters. + string data_item_key; + + if (encodeKey == true) { + base64_encode(string(keyData, keySize), data_item_key); + } else { + // Since the key data sent here will always be in the network byte buffer format (NBF), + // we can't simply use it as it is even if the user wants us to use the non-base64 encoded key data. + // In the NBF format, very first byte indicates the length of the key data that follows (if the key data is less than 128 characters). + // In the NBF format, 5 bytes at the beginning indicate the length of the key data that follows (for key data >= 128 characters). + if ((uint8_t)keyData[0] < 0x80) { + // Skip the first length byte. + data_item_key = string(&keyData[1], keySize-1); + } else { + // Skip the five bytes at the beginning that represent the length of the key data. + data_item_key = string(&keyData[5], keySize-5); + } + } + + string data_item_value = ""; + + if (encodeValue == false) { + // Caller wants to store the value as plain string. Do the same thing we did above for the key. + if ((uint8_t)valueData[0] < 0x80) { + data_item_value = string((char const *) &valueData[1], valueSize-1); + } else { + data_item_value = string((char const *) &valueData[5], valueSize-5); + } + } else { + data_item_value = string((char const *)valueData, (size_t)valueSize); + } + + // We are ready to either store a new data item or update an existing data item with a TTL value specified in seconds. + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + if(ttl > 0) { + // User wants to do a put with a TTL value. + redis_cluster->setex(data_item_key, + streams_boost::lexical_cast(ttl), + data_item_value); + } else { + // User doesn't want do a put with a TTL value. + // In this case, we will do a regular Redis set that will keep an unexpired K/V pair. + redis_cluster->set(data_item_key, data_item_value); + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_PUTTTL_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside putTTL, it failed with a Redis connection error for REDIS_PUTTTL_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to store a data item with TTL. Error=" + exceptionString, DPS_DATA_ITEM_WRITE_ERROR); + SPLAPPTRC(L_ERROR, "Inside putTTL, it failed to store a K/V pair" << ". Error=" << exceptionString << ". rc=" << DPS_DATA_ITEM_WRITE_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + return(true); + } // End of putTTL. + + // This is a lean and mean get operation from a store. + // It doesn't do any safety checks before getting a data item from a store. + // If you want to go through that rigor, please use the getSafe method below. + // This version will perform better since no safety checks are done in this. + bool RedisClusterPlusPlusDBLayer::get(uint64_t store, char const * keyData, uint32_t keySize, + unsigned char * & valueData, uint32_t & valueSize, PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside get for store id " << store, "RedisClusterPlusPlusDBLayer"); + + // Let us get this data item from the cache as it is. + // Since there could be multiple data writers, we are going to get whatever is there now. + // It is always possible that the value for the requested item can change right after + // you read it due to the data write made by some other thread. Such is life in a global distributed in-memory store. + // Every data item's key must be prefixed with its store id before being used for CRUD operation in the Redis store. + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // In our Redis dps implementation, data item keys can have space characters. + string base64_encoded_data_item_key; + base64_encode(string(keyData, keySize), base64_encoded_data_item_key); + + bool result = getDataItemFromStore(storeIdString, base64_encoded_data_item_key, + false, true, valueData, valueSize, dbError); + + if ((result == false) || (dbError.hasError() == true)) { + // Some error has occurred in reading the data item value. + SPLAPPTRC(L_DEBUG, "Inside get, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } + + return(result); + } // End of get. + + // This is a special bullet proof version that does several safety checks before getting a data item from a store. + // Because of these checks, it will be slower. If someone doesn't care about these safety checks, + // then the regular get method can be used. + // This version does all the safety checks and hence will have performance overhead. + bool RedisClusterPlusPlusDBLayer::getSafe(uint64_t store, char const * keyData, uint32_t keySize, + unsigned char * & valueData, uint32_t & valueSize, PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside getSafe for store id " << store, "RedisClusterPlusPlusDBLayer"); + + // Let us get this data item from the cache as it is. + // Since there could be multiple data writers, we are going to get whatever is there now. + // It is always possible that the value for the requested item can change right after + // you read it due to the data write made by some other thread. Such is life in a global distributed in-memory store. + // Every data item's key must be prefixed with its store id before being used for CRUD operation in the Redis store. + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside getSafe, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside getSafe, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(false); + } + + // In our Redis dps implementation, data item keys can have space characters. + string base64_encoded_data_item_key; + base64_encode(string(keyData, keySize), base64_encoded_data_item_key); + + bool result = getDataItemFromStore(storeIdString, base64_encoded_data_item_key, + false, false, valueData, valueSize, dbError); + + if ((result == false) || (dbError.hasError() == true)) { + // Some error has occurred in reading the data item value. + SPLAPPTRC(L_DEBUG, "Inside getSafe, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } + + return(result); + } // End of getSafe. + + // Get a TTL based data item that is stored in the global area of the Redis DB. + bool RedisClusterPlusPlusDBLayer::getTTL(char const * keyData, uint32_t keySize, + unsigned char * & valueData, uint32_t & valueSize, PersistenceError & dbError, bool encodeKey) + { + SPLAPPTRC(L_DEBUG, "Inside getTTL.", "RedisClusterPlusPlusDBLayer"); + + // Let us get this data item from the cache as it is. + // Since there could be multiple data writers, we are going to get whatever is there now. + // It is always possible that the value for the requested item can change right after + // you read it due to the data write made by some other thread. Such is life in a global distributed in-memory store. + + // In our Redis dps implementation, data item keys can have space characters. + string data_item_key; + + if (encodeKey == true) { + base64_encode(string(keyData, keySize), data_item_key); + } else { + // Since the key data sent here will always be in the network byte buffer format (NBF), + // we can't simply use it as it is even if the user wants us to use the non-base64 encoded key data. + // In the NBF format, very first byte indicates the length of the key data that follows (if the key data is less than 128 characters). + // In the NBF format, 5 bytes at the beginning indicate the length of the key data that follows (for key data >= 128 characters). + if ((uint8_t)keyData[0] < 0x80) { + // Skip the first length byte. + data_item_key = string(&keyData[1], keySize-1); + } else { + // Skip the five bytes at the beginning that represent the length of the key data. + data_item_key = string(&keyData[5], keySize-5); + } + } + + // Since this is a data item with TTL, it is stored in the global area of Redis and not inside a user created store (i.e. a Redis hash). + // Hence, we can't use the Redis hash get command. Rather, we will use the plain Redis get command to read this data item. + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + string str_value = ""; + + try { + auto value = redis_cluster->get(data_item_key); + + if(value) { + str_value = *value; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_GETTTL_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside getTTL, it failed with a Redis connection error for REDIS_GETTTL_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to get the requested data item with TTL value. Error=" + exceptionString, DPS_DATA_ITEM_READ_ERROR); + SPLAPPTRC(L_ERROR, "Inside getTTL, it failed to get the data item with TTL. It was either never there to begin with or it probably expired due to its TTL value. Error=" << exceptionString << ". rc=" << DPS_DATA_ITEM_READ_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + if (str_value.length() == 0) { + // User stored empty data item value in the cache. + valueData = (unsigned char *)""; + valueSize = 0; + } else { + // We can allocate memory for the exact length of the data item value. + valueSize = str_value.length(); + valueData = (unsigned char *) malloc(valueSize); + + if (valueData == NULL) { + // Unable to allocate memory to transfer the data item value. + dbError.setTTL("Unable to allocate memory to copy the data item value with TTL.", DPS_GET_DATA_ITEM_MALLOC_ERROR); + valueSize = 0; + return(false); + } + + // We expect the caller of this method to free the valueData pointer. + memcpy(valueData, str_value.c_str(), valueSize); + } + + return(true); + } // End of getTTL. + + bool RedisClusterPlusPlusDBLayer::remove(uint64_t store, char const * keyData, uint32_t keySize, + PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside remove for store id " << store, "RedisClusterPlusPlusDBLayer"); + + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside remove, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside remove, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(false); + } + + // In our Redis dps implementation, data item keys can have space characters. + string data_item_key = string(keyData, keySize); + + // Lock the store first. + if (acquireStoreLock(storeIdString) == false) { + // Unable to acquire the store lock. + dbError.set("Unable to get store lock for the StoreId " + storeIdString + ".", DPS_GET_STORE_LOCK_ERROR); + SPLAPPTRC(L_DEBUG, "Inside remove, it failed for store id " << storeIdString << ". " << DPS_GET_STORE_LOCK_ERROR, "RedisClusterPlusPlusDBLayer"); + // User has to retry again to remove the data item from the store. + return(false); + } + + // This action is performed on the Store Contents Hash that takes the following format. + // '1' + 'store id' => 'Redis Hash' [It will always have this entry: dps_name_of_this_store ==> 'store name'] + string keyString = string(DPS_STORE_CONTENTS_HASH_TYPE) + storeIdString; + string base64_encoded_data_item_key; + base64_encode(data_item_key, base64_encoded_data_item_key); + + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + long long hdel_result_value = 0; + + try { + hdel_result_value = redis_cluster->hdel(keyString, base64_encoded_data_item_key); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HDEL_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside remove, it failed with a Redis connection error for REDIS_HDEL_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to remove the requested data item from the store id " + storeIdString + ". Error=" + exceptionString, DPS_DATA_ITEM_DELETE_ERROR); + SPLAPPTRC(L_ERROR, "Inside remove, it failed while removing the requested data item from the store id " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_DATA_ITEM_DELETE_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return(false); + } + + // Let us ensure that it really removed the requested data item. + if (hdel_result_value == 0) { + // Something is not correct here. It didn't remove the data item. Raise an error. + dbError.set("Unable to remove the requested data item from the store id " + storeIdString + ". REDIS_HDEL returned 0 to indicate the absence of the given field.", DPS_DATA_ITEM_DELETE_ERROR); + SPLAPPTRC(L_DEBUG, "Inside remove, it failed to remove the requested data item from the store id " << storeIdString << ". REDIS_HDEL returned 0 to indicate the absence of the given field. rc=" << DPS_DATA_ITEM_DELETE_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return(false); + } + + // All done. An existing data item in the given store has been removed. + releaseStoreLock(storeIdString); + return(true); + } // End of remove. + + // Remove a TTL based data item that is stored in the global area of the Redis DB. + bool RedisClusterPlusPlusDBLayer::removeTTL(char const * keyData, uint32_t keySize, + PersistenceError & dbError, bool encodeKey) + { + SPLAPPTRC(L_DEBUG, "Inside removeTTL.", "RedisClusterPlusPlusDBLayer"); + + // In our Redis dps implementation, data item keys can have space characters. + string data_item_key; + + if (encodeKey == true) { + base64_encode(string(keyData, keySize), data_item_key); + } else { + // Since the key data sent here will always be in the network byte buffer format (NBF), + // we can't simply use it as it is even if the user wants us to use the non-base64 encoded key data. + // In the NBF format, very first byte indicates the length of the key data that follows (if the key data is less than 128 characters). + // In the NBF format, 5 bytes at the beginning indicate the length of the key data that follows (for key data >= 128 characters). + if ((uint8_t)keyData[0] < 0x80) { + // Skip the first length byte. + data_item_key = string(&keyData[1], keySize-1); + } else { + // Skip the five bytes at the beginning that represent the length of the key data. + data_item_key = string(&keyData[5], keySize-5); + } + } + + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + long long del_result_value = 0; + + try { + del_result_value = redis_cluster->del(data_item_key); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_DEL_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside removeTTL, it failed with a Redis connection error for REDIS_DEL_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to remove the requested TTL data item from the global store. Error=" + exceptionString, DPS_DATA_ITEM_DELETE_ERROR); + SPLAPPTRC(L_ERROR, "Inside removeTTL, it failed while removing the requested TTL data item from the global store. Error=" << exceptionString << ". rc=" << DPS_DATA_ITEM_DELETE_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Let us ensure that it really removed the requested data item. + if (del_result_value == 0) { + // Something is not correct here. It didn't remove the data item. Raise an error. + dbError.set("Unable to remove the requested TTL data item from the global store. REDIS_DEL returned 0 to indicate the absence of the given field.", DPS_DATA_ITEM_DELETE_ERROR); + SPLAPPTRC(L_DEBUG, "Inside removeTTL, it failed to remove the requested TTL data item from the global store. REDIS_DEL returned 0 to indicate the absence of the given field. rc=" << DPS_DATA_ITEM_DELETE_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // All done. An existing data item with TTL in the global area has been removed. + return(true); + } // End of removeTTL. + + bool RedisClusterPlusPlusDBLayer::has(uint64_t store, char const * keyData, uint32_t keySize, + PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside has for store id " << store, "RedisClusterPlusPlusDBLayer"); + + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside has, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside has, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(false); + } + + // In our Redis dps implementation, data item keys can have space characters. + string base64_encoded_data_item_key; + base64_encode(string(keyData, keySize), base64_encoded_data_item_key); + unsigned char *dummyValueData; + uint32_t dummyValueSize; + + // Let us see if we already have this data item in our cache. + // Check only for the data item existence and don't fetch the data item value. + bool dataItemAlreadyInCache = getDataItemFromStore(storeIdString, base64_encoded_data_item_key, + true, false, dummyValueData, dummyValueSize, dbError); + + if (dbError.getErrorCode() != 0) { + SPLAPPTRC(L_DEBUG, "Inside has, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } + + return(dataItemAlreadyInCache); + } // End of has. + + // Check for the existence of a TTL based data item that is stored in the global area of the Redis DB. + bool RedisClusterPlusPlusDBLayer::hasTTL(char const * keyData, uint32_t keySize, + PersistenceError & dbError, bool encodeKey) + { + SPLAPPTRC(L_DEBUG, "Inside hasTTL.", "RedisClusterPlusPlusDBLayer"); + + // In our Redis dps implementation, data item keys can have space characters. + string data_item_key; + + if (encodeKey == true) { + base64_encode(string(keyData, keySize), data_item_key); + } else { + // Since the key data sent here will always be in the network byte buffer format (NBF), + // we can't simply use it as it is even if the user wants us to use the non-base64 encoded key data. + // In the NBF format, very first byte indicates the length of the key data that follows (if the key data is less than 128 characters). + // In the NBF format, 5 bytes at the beginning indicate the length of the key data that follows (for key data >= 128 characters). + if ((uint8_t)keyData[0] < 0x80) { + // Skip the first length byte. + data_item_key = string(&keyData[1], keySize-1); + } else { + // Skip the five bytes at the beginning that represent the length of the key data. + data_item_key = string(&keyData[5], keySize-5); + } + } + + long long exists_result_value = 0; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + exists_result_value = redis_cluster->exists(data_item_key); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_EXISTS_CMD: ") + exceptionString, DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside hasTTL, it failed with a Redis connection error for REDIS_EXISTS_CMD. Exception: " << exceptionString << " " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to check the existence of a TTL based data item. Error=" + exceptionString, DPS_KEY_EXISTENCE_CHECK_ERROR); + SPLAPPTRC(L_ERROR, "Inside hasTTL, it failed to check the existence of a TTL based data item. Error=" << + exceptionString << ". rc=" << DPS_KEY_EXISTENCE_CHECK_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + if (exists_result_value == 0) { + // TTL data item doesn't exist. + return(false); + } else { + // TTL data item exists. + return(true); + } + } // End of hasTTL. + + void RedisClusterPlusPlusDBLayer::clear(uint64_t store, PersistenceError & dbError) { + SPLAPPTRC(L_DEBUG, "Inside clear for store id " << store, "RedisClusterPlusPlusDBLayer"); + + ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside clear, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside clear, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return; + } + + // Lock the store first. + if (acquireStoreLock(storeIdString) == false) { + // Unable to acquire the store lock. + dbError.set("Unable to get store lock for the StoreId " + storeIdString + ".", DPS_GET_STORE_LOCK_ERROR); + SPLAPPTRC(L_DEBUG, "Inside clear, it failed for store id " << storeIdString << ". " << DPS_GET_STORE_LOCK_ERROR, "RedisClusterPlusPlusDBLayer"); + // User has to retry again to remove the store. + return; + } + + // Get the store name. + uint32_t dataItemCnt = 0; + string storeName = ""; + string keySplTypeName = ""; + string valueSplTypeName = ""; + + if (readStoreInformation(storeIdString, dbError, dataItemCnt, storeName, keySplTypeName, valueSplTypeName) == false) { + SPLAPPTRC(L_DEBUG, "Inside clear, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + // This is alarming. This will put this store in a bad state. Poor user has to deal with it. + return; + } + + // A very fast and quick thing to do is to simply delete the Store Contents Hash and + // recreate it rather than removing one element at a time. + // This action is performed on the Store Contents Hash that takes the following format. + // '1' + 'store id' => 'Redis Hash' [It will always have three metadata entries carrying the value of the actual store name, key spl type name, and value spl type name.] + // Delete the entire store contents hash. + string keyString = string(DPS_STORE_CONTENTS_HASH_TYPE) + storeIdString; + + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->del(keyString); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_DEL_CMD: ") + exceptionString, DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside clear, it failed with a Redis connection error for REDIS_DEL_CMD. Exception: " << exceptionString << " " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to remove the requested data item from the store for the store id " + storeIdString + ". Error=" + exceptionString, DPS_STORE_CLEARING_ERROR); + SPLAPPTRC(L_ERROR, "Inside clear, it failed to remove the requested data item from the store for the store id " << storeIdString << ". Error=" << + exceptionString << ". rc=" << DPS_STORE_CLEARING_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return; + } + + // Let us now recreate a new Store Contents Hash for this store with three meta data entries (store name, key spl type name, value spl type name). + // Then we are done. + // 1) Store name. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->hset(keyString, + string(REDIS_STORE_ID_TO_STORE_NAME_KEY), storeName); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HSET_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside clear, it failed for store id " << storeIdString << " with a Redis connection error for REDIS_HSET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Fatal error in clear method: Unable to recreate 'Store Contents Hash' metadata1 in the store id " + storeIdString + "Unable to create 'Store Contents Hash' in a store with a name" + storeName + ". Error=" + exceptionString, DPS_STORE_HASH_METADATA1_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "Fatal error: Inside clear, it failed for store id " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_STORE_HASH_METADATA1_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return; + } + + // 2) Key spl type name. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->hset(keyString, + string(REDIS_SPL_TYPE_NAME_OF_KEY), keySplTypeName); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HSET_CMD2: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside clear, it failed for store id " << storeIdString << " with a Redis connection error for REDIS_HSET_CMD2. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Fatal error in clear method: Unable to recreate 'Store Contents Hash' metadata2 in the store id " + storeIdString + "Unable to create 'Store Contents Hash' in a store with a name" + storeName + ". Error=" + exceptionString, DPS_STORE_HASH_METADATA2_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "Fatal error: Inside clear, it failed for store id " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_STORE_HASH_METADATA2_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return; + } + + // 3) Value spl type name. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->hset(keyString, + string(REDIS_SPL_TYPE_NAME_OF_VALUE), valueSplTypeName); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HSET_CMD3: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside clear, it failed for store id " << storeIdString << " with a Redis connection error for REDIS_HSET_CMD3. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Fatal error in clear method: Unable to recreate 'Store Contents Hash' metadata3 in the store id " + storeIdString + "Unable to create 'Store Contents Hash' in a store with a name" + storeName + ". Error=" + exceptionString, DPS_STORE_HASH_METADATA3_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "Fatal error: Inside clear, it failed for store id " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_STORE_HASH_METADATA3_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseStoreLock(storeIdString); + return; + } + + // If there was an error in the store contents hash recreation, then this store is going to be in a weird state. + // It is a fatal error. If that happened, something terribly had gone wrong in clearing the contents. + // User should look at the dbError code and decide about a corrective action. + releaseStoreLock(storeIdString); + } // End of clear. + + uint64_t RedisClusterPlusPlusDBLayer::size(uint64_t store, PersistenceError & dbError) + { + SPLAPPTRC(L_DEBUG, "Inside size for store id " << store, "RedisClusterPlusPlusDBLayer"); + + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside size, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside size, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(false); + } + + // Store size information is maintained as part of the store information. + uint32_t dataItemCnt = 0; + string storeName = ""; + string keySplTypeName = ""; + string valueSplTypeName = ""; + + if (readStoreInformation(storeIdString, dbError, dataItemCnt, storeName, keySplTypeName, valueSplTypeName) == false) { + SPLAPPTRC(L_DEBUG, "Inside size, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + return(0); + } + + return((uint64_t)dataItemCnt); + } // End of size. + + // We allow space characters in the data item keys. + // Hence, it is required to based64 encode them before storing the + // key:value data item in Redis. + // (Use boost functions to do this.) + void RedisClusterPlusPlusDBLayer::base64_encode(std::string const & str, std::string & base64) { + // Insert line breaks for every 64KB characters. + typedef insert_linebreaks >, 64*1024 > it_base64_t; + + unsigned int writePaddChars = (3-str.length()%3)%3; + base64 = string(it_base64_t(str.begin()),it_base64_t(str.end())); + base64.append(writePaddChars,'='); + } // End of base64_encode. + + // As explained above, we based64 encoded the data item keys before adding them to the store. + // If we need to get back the original key name, this function will help us in + // decoding the base64 encoded key. + // (Use boost functions to do this.) + void RedisClusterPlusPlusDBLayer::base64_decode(std::string & base64, std::string & result) { + // IMPORTANT: + // For performance reasons, we are not passing a const string to this method. + // Instead, we are passing a directly modifiable reference. Caller should be aware that + // the string they passed to this method gets altered during the base64 decoding logic below. + // After this method returns back to the caller, it is not advisable to use that modified string. + typedef transform_width< binary_from_base64 >, 8, 6 > it_binary_t; + + unsigned int paddChars = count(base64.begin(), base64.end(), '='); + std::replace(base64.begin(),base64.end(),'=','A'); // replace '=' by base64 encoding of '\0' + result = string(it_binary_t(base64.begin()), it_binary_t(base64.end())); // decode + result.erase(result.end()-paddChars,result.end()); // erase padding '\0' characters + } // End of base64_decode. + + // This method will check if a store exists for a given store id. + bool RedisClusterPlusPlusDBLayer::storeIdExistsOrNot(string storeIdString, PersistenceError & dbError) { + string keyString = string(DPS_STORE_CONTENTS_HASH_TYPE) + storeIdString; + long long exists_result_value = 0; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + exists_result_value = redis_cluster->exists(keyString); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_EXISTS_CMD: ") + exceptionString, DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside storeIdExistsOrNot, it failed with a Redis connection error for REDIS_EXISTS_CMD. Exception: " << exceptionString << " " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("StoreIdExistsOrNot: Unable to get StoreContentsHash from the StoreId " + storeIdString + ". Error=" + exceptionString, DPS_GET_STORE_CONTENTS_HASH_ERROR); + SPLAPPTRC(L_ERROR, "Inside storeIdExistsOrNot, it failed to get StoreContentsHash from the StoreId " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_GET_STORE_CONTENTS_HASH_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + if (exists_result_value == 0) { + // Store doesn't exist. + return(false); + } else { + // Store exists. + return(true); + } + } // End of storeIdExistsOrNot. + + // This method will acquire a lock for a given store. + bool RedisClusterPlusPlusDBLayer::acquireStoreLock(string const & storeIdString) { + int32_t retryCnt = 0; + + // Try to get a lock for this store. + while (1) { + // '4' + 'store id' + 'dps_lock' => 1 + std::string storeLockKey = string(DPS_STORE_LOCK_TYPE) + storeIdString + DPS_LOCK_TOKEN; + // This is an atomic activity. + // If multiple threads attempt to do it at the same time, only one will succeed. + // Winner will hold the lock until they release it voluntarily or + // until the Redis back-end removes this lock entry after the DPS_AND_DL_GET_LOCK_TTL times out. + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + bool setnx_result_value = false; + + try { + setnx_result_value = redis_cluster->setnx(storeLockKey, string("1")); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter an exception? + if (exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + // Problem in atomic creation of the store lock. + return(false); + } + + if(setnx_result_value == true) { + // We got the lock. + // Set the expiration time for this lock key. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->expire(storeLockKey, 1); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter an exception? + if (exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + // Problem in setting the lock expiry time. + SPLAPPTRC(L_ERROR, "b) Inside acquireStoreLock, it failed with an exception. Error=" << exceptionString, "RedisClusterPlusPlusDBLayer"); + // We already got an exception. There is not much use in the code block below. + // In any case, we will give it a try. + // Delete the erroneous lock data item we created. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->del(storeLockKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // We couldn't get a lock. + return(false); + } + + // We got the lock. + return(true); + } // End of if(setnx_result_value == true) + + // Someone else is holding on to the lock of this store. Wait for a while before trying again. + retryCnt++; + + if (retryCnt >= DPS_AND_DL_GET_LOCK_MAX_RETRY_CNT) { + return(false); + } + + // Yield control to other threads. Wait here with patience by doing an exponential back-off delay. + usleep(DPS_AND_DL_GET_LOCK_SLEEP_TIME * + (retryCnt%(DPS_AND_DL_GET_LOCK_MAX_RETRY_CNT/DPS_AND_DL_GET_LOCK_BACKOFF_DELAY_MOD_FACTOR))); + } // End of the while loop. + + return(false); + } // End of acquireStoreLock. + + void RedisClusterPlusPlusDBLayer::releaseStoreLock(string const & storeIdString) { + // '4' + 'store id' + 'dps_lock' => 1 + std::string storeLockKey = DPS_STORE_LOCK_TYPE + storeIdString + DPS_LOCK_TOKEN; + + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->del(storeLockKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter an exception? + if (exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + // Problem in atomic creation of the store lock. + SPLAPPTRC(L_ERROR, "Inside releaseStoreLock, it failed with an exception. Error=" << exceptionString, "RedisClusterPlusPlusDBLayer"); + } + } // End of releaseStoreLock. + + bool RedisClusterPlusPlusDBLayer::readStoreInformation(std::string const & storeIdString, + PersistenceError & dbError, uint32_t & dataItemCnt, std::string & storeName, + std::string & keySplTypeName, std::string & valueSplTypeName) { + // Read the store name, this store's key and value SPL type names, and get the store size. + storeName = ""; + keySplTypeName = ""; + valueSplTypeName = ""; + dataItemCnt = 0; + + // This action is performed on the Store Contents Hash that takes the following format. + // '1' + 'store id' => 'Redis Hash' + // It will always have the following three metadata entries: + // dps_name_of_this_store ==> 'store name' + // dps_spl_type_name_of_key ==> 'spl type name for this store's key' + // dps_spl_type_name_of_value ==> 'spl type name for this store's value' + // 1) Get the store name. + string keyString = string(DPS_STORE_CONTENTS_HASH_TYPE) + storeIdString; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + auto value = redis_cluster->hget(keyString, string(REDIS_STORE_ID_TO_STORE_NAME_KEY)); + + if(value) { + storeName = *value; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HGET_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "a) Inside readStoreInformation, it failed with a Redis connection error for REDIS_HGET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to get StoreContentsHash metadata1 from the StoreId " + storeIdString + ". Error=" + exceptionString, DPS_GET_STORE_CONTENTS_HASH_ERROR); + SPLAPPTRC(L_ERROR, "Inside readStoreInformation, it failed to get StoreContentsHash metadata1 from the StoreId " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_GET_STORE_CONTENTS_HASH_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + if (storeName == "") { + // Unable to get the name of this store. + dbError.set("Unable to get the store name for StoreId " + storeIdString + ".", DPS_GET_STORE_NAME_ERROR); + return(false); + } + + // 2) Let us get the spl type name for this store's key. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + auto value = redis_cluster->hget(keyString, string(REDIS_SPL_TYPE_NAME_OF_KEY)); + + if(value) { + keySplTypeName = *value; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HGET_CMD2: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "b) Inside readStoreInformation, it failed with a Redis connection error for REDIS_HGET_CMD2. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to get StoreContentsHash metadata2 from the StoreId " + storeIdString + ". Error=" + exceptionString, DPS_GET_STORE_CONTENTS_HASH_ERROR); + SPLAPPTRC(L_ERROR, "Inside readStoreInformation, it failed to get StoreContentsHash metadata2 from the StoreId " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_GET_STORE_CONTENTS_HASH_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + if (keySplTypeName == "") { + // Unable to get the name of this store. + dbError.set("Unable to get the key spl type name for StoreId " + storeIdString + ".", DPS_GET_STORE_NAME_ERROR); + return(false); + } + + // 3) Let us get the spl type name for this store's value. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + auto value = redis_cluster->hget(keyString, string(REDIS_SPL_TYPE_NAME_OF_VALUE)); + + if(value) { + valueSplTypeName = *value; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HGET_CMD3: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "c) Inside readStoreInformation, it failed with a Redis connection error for REDIS_HGET_CMD3. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to get StoreContentsHash metadata3 from the StoreId " + storeIdString + ". Error=" + exceptionString, DPS_GET_STORE_CONTENTS_HASH_ERROR); + SPLAPPTRC(L_ERROR, "Inside readStoreInformation, it failed to get StoreContentsHash metadata3 from the StoreId " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_GET_STORE_CONTENTS_HASH_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + if (valueSplTypeName == "") { + // Unable to get the name of this store. + dbError.set("Unable to get the value spl type name for StoreId " + storeIdString + ".", DPS_GET_STORE_NAME_ERROR); + return(false); + } + + // 4) Let us get the size of the store contents hash now. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + long long hlen_result_value = 0; + + try { + hlen_result_value = redis_cluster->hlen(keyString); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HLEN_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "d) Inside readStoreInformation, it failed with a Redis connection error for REDIS_HLEN_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to get StoreContentsHash size from the StoreId " + storeIdString + ". Error=" + exceptionString, DPS_GET_STORE_SIZE_ERROR); + SPLAPPTRC(L_ERROR, "Inside readStoreInformation, it failed to get StoreContentsHash size from the StoreId " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_GET_STORE_SIZE_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Our Store Contents Hash for every store will have a mandatory reserved internal elements (store name, key spl type name, and value spl type name). + // Let us not count those three elements in the actual store contents hash size that the caller wants now. + if (hlen_result_value <= 0) { + // This is not correct. We must have a minimum hash size of 3 because of the reserved elements. + dbError.set("Wrong value (zero) observed as the store size for StoreId " + storeIdString + ".", DPS_GET_STORE_SIZE_ERROR); + return(false); + } + + dataItemCnt = hlen_result_value - 3; + return(true); + } // End of readStoreInformation. + + string RedisClusterPlusPlusDBLayer::getStoreName(uint64_t store, PersistenceError & dbError) { + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside getStoreName, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside getStoreName, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(""); + } + + uint32_t dataItemCnt = 0; + string storeName = ""; + string keySplTypeName = ""; + string valueSplTypeName = ""; + + if (readStoreInformation(storeIdString, dbError, dataItemCnt, storeName, keySplTypeName, valueSplTypeName) == false) { + SPLAPPTRC(L_DEBUG, "Inside getStoreName, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + return(""); + } + + string base64_decoded_storeName; + base64_decode(storeName, base64_decoded_storeName); + return(base64_decoded_storeName); + } // End of getStoreName. + + string RedisClusterPlusPlusDBLayer::getSplTypeNameForKey(uint64_t store, PersistenceError & dbError) { + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside getSplTypeNameForKey, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside getSplTypeNameForKey, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(""); + } + + uint32_t dataItemCnt = 0; + string storeName = ""; + string keySplTypeName = ""; + string valueSplTypeName = ""; + + if (readStoreInformation(storeIdString, dbError, dataItemCnt, storeName, keySplTypeName, valueSplTypeName) == false) { + SPLAPPTRC(L_DEBUG, "Inside getSplTypeNameForKey, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + return(""); + } + + string base64_decoded_keySplTypeName; + base64_decode(keySplTypeName, base64_decoded_keySplTypeName); + return(base64_decoded_keySplTypeName); + } // End of getSplTypeNameForKey. + + string RedisClusterPlusPlusDBLayer::getSplTypeNameForValue(uint64_t store, PersistenceError & dbError) { + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside getSplTypeNameForValue, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside getSplTypeNameForValue, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(""); + } + + uint32_t dataItemCnt = 0; + string storeName = ""; + string keySplTypeName = ""; + string valueSplTypeName = ""; + + if (readStoreInformation(storeIdString, dbError, dataItemCnt, storeName, keySplTypeName, valueSplTypeName) == false) { + SPLAPPTRC(L_DEBUG, "Inside getSplTypeNameForValue, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + return(""); + } + + string base64_decoded_valueSplTypeName; + base64_decode(valueSplTypeName, base64_decoded_valueSplTypeName); + return(base64_decoded_valueSplTypeName); + } // End of getSplTypeNameForValue. + + std::string RedisClusterPlusPlusDBLayer::getNoSqlDbProductName(void) { + return(string(REDIS_CLUSTER_PLUS_PLUS_NO_SQL_DB_NAME)); + } // End of getNoSqlDbProductName. + + void RedisClusterPlusPlusDBLayer::getDetailsAboutThisMachine(std::string & machineName, std::string & osVersion, std::string & cpuArchitecture) { + machineName = nameOfThisMachine; + osVersion = osVersionOfThisMachine; + cpuArchitecture = cpuTypeOfThisMachine; + } // End of getDetailsAboutThisMachine. + + bool RedisClusterPlusPlusDBLayer::runDataStoreCommand(std::string const & cmd, PersistenceError & dbError) { + // Redis commands in this case will be one way commands that don't return any data back after + // running that command. e-g: "set foo bar", "del foo". + // We will get this done using the other comprehensive overloaded method below. + typedef streams_boost::tokenizer > tokenizer; + streams_boost::char_separator sep( + " ", // dropped delimiters + "", // kept delimiters + streams_boost::keep_empty_tokens); // empty token policy + std::vector myVector; + + // Collect all the space delimited tokens in the given Redis command. + STREAMS_BOOST_FOREACH(std::string token, tokenizer(cmd, sep)) { + myVector.push_back(token); + } // End of the Boost FOREACH loop. + + string result = ""; + return(runDataStoreCommand(myVector, result, dbError)); + } // End of runDataStoreCommand. (Fire and Forget style). + + bool RedisClusterPlusPlusDBLayer::runDataStoreCommand(uint32_t const & cmdType, std::string const & httpVerb, + std::string const & baseUrl, std::string const & apiEndpoint, std::string const & queryParams, + std::string const & jsonRequest, std::string & jsonResponse, PersistenceError & dbError) { + // This API can only be supported in NoSQL data stores such as Cloudant, HBase etc. + // Redis doesn't have a way to do this. + dbError.set("From Redis data store: This API to run native data store commands is not supported in Redis.", DPS_RUN_DATA_STORE_COMMAND_ERROR); + SPLAPPTRC(L_DEBUG, "From Redis data store: This API to run native data store commands is not supported in Redis. rc=" << DPS_RUN_DATA_STORE_COMMAND_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } // End of runDataStoreCommand (Http style) + + /// If users want to send any valid Redis command to the Redis server made up as individual parts, + /// this API can be used. This will work only with Redis. Users simply have to split their + /// valid Redis command into individual parts that appear between spaces and pass them in + /// exacly in that order via a list. DPS back-end code will put them together + /// correctly before executing the command on a configured Redis server. This API will also + /// return the resulting value from executing any given Redis command as a string. It is upto + /// the caller to interpret the Redis returned value and make sense out of it. + /// In essence, it is a two way Redis command which is very diffferent from the other plain + /// API that is explained above. [NOTE: If you have to deal with storing or fetching + /// non-string complex Streams data types, you can't use this API. Instead, use the other + /// DPS put/get/remove/has DPS APIs.] + bool RedisClusterPlusPlusDBLayer::runDataStoreCommand(std::vector const & cmdList, std::string & resultValue, PersistenceError & dbError) { + resultValue = ""; + + if (cmdList.size() <= 0) { + resultValue = "Error: Empty Redis command list was given by the caller."; + dbError.set(resultValue, DPS_RUN_DATA_STORE_COMMAND_ERROR); + return(false); + } + + // Unlike the hiredis and cpp-hiredis-cluster libraries, redis-plus-plus doesn't support the + // "format string" to combine the command arguments into a command string i.e. RedisCommandArgv. + // Instead, it has its own way of doing a generic command interface. + // + // Please note that there are several commands that will allow multiple keys in a single + // command execution. In Redis Cluster, that will cause a CROSSSLOT error due to keys not + // getting partitioned to the same Redis cluster node. It requires special things such as + // using a hash tag by the client code calling this method. Please search for CROSSSLOT + // in this file and in the advanced/04_XXXXXX example splmm file. + // + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + resultValue = "OK"; + // Following logic looks for the redis commands to be in upper case. + string cmd = streams_boost::to_upper_copy(cmdList.at(0)); + + try { + // Redis plus-plus has a few overloaded APIs for the generic command execution. + // We will use one of those variations here for our needs. + // + // NOTE1: In Redis, there are a few commands that take no arguments. + // Such commands can't be executed via the generic command API. + // + // NOTE2: Certain Redis command support the use of multiple keys. + // Because of that, there is a potential for CROSSSLOT error. + // This code block can handle multiple keys in a single command. + // However, it will give an exception as shown below if there are no + // hash tags used as part of the keys. + // "CROSSSLOT Keys in request don't hash to the same slot" + // https://stackoverflow.com/questions/38042629/redis-cross-slot-error + // https://redis.io/topics/cluster-spec#keys-hash-tags + // + if(cmdList.size() > 1) { + // Execute it using the generic command API. + auto r = redis_cluster->command(cmdList.begin(), cmdList.end()); + + /* + Redis can return one of these replies after executing a command: + + Status Reply: Also known as Simple String Reply. It's a non-binary string reply. + Bulk String Reply: Binary safe string reply. + Integer Reply: Signed integer reply. Large enough to hold long long. + Array Reply: (Nested) Array reply. + Error Reply: Non-binary string reply that gives error info. + */ + if(reply::is_error(*r) == true) { + resultValue = reply::parse(*r); + } else if(reply::is_nil(*r) == true) { + resultValue = "nil"; + } else if(reply::is_string(*r) == true) { + resultValue = reply::parse(*r); + } else if(reply::is_status(*r) == true) { + resultValue = reply::parse(*r); + } else if(reply::is_integer(*r) == true) { + auto num = reply::parse(*r); + resultValue = streams_boost::lexical_cast(num); + } else if(reply::is_array(*r) == true) { + // In an array based result, there may be Redis nil result items if the query didn't yield any valid result. + // So, it is safe to use the OptionalString instead of std::string which can lead to an exception while trying to convert nil to std::string. + std::vector result = reply::parse>(*r); + resultValue = ""; + + // We will flatten the result entries indide the array to a single std::string. + for(uint32_t i = 0; i < result.size(); i++) { + OptionalString s = result.at(i); + + if(resultValue.length() > 0) { + // We will append a new line character except for the very fist result. + resultValue.append("\n"); + } + + if(s) { + // Consider this string result item only if the OptionalString really has a string value. + resultValue.append(*s); + } else { + // This Redis result probably is Nil. We will make it an empty string. + resultValue.append(""); + } + } // End of for loop. + } + // Unprocessed Functions. + } else { + resultValue = "Your Redis command '" + cmd + + "' either has an incorrect syntax or it is not supported at this time in the redis-plus-plus K/V store."; + dbError.set("Redis_Cluster_Reply_Error while executing the user given Redis command. Error=" + resultValue, DPS_RUN_DATA_STORE_COMMAND_ERROR); + SPLAPPTRC(L_DEBUG, "Redis_Cluster_Reply_Error. Inside runDataStoreCommand using Redis cmdList, it failed to execute the user given Redis command list. Error=" << resultValue << ". " << DPS_RUN_DATA_STORE_COMMAND_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + if(exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + // Error in executing the user given Redis command. + string exceptionTypeString = streams_boost::lexical_cast(exceptionType); + resultValue = "[" + exceptionTypeString + "] " + exceptionString; + dbError.set("Redis_Cluster_Reply_Error while executing the user given Redis command. Error=" + resultValue, DPS_RUN_DATA_STORE_COMMAND_ERROR); + SPLAPPTRC(L_DEBUG, "Redis_Cluster_Reply_Error. Inside runDataStoreCommand using Redis cmdList, it failed to execute the user given Redis command list. Error=" << resultValue << ". " << DPS_RUN_DATA_STORE_COMMAND_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } else { + return(true); + } + } // End of runDataStoreCommand. (Generic command style). + + // This method will get the data item from the store for a given key. + // Caller of this method can also ask us just to find if a data item + // exists in the store without the extra work of fetching and returning the data item value. + bool RedisClusterPlusPlusDBLayer::getDataItemFromStore(std::string const & storeIdString, + std::string const & keyDataString, bool const & checkOnlyForDataItemExistence, + bool const & skipDataItemExistenceCheck, unsigned char * & valueData, + uint32_t & valueSize, PersistenceError & dbError) { + // Let us get this data item from the cache as it is. + // Since there could be multiple data writers, we are going to get whatever is there now. + // It is always possible that the value for the requested item can change right after + // you read it due to the data write made by some other thread. Such is life in a global distributed in-memory store. + string keyString = string(DPS_STORE_CONTENTS_HASH_TYPE) + storeIdString; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + // If the caller doesn't want to perform the data existence check to save time, honor that wish here. + if (skipDataItemExistenceCheck == false) { + // This action is performed on the Store Contents Hash that takes the following format. + // '1' + 'store id' => 'Redis Hash' [It will always have this entry: dps_name_of_this_store ==> 'store name'] + bool hexists_result_value = false; + + try { + hexists_result_value = redis_cluster->hexists(keyString, keyDataString); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HEXISTS_CMD: ") + exceptionString, DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "a) Inside getDataItemFromStore, it failed with a Redis connection error for REDIS_HEXISTS_CMD. Exception: " << exceptionString << " " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("getDataItemFromStore: Unable to check for the existence of the data item in the StoreId " + storeIdString + ". Error=" + exceptionString, DPS_KEY_EXISTENCE_CHECK_ERROR); + SPLAPPTRC(L_ERROR, "a) Inside getDataItemFromStore, unable to check for the existence of the data item in the StoreId " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_KEY_EXISTENCE_CHECK_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // If the caller only wanted us to check for the data item existence, we can exit now. + if (checkOnlyForDataItemExistence == true) { + return(hexists_result_value); + } + + // Caller wants us to fetch and return the data item value. + // If the data item is not there, we can't do much at this point. + if (hexists_result_value == false) { + // This data item doesn't exist. Let us raise an error. + // Requested data item is not there in the cache. + dbError.set("The requested data item doesn't exist in the StoreId " + storeIdString + + ".", DPS_DATA_ITEM_READ_ERROR); + return(false); + } + } // End of if (skipDataItemExistenceCheck == false) + + // Fetch the data item now. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + string data_item_value = ""; + + try { + auto value = redis_cluster->hget(keyString, keyDataString); + + if(value) { + data_item_value = *value; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HGET_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "b) Inside getDataItemFromStore, it failed with a Redis connection error for REDIS_HGET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + dbError.set("Unable to get a data item from the StoreId " + storeIdString + ". Error=" + exceptionString, DPS_DATA_ITEM_READ_ERROR); + SPLAPPTRC(L_ERROR, "Inside getDataItemFromStore, it failed to get a data item from the StoreId " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_DATA_ITEM_READ_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Data item value read from the store will be in this format: 'value' + if (data_item_value.length() == 0) { + // User stored empty data item value in the cache. + valueData = (unsigned char *)""; + valueSize = 0; + } else { + // We can allocate memory for the exact length of the data item value. + valueSize = data_item_value.length(); + valueData = (unsigned char *) malloc(valueSize); + + if (valueData == NULL) { + // Unable to allocate memory to transfer the data item value. + dbError.set("Unable to allocate memory to copy the data item value for the StoreId " + + storeIdString + ".", DPS_GET_DATA_ITEM_MALLOC_ERROR); + valueSize = 0; + return(false); + } + + // We expect the caller of this method to free the valueData pointer. + memcpy(valueData, data_item_value.c_str(), valueSize); + } + + return(true); + } // End of getDataItemFromStore. + + RedisClusterPlusPlusDBLayerIterator * RedisClusterPlusPlusDBLayer::newIterator(uint64_t store, PersistenceError & dbError) { + SPLAPPTRC(L_DEBUG, "Inside newIterator for store id " << store, "RedisClusterPlusPlusDBLayer"); + + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + // Ensure that a store exists for the given store id. + if (storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside newIterator, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside newIterator, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(NULL); + } + + // Get the general information about this store. + uint32_t dataItemCnt = 0; + string storeName = ""; + string keySplTypeName = ""; + string valueSplTypeName = ""; + + if (readStoreInformation(storeIdString, dbError, dataItemCnt, storeName, keySplTypeName, valueSplTypeName) == false) { + SPLAPPTRC(L_DEBUG, "Inside newIterator, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + return(NULL); + } + + // It is a valid store. Create a new iterator and return it to the caller. + RedisClusterPlusPlusDBLayerIterator *iter = new RedisClusterPlusPlusDBLayerIterator(); + iter->store = store; + base64_decode(storeName, iter->storeName); + iter->hasData = true; + // Give this iterator access to our RedisClusterPlusPlusDBLayer object. + iter->redisClusterPlusPlusDBLayerPtr = this; + iter->sizeOfDataItemKeysVector = 0; + iter->currentIndex = 0; + + SPLAPPTRC(L_DEBUG, "Inside newIterator: store=" << iter->store << ", storeName=" << iter->storeName << ", hasData=" << iter->hasData << ", sizeOfDataItemKeysVector=" << iter->sizeOfDataItemKeysVector << ", currentIndex=" << iter->currentIndex, "RedisClusterPlusPlusDBLayer"); + + return(iter); + } // End of newIterator. + + void RedisClusterPlusPlusDBLayer::deleteIterator(uint64_t store, Iterator * iter, PersistenceError & dbError) { + SPLAPPTRC(L_DEBUG, "Inside deleteIterator for store id " << store, "RedisClusterPlusPlusDBLayer"); + + if (iter == NULL) { + return; + } + + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + + RedisClusterPlusPlusDBLayerIterator *myIter = static_cast(iter); + + // Let us ensure that the user wants to delete an iterator that really belongs to the store passed to us. + // This will handle user's coding errors where a wrong combination of store id and iterator is passed to us for deletion. + if (myIter->store != store) { + // User sent us a wrong combination of a store and an iterator. + dbError.set("A wrong iterator has been sent for deletion. This iterator doesn't belong to the StoreId " + + storeIdString + ".", DPS_STORE_ITERATION_DELETION_ERROR); + SPLAPPTRC(L_DEBUG, "Inside deleteIterator, it failed for store id " << storeIdString << ". " << DPS_STORE_ITERATION_DELETION_ERROR, "RedisClusterPlusPlusDBLayer"); + return; + } else { + delete iter; + } + } // End of deleteIterator. + + // This method will acquire a lock for any given generic/arbitrary identifier passed as a string.. + // This is typically used inside the createStore, createOrGetStore, createOrGetLock methods to + // provide thread safety. There are other lock acquisition/release methods once someone has a valid store id or lock id. + bool RedisClusterPlusPlusDBLayer::acquireGeneralPurposeLock(string const & entityName) { + int32_t retryCnt = 0; + + //Try to get a lock for this generic entity. + while (1) { + // '501' + 'entity name' + 'generic_lock' => 1 + std::string genericLockKey = GENERAL_PURPOSE_LOCK_TYPE + entityName + GENERIC_LOCK_TOKEN; + // This is an atomic activity. + // If multiple threads attempt to do it at the same time, only one will succeed. + // Winner will hold the lock until they release it voluntarily or + // until the Redis back-end removes this lock entry after the DPS_AND_DL_GET_LOCK_TTL times out. + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + bool setnx_result_value = false; + + try { + setnx_result_value = redis_cluster->setnx(genericLockKey, string("1")); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + SPLAPPTRC(L_ERROR, "a) Inside acquireGeneralPurposeLock, it failed with a Redis connection error for REDIS_SETNX_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + // Problem in atomic creation of the general purpose lock. + return(false); + } + + if(setnx_result_value == true) { + // We got the lock. + // Set the expiration time for this lock key. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->expire(genericLockKey, DPS_AND_DL_GET_LOCK_TTL); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter an exception? + if (exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + // Problem in setting the lock expiry time. + SPLAPPTRC(L_ERROR, "b) Inside acquireGeneralPurposeLock, it failed with an exception for REDIS_EXPIRE_CMD. Exception: " << exceptionString << ".", "RedisClusterPlusPlusDBLayer"); + + // We already got an exception. There is not much use in the code block below. + // In any case, we will give it a try. + // Delete the erroneous lock data item we created. + try { + redis_cluster->del(genericLockKey); + } catch (const Error &ex) { + // It is not good if this one fails. We can't do much about that. + SPLAPPTRC(L_ERROR, "c) Inside acquireGeneralPurposeLock, it failed with an exception for REDIS_DEL_CMD. Exception: " << ex.what() << ".", "RedisClusterPlusPlusDBLayer"); + } + + return(false); + } + + // We got the lock with proper expiry time set. + return(true); + } // End of if(setnx_result_value == true). + + // Someone else is holding on to the lock of this entity. Wait for a while before trying again. + retryCnt++; + + if (retryCnt >= DPS_AND_DL_GET_LOCK_MAX_RETRY_CNT) { + return(false); + } + + // Yield control to other threads. Wait here with patience by doing an exponential back-off delay. + usleep(DPS_AND_DL_GET_LOCK_SLEEP_TIME * + (retryCnt%(DPS_AND_DL_GET_LOCK_MAX_RETRY_CNT/DPS_AND_DL_GET_LOCK_BACKOFF_DELAY_MOD_FACTOR))); + } // End of while loop. + + return(false); + } // End of acquireGeneralPurposeLock. + + void RedisClusterPlusPlusDBLayer::releaseGeneralPurposeLock(string const & entityName) { + // '501' + 'entity name' + 'generic_lock' => 1 + std::string genericLockKey = GENERAL_PURPOSE_LOCK_TYPE + entityName + GENERIC_LOCK_TOKEN; + + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->del(genericLockKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we get into an exception? + if (exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + SPLAPPTRC(L_ERROR, "Inside releaseGeneralPurposeLock, it failed to delete a lock. Error=" << exceptionString << ". rc=" << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + } + } // End of releaseGeneralPurposeLock. + + RedisClusterPlusPlusDBLayerIterator::RedisClusterPlusPlusDBLayerIterator() { + + } + + RedisClusterPlusPlusDBLayerIterator::~RedisClusterPlusPlusDBLayerIterator() { + + } + + bool RedisClusterPlusPlusDBLayerIterator::getNext(uint64_t store, unsigned char * & keyData, uint32_t & keySize, + unsigned char * & valueData, uint32_t & valueSize, PersistenceError & dbError) { + SPLAPPTRC(L_DEBUG, "Inside getNext for store id " << store, "RedisClusterPlusPlusDBLayerIterator"); + + // If the iteration already ended, do a quick return back to the caller. + // Another possibility we want to detect is whether the caller really passed the + // correct store id that belongs to this iterator object. If either of them + // is not in our favor, bail out right away. + if ((this->hasData == false) || (store != this->store)) { + return(false); + } + + std::ostringstream storeId; + storeId << store; + string storeIdString = storeId.str(); + string data_item_key = ""; + + // Ensure that a store exists for the given store id. + if (this->redisClusterPlusPlusDBLayerPtr->storeIdExistsOrNot(storeIdString, dbError) == false) { + if (dbError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside getNext, it failed to check for the existence of store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayerIterator"); + } else { + dbError.set("No store exists for the StoreId " + storeIdString + ".", DPS_INVALID_STORE_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside getNext, it failed for store id " << storeIdString << ". " << DPS_INVALID_STORE_ID_ERROR, "RedisClusterPlusPlusDBLayerIterator"); + } + + return(false); + } + + // Ensure that this store is not empty at this time. + if (this->redisClusterPlusPlusDBLayerPtr->size(store, dbError) <= 0) { + dbError.set("Store is empty for the StoreId " + storeIdString + ".", DPS_STORE_EMPTY_ERROR); + SPLAPPTRC(L_DEBUG, "Inside getNext, it failed for store id " << storeIdString << ". " << DPS_STORE_EMPTY_ERROR, "RedisClusterPlusPlusDBLayerIterator"); + return(false); + } + + if (this->sizeOfDataItemKeysVector <= 0) { + // This is the first time we are coming inside getNext for store iteration. + // Let us get the available data item keys from this store. + this->dataItemKeys.clear(); + string keyString = string(DPS_STORE_CONTENTS_HASH_TYPE) + storeIdString; + std::vector keys; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + this->redisClusterPlusPlusDBLayerPtr->redis_cluster->hkeys(keyString, std::back_inserter(keys)); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + dbError.set(string("getNext: Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_HKEYS_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DPS_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside getNext, it failed with a Redis connection error for REDIS_HKEYS_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + this->hasData = false; + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + // Unable to get data item keys from the store. + dbError.set("Unable to get data item keys for the StoreId " + storeIdString + ". Error=" + exceptionString, DPS_GET_STORE_DATA_ITEM_KEYS_ERROR); + SPLAPPTRC(L_ERROR, "Inside getNext, it failed to get data item keys from the StoreId " << storeIdString << ". Error=" << exceptionString << ". rc=" << DPS_GET_STORE_DATA_ITEM_KEYS_ERROR, "RedisClusterPlusPlusDBLayer"); + this->hasData = false; + return(false); + } + + // We have the data item keys returned in array now. + // Let us insert them into the iterator object's member variable that will hold the data item keys for this store. + for(unsigned int i=0; i < keys.size(); i++) { + data_item_key = keys[i]; + + // Every dps store will have three mandatory reserved data item keys for internal use. + // Let us not add them to the iteration object's member variable. + if (data_item_key.compare(REDIS_STORE_ID_TO_STORE_NAME_KEY) == 0) { + continue; // Skip this one. + } else if (data_item_key.compare(REDIS_SPL_TYPE_NAME_OF_KEY) == 0) { + continue; // Skip this one. + } else if (data_item_key.compare(REDIS_SPL_TYPE_NAME_OF_VALUE) == 0) { + continue; // Skip this one. + } + + this->dataItemKeys.push_back(data_item_key); + } // End of for loop. + + this->sizeOfDataItemKeysVector = this->dataItemKeys.size(); + this->currentIndex = 0; + + if (this->sizeOfDataItemKeysVector == 0) { + // This is an empty store at this time. + // Let us exit now. + this->hasData = false; + return(false); + } + + SPLAPPTRC(L_DEBUG, "Inside getNext: store=" << this->store << ", storeName=" << this->storeName << ", hasData=" << this->hasData << ", sizeOfDataItemKeysVector=" << this->sizeOfDataItemKeysVector << ", currentIndex=" << this->currentIndex, "RedisClusterPlusPlusDBLayer"); + } // End of if (this->sizeOfDataItemKeysVector <= 0) + + // We have data item keys. + // Let us get the next available data. + SPLAPPTRC(L_DEBUG, "Inside getNext: Just about to get the data item key at index " << this->currentIndex << " from store " << this->storeName << ". Total number of keys=" << this->sizeOfDataItemKeysVector, "RedisClusterPlusPlusDBLayer"); + + data_item_key = this->dataItemKeys.at(this->currentIndex); + // Advance the data item key vector index by 1 for it to be ready for the next iteration. + this->currentIndex += 1; + + if (this->currentIndex >= this->sizeOfDataItemKeysVector) { + // We have served all the available data to the caller who is iterating this store. + // There is no more data to deliver for subsequent iteration requests from the caller. + this->dataItemKeys.clear(); + this->currentIndex = 0; + this->sizeOfDataItemKeysVector = 0; + this->hasData = false; + } + + // Get this data item's value data and value size. + // data_item_key was obtained straight from the store contents hash, where it is + // already in the base64 encoded format. + bool result = this->redisClusterPlusPlusDBLayerPtr->getDataItemFromStore(storeIdString, data_item_key, + false, false, valueData, valueSize, dbError); + + if (result == false) { + // Some error has occurred in reading the data item value. + SPLAPPTRC(L_DEBUG, "Inside getNext, it failed for store id " << storeIdString << ". " << dbError.getErrorCode(), "RedisClusterPlusPlusDBLayerIterator"); + // We will disable any future action for this store using the current iterator. + this->hasData = false; + return(false); + } + + // We are almost done once we take care of arranging to return the key name and key size. + // In order to support spaces in data item keys, we base64 encoded them before storing it in Redis. + // Let us base64 decode it now to get the original data item key. + string base64_decoded_data_item_key; + this->redisClusterPlusPlusDBLayerPtr->base64_decode(data_item_key, base64_decoded_data_item_key); + data_item_key = base64_decoded_data_item_key; + keySize = data_item_key.length(); + // Allocate memory for this key and copy it to that buffer. + keyData = (unsigned char *) malloc(keySize); + + if (keyData == NULL) { + // This error will occur very rarely. + // If it happens, we will handle it. + // We will not return any useful data to the caller. + if (valueSize > 0) { + delete [] valueData; + valueData = NULL; + } + + // We will disable any future action for this store using the current iterator. + this->hasData = false; + keySize = 0; + dbError.set("Unable to allocate memory for the keyData while doing the next data item iteration for the StoreId " + storeIdString + ".", DPS_STORE_ITERATION_MALLOC_ERROR); + SPLAPPTRC(L_DEBUG, "Inside getNext, it failed for store id " << storeIdString << ". " << DPS_STORE_ITERATION_MALLOC_ERROR, "RedisClusterPlusPlusDBLayerIterator"); + return(false); + } + + // Copy the raw key data into the allocated buffer. + memcpy(keyData, data_item_key.data(), keySize); + // We are done. We expect the caller to free the keyData and valueData buffers. + return(true); + } // End of getNext. + +// ======================================================================================================= +// Beyond this point, we have code that deals with the distributed locks that a SPL developer can +// create, remove,acquire, and release. +// ======================================================================================================= + uint64_t RedisClusterPlusPlusDBLayer::createOrGetLock(std::string const & name, PersistenceError & lkError) { + SPLAPPTRC(L_DEBUG, "Inside createOrGetLock with a name " << name, "RedisClusterPlusPlusDBLayer"); + + string base64_encoded_name; + base64_encode(name, base64_encoded_name); + + // Get a general purpose lock so that only one thread can + // enter inside of this method at any given time with the same lock name. + if (acquireGeneralPurposeLock(base64_encoded_name) == false) { + // Unable to acquire the general purpose lock. + lkError.set("Unable to get a generic lock for creating a lock with its name as " + name + ".", DPS_GET_GENERIC_LOCK_ERROR); + SPLAPPTRC(L_DEBUG, "Inside createOrGetLock, it failed for an yet to be created lock with its name as " << + name << ". " << DPS_GET_GENERIC_LOCK_ERROR, "RedisClusterPlusPlusDBLayer"); + // User has to retry again to create this distributed lock. + return 0; + } + + // Let us first see if a lock with the given name already exists. + // In our Redis dps implementation, data item keys can have space characters. + // Inside Redis, all our lock names will have a mapping type indicator of + // "5" at the beginning followed by the actual lock name. + // '5' + 'lock name' ==> 'lock id' + std::string lockNameKey = DL_LOCK_NAME_TYPE + base64_encoded_name; + long long exists_result_value = 0; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + exists_result_value = redis_cluster->exists(lockNameKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + lkError.set(string("Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_EXISTS_CMD: ") + exceptionString, DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "a) Inside createOrGetLock, it failed with a Redis connection error for REDIS_EXISTS_CMD. Exception: " << exceptionString << " " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + lkError.set("Unable to check the existence of the lock. Error=" + exceptionString, DPS_KEY_EXISTENCE_CHECK_ERROR); + SPLAPPTRC(L_ERROR, "b) Inside createOrGetLock, it failed to check for the existence of the lock. Error=" << exceptionString << ". rc=" << DPS_KEY_EXISTENCE_CHECK_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } + + if (exists_result_value == 1) { + // This lock already exists in our cache. + // We can get the lockId and return it to the caller. + string get_result_value = ""; + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + auto val = redis_cluster->get(lockNameKey); + + if(val) { + get_result_value = *val; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + lkError.set(string("createOrGetLock: Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_GET_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "c) Inside createOrGetLock, it failed for the lock named " << name << " with a Redis connection error for REDIS_GET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + lkError.set("Unable to get the lockId for the lockName " + name + + ". Error=" + exceptionString, DL_GET_LOCK_ID_ERROR); + SPLAPPTRC(L_ERROR, "d) Inside createOrGetLock, unable to get the lockId for the lockName " << name << ". Error=" << exceptionString << ". rc=" << DL_GET_LOCK_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } + + if (get_result_value.length() <= 0) { + // Unable to get the lock information. It is an abnormal error. Convey this to the caller. + lkError.set("Redis returned an empty lockId for the lockName " + name + ".", DL_GET_LOCK_ID_ERROR); + SPLAPPTRC(L_DEBUG, "e) Inside createOrGetLock, it failed with an empty lockId for the lockName " << + name << ". " << DL_GET_LOCK_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } else { + uint64_t lockId = 0; + lockId = streams_boost::lexical_cast(get_result_value); + releaseGeneralPurposeLock(base64_encoded_name); + return(lockId); + } + } // End of if (exists_result_value == 1) + + // There is no existing lock. + // Create a new lock. + // At first, let us increment our global dps_and_dl_guid to reserve a new lock id. + uint64_t lockId = 0; + std::string guid_key = DPS_AND_DL_GUID_KEY; + long long incr_result_value = 0; + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + incr_result_value = redis_cluster->incr(guid_key); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + lkError.set(string("createOrGetLock: Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_INCR_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "f) Inside createOrGetLock, it failed for the lock named " << name << " with a Redis connection error for REDIS_INCR_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return 0; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + lkError.set("Unable to get a unique lock id for a lock named " + name + + ". Error=" + exceptionString, DL_GUID_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "g) Inside createOrGetLock, unable to get a unique lock id for a lock named " << name << ". Error=" << exceptionString << ". rc=" << DL_GUID_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } + + // Get the newly created lock id. + lockId = incr_result_value; + // We secured a guid. We can now create this lock. + // + // 1) Create the Lock Name + // '5' + 'lock name' ==> 'lock id' + std::ostringstream value; + value << lockId; + std::string value_string = value.str(); + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->set(lockNameKey, value_string); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + lkError.set(string("createOrGetLock: Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_SET_CMD: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "h) Inside createOrGetLock, it failed for the lock named " << name << " with a Redis connection error for REDIS_SET_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + lkError.set("Unable to create 'LockName:LockId' in the cache for a lock named " + name + + ". Error=" + exceptionString, DL_LOCK_NAME_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "i) Inside createOrGetLock, it failed to create 'LockName:LockId' in the cache for a lock named " << name << ". Error=" << exceptionString << ". rc=" << DL_LOCK_NAME_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + // We are simply leaving an incremented value for the dps_and_dl_guid key in the cache that will never get used. + // Since it is harmless, there is no need to reduce this number by 1. It is okay that this guid number will remain unassigned to any store. + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } + + // 2) Create the Lock Info + // '6' + 'lock id' ==> 'lock use count' + '_' + 'lock expiration time expressed as elapsed seconds since the epoch' + '_' + 'pid that owns this lock' + "_" + lock name' + std::string lockInfoKey = DL_LOCK_INFO_TYPE + value_string; // LockId becomes the new key now. + value_string = string("0_0_0_") + base64_encoded_name; + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->set(lockInfoKey, value_string); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + // This is how we can detect that a wrong redis-cluster server name is configured by the user or + // not even a single redis-cluster server daemon being up and running. + // This is a serious error. + lkError.set(string("createOrGetLock: Unable to connect to the redis-cluster server(s).") + + string(" Got an exception for REDIS_SET_CMD2: ") + exceptionString + + " Application code may call the DPS reconnect API and then retry the failed operation. ", + DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "j) Inside createOrGetLock, it failed for the lock named " << name << " with a Redis connection error for REDIS_SET_CMD2. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + lkError.set("Unable to create 'LockId:LockInfo' in the cache for a lock named " + name + + ". Error=" + exceptionString, DL_LOCK_NAME_CREATION_ERROR); + SPLAPPTRC(L_ERROR, "k) Inside createOrGetLock, it failed to create 'LockId:LockInfo' in the cache for a lock named " << name << ". Error=" << exceptionString << ". rc=" << DL_LOCK_NAME_CREATION_ERROR, "RedisClusterPlusPlusDBLayer"); + // We are simply leaving an incremented value for the dps_and_dl_guid key in the cache that will never get used. + // Since it is harmless, there is no need to reduce this number by 1. It is okay that this guid number will remain unassigned to any store. + + // Delete the previous entry we made. + try { + redis_cluster->del(lockNameKey); + } catch (const Error &ex) { + // It is not good if this one fails. We can't do much about that. + } + + releaseGeneralPurposeLock(base64_encoded_name); + return(0); + } + + // We created the lock. + SPLAPPTRC(L_DEBUG, "Inside createOrGetLock done for a lock named " << name, "RedisClusterPlusPlusDBLayer"); + releaseGeneralPurposeLock(base64_encoded_name); + return (lockId); + } // End of createOrGetLock. + + bool RedisClusterPlusPlusDBLayer::removeLock(uint64_t lock, PersistenceError & lkError) { + SPLAPPTRC(L_DEBUG, "Inside removeLock for lock id " << lock, "RedisClusterPlusPlusDBLayer"); + + ostringstream lockId; + lockId << lock; + string lockIdString = lockId.str(); + + // If the lock doesn't exist, there is nothing to remove. Don't allow this caller inside this method. + if(lockIdExistsOrNot(lockIdString, lkError) == false) { + if (lkError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside removeLock, it failed to check for the existence of lock id " << lockIdString << ". " << lkError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + lkError.set("No lock exists for the LockId " + lockIdString + ".", DL_INVALID_LOCK_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside removeLock, it failed for lock id " << lockIdString << ". " << DL_INVALID_LOCK_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(false); + } + + // Before removing the lock entirely, ensure that the lock is not currently being used by anyone else. + if (acquireLock(lock, 5, 3, lkError) == false) { + // Unable to acquire the distributed lock. + lkError.set("Unable to get a distributed lock for the LockId " + lockIdString + ".", DL_GET_DISTRIBUTED_LOCK_ERROR); + SPLAPPTRC(L_DEBUG, "Inside removeLock, it failed for the lock id " << lockIdString << ". " << DL_GET_DISTRIBUTED_LOCK_ERROR, "RedisClusterPlusPlusDBLayer"); + // User has to retry again to remove the lock. + return(false); + } + + // We ensured that this lock is not being used by anyone at this time. + // We are safe to remove this distributed lock entirely. + // Let us first get the lock name for this lock id. + uint32_t lockUsageCnt = 0; + int32_t lockExpirationTime = 0; + std::string lockName = ""; + pid_t lockOwningPid = 0; + + if (readLockInformation(lockIdString, lkError, lockUsageCnt, lockExpirationTime, lockOwningPid, lockName) == false) { + SPLAPPTRC(L_DEBUG, "Inside removeLock, it failed for lock id " << lockIdString << ". " << lkError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + releaseLock(lock, lkError); + // This is alarming. This will put this lock in a bad state. Poor user has to deal with it. + return(false); + } + + // Let us first remove the lock info for this distributed lock. + // '6' + 'lock id' ==> 'lock use count' + '_' + 'lock expiration time expressed as elapsed seconds since the epoch' + '_' + 'pid that owns this lock' + "_" + lock name' + std::string lockInfoKey = DL_LOCK_INFO_TYPE + lockIdString; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->del(lockInfoKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Do we have an exception? + if(exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + SPLAPPTRC(L_ERROR, "a) Inside removeLock, it failed with an exception. Error=" << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + // We can now delete the lock name root entry. + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + string lockNameKey = DL_LOCK_NAME_TYPE + lockName; + + try { + redis_cluster->del(lockNameKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Do we have an exception? + if(exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + SPLAPPTRC(L_ERROR, "b) Inside removeLock, it failed with an exception. Error=" << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + // We can delete the lock item itself now. + releaseLock(lock, lkError); + // Inside the release lock function we called in the previous statement, it makes a + // call to update the lock info. That will obviously fail since we removed here everything about + // this lock. Hence, let us not propagate that error and cause the user to panic. + // Reset any error that may have happened in the previous operation of releasing the lock. + lkError.reset(); + // Life of this lock ended completely with no trace left behind. + return(true); + } // End of removeLock. + + bool RedisClusterPlusPlusDBLayer::acquireLock(uint64_t lock, double leaseTime, double maxWaitTimeToAcquireLock, PersistenceError & lkError) { + SPLAPPTRC(L_DEBUG, "Inside acquireLock for lock id " << lock, "RedisClusterPlusPlusDBLayer"); + + ostringstream lockId; + lockId << lock; + string lockIdString = lockId.str(); + int32_t retryCnt = 0; + + // If the lock doesn't exist, there is nothing to acquire. Don't allow this caller inside this method. + if(lockIdExistsOrNot(lockIdString, lkError) == false) { + if (lkError.hasError() == true) { + SPLAPPTRC(L_DEBUG, "Inside acquireLock, it failed to check for the existence of lock id " << lockIdString << ". " << lkError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + lkError.set("No lock exists for the LockId " + lockIdString + ".", DL_INVALID_LOCK_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside acquireLock, it failed for lock id " << lockIdString << ". " << DL_INVALID_LOCK_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + } + + return(false); + } + + // We will first check if we can get this lock. + // '7' + 'lock id' + 'dl_lock' => 1 + std::string distributedLockKey = DL_LOCK_TYPE + lockIdString + DL_LOCK_TOKEN; + time_t startTime, timeNow; + // Get the start time for our lock acquisition attempts. + time(&startTime); + + // Try to get a distributed lock. + while(1) { + // This is an atomic activity. + // If multiple threads attempt to do it at the same time, only one will succeed. + // Winner will hold the lock until they release it voluntarily or + // until the Redis back-end removes this lock entry after the lease time ends. + // We will add the lease time to the current timestamp i.e. seconds elapsed since the epoch. + time_t new_lock_expiry_time = time(0) + (time_t)leaseTime; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + bool setnx_result_value = false; + + try { + setnx_result_value = redis_cluster->setnx(distributedLockKey, string("1")); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + SPLAPPTRC(L_ERROR, "a) Inside acquireLock, it failed with a Redis connection error for REDIS_SETNX_CMD. Exception: " << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + // Problem in atomic creation of the distributed lock. + SPLAPPTRC(L_ERROR, "b) Inside acquireLock, it failed with an error for REDIS_SETNX_CMD. Exception: " << exceptionString << ".", "RedisClusterPlusPlusDBLayer"); + return(false); + } + + if(setnx_result_value == true) { + // We got the lock. + // Set the expiration time for this lock key. + ostringstream expiryTimeInMillis; + expiryTimeInMillis << (leaseTime*1000.00); + long long ttlInMillis = streams_boost::lexical_cast(expiryTimeInMillis.str()); + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->psetex(distributedLockKey, ttlInMillis, "2"); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Is there an exception? + if(exceptionType != REDIS_PLUS_PLUS_NO_ERROR) { + SPLAPPTRC(L_ERROR, "c) Inside acquireLock, it failed with an exception for REDIS_PSETEX_CMD. Exception: " << exceptionString << ".", "RedisClusterPlusPlusDBLayer"); + // In any case, let us try the following code block which may also fail. + // Delete the erroneous lock data item we created. + try { + redis_cluster->del(distributedLockKey); + } catch (const Error &ex) { + // It is not good if this one fails. We can't do much about that. + } + + return(false); + } + + // We got the lock. + // Let us update the lock information now. + if(updateLockInformation(lockIdString, lkError, 1, new_lock_expiry_time, getpid()) == true) { + return(true); + } else { + // Some error occurred while updating the lock information. + // It will be in an inconsistent state. Let us release the lock. + // After than, we will continue in the while loop. + releaseLock(lock, lkError); + } + } else { + // We didn't get the lock. + // Let us check if the previous owner of this lock simply forgot to release it. + // In that case, we will release this expired lock. + // Read the time at which this lock is expected to expire. + uint32_t _lockUsageCnt = 0; + int32_t _lockExpirationTime = 0; + std::string _lockName = ""; + pid_t _lockOwningPid = 0; + + if (readLockInformation(lockIdString, lkError, _lockUsageCnt, _lockExpirationTime, _lockOwningPid, _lockName) == false) { + SPLAPPTRC(L_DEBUG, "Inside acquireLock, it failed for lock id " << lockIdString << ". " << lkError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + } else { + // Is current time greater than the lock expiration time? + if ((_lockExpirationTime > 0) && (time(0) > (time_t)_lockExpirationTime)) { + // Time has passed beyond the lease of this lock. + // Lease expired for this lock. Original owner forgot to release the lock and simply left it hanging there without a valid lease. + releaseLock(lock, lkError); + } + } + } // End of if(setnx_result_value == true) + + // Someone else is holding on to this distributed lock. Wait for a while before trying again. + retryCnt++; + + if (retryCnt >= DPS_AND_DL_GET_LOCK_MAX_RETRY_CNT) { + lkError.set("Unable to acquire the lock named " + lockIdString + ".", DL_GET_LOCK_ERROR); + SPLAPPTRC(L_DEBUG, "Inside acquireLock, it failed for a lock named " << lockIdString << ". " << DL_GET_LOCK_ERROR, "RedisClusterPlusPlusDBLayer"); + // Our caller can check the error code and try to acquire the lock again. + return(false); + } + + // Check if we have gone past the maximum wait time the caller was willing to wait in order to acquire this lock. + time(&timeNow); + if (difftime(startTime, timeNow) > maxWaitTimeToAcquireLock) { + lkError.set("Unable to acquire the lock named " + lockIdString + " within the caller specified wait time.", DL_GET_LOCK_TIMEOUT_ERROR); + SPLAPPTRC(L_DEBUG, "Inside acquireLock, it failed to acquire the lock named " << lockIdString << + " within the caller specified wait time." << DL_GET_LOCK_TIMEOUT_ERROR, "RedisClusterPlusPlusDBLayer"); + // Our caller can check the error code and try to acquire the lock again. + return(false); + } + + // Yield control to other threads. Wait here with patience by doing an exponential back-off delay. + usleep(DPS_AND_DL_GET_LOCK_SLEEP_TIME * + (retryCnt%(DPS_AND_DL_GET_LOCK_MAX_RETRY_CNT/DPS_AND_DL_GET_LOCK_BACKOFF_DELAY_MOD_FACTOR))); + } // End of while(1) + } // End of acquireLock. + + void RedisClusterPlusPlusDBLayer::releaseLock(uint64_t lock, PersistenceError & lkError) { + SPLAPPTRC(L_DEBUG, "Inside releaseLock for lock id " << lock, "RedisClusterPlusPlusDBLayer"); + + ostringstream lockId; + lockId << lock; + string lockIdString = lockId.str(); + + // '7' + 'lock id' + 'dl_lock' => 1 + std::string distributedLockKey = DL_LOCK_TYPE + lockIdString + DL_LOCK_TOKEN; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->del(distributedLockKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + lkError.set("Unable to release the distributed lock id " + lockIdString + ". Possible connection error. Error=" + exceptionString, DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside releaseLock, it failed with an exception. Error=" << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return; + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + lkError.set("Unable to release the distributed lock id " + lockIdString + ". Error=" + exceptionString, DL_LOCK_RELEASE_ERROR); + + SPLAPPTRC(L_ERROR, "Inside releaseLock, it failed to release a lock using REDIS_DEL_CMD. Error=" << exceptionString << ". rc=" << DL_LOCK_RELEASE_ERROR, "RedisClusterPlusPlusDBLayer"); + return; + } + + updateLockInformation(lockIdString, lkError, 0, 0, 0); + } // End of releaseLock. + + bool RedisClusterPlusPlusDBLayer::updateLockInformation(std::string const & lockIdString, + PersistenceError & lkError, uint32_t const & lockUsageCnt, int32_t const & lockExpirationTime, pid_t const & lockOwningPid) { + // Get the lock name for this lock. + uint32_t _lockUsageCnt = 0; + int32_t _lockExpirationTime = 0; + std::string _lockName = ""; + pid_t _lockOwningPid = 0; + + if (readLockInformation(lockIdString, lkError, _lockUsageCnt, _lockExpirationTime, _lockOwningPid, _lockName) == false) { + SPLAPPTRC(L_DEBUG, "Inside updateLockInformation, it failed for lock id " << lockIdString << ". " << lkError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Let us update the lock information. + // '6' + 'lock id' ==> 'lock use count' + '_' + 'lock expiration time expressed as elapsed seconds since the epoch' + '_' + 'pid that owns this lock' + "_" + lock name' + std::string lockInfoKey = DL_LOCK_INFO_TYPE + lockIdString; + ostringstream lockInfoValue; + lockInfoValue << lockUsageCnt << "_" << lockExpirationTime << "_" << lockOwningPid << "_" << _lockName; + string lockInfoValueString = lockInfoValue.str(); + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + redis_cluster->set(lockInfoKey, lockInfoValueString); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + lkError.set("updateLockInformation: Unable to update 'LockId:LockInfo' for " + _lockName + ". Error=" + exceptionString + ". Possible connection error. Application code may call the DPS reconnect API and then retry the failed operation.", DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside updateLockInformation, it failed with an exception. Error=" << exceptionString << ". rc=" << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + // Problem in updating the "LockId:LockInfo" entry in the cache. + lkError.set("Unable to update 'LockId:LockInfo' in the cache for a lock named " + _lockName + + ". Error=" + exceptionString, DL_LOCK_INFO_UPDATE_ERROR); + SPLAPPTRC(L_DEBUG, "Inside updateLockInformation, it failed for a lock named " << _lockName << + ". Error=" << exceptionString << ". rc=" << + DL_LOCK_INFO_UPDATE_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + return(true); + } // End of updateLockInformation. + + bool RedisClusterPlusPlusDBLayer::readLockInformation(std::string const & lockIdString, PersistenceError & lkError, uint32_t & lockUsageCnt, int32_t & lockExpirationTime, pid_t & lockOwningPid, std::string & lockName) { + // Read the contents of the lock information. + lockName = ""; + + // Lock Info contains meta data information about a given lock. + // '6' + 'lock id' ==> 'lock use count' + '_' + 'lock expiration time expressed as elapsed seconds since the epoch' + '_' + 'pid that owns this lock' + "_" + lock name' + string lockInfoKey = DL_LOCK_INFO_TYPE + lockIdString; + + string get_result_value = ""; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + auto val = redis_cluster->get(lockInfoKey); + + if(val) { + get_result_value = *val; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + lkError.set("readLockInformation: Unable to get LockInfo for " + lockIdString + ". Error=" + exceptionString + ". Possible connection error. Application code may call the DPS reconnect API and then retry the failed operation.", DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside readLockInformation, it failed with an exception. Error=" << exceptionString << "rc=" << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + // Unable to get the LockInfo from our cache. + lkError.set("Unable to get LockInfo using the LockId " + lockIdString + + ". Exception=" + exceptionString, DL_GET_LOCK_INFO_ERROR); + return(false); + } + + std::string lockInfo = get_result_value; + // As shown in the comment line above, lock information is a string that has multiple pieces of + // information each separated by an underscore character. We are interested in all the three tokens (lock usage count, lock expiration time, lock name). + // Let us parse it now. + std::vector words; + streams_boost::split(words, lockInfo, streams_boost::is_any_of("_"), streams_boost::token_compress_on); + int32_t tokenCnt = 0; + lockUsageCnt = 0; + + for (std::vector::iterator it = words.begin(); it != words.end(); ++it) { + string tmpString = *it; + + switch(++tokenCnt) { + case 1: + if (tmpString.empty() == false) { + lockUsageCnt = streams_boost::lexical_cast(tmpString.c_str()); + } + + break; + + case 2: + if (tmpString.empty() == false) { + lockExpirationTime = streams_boost::lexical_cast(tmpString.c_str()); + } + + break; + + case 3: + if (tmpString.empty() == false) { + lockOwningPid = streams_boost::lexical_cast(tmpString.c_str()); + } + + break; + + case 4: + lockName = *it; + break; + + default: + // If we keep getting more than 3 tokens, then it means that the lock name has + // underscore character(s) in it. e-g: Super_Duper_Lock. + lockName += "_" + *it; + } // End of switch + } // End of for loop. + + if (lockName == "") { + // Unable to get the name of this lock. + lkError.set("Unable to get the lock name for lockId " + lockIdString + ".", DL_GET_LOCK_NAME_ERROR); + return(false); + } + + return(true); + } // End of readLockInformation. + + // This method will check if a lock exists for a given lock id. + bool RedisClusterPlusPlusDBLayer::lockIdExistsOrNot(string lockIdString, PersistenceError & lkError) { + string keyString = string(DL_LOCK_INFO_TYPE) + lockIdString; + long long exists_result_value = 0; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + exists_result_value = redis_cluster->exists(keyString); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + lkError.set("lockIdExistsOrNot: LockIdExistsOrNot: Unable to connect to the redis-cluster server(s). Application code may call the DPS reconnect API and then retry the failed operation.", DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "Inside lockIdExistsOrNot, it failed with an exception. Error=" << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(false); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + // Unable to get the lock info for the given lock id. + lkError.set("LockIdExistsOrNot: Unable to get LockInfo for the lockId " + lockIdString + + ". Error=" + exceptionString, DL_GET_LOCK_INFO_ERROR); + return(false); + } + + if(exists_result_value == 1) { + return(true); + } else { + return(false); + } + } // End of lockIdExistsOrNot. + + // This method will return the process id that currently owns the given lock. + uint32_t RedisClusterPlusPlusDBLayer::getPidForLock(string const & name, PersistenceError & lkError) { + SPLAPPTRC(L_DEBUG, "Inside getPidForLock with a name " << name, "RedisClusterPlusPlusDBLayer"); + + string base64_encoded_name; + base64_encode(name, base64_encoded_name); + uint64_t lock = 0; + + // Let us first see if a lock with the given name already exists. + // In our Redis dps implementation, data item keys can have space characters. + // Inside Redis, all our lock names will have a mapping type indicator of + // "5" at the beginning followed by the actual lock name. + // '5' + 'lock name' ==> 'lock id' + std::string lockNameKey = DL_LOCK_NAME_TYPE + base64_encoded_name; + long long exists_result_value = 0; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + exists_result_value = redis_cluster->exists(lockNameKey); + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + lkError.set("a) getPidForLock: Unable to connect to the redis-cluster server(s). Error=" + exceptionString + ". Application code may call the DPS reconnect API and then retry the failed operation.", DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "a) Inside getPidForLock, it failed for the lock named " << name << " with an exception. Error=" << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(0); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + // Unable to get the lock info for the given lock id. + lkError.set("b) getPidForLock: It failed for the lock name " + name + + " in the REDIS_EXISTS_CMD. Error=" + exceptionString, DL_GET_LOCK_INFO_ERROR); + return(false); + } + + if(exists_result_value == 0) { + // Lock with the given name doesn't exist. + lkError.set("d) Unable to find a lockName " + name + ".", DL_LOCK_NOT_FOUND_ERROR); + SPLAPPTRC(L_DEBUG, "d) Inside getPidForLock, unable to find the lockName " << name << ". " << DL_LOCK_NOT_FOUND_ERROR, "RedisClusterPlusPlusDBLayer"); + return(0); + } + + // This lock already exists in our cache. + // We can get the lockId and return it to the caller. + string get_result_value = ""; + exceptionString = ""; + exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + auto val = redis_cluster->get(lockNameKey); + + if(val) { + get_result_value = *val; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + lkError.set("e) getPidForLock: Unable to connect to the redis-cluster server(s). Error=" + exceptionString + ". Application code may call the DPS reconnect API and then retry the failed operation.", DL_CONNECTION_ERROR); + SPLAPPTRC(L_ERROR, "e) Inside getPidForLock, it failed for the lock named " << name << " with an exception. Error=" << exceptionString << ". Application code may call the DPS reconnect API and then retry the failed operation. " << DL_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + return(0); + } + + // Did we encounter a redis reply error? + if (exceptionType == REDIS_PLUS_PLUS_REPLY_ERROR || + exceptionType == REDIS_PLUS_PLUS_OTHER_ERROR) { + // Unable to get an existing lock id from the cache. + lkError.set("f) Unable to get the lockId for the lockName " + name + ". Error=" + + exceptionString, DL_GET_LOCK_ID_ERROR); + SPLAPPTRC(L_DEBUG, "f) Inside getPidForLock, it failed for the lockName " << name << + ". Error=" << exceptionString << ". rc=" << + DL_GET_LOCK_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + return(0); + } + + if(get_result_value.length() <= 0) { + // Unable to get the lock information. It is an abnormal error. Convey this to the caller. + lkError.set("Redis returned an empty lockId for the lockName " + name + ".", DL_GET_LOCK_ID_ERROR); + SPLAPPTRC(L_DEBUG, "Inside getPidForLock, it failed with an empty lockId for the lockName " << name << ". " << DL_GET_LOCK_ID_ERROR, "RedisClusterPlusPlusDBLayer"); + return(0); + } + + lock = streams_boost::lexical_cast(get_result_value); + // Read the lock information. + ostringstream lockId; + lockId << lock; + string lockIdString = lockId.str(); + + uint32_t _lockUsageCnt = 0; + int32_t _lockExpirationTime = 0; + std::string _lockName = ""; + pid_t _lockOwningPid = 0; + + if (readLockInformation(lockIdString, lkError, _lockUsageCnt, _lockExpirationTime, _lockOwningPid, _lockName) == false) { + SPLAPPTRC(L_DEBUG, "Inside getPidForLock, it failed for lock id " << lockIdString << ". " << lkError.getErrorCode(), "RedisClusterPlusPlusDBLayer"); + return(0); + } else { + return(_lockOwningPid); + } + } // End of getPidForLock. + + void RedisClusterPlusPlusDBLayer::persist(PersistenceError & dbError){ + // As of Nov/2020, there is no support for Wait command in the redis-plus-plus library for redis_cluster. + // So, Wwe will use the generic command to execute this. + std::vector vec1; + vec1.push_back(string("WAIT")); + vec1.push_back("1"); + vec1.push_back("0"); + string result = ""; + runDataStoreCommand(vec1, result, dbError); + + if (result.compare(string("1")) != 0) { + // Didn't write to at least one slave + dbError.set("dpsPersist: return value should be at least 1.", DPS_MAKE_DURABLE_ERROR); + SPLAPPTRC(L_ERROR, "dpsPersist: WAIT return value should be 1. But it is not.", "RedisClusterPlusPlusDBLayer"); + } else{ + SPLAPPTRC(L_DEBUG, "dpsPersist, WAIT returned successfully, wrote to " << result << " replica.", "RedisClusterPlusPlusDBLayer"); + } + } // End of dpsPersist. + + // This method will return the status of the connection to the back-end data store. + bool RedisClusterPlusPlusDBLayer::isConnected() { + if (redis_cluster == NULL) { + // There is no active connection. + return(false); + } + + // We will simply do a read API for a dummy key. + // If it results in a connection error, that will tell us the status of the connection. + string get_result_value = ""; + string exceptionString = ""; + int exceptionType = REDIS_PLUS_PLUS_NO_ERROR; + + try { + auto val = redis_cluster->get("my_dummy_key"); + + if(val) { + get_result_value = *val; + } + } catch (const ReplyError &ex) { + // WRONGTYPE Operation against a key holding the wrong kind of value + exceptionString = ex.what(); + // Command execution error. + exceptionType = REDIS_PLUS_PLUS_REPLY_ERROR; + } catch (const TimeoutError &ex) { + // Reading or writing timeout + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const ClosedError &ex) { + // Connection has been closed. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const IoError &ex) { + // I/O error on the connection. + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_CONNECTION_ERROR; + } catch (const Error &ex) { + // Other errors + exceptionString = ex.what(); + // Connectivity related error. + exceptionType = REDIS_PLUS_PLUS_OTHER_ERROR; + } + + // Did we encounter a redis-cluster server connection error? + if (exceptionType == REDIS_PLUS_PLUS_CONNECTION_ERROR) { + SPLAPPTRC(L_ERROR, "Inside isConnected: Unable to connect to the redis-cluster server(s). Failed with an exception. Error=" << exceptionString << ". rc=" << DPS_CONNECTION_ERROR, "RedisClusterPlusPlusDBLayer"); + // Connection error. + return(false); + } else { + // Connection is active. + return(true); + } + } // End of isConnected. + + // This method will reestablish the status of the connection to the back-end data store. + bool RedisClusterPlusPlusDBLayer::reconnect(std::set & dbServers, PersistenceError & dbError) { + if (redis_cluster != NULL) { + // Delete the existing cluster connection object. + delete redis_cluster; + redis_cluster = NULL; + } + + connectToDatabase(dbServers, dbError); + + if(dbError.hasError()) { + // Connection didn't happen. + // Caller can query the error code and error string using two other DPS APIs meant for that purpose. + return(false); + } else { + // All good. + return(true); + } + } // End of reconnect. + +} } } } } + +using namespace com::ibm::streamsx::store; +using namespace com::ibm::streamsx::store::distributed; +extern "C" { + DBLayer * create(){ + return new RedisClusterPlusPlusDBLayer(); + } +} diff --git a/com.ibm.streamsx.dps/impl/src/RedisDBLayer.cpp b/com.ibm.streamsx.dps/impl/src/RedisDBLayer.cpp index ff0a074..2aea7f9 100644 --- a/com.ibm.streamsx.dps/impl/src/RedisDBLayer.cpp +++ b/com.ibm.streamsx.dps/impl/src/RedisDBLayer.cpp @@ -1,6 +1,6 @@ /* # Licensed Materials - Property of IBM -# Copyright IBM Corp. 2011, 2014 +# Copyright IBM Corp. 2011, 2020 # US Government Users Restricted Rights - Use, duplication or # disclosure restricted by GSA ADP Schedule Contract with # IBM Corp. @@ -71,13 +71,8 @@ It is important to note that a Streams application designer/developer should car of his/her application will access the store simultaneously i.e. who puts what, who gets what and at what frequency from where etc. -This C++ project has a companion SPL project (058_data_sharing_between_non_fused_spl_custom_and_cpp_primitive_operators). -Please refer to the commentary in that SPL project file for learning about the procedure to do an -end-to-end test run involving the SPL code, serialization/deserialization code, -redis interface code (this file), and your redis infrastructure. - -As a first step, you should run the ./mk script from the C++ project directory (DistributedProcessStoreLib). -That will take care of building the .so file for the dps and copy it to the SPL project's impl/lib directory. +There are simple and advanced examples included in the DPS toolkit to test all the features described in the previous +paragraph. ================================================================================================================== */ @@ -107,6 +102,15 @@ That will take care of building the .so file for the dps and copy it to the SPL #include #include #include +#include +#include +// On the IBM Streams application Linux machines, it is a must to install opensssl and +// and openssl-devel RPM packages. The following include files and the SSL custom +// initialization logic below in this file will require openssl to be available. +// In particular, we will use the /lib64/libssl.so and /lib64/libcrypto.so libraries +// that are part of openssl. +#include +#include using namespace std; using namespace SPL; @@ -150,325 +154,526 @@ namespace distributed void RedisDBLayer::connectToDatabase(std::set const & dbServers, PersistenceError & dbError) { - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase", "RedisDBLayer"); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase", "RedisDBLayer"); + // Get the name, OS version and CPU type of this machine. + struct utsname machineDetails; + + if(uname(&machineDetails) < 0) { + dbError.set("Unable to get the machine/os/cpu details.", DPS_INITIALIZE_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed to get the machine/os/cpu details. " << DPS_INITIALIZE_ERROR, "RedisDBLayer"); + return; + } else { + nameOfThisMachine = string(machineDetails.nodename); + osVersionOfThisMachine = string(machineDetails.sysname) + string(" ") + string(machineDetails.release); + cpuTypeOfThisMachine = string(machineDetails.machine); + } - // Get the name, OS version and CPU type of this machine. - struct utsname machineDetails; + string redisConnectionErrorMsg = "Unable to initialize the redis connection context."; + // Senthil added this block of code on May/02/2017. + // As part of the Redis configuration in the DPS config file, we now allow the user to specify + // an optional Redis authentication password as shown below. + // server:port:RedisPassword:ConnectionTimeoutValue:use_tls + string targetServerPassword = ""; + string targetServerName = ""; + int targetServerPort = 0; + int connectionTimeout = 0; + int useTls = -1; + int connectionAttemptCnt = 0; + + // Get the current thread id that is trying to make a connection to redis cluster. + int threadId = (int)gettid(); + + // When the Redis cluster releases with support for the hiredis client, then change this logic to + // take advantage of the Redis cluster features. + // + // If the user configured only one redis server, connect to it using unixsocket or TCP. + // If the user configured multiple redis servers, then we are going to do the client side + // partitioning. In that case, we will connect to all of them and get a separate handle + // and store them in an array of structures. + // + if (dbServers.size() == 1) { + // This means, no client side Redis partitioning. In addition, we will optionally + // support "TLS for Redis" only when a single redis server is configured. + redisPartitionCnt = 0; + // We have only one Redis server configured by the user. + for (std::set::iterator it=dbServers.begin(); it!=dbServers.end(); ++it) { + std::string serverName = *it; + // If the user has configured to use the unix domain socket, take care of that as well. + if (serverName == "unixsocket") { + redisPartitions[0].rdsc = redisConnectUnix((char *)"/tmp/redis.sock"); + } else { + // Redis server name can have port number, password, connection timeout value and + // use_tls=1 specified along with it --> MyHost:2345:xyz:5:use_tls + int32_t tokenCnt = 0; + // This technique to get the empty tokens while tokenizing a string is described in this URL: + // https://stackoverflow.com/questions/22331648/boosttokenizer-point-separated-but-also-keeping-empty-fields + typedef streams_boost::tokenizer > tokenizer; + streams_boost::char_separator sep( + ":", // dropped delimiters + "", // kept delimiters + streams_boost::keep_empty_tokens); // empty token policy + + STREAMS_BOOST_FOREACH(std::string token, tokenizer(serverName, sep)) { + tokenCnt++; + + if (tokenCnt == 1) { + // This must be our first token. + if (token != "") { + targetServerName = token; + } + } else if (tokenCnt == 2){ + // This must be our second token. + if (token != "") { + targetServerPort = atoi(token.c_str()); + } + + if (targetServerPort <= 0) { + targetServerPort = REDIS_SERVER_PORT; + } + } else if (tokenCnt == 3) { + // This must be our third token. + if (token != "") { + targetServerPassword = token; + } + } else if (tokenCnt == 4) { + // This must be our fourth token. + if (token != "") { + connectionTimeout = atoi(token.c_str()); + } - if(uname(&machineDetails) < 0) { - dbError.set("Unable to get the machine/os/cpu details.", DPS_INITIALIZE_ERROR); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed to get the machine/os/cpu details. " << DPS_INITIALIZE_ERROR, "RedisDBLayer"); - return; - } else { - nameOfThisMachine = string(machineDetails.nodename); - osVersionOfThisMachine = string(machineDetails.sysname) + string(" ") + string(machineDetails.release); - cpuTypeOfThisMachine = string(machineDetails.machine); - } + if (connectionTimeout <= 0) { + // Set it to a default of 3 seconds. + connectionTimeout = 3; + } + } else if (tokenCnt == 5) { + // This must be our fifth token. + if (token != "") { + useTls = atoi(token.c_str()); + } - string redisConnectionErrorMsg = "Unable to initialize the redis connection context."; - // Senthil added this block of code on May/02/2017. - // As part of the Redis configuration in the DPS config file, we now allow the user to specify - // an optional Redis authentication password as shown below. - // server:port:RedisPassword - string targetServerPassword = ""; - string targetServerName = ""; - int targetServerPort = 0; - - // When the Redis cluster releases with support for the hiredis client, then change this logic to - // take advantage of the Redis cluster features. - // - // If the user configured only one redis server, connect to it using unixsocket or TCP. - // If the user configured multiple redis servers, then we are going to do the client side - // partitioning. In that case, we will connect to all of them and get a separate handle - // and store them in an array of structures. - // - if (dbServers.size() == 1) { - // This means, no client side Redis partitioning. - redisPartitionCnt = 0; - // We have only one Redis server configured by the user. - for (std::set::iterator it=dbServers.begin(); it!=dbServers.end(); ++it) { - std::string serverName = *it; - // If the user has configured to use the unix domain socket, take care of that as well. - if (serverName == "unixsocket") { - redisPartitions[0].rdsc = redisConnectUnix((char *)"/tmp/redis.sock"); - } else { - struct timeval timeout = { 1, 500000 }; // 1.5 seconds {tv_sec, tv_microsecs} - // Redis server name can have port number specified along with it --> MyHost:2345 - char serverNameBuf[300]; - strcpy(serverNameBuf, serverName.c_str()); - char *ptr = strtok(serverNameBuf, ":"); - - while(ptr) { - if (targetServerName == "") { - // This must be our first token. - targetServerName = string(ptr); - ptr = strtok(NULL, ":"); - } else if (targetServerPort == 0){ - // This must be our second token. - targetServerPort = atoi(ptr); - - if (targetServerPort == 0) { - targetServerPort = REDIS_SERVER_PORT; - } - - ptr = strtok(NULL, ":"); - } else if (targetServerPassword == "") { - // This must be our third token. - targetServerPassword = string(ptr); - // We are done. - break; - } - } - - if (targetServerName == "") { - // User only specified the server name and no port. - // (This is the case of server name followed by a : character with a missing port number) - targetServerName = serverName; - // In this case, use the default Redis server port. - targetServerPort = REDIS_SERVER_PORT; - } - - if (targetServerPort == 0) { - // User didn't give a Redis server port. - // Only a server name was given not followed by a : character. - // Use the default Redis server port. - targetServerPort = REDIS_SERVER_PORT; - } - - redisPartitions[0].rdsc = redisConnectWithTimeout(targetServerName.c_str(), targetServerPort, timeout); - } - - if (redisPartitions[0].rdsc == NULL || redisPartitions[0].rdsc->err) { - if (redisPartitions[0].rdsc) { - redisConnectionErrorMsg += " Connection error: " + string(redisPartitions[0].rdsc->errstr); - } + if (useTls < 0) { + // Set it to a default of 0 i.e. no TLS needed. + useTls = 0; + } - cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; - } else { - // We connected to at least one redis server. That is enough for our needs. - // If the user configured it with a Redis auth password, then we must authenticate now. - // If the authentication is successful, all good. If any error, Redis will send one of the - // following two errors: - // ERR invalid password (OR) ERR Client sent AUTH, but no password is set - if (targetServerPassword.length() > 0) { - std::string cmd = string(REDIS_AUTH_CMD) + targetServerPassword; - redis_reply = (redisReply*)redisCommand(redisPartitions[0].rdsc, cmd.c_str()); - - // If we get a NULL reply, then it indicates a redis server connection error. - if (redis_reply == NULL) { - // When this error occurs, we can't reuse that redis context for further server commands. This is a serious error. - cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; - dbError.set("Unable to authenticate to the redis server(s). Possible connection breakage. " + std::string(redisPartitions[0].rdsc->errstr), DPS_CONNECTION_ERROR); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during authentication with an error " << string("Possible connection breakage. ") << DPS_CONNECTION_ERROR, "RedisDBLayer"); - return; - } - - if (redis_reply->type == REDIS_REPLY_ERROR) { - cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; - dbError.set("Unable to authenticate to the Redis server. Error msg=" + std::string(redis_reply->str), DPS_AUTHENTICATION_ERROR); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during authentication. error=" << redis_reply->str << ", rc=" << DPS_AUTHENTICATION_ERROR, "RedisDBLayer"); - freeReplyObject(redis_reply); - return; - } - - freeReplyObject(redis_reply); - } // End of Redis authentication. - - // Reset the error string. - redisConnectionErrorMsg = ""; - cout << "Successfully connected to the Redis server " << targetServerName << " on port " << targetServerPort << endl; - break; - } - } + if (useTls > 0) { + // Set it to 1 i.e. TLS needed. + useTls = 1; + } + } // End of the long if-else block. + } // End of the Boost FOREACH loop. - // Check if there was any connection error. - if (redisConnectionErrorMsg != "") { - if (redisPartitions[0].rdsc != NULL) { - redisFree(redisPartitions[0].rdsc); - redisPartitions[0].rdsc = NULL; - } + if (targetServerName == "") { + // User only specified the server name and no port. + // (This is the case of server name followed by a : character with a missing port number) + targetServerName = serverName; + // In this case, use the default Redis server port. + targetServerPort = REDIS_SERVER_PORT; + } - dbError.set(redisConnectionErrorMsg, DPS_INITIALIZE_ERROR); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed with an error '" << redisConnectionErrorMsg << "'. " << DPS_INITIALIZE_ERROR, "RedisDBLayer"); - return; - } - } else { - // We have more than one Redis server configured by the user. - // In our dps toolkit, we allow only upto 50 servers. (It is just our own limit). - if (dbServers.size() > 50) { - redisConnectionErrorMsg += " Too many Redis servers configured. DPS toolkit supports only a maximum of 50 Redis servers."; - dbError.set(redisConnectionErrorMsg, DPS_TOO_MANY_REDIS_SERVERS_CONFIGURED); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed with an error '" << redisConnectionErrorMsg << "'. " << DPS_TOO_MANY_REDIS_SERVERS_CONFIGURED, "RedisDBLayer"); - return; - } + if (targetServerPort <= 0) { + // User didn't give a Redis server port. + // Only a server name was given not followed by a : character. + // Use the default Redis server port. + targetServerPort = REDIS_SERVER_PORT; + } - redisPartitionCnt = dbServers.size(); - int32_t idx = -1; - // Now stay in a loop and connect to each of them. - for (std::set::iterator it=dbServers.begin(); it!=dbServers.end(); ++it) { - std::string serverName = *it; - struct timeval timeout = { 1, 500000 }; // 1.5 seconds {tv_sec, tv_microsecs} - // In the case of client side Redis server partitioning, we expect the user to configure the ports of - // their Redis servers starting from our REDIS_SERVER_PORT (base port number 6379) + 2 and go up by one for each new Redis server. - idx++; - - // Redis server name can have port number and password specified along with it --> MyHost:2345:MyPassword - targetServerName = ""; - targetServerPort = 0; - targetServerPassword = ""; - char serverNameBuf[300]; - strcpy(serverNameBuf, serverName.c_str()); - char *ptr = strtok(serverNameBuf, ":"); - - while(ptr) { - if (targetServerName == "") { - // This must be our first token. - targetServerName = string(ptr); - ptr = strtok(NULL, ":"); - } else if (targetServerPort == 0){ - // This must be our second token. - targetServerPort = atoi(ptr); - - if (targetServerPort == 0) { - targetServerPort = REDIS_SERVER_PORT; - } + // Password is already set to empty string at the time of variable declaration. + // Because of that, we are good even if the redis configuration string has this field as blank. - ptr = strtok(NULL, ":"); - } else if (targetServerPassword == "") { - // This must be our third token. - targetServerPassword = string(ptr); - // We are done. - break; - } + if (connectionTimeout <= 0) { + // User didn't configure a connectionTimeout field at all. So, set it to 3 seconds. + connectionTimeout = 3; } - if (targetServerName == "") { - // User only specified the server name and no port. - // (This is the case of server name followed by a : character with a missing port number) - targetServerName = serverName; - // In this case, use the default Redis server port. - targetServerPort = REDIS_SERVER_PORT; + if (useTls < 0) { + // User didn't configure a useTls field at all, So, set it to 0 i.e. no TLS needed. + useTls = 0; } - if (targetServerPort == 0) { - // User didn't give a Redis server port. - // Only a server name was given not followed by a : character. - // Use the default Redis server port. - targetServerPort = REDIS_SERVER_PORT; + // Use this line to test out the parsed tokens from the Redis configuration string. + string clusterPasswordUsage = "a"; + + if (targetServerPassword.length() <= 0) { + clusterPasswordUsage = "no"; } - redisPartitions[idx].rdsc = redisConnectWithTimeout(targetServerName.c_str(), targetServerPort, timeout); + cout << connectionAttemptCnt << ") ThreadId=" << threadId << ". Attempting to connect to the Redis server " << targetServerName << " on port " << targetServerPort << " with " << clusterPasswordUsage << " password. " << "connectionTimeout=" << connectionTimeout << ", use_tls=" << useTls << "." << endl; - if (redisPartitions[idx].rdsc == NULL || redisPartitions[idx].rdsc->err) { - if (redisPartitions[idx].rdsc) { - char serverNumber[50]; - sprintf(serverNumber, "%d", idx+1); - redisConnectionErrorMsg += " Connection error for Redis server " + serverName + ". Error=" + string(redisPartitions[idx].rdsc->errstr); - } + // Redis connection timeout structure format: {tv_sec, tv_microsecs} + struct timeval timeout = { connectionTimeout, 0 }; + redisPartitions[0].rdsc = redisConnectWithTimeout(targetServerName.c_str(), targetServerPort, timeout); + } // End of if (serverName == "unixsocket") { - // Since we got a connection error on one of the servers, let us disconnect from the servers that we successfully connected to so far. - // Loop backwards. - for(int32_t cnt=idx; cnt >=0; cnt--) { - if (redisPartitions[cnt].rdsc != NULL) { - redisFree(redisPartitions[cnt].rdsc); - redisPartitions[cnt].rdsc = NULL; - } - } + if (redisPartitions[0].rdsc == NULL || redisPartitions[0].rdsc->err) { + if (redisPartitions[0].rdsc) { + redisConnectionErrorMsg += " Connection error: " + string(redisPartitions[0].rdsc->errstr); + } - cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; - dbError.set(redisConnectionErrorMsg, DPS_INITIALIZE_ERROR); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed with an error '" << redisConnectionErrorMsg << "'. " << DPS_INITIALIZE_ERROR, "RedisDBLayer"); - return; - } - - // If the user configured it with a Redis auth password, then we must authenticate now. - if (targetServerPassword.length() > 0) { - std::string cmd = string(REDIS_AUTH_CMD) + targetServerPassword; - redis_reply = (redisReply*)redisCommand(redisPartitions[idx].rdsc, cmd.c_str()); - - // If we get a NULL reply, then it indicates a redis server connection error. - if (redis_reply == NULL) { - // When this error occurs, we can't reuse that redis context for further server commands. This is a serious error. - cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; - dbError.set("Unable to authenticate to the redis server(s). Possible connection breakage. " + std::string(redisPartitions[idx].rdsc->errstr), DPS_CONNECTION_ERROR); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during authentication with an error " << string("Possible connection breakage. ") << DPS_CONNECTION_ERROR, "RedisDBLayer"); - - // Since we got a connection error on one of the servers, let us disconnect from the servers that we successfully connected to so far. - // Loop backwards. - for(int32_t cnt=idx; cnt >=0; cnt--) { - if (redisPartitions[cnt].rdsc != NULL) { - redisFree(redisPartitions[cnt].rdsc); - redisPartitions[cnt].rdsc = NULL; - } - } + cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << ". " << redisConnectionErrorMsg << endl; + } else { + // If the user has configured to use TLS, we must now establish the Redis server + // connection we made above to go over TLS. This has to be done before executing + // any Redis command including the password authentication command. + if (useTls == 1) { + // In order NOT to do any client side peer verification, the new SSL feature in + // hiredis library (as of Nov/2019) requires us to do the SSL context and + // SSL (i.e. ssl_st) structure initialization on our own with the appropriate + // SSL peer verification flags. + // hiredis SSL feature will always do the peer verification and hence we must + // do the disabling of the peer verification on our own. In our case, the Streams DPS client + // application always trusts the remote Redis server running either in an on-prem environment or + // in the IBM Cloud Compose Redis or in the AWS Elasticache Redis. After all, the remote Redis service + // instance is always created by the same entity i.e. customer team and it gets used by that same team. + // So, in a trusted setup such as this, we can avoid the overhead involved in the peer verification that + // happens before the SSL connection establishment with the remote Redis service. In spite of disabling the + // peer verification at the DPS (hiredis) client side, data going back and forth + // between the client and the Redis server will always be encrypted which is + // what is more important than the peer verification done at the client side. + // + // The following piece of SSL initialization code is from the following IBM Z URL: + // https://www.ibm.com/support/knowledgecenter/en/SSB23S_1.1.0.13/gtps7/s5sple2.html + // + SSL_CTX *ssl_ctx; + SSL *myssl; + + SSL_library_init(); + SSL_load_error_strings(); + + // Create a new SSL context block + ssl_ctx=SSL_CTX_new(SSLv23_client_method()); + + if (!ssl_ctx) { + cout << "Unable to do SSL connection to the Redis server " << targetServerName << " on port " << targetServerPort << ", Error=SSL_CTX_new failed." << endl; + dbError.set("Unable to do SSL connection to the redis server. Error=SSL_CTX_new failed." , DPS_CONNECTION_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during SSL connection with an error " << "'SSL_CTX_new failed'." << ", rc=" << DPS_CONNECTION_ERROR, "RedisDBLayer"); + return; + } - return; - } - - if (redis_reply->type == REDIS_REPLY_ERROR) { - cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; - dbError.set("Unable to authenticate to the Redis server. Error msg=" + std::string(redis_reply->str), DPS_AUTHENTICATION_ERROR); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during authentication. error=" << redis_reply->str << ", rc=" << DPS_AUTHENTICATION_ERROR, "RedisDBLayer"); - - // Since we got an authentication error on one of the servers, let us disconnect from the servers that we successfully connected to so far. - // Loop backwards. - for(int32_t cnt=idx; cnt >=0; cnt--) { - if (redisPartitions[cnt].rdsc != NULL) { - redisFree(redisPartitions[cnt].rdsc); - redisPartitions[cnt].rdsc = NULL; - } - } + // Disable the deprecated SSLv2 and SSLv3 protocols in favor of the TLS protocol that superseded SSL. + SSL_CTX_set_options(ssl_ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3); + // Set for no peer/server verification. + SSL_CTX_set_verify(ssl_ctx,SSL_VERIFY_NONE,NULL); + // Create a new ssl object structure. + myssl=SSL_new(ssl_ctx); - freeReplyObject(redis_reply); - return; - } + if(!myssl) { + cout << "Unable to do SSL connection to the Redis server " << targetServerName << " on port " << targetServerPort << ", Error=SSL_new failed." << endl; + dbError.set("Unable to do SSL connection to the redis server. Error=SSL_new failed." , DPS_CONNECTION_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during SSL connection with an error " << "'SSL_new failed'." << ", rc=" << DPS_CONNECTION_ERROR, "RedisDBLayer"); + return; + } + + if (redisInitiateSSL(redisPartitions[0].rdsc, myssl) != REDIS_OK) { + cout << "Unable to do SSL connection to the Redis server " << targetServerName << " on port " << targetServerPort << ", Error=" << std::string(redisPartitions[0].rdsc->errstr) << endl; + dbError.set("Unable to do SSL connection to the redis server. " + std::string(redisPartitions[0].rdsc->errstr), DPS_CONNECTION_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during SSL connection with an error " << + std::string(redisPartitions[0].rdsc->errstr) << ", rc=" << DPS_CONNECTION_ERROR, "RedisDBLayer"); + return; + } + } // End of if (useTls == 1) + + // We connected to at least one redis server. That is enough for our needs. + // If the user configured it with a Redis auth password, then we must authenticate now. + // If the authentication is successful, all good. If any error, Redis will send one of the + // following two errors: + // ERR invalid password (OR) ERR Client sent AUTH, but no password is set + if (targetServerPassword.length() > 0) { + std::string cmd = string(REDIS_AUTH_CMD) + targetServerPassword; + redis_reply = (redisReply*)redisCommand(redisPartitions[0].rdsc, cmd.c_str()); + + // If we get a NULL reply, then it indicates a redis server connection error. + if (redis_reply == NULL) { + // When this error occurs, we can't reuse that redis context for further server commands. This is a serious error. + cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; + dbError.set("Unable to authenticate to the redis server(s). Possible connection breakage. " + std::string(redisPartitions[0].rdsc->errstr), DPS_CONNECTION_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during authentication with an error " << string("Possible connection breakage. ") << DPS_CONNECTION_ERROR, "RedisDBLayer"); + return; + } - freeReplyObject(redis_reply); - } // End of Redis authentication. + if (redis_reply->type == REDIS_REPLY_ERROR) { + cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; + dbError.set("Unable to authenticate to the Redis server. Error msg=" + std::string(redis_reply->str), DPS_AUTHENTICATION_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during authentication. error=" << redis_reply->str << ", rc=" << DPS_AUTHENTICATION_ERROR, "RedisDBLayer"); + freeReplyObject(redis_reply); + return; + } + + freeReplyObject(redis_reply); + } // End of Redis authentication. + + // Reset the error string. + redisConnectionErrorMsg = ""; + cout << "Successfully connected to the Redis server " << targetServerName << " on port " << targetServerPort << endl; + break; + } // End of else block within which connection to single Redis server is done. + } // Outer for loop that iterates over just a single Redis server. + + // Check if there was any connection error. + if (redisConnectionErrorMsg != "") { + if (redisPartitions[0].rdsc != NULL) { + redisFree(redisPartitions[0].rdsc); + redisPartitions[0].rdsc = NULL; + } - cout << "Successfully connected to the Redis server " << targetServerName << " on port " << targetServerPort << endl; - } // End of for loop. - } + dbError.set(redisConnectionErrorMsg, DPS_INITIALIZE_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed with an error '" << redisConnectionErrorMsg << "'. " << DPS_INITIALIZE_ERROR, "RedisDBLayer"); + return; + } + } else { + // We have more than one Redis server configured by the user. + // In our dps toolkit, we allow only upto 50 servers. (It is just our own limit). + // Please note that TLS is not allowed in a multi-server non-cluster Redis config. + // Because, IBM Cloud, AWS etc. will allow only one server for Redis non-cluster. + // For on-prem (roll your own), DPS toolkit allows grouping multiple + // non-cluster Redis servers to do its own sharding. In that special + // configuration, we will not support TLS. + if (dbServers.size() > 50) { + redisConnectionErrorMsg += " Too many Redis servers configured. DPS toolkit supports only a maximum of 50 Redis servers."; + dbError.set(redisConnectionErrorMsg, DPS_TOO_MANY_REDIS_SERVERS_CONFIGURED); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed with an error '" << redisConnectionErrorMsg << "'. " << DPS_TOO_MANY_REDIS_SERVERS_CONFIGURED, "RedisDBLayer"); + return; + } - // We have now made connection to one or more servers in a redis cluster. - // Let us check if the global storeId key:value pair is already there in the cache. - string keyString = string(DPS_AND_DL_GUID_KEY); - int32_t partitionIdx = getRedisServerPartitionIndex(keyString); - std::string cmd = string(REDIS_EXISTS_CMD) + keyString; - redis_reply = (redisReply*)redisCommand(redisPartitions[partitionIdx].rdsc, cmd.c_str()); + redisPartitionCnt = dbServers.size(); + int32_t idx = -1; + // Now stay in a loop and connect to each of them. + for (std::set::iterator it=dbServers.begin(); it!=dbServers.end(); ++it) { + std::string serverName = *it; + // In the case of client side Redis server partitioning, we expect the user to configure the ports of + // their Redis servers starting from our REDIS_SERVER_PORT (base port number 6379) + 2 and go up by one for each new Redis server. + idx++; + + // Redis server name can have port number, password and other things specified along with it. + // server:port:RedisPassword:ConnectionTimeoutValue:use_tls + string targetServerPassword = ""; + string targetServerName = ""; + int targetServerPort = 0; + int connectionTimeout = 0; + // TLS makes sense only when a single non-cluster redis server is configured (e-g: IBM Compose Redis server or AWS Elasticache Redis server or an on-prem single server non-cluster Redis). + // When the user configures multiple Redis servers, it is not practical to do TLS on all of them. + // In the case of multi-server Redis configuration, user can ignore the useTls configuration field. + // Even if user specifies something for that field, we will ignore it in the logic below. + int useTls = -1; + + // Redis server name can have port number, password, connection timeout value and + // use_tls=1 specified along with it --> MyHost:2345:xyz:5:use_tls + int32_t tokenCnt = 0; + + // This technique to get the empty tokens while tokenizing a string is described in this URL: + // https://stackoverflow.com/questions/22331648/boosttokenizer-point-separated-but-also-keeping-empty-fields + // + typedef streams_boost::tokenizer > tokenizer; + streams_boost::char_separator sep( + ":", // dropped delimiters + "", // kept delimiters + streams_boost::keep_empty_tokens); // empty token policy + + STREAMS_BOOST_FOREACH(std::string token, tokenizer(serverName, sep)) { + tokenCnt++; + + if (tokenCnt == 1) { + // This must be our first token. + if (token != "") { + targetServerName = token; + } + } else if (tokenCnt == 2){ + // This must be our second token. + if (token != "") { + targetServerPort = atoi(token.c_str()); + } + + if (targetServerPort <= 0) { + targetServerPort = REDIS_SERVER_PORT; + } + } else if (tokenCnt == 3) { + // This must be our third token. + if (token != "") { + targetServerPassword = token; + } + } else if (tokenCnt == 4) { + // This must be our fourth token. + if (token != "") { + connectionTimeout = atoi(token.c_str()); + } - // If we get a NULL reply, then it indicates a redis server connection error. - if (redis_reply == NULL) { - // This is how we can detect that a wrong redis server name is configured by the user or - // not even a single redis server daemon being up and running. - // On such errors, redis context will carry an error string. - // When this error occurs, we can't reuse that redis context for further server commands. This is a serious error. - dbError.set("Unable to connect to the redis server(s). " + std::string(redisPartitions[partitionIdx].rdsc->errstr), DPS_CONNECTION_ERROR); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed with an error " << DPS_CONNECTION_ERROR, "RedisDBLayer"); - return; - } + if (connectionTimeout <= 0) { + // Set it to a default of 3 seconds. + connectionTimeout = 3; + } + } else if (tokenCnt == 5) { + // This must be our fifth token. + if (token != "") { + useTls = atoi(token.c_str()); + } - if (redis_reply->type == REDIS_REPLY_ERROR) { - dbError.set("Unable to check the existence of the dps GUID key. Error=" + string(redis_reply->str), DPS_KEY_EXISTENCE_CHECK_ERROR); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed. Error=" << string(redis_reply->str) << ", rc=" << DPS_KEY_EXISTENCE_CHECK_ERROR, "RedisDBLayer"); - freeReplyObject(redis_reply); - return; - } + if (useTls < 0) { + // Set it to a default of 0 i.e. no TLS needed. + useTls = 0; + } - if (redis_reply->integer == (int)0) { - // It could be that our global store id is not there now. - // Let us create one with an initial value of 0. - // Redis setnx is an atomic operation. It will succeed only for the very first operator that - // attempts to do this setting after a redis server is started fresh. If some other operator - // already raced us ahead and created this guid_key, then our attempt below will be safely rejected. - freeReplyObject(redis_reply); - cmd = string(REDIS_SETNX_CMD) + keyString + string(" ") + string("0"); - redis_reply = (redisReply*)redisCommand(redisPartitions[partitionIdx].rdsc, cmd.c_str()); - } + if (useTls > 0) { + // Set it to 1 i.e. TLS needed. + useTls = 1; + } + } // End of the long if-else block. + } // End of the Boost FOREACH loop. + + if (targetServerName == "") { + // User only specified the server name and no port. + // (This is the case of server name followed by a : character with a missing port number) + targetServerName = serverName; + // In this case, use the default Redis server port. + targetServerPort = REDIS_SERVER_PORT; + } - freeReplyObject(redis_reply); - SPLAPPTRC(L_DEBUG, "Inside connectToDatabase done", "RedisDBLayer"); + if (targetServerPort <= 0) { + // User didn't give a Redis server port. + // Only a server name was given not followed by a : character. + // Use the default Redis server port. + targetServerPort = REDIS_SERVER_PORT; + } + + // Password is already set to empty string at the time of variable declaration. + // Because of that, we are good even if the redis configuration string has this field as blank. + + if (connectionTimeout <= 0) { + // User didn't configure a connectionTimeout field at all. So, set it to 3 seconds. + connectionTimeout = 3; + } + + // As noted in the commentary above, useTls is not applicable in a multi-server + // Redis configuration as it is not practical to do TLS for all of them. + // TLS makes sense only for a cloud service or on-prem based single Redis server. + // So, the useTls field will get ignored in the connection logic below. + if (useTls < 0) { + // User didn't configure a useTls field at all, So, set it to 0 i.e. no TLS needed. + useTls = 0; + } + + // Use this line to test out the parsed tokens from the Redis configuration string. + string clusterPasswordUsage = "a"; + + if (targetServerPassword.length() <= 0) { + clusterPasswordUsage = "no"; + } + + cout << connectionAttemptCnt << ") ThreadId=" << threadId << ". Attempting to connect to the Redis serve " << targetServerName << " on port " << targetServerPort << " with " << clusterPasswordUsage << " password. " << "connectionTimeout=" << connectionTimeout << ", use_tls=" << useTls << "." << endl; + + // Redis connection timeout structure format: {tv_sec, tv_microsecs} + struct timeval timeout = { connectionTimeout, 0 }; + redisPartitions[idx].rdsc = redisConnectWithTimeout(targetServerName.c_str(), targetServerPort, timeout); + + if (redisPartitions[idx].rdsc == NULL || redisPartitions[idx].rdsc->err) { + if (redisPartitions[idx].rdsc) { + char serverNumber[50]; + sprintf(serverNumber, "%d", idx+1); + redisConnectionErrorMsg += " Connection error for Redis server " + serverName + ". Error=" + string(redisPartitions[idx].rdsc->errstr); + } + + // Since we got a connection error on one of the servers, let us disconnect from the servers that we successfully connected to so far. + // Loop backwards. + for(int32_t cnt=idx; cnt >=0; cnt--) { + if (redisPartitions[cnt].rdsc != NULL) { + redisFree(redisPartitions[cnt].rdsc); + redisPartitions[cnt].rdsc = NULL; + } + } + + cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; + dbError.set(redisConnectionErrorMsg, DPS_INITIALIZE_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed with an error '" << redisConnectionErrorMsg << "'. " << DPS_INITIALIZE_ERROR, "RedisDBLayer"); + return; + } + + // If the user configured it with a Redis auth password, then we must authenticate now. + if (targetServerPassword.length() > 0) { + std::string cmd = string(REDIS_AUTH_CMD) + targetServerPassword; + redis_reply = (redisReply*)redisCommand(redisPartitions[idx].rdsc, cmd.c_str()); + + // If we get a NULL reply, then it indicates a redis server connection error. + if (redis_reply == NULL) { + // When this error occurs, we can't reuse that redis context for further server commands. This is a serious error. + cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; + dbError.set("Unable to authenticate to the redis server(s). Possible connection breakage. " + std::string(redisPartitions[idx].rdsc->errstr), DPS_CONNECTION_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during authentication with an error " << string("Possible connection breakage. ") << DPS_CONNECTION_ERROR, "RedisDBLayer"); + + // Since we got a connection error on one of the servers, let us disconnect from the servers that we successfully connected to so far. + // Loop backwards. + for(int32_t cnt=idx; cnt >=0; cnt--) { + if (redisPartitions[cnt].rdsc != NULL) { + redisFree(redisPartitions[cnt].rdsc); + redisPartitions[cnt].rdsc = NULL; + } + } + + return; + } + + if (redis_reply->type == REDIS_REPLY_ERROR) { + cout << "Unable to connect to the Redis server " << targetServerName << " on port " << targetServerPort << endl; + dbError.set("Unable to authenticate to the Redis server. Error msg=" + std::string(redis_reply->str), DPS_AUTHENTICATION_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed during authentication. error=" << redis_reply->str << ", rc=" << DPS_AUTHENTICATION_ERROR, "RedisDBLayer"); + + // Since we got an authentication error on one of the servers, let us disconnect from the servers that we successfully connected to so far. + // Loop backwards. + for(int32_t cnt=idx; cnt >=0; cnt--) { + if (redisPartitions[cnt].rdsc != NULL) { + redisFree(redisPartitions[cnt].rdsc); + redisPartitions[cnt].rdsc = NULL; + } + } + + freeReplyObject(redis_reply); + return; + } + + freeReplyObject(redis_reply); + } // End of Redis authentication. + + cout << "Successfully connected to the Redis server " << targetServerName << " on port " << targetServerPort << endl; + } // End of for loop. + } // End of the else block that connects to multiple non-cluster Redis servers. + + // We have now made connection to one or more servers in a redis cluster. + // Let us check if the global storeId key:value pair is already there in the cache. + string keyString = string(DPS_AND_DL_GUID_KEY); + int32_t partitionIdx = getRedisServerPartitionIndex(keyString); + std::string cmd = string(REDIS_EXISTS_CMD) + keyString; + redis_reply = (redisReply*)redisCommand(redisPartitions[partitionIdx].rdsc, cmd.c_str()); + + // If we get a NULL reply, then it indicates a redis server connection error. + if (redis_reply == NULL) { + // This is how we can detect that a wrong redis server name is configured by the user or + // not even a single redis server daemon being up and running. + // On such errors, redis context will carry an error string. + // When this error occurs, we can't reuse that redis context for further server commands. This is a serious error. + dbError.set("Unable to connect to the redis server(s). " + std::string(redisPartitions[partitionIdx].rdsc->errstr), DPS_CONNECTION_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed with an error " << DPS_CONNECTION_ERROR, "RedisDBLayer"); + return; + } + + if (redis_reply->type == REDIS_REPLY_ERROR) { + dbError.set("Unable to check the existence of the dps GUID key. Error=" + string(redis_reply->str), DPS_KEY_EXISTENCE_CHECK_ERROR); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase, it failed. Error=" << string(redis_reply->str) << ", rc=" << DPS_KEY_EXISTENCE_CHECK_ERROR, "RedisDBLayer"); + freeReplyObject(redis_reply); + return; + } + + if (redis_reply->integer == (int)0) { + // It could be that our global store id is not there now. + // Let us create one with an initial value of 0. + // Redis setnx is an atomic operation. It will succeed only for the very first operator that + // attempts to do this setting after a redis server is started fresh. If some other operator + // already raced us ahead and created this guid_key, then our attempt below will be safely rejected. + freeReplyObject(redis_reply); + cmd = string(REDIS_SETNX_CMD) + keyString + string(" ") + string("0"); + redis_reply = (redisReply*)redisCommand(redisPartitions[partitionIdx].rdsc, cmd.c_str()); + } + + freeReplyObject(redis_reply); + SPLAPPTRC(L_DEBUG, "Inside connectToDatabase done", "RedisDBLayer"); } uint64_t RedisDBLayer::createStore(std::string const & name, diff --git a/com.ibm.streamsx.dps/info.xml b/com.ibm.streamsx.dps/info.xml index c2b2e7b..da5368f 100644 --- a/com.ibm.streamsx.dps/info.xml +++ b/com.ibm.streamsx.dps/info.xml @@ -5,7 +5,7 @@ The Distributed Process Store (DPS) toolkit enables multiple applications running processing elements (PEs) on one or more machines to share application specific state information. The shared information is stored in an external data store. This allows non-fused SPL, C++ and Java operators running on different machines to share information. The following external data stores are supported: -* Redis® versions 2.8.2+, 3.0.x and 3.2.x. +* Redis® versions 6.0 and higher. The toolkit consists of a set of native functions that provide access to shared state, and additional locking functionality to provide safe, concurrent access to the shared data. These functions can be used from anywhere inside a Streams application, whether it be SPL code, SPL functions, SPL native functions, C++ primitive operators. They also have counterparts written in Java that can be used from a Java primitive operator. The actual state information is stored separately in the distributed back-end in-memory store which is transparent to the Streams application. @@ -25,13 +25,26 @@ In order to ensure safe access (i.e. store operations do not override each other # Notes for supported data stores - * Redis 2.8.x: If you have a heavy workload of put/get requests, then using multiple Redis servers may give scaling to improve the overall throughput. You can manually configure and start multiple instances of Redis to listen and run on different ports and/or machines. The DPS toolkit will internally treat these Redis v2.8.x multiple instances as multiple shards and distribute the key-value pairs among those instances to improve performance with increased memory capacity. If you have multiple Redis servers configured, consider using the DPS Time To Live (TTL) APIs, discussed below. This will result in better scalability of your put/get requests than using the APIs that take the user created store id as a function argument. Choose the APIs according to your functional and scaling needs. - * Redis 3.0.x or 3.2.x: If you choose to use these versions to take advantage of the Redis built-in high availability and clustering, fail-over, replication and persistence features, it is important to note that, those new Redis 3.x features may impact the overall performance of reading from and writing data to the Redis cluster nodes. - * Redis 3.2.x servers are by default configured to block connections from remote machines and remote IP addresses other than the loopback (127.0.0.1) address. See the comments in the `redis.conf` configuration file for more information. This restriction means that if Streams is running on a machine different from the Redis server, you will need to reconfigure and restart the Redis server to accept remote connections. Make the following changes in your redis configuration file: + * Redis standalone (non-cluster): If you have a heavy workload of put/get requests, then using multiple Redis servers may give scaling to improve the overall throughput. You can manually configure and start multiple instances of Redis to listen and run on different ports and/or machines. The DPS toolkit will internally treat such multiple Redis non-cluster multiple instances as multiple shards and distribute the key-value pairs among those instances to improve performance with increased memory capacity. If you have multiple Redis servers configured, consider using the DPS Time To Live (TTL) APIs, discussed below. This will result in better scalability of your put/get requests than using the APIs that take the user created store id as a function argument. Choose the APIs according to your functional and scaling needs. + * Redis Cluster: If you choose to use v6.0 or higher to take advantage of the Redis built-in high availability and clustering, fail-over, replication and persistence features, it is important to note that the cluster features may impact the overall performance of reading from and writing data to the Redis cluster nodes. + * Redis servers are by default configured to block connections from remote machines and remote IP addresses other than the loopback (127.0.0.1) address. See the comments in the `redis.conf` configuration file for more information. This restriction means that if Streams is running on a machine different from the Redis server, you will need to reconfigure and restart the Redis server to accept remote connections. Make the following changes in your redis configuration file: * Comment out the line `bind 127.0.0.1` * Make sure `protected-mode` is set to `no`. * Restart Redis, making sure to specify the path to the modified configuration file. +* Redis server v6.0 and higher support TLS/SSL. To use the Redis TLS/SSL feature, it is necessary to have openssl and openssl-devel installed on all the IBM Streams machines. In particular, libssl.so and libcrypto.so files should be available on the Linux system directories (e-g: /lib64/libssl.so and /lib64/libcrypto.so.) + +* To successfully build this toolkit, your IBM Streams application development machine should have the following RPMs installed. + +curl +curl-devel +lua +lua-devel +openldap-devel +openssl-devel +cyrus-sasl +cyrus-sasl-devel + # Toolkit overview The functions provided by the DPS toolkit are divided into 3 categories: @@ -77,6 +90,10 @@ This is achieved using a trust based cooperative locking scheme to gain exclusiv To create applications that use the DPS Toolkit, you'll need to: 1. Install IBM InfoSphere Streams. Configure the product environment variables by entering the following command: source product-installation-root-directory/4.2.0.0/bin/streamsprofile.sh + + Download the most recent version of the DPS toolkit from here and extract it in your IBM Streams development machine. + https://github.com/IBMStreams/streamsx.dps + 2. Ensure that all of the following additional RPMs required by the DPS toolkit are present on your system: * curl * curl-devel @@ -84,12 +101,15 @@ To create applications that use the DPS Toolkit, you'll need to: * lua-devel * openssl-devel * openldap-devel + * cyrus-sasl + * cyrus-sasl-devel * ibverbs * ibverbs-devel 3. Install and configure an external key-value data store that is supported by DPS. -4. Configure the DPS toolkit to connect to the data store from step 3. Copy the DPS toolkit sample configuration file from `STREAMS_INSTALL/samples/com.ibm.streamsx.dps/DPSUsageFromSPL/etc/no-sql-kv-store-servers.cfg` to `your-project-directory/etc/no-sql-kv-store-servers.cfg` and edit the file as follows: +4. Configure the DPS toolkit to connect to the data store from step 3. Copy the DPS toolkit sample configuration file from `<YOUR_DPS_TOOLKIT_DIRECTORY>/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/etc/no-sql-kv-store-servers.cfg` to `your-project-directory/etc/no-sql-kv-store-servers.cfg` and edit the file as follows: * For Redis in non-cluster mode: `redis` should be the first line in the configuration file. Then specify the Redis server/IP address and port number separated by a colon, e.g. `Machine1:7002`. Each additional server should be specified on a new line. If you prefer to use the Unix domain socket instead of TCP, you can simply specify `unixsocket` instead of a server name. If you decide to use a unix domain socket, you must also ensure that your redis.conf file on the server side is configured properly for a unix domain socket pointing to `/tmp/redis.sock` file. - * For Redis v3.x in cluster mode: `redis-cluster` should be the first line in the file, followed by the server name or IP address and a port number for one of the master Redis nodes that is active in your Redis cluster. For example: `Machine1:30001`. + * For Redis in cluster mode: `redis-cluster-plus-plus` should be the first line in the file, followed by the server name or IP address and a port number for one of the master Redis nodes that is active in your Redis cluster. For example: `Machine1:30001`. + * It is suggested that you read the commentary section at the top of that configuration file to understand various options available for configuring your chosen no-sql database. * Each time you create a new SPL project, copy the configuration file from the example provided in the DPS toolkit to the /etc directory inside of your SPL project directory. Make any configuration changes needed to the file, based on your application's needs. * See the sample configuration file for additional examples. # Using the toolkit in SPL applications @@ -210,12 +230,12 @@ The following example shows how to check for errors, after a function call, in t # Additional Examples -To specifically learn how to call the DPS APIs from SPL native functions, C++ and Java primitive operators, see the samples included in `<STREAMS_INSTALL>/samples/com.ibm.streamsx.dps`. +To specifically learn how to call the DPS APIs from SPL native functions, C++ and Java primitive operators, see the samples included in `<STREAMS_INSTALL>/samples/com.ibm.streamsx.dps` or in `<YOUR_DPS_TOOLKIT_DIRECTORY>/samples` directory. The `advanced` sub-directory there contains examples that showcase bulk of the available DPS APIs. # Reference information [../../javadoc/dps/index.html| DPS Java API Reference] - 4.1.1 + 4.1.2 4.2.0.0 diff --git a/dependencies/Makefile b/dependencies/Makefile index 7438456..b3d68d9 100644 --- a/dependencies/Makefile +++ b/dependencies/Makefile @@ -8,6 +8,7 @@ PACKAGES += couchbase PACKAGES += curl PACKAGES += hiredis PACKAGES += hiredis-cluster +PACKAGES += redis-plus-plus PACKAGES += json-c PACKAGES += memcached PACKAGES += mongo-c diff --git a/dependencies/hiredis/Makefile b/dependencies/hiredis/Makefile index 80bdb63..3161708 100644 --- a/dependencies/hiredis/Makefile +++ b/dependencies/hiredis/Makefile @@ -1,7 +1,7 @@ include ../make.variable.include PKG_NAME := hiredis -VERSION := 0.13.3 +VERSION := 1.0.0 ARCHIVE := v$(VERSION).tar.gz ARCHIVE_INSTALL := $(PKG_NAME)-$(VERSION)-$(OS)-$(ARCH)-install-bin.tar.gz URL := https://github.com/redis/$(PKG_NAME)/archive/$(ARCHIVE) @@ -16,8 +16,8 @@ all: tar -C $(TARGETDIR) -xzvf $(ARCHIVE_INSTALL) $(ARCHIVE_INSTALL): $(PKG_DIR)/Makefile - $(MAKE) -C $(PKG_DIR) - $(MAKE) -C $(PKG_DIR) PREFIX=$(GEN_DIR) install + $(MAKE) -C $(PKG_DIR) USE_SSL=1 + $(MAKE) -C $(PKG_DIR) USE_SSL=1 PREFIX=$(GEN_DIR) install rm -f $(GEN_DIR)/lib/*.a rm -rf $(GEN_DIR)/lib/pkgconfig tar -C $(GEN_DIR) -czvf $(ARCHIVE_INSTALL) ./lib ./include diff --git a/dependencies/hiredis/hiredis-0.13.3-el6-ppc64-install-bin.tar.gz b/dependencies/hiredis/hiredis-0.13.3-el6-ppc64-install-bin.tar.gz deleted file mode 100644 index 5e6af2d48d01d9acdfb5f117cb73c431e78e601a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97246 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
$~un!#TD+=)z#xej;E+gV}B^;(|C- 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

d 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 z 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 sBwzmea_?~48Yf6T-8_W;-g0M027SO5S3 diff --git a/dependencies/hiredis/hiredis-0.13.3-el7-ppc64le-install-bin.tar.gz b/dependencies/hiredis/hiredis-0.13.3-el7-ppc64le-install-bin.tar.gz deleted file mode 100644 index 5cbe774d1580ee9a27869a071980287ee4b9190b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94225 zcmV)7K*zryiwFQal}J|r1LRtNbkkLqe@ROl6g7)DQx|`PA3Ciz#nih`qV3yjtgx@8z#T*ujZ#B*>5mNGgXW{-~b=vkRv#Z+(% zb{Oj!lxo*z@B4o5Yi=G%*FDb6KbxN0m-~75-S^)8^&}c zw-p!9;qB~sv*)QezF5hud9!Afl+2nlZ#F9~DYDHv0Y=OZscR3RV9D)w}#kjVn+X@D>&qmdyTh&M~I{=glrInM?gY3;YlN zXERgrpK}qJUjNViA6ZhlRIk&G@>%Q}#<}hvXuJjS_&;T-tzN~W4h7*IY2{*4}G9ZY0X(Eo|8IGkC5@Sh8j=nQd(7jv<76ek=CP_+)ihyZ8o;6 zJ`UE5F5z3ejAZ;I#_h@2vb)x?Jx%>@zPY|LaOUO@C$9O=Elcir>3P+{+ko}}1##RX zK(#gUk$c9$@trWRuFy}5Koq3v;%*6fc!*e6Sh|XZ2@Wmx)z8RpIJal zfbJ&pA)t9ctJ$Tmhq0~0_CcUlpcbI-0c`}@%rtxd2xvSIhB&((Tb}$giOy;uJJ3x) zjRX$^%>eobg3%+?0<;6jDXq~9v;oM4{JlU6fvy9(AF+-!dmHPOJw~61+X)hGkoa7n zza2x5ag4tFG5V&A(Pzf?8f*)Iri~$Q#r8&Q7m+@mW92}%5^O3^9=^W?=uRLL@(ZxN z0cZ^wQwcN?XeH1+h^+$p8)+?7Kz9HsY1aAo*p?9NYM{kH^+4-@N)f+|$hd))1KEJq z1N|LP1NJ?DZ5g)B*hYbFBRVbz`aa?B0%}jQM){Qm*ra(Y8v@j8SEcLyP43xqCQwrf7FfpMLQH2cwM@h75Asc=hJAP=#Mr2 z6yoPu`gz|LarnH(Ux(^G%@DV*WWXn4{8R-rUf7?XJrnJhv;6-^mH!pWi-UVD;OK@Ix zT;tzGJf1;+9r||=_5Tde(;s_N2xOzu%md zem#%pX!+ZRjyi;R3+gxaXnZjqmg{l9gWEK|7x(Kxybp_Y6!rWfgZ*#8{Tk5@B7b-1 zrkDRbgP!p@>G5uc_QZq8i0fR1{_Wm~`$73FqE1>g-hg%WrVR6b#M0x_L_Fg~_5$K@ zjGrF7^zo`cz7qAEN5A`Qsq0}G>R}z~>BGx*HtP9#hV}4c zORal&5$#0zdW`4Zf6@2~l>Y?nR`qj@7j>^(t*h6tp);vLHV9vq{>&Ke76PV5Fejm{rU{}>nuI~ zWd?jkhJ61-)D64@W0_{ZMf-Fg)A+-P^UrjqGa6VLi8O(0CDt^Dtl9 zAJupfhcT4z-jJ$ioVX|ZQ}tvUFwSwEqV65ZaIdJwbE;js?_G!U7UPF{QD^QGaf@*- z^7LMD|HS+D9{hgfc@bCmAw%4|p3LA!-fv2S?-2KA%xiIfJ}u&{F?Ib%GwA2XeLDQ2 zxc~nft{?H4m@k9)&7H{K$HjfvqwylnYp{+n^t;$gSgarMvxw)4`z_WbaZmnt+?O4{ z^r#xIwfwX4MEiJFC4HWH0p~5o{1tK1B=&{(KylxjDejYKwXw^6=b$rXqavJ+Lg8%#jn)40zt*UcI9HX*Q2a;RJ#?eFMW^A8FFw1 z4!3I)uy;1uR-@cvw<8cx0!;nJc!i?)tZrA6!U9S#;B`La^})n8#qalcZEmmA5p;Py z0I0%il;9G--|N?gF0NOc53PYA0tz8|536;0f^Jsr^3h(7`KvzS919lRq2`CM|U^9OM26ZbQ5Yu$P6wZ1-_g1jkr`W1(DyWL_J}#

sbVLeJBOw&i`LKxW?5=V?arfP=iATGEL6=(#|9HCx`A54^QA^UaH`t#@brN z&rQWcC&lPX6{Us>-RpOO4>qd*!NY!srw)}YQ-W$3FZFvHw6Ro==uMRssc-f96i-cx z&oxMkkf4&<*OXEIl2~d=5lY91*!3tIF(Kd`Z+H=brqNdeK_+s=tvJ-sUad5En-n#u zeGaE;3oFmLHM|}Iv)tqKS88MG{N9b56u%cU0{*M-e9c0qPt9GodluxRIwQVq3V4!v z2_utC(C=#C0n68*@?N)hqms;Y)kIN_rFiqFqn0b9Kivemfi;9wbj2lK#D6C73Q@YktY8XP`ny~D4*f6(jl zh*q^s&<~5(ilZZ-@HJ`f4K#b4DQQU&o>l2lDaUAcGSO5NG6g#pL-nk7h=dZIcen!1 zjQz<1qq0d^4XpBeok}1e2CCbn@+06PIERZIL33d-e?WZO9JZ`-`J%!&X1~Ur+jFUYEk_Q&4$~{t|g6NhPJz>5*rYd-S7!bRX$f#-w$m|GUwU ze1`H=$CEjHwF-W(B%XJE5BrVcLDK0|yt@$lW0E}bc@l2H2YMz6A6$<2Oc}>728tzI zd|_ab^*^PxRkEI^wRXLPM-jKndJwOd@E+7}Mw~yh6wfdD%g~?1ml51ZaQfUPkKo$~ zZX!5+29{57`s~kwIDc+MpS@KOoIVe)B6u#r*Asj^!R-X6&xh&>emTK?1izBtA%b5; z@F>BrCio75Pa=3b!LK2BC&BXw-c9gp34Vy+)XqHwpG@#01izl(y#zNA{3OBYbB8{H z)8~t)2!1ocV+5zqHsb^@Aow7`Zz1>)!Rd2J_E8cqB(Qd2yP*`hu{?i_Y%B{;Pl61>j}Pr;C6!3-^$bzJV0PW@E(FcOz-}nV;1g!bYYW z+Mk#*1Y&kWR38WH6ir|w);AN06)-MtXH(1|6Mr_#5H_(WP3IK-eMCR!dnCSMYbqa; z_^2d*Na{Z+^)sp89!=$YCHeJIe@tGl)W1X4C(UP(`a2~)F3&IVW{LMn!AJLU1ReI&k5l4nx?5ve~e+3%3V zhh$#TS1j90;^WeMMu{Jk^!LdAlK6T_|B%GTBz@h|_>i1mlKd&De@N zN$WGn`;o?*<@lBQeNum?96xfr%Kn$*Mb2l5kIMB%>NiRH>=HjH@u#HmMUawU82RukLDua$OVbm}?Ao+~o3u9bYw(25x?&t?_02>sknQ#5tjo&RWsErEjl-JFJ|0P|;JS6p zRI1tn<^Ww!XWHLjiDpkjOF?O9#Wc7MO;hIp-4+9!-Bg~p`M8F&i7xB^#kNObU3|W1 zi53Ta3G48wgkxC8>}9b;>u@}=e>gOGQ+PbY!eHXW@KB~7NNg(#O%8|ibX`{7mjmNW?8NSD(8=Yvt_OxiY;7y* zW$#$ajjU|SPwZ5MjR5gpeO9bvZDngzBNaydi} z_TO>-Yatsg=& zvF~V^o;l;XiyE(ob%Z7>;m|vaBUhlzV=%4+-@mKr&~i)r;q+)c#ELZkaDQ+gz^9B- z?jP=x(Bzgd_XW2n_s8cW+#k;PS=eVb$em>;%rVvvG^OL^i_|BPa4$P;h5l_X=YAN; zXIm{s9oS&_jB0~Sdv6`mbi9|%2Ek^fQEuB6(_8M*#|9aDbvGX$T5)@e9p>)5yFcv1 zHi~UKw%yqFVB3prAGY_QT|&bjN4OvP9utXJ+1t2>wO}u84W?2%J5e^0_^DdI_&TZ@ z51Q9EzHW|koB!$6$ah)Cez6XS;q5s0q>s8l&ruWi?~7;;vBuD!ejS;Kay=u&r|Oq= znm>(&nm@V!xE~ptK1296G9<-9Ec@J5%(B3;=uQW#Iux1C z_CZdV7BF^p;F;G79IxjVG@m(GpnSQez`-hxNBY=4OVUpLW!ygB#U8C+3cs9I4;G~Zq`nHGGK zWhg!POo1bwmAH}bH<7TEt~pbn*x8-UZ(S^K?5fCbX&N!K1Q!-S?Z|JLbY~)BsX87B z>h@Vrd?9jwS}V_;0Mzrtxzk$ep|(&viT!<7dz~Fgt=EThKaRwh!z|*t^+GZyr$dco z>_E{Upw9EPct8hVgNND8T7E6)(AKxVEHv=5?-bWxeIfa5;9#Wj!lgblLM@#+ijVB( zzT$rSw*CsOv9&xllB|z>&tbyz`LDpW%wf*(mftzo>X@^>58m_n&wi6?zod^^%Xq%? zyyv#@VZQU+=XLzM*yaUc8>rWM))Jp|%U;lN(DdsIlFiO+kGvt}IM46mTeSSl3EeQS z1qRmI(F*mT2Xbu(E8o`5?(gVjN82r?1CipKh4&uLJspYVmTsQTwD_3-?Q*e)|8hpo z5u2ArUpO8(SwZTPtI~Y0qZo+6`=c z#{{;#gRx^pM_4%i7|2@U2O`(O*!~O2`nMh5gUpag*RR&(&^t@jGdRTk0%yaj3(4~% z#;j#VusN(No~PTd=G;B{=;xt#mO#yaHq!ZCw59XzpR|}%zx<>{uhqd0evgVnJMMFl z%Lj^vvb!vxV*tXWjIZ-uHJ26^8g;rd9qXMxL)Sl_$4?IU^D?$CekD5=U-B6}54VK( zz?e1`ZqI`C{%(-=xxy#2x~vbwI+@`nM>g~y&OI1@naG^dcUie@_*#6bO<~V`AFt*_ z9vDonbHcbT%Nx2~aMtz@a9@B8ErUAsD_J$Z^I1a0D_|{o>>uMsc09`Ct(mO#eYoct zb&mKr#PVQ2Ms`eFK(TP9@hvg+98vhnO0 z$ob8Y_eb_wlKI+OmIre^{l{eNN3mW*T(&~IehRVrDa7gk#QDIOcc<3&7P&rvy+>=! zB&anfK1-etZLGW_pB)?E{;U}3vWy!P-&^&U@pbXDXa9K(|Dfi*R=;>Hn4vqdOV95@zx@3c ze$U)FYWHnLM@RNrg}-OOK49x+cS0M_*egYA8PCVP>OAKza{Pa2xfe>O^8|>ccBVh$7wcD1GBJ&yC~h}b-x6H6PR%}QLGA@ zj-d!;utq18VGKwh0fIqM!zfnx5yFp{4nGF)r}NYO_MH3E?{%k>G~;fnx?cBt_uY5T zch33lIrrR`?bZrthxUfH_{4Qxr!wfxSGRl-+8|z^=i0FdZ86)>rhwb3`;Pk+^cD2K zEb0E&Bp4r#?V7=sdcbahQ^3~|&+Mh}y=t<7pN(^(k#8G}d<$6p6uzC?C-~NaiEnj1i1^~@H8CgY_OmEd<1D)tZ9j6H`2*!Zd8$DMl%;Y`%8kl755VVF z@cAu#eh;6NzAE^j?7}usRv{;oS@JSjGrUYzrAGtPM z)}_~n%lg$-AuH;M#VhGrjl66~du#%Z1vnnLQ}8BoWZ;UG#YI$q?G>9_!i=v&WHaYU?%KrW&DbCHP+h=R=&2_FNa^vDjhm>2HF# z`fGz<3XGc#{`ZUP!~GBa_Y*GL3ds2cUd?3R;2)vS$>3Y7uL_J;Dlmp%RzJ%Xgx)(7 z(0gh)`ksaa?)f4Vi3O5MC+P9M<)8HYjpb}UI@e=-Fd48j=55^&+jWz&AnLw{Yzv}3 z?*feNS9N?bcUwZx$9+B6?jMkMpdI!#C8k{;+!~r@N+`fOzjOb2L?(P-&mOqkjIj;7Cjzh@t$9atf%DeS5QwV3*k9@71%-r%-0gwa(Buc zkN>i+)2yVk5TmFxMtP*isO#m*78BZp3NgwKmxxiO7}^xU+|fbu1EgoCiauON@~d#Y z3UzjrW8Fbih!OW&D@-^i`wtRbhVbdC)eFn&C0j#VRbY`dY2OJg}2v$M8@_+iAk zgsxHCzORf62w(9kV*KV_T$^a2zH)bu$ki`K)+VYhi@8LNin|s@WW#xr;f-92c;om+ z!dzfF^IL|g9IkaPiisZtMv2U~XJYc@2DE2Bhdke7oI~>aw}cqqdoLULUJX7IGOi76 zqcPu4&Eq$HE%KcD$hybw%Q5%@7tQ4DibC=DWcUa9flNhynLY#8ti`&JaV_XLt>I2D zGl4yq0uGN8Kg8>stm)t<=`aTfd=`JBbK^q(J&&*V#?R3obq#9ScIYd&S@X+y-;^=# z%OdmXdU}n9Yq3f2y}>$*`faxZ`^%gbD3OTf$SL@pg5#PD*Ct)W_3xhtvdFUmSw5hi z(Q2ITf1U5$aakYl*2`m#mtko#V#)Zm^=FJ8y-0xKA%rQSV33 zi(G6DU_$JWx4oJUw)k!!$&1`s0XR%13*lN0)ngMmD^Gy7S)?$4_LDg++mo}fS1sc5 zC%XQO?J=K7>>k!$!~vtV$2N=43x9LjR>1sdtP{D{728&kBb8q;YJ$gxtgQ7ts-&52;Ml_WkFDE>5q z0N8G}E~D7~CV;k-MN$J;LqT~_zRYQb9+WZX$t;?S<{9vdhZkNq-Y>4l!(tEC%s|f2 z`4~B+=y+gqy1xD^YAPr*%5Ic_F|w~3L3W|v(d3UepBm+l zy&eyPw*dneV9?(kgMmqpmnQ#XOgsesia0QT^;6yF@%mC5>i?YXqm|T0{Zf6Wm8qEA}LfkE`c(ilH%i1Nd5#1CbXSiB)q{8}Ajw`KaL z{las`YLEVR;wvW4+7WzjD_~s;SigKO2J4vkweD_)H?Apq?p>$2we$U@nlw9!jZouAbGM5981OvRy0Ad!fW}BtSn``;bXz= zoA$?^(uzw-iNi%Q;9BeK>UHUk%5_gWW)QJfChDIJR`>SJz7?ig;N_f664^W(pZhrI z`4?ELm2jTgWbK0a%KhqmpL=_`4|CS+uOe~cjEUnx4(P)TV+U8YV;|TT_OnmJ__4v7 zoLmcY?!$KXAEx`7Qu4i-)50Yf!yZ4U_j7pMdgp+46Y}{(YEXN2AdS40Tb<&Ui{V%S z$8VC}%5}r>&IjJgT>;0{v&dYxBcOcQp1M>bvi(R(s^=wJ>hi~)N?mH<>sQ5OXKwX) zymx1A`FOl{XYLj_-X&*ylS!f7LJBW!R+e}EK)eU~veo|bUA21Vf|9yYL>zKdR-Kg4yxxxc3}&Dj#)pF$a@ZE11-Q6 ze<^X7T=IVMm9YIaN^26gffxI{LG7QZ4Y-n-4Xj9JHn1d_*#MqL{iE)U`o2n-zP}?( z-$QV`D>#zA@mvAu`vJT8(S=^~+d1B*lt;Wyv7otKgUg$1ueF5TqAS z`5JN|T>!@e+b)%nW#qb&4pKfCJC!5&)X4A<2ZoaS? zau3CZdEE0Sg?_wBowVMG^M(73<-P`(EBe0_c)ds0g|^UrD*x?39xj+xQWDgTJItq^ zQyYP2ClQNd0+DGvpGM{d%mZG&BieuqBx zZvR|w*(uTI`-3pUIoR^s0$hS3(;cLLvOEDZiU9*)65?J)?e z?R{`efnyIGHEpgPpM`P=9+;(JfBuS9!10Hvto2sp+>RmeSK!a1Cv^WhHc%_0KS6L0 zeY5$ct{Fi~US6I<9KwaaD~}XKRJH>X9#F;;JbuUn!cX@2|%FRYhbQer!uf zThK+$2UifOe+|j#cN1s-%!o`Ithmk+yT=T%x@uf|B*XLD?mHf}-A_urVhtJnThxbR zV>A(;Va*uF_auzZm2}XVM(T5Eof+2~A3mkHr*Be9IR1F!eMVyAT_&;du9C)@ zUkg2{#E$hwo7}obHD4%J%>S}MT?=+L^SGe~jeFcKma8p)GsHwvE#u+S%he9Bt@E8? zt;(agL3WT2c)(#VfV|^z+V;Xc;0S7G9p=KP)y{Q4&h7$UW_+w(!FkL5!6hH| zS;hNH13t#zPx5CYUt>Me$$!h82UL7!D~x$Svj^mYed-zsxpwYgQ_2Rlk?1wugzLFd zl{dPkE9Ub;PiNRTpBH*s!^Zi%(9_6&=XCg#md}L@+jH~6ekb~LCFM0{D_B<<59buh zKeBx-J+f=f^cwq)v04gT$Mr`Y$FKwOGZ&s!5ktVQ=L!Biis8K_3dIw!`{idsZ*Nj8 z#~qKx@_UZ8+{dtN0xX-tjPF|McwM$EItG``LdWH@rH62=kY9(Qxu%9 z^mr84B$cM=`EqwkG~f97_~Y!8jo}cU|E1{lC*%&y^Kd^3=6a*?2tH46i4>c!Wn@ z2Oc>9JaUrq$PCUS3pkI=;yjW$3Xd4$-4&ca4s-tK7?nSA=zL7b>sI$;bG)(%pWy=j zI0gJs0{n3n_@e~)BRu;hTM6)o{h`chKjMD{0{$o|?v`G0=Cpb!fAnzvSYTrOG0VjG zW07fe{#eENV=dD6+vVnFmB#58FixN2U87;X!{WEypNaU*t#pg{ z?ekx%7{6ssJ6rO|CxSallw{K@lq-VTQ@|6N!+g^YvD=TcCqW)P0rF)r-ZXORiusgV zp|*ajUA=Kk_!`(a{5GG$T&Y+!-#iU5oLiCjGvtoF5UUQo7Oz3xH;8liyC-elRs)yBi^t+|3feG@$KvuyL4-d&JXGYpR}sV z>d$mOu~0rC_ELKNb!#%WAGDp05U!)Iq}ba()v;ejqOouJSjT;0%>HYPxiZ5n=9#uRju;v$Y3*n@=4AT^~}-e|whN!uR~T9NYu8 zFdJkkzz+;kH5N22L8%z8CD-@qigvaD%XPcimo>?EY(P@shkv-irOI7J09d%RT^q>_i&7>4d-@uuyc)ub8W}O{tW%x zJI5lm=E%9N{G74gxAB->U-KM`t`Ehn4M|MCMk4T$?I@d&>m_pWN;#Qd_40>$U!oQ= zT7NFyAKHqry<~F8VZ;pZtirtQM#Qf8J{#QMdUSZr6>&Y$q2qe=V;#@ce0(R4M6L(z zypKAPUsg?P^gFE!XimB*S0S}>2k?0VIY6W$sM(QuUG0MI0!^HLd z#G%pkoi{YRzNOdt{1KTk7Z-BxIXtqyKRKw&J+uAq)Hmd%Sf_U1`cS3oXa?E6NA!7W ztUY2>{)775SwXVPQc1TO!60g{1E2o~Zy%4HhjcueW9`4qVE=~`!(#=QC@8OVB78CLk42%!4TJU#?*qh9@O!uj=|%dRvnKihZ4i1fa4(>{o>YP75AVC zE;w;e_lc3_0_y**x<7Qqa6Z+4|8V()Y;BbD%7Q3w7I5FLwo&~5fWiL{{sjLAIe}** za$aj2?)#(h-4h3Nc{}6Cn-?5gpGR9q*5_CIbvd1FKV6@~&&RbTrq9*;N7rZ3k7LUh zIH1c{5hGuyMVD`BYhv=*xO{nBzH)MozH6AobvT+l{+7|@DgEJ58}7F}pOWLrgRvTO zm9mx*V`>+x7r1Qka~A{u{lM_Llh1S5@1B@`#k)_~KfeDoK3MF2AzU0ce((HV$6vfR zNPX!*M$kkKUBUgE9S{>@d+RsE00Xy^06H@p?_Pt2W()~gY3tVdUp{6J94E}KQNy}py#iwT)mMduI5Nk_sC zb>rVJbg~R|Qf_7YZOg3-t-B zL*I{Q%yBD0cQ^J#>}`gH9CTLFTom_f4bRJkua3k0&fu$e@6~g|sChGHe_UT*^m>tZ z@88Fjk@fGs;qtJ!W2vobkI@#FE2UtIVfem;{jUMaC80g~Tn6{_%pmLKzz4(Q!+7xm zzVF(?+kQd!aq0Q83owx)&u8mOv6!82)~|0Fh8f@g`fcL%$m7k4uDu!FfB1G}{EjzA z<5y(Bt-U!Kw@kq8{NB-Vqj>Q)XX4;-{CypdeIww}cs>4jPrR?sYX$rr1LV3ngmE2= z+gA2hy-g;x!Ewv+*PLAX{=c~UM`LW;u>bRV;`(}W_wDPe@mhTO+Y^z0_y4E-BkX^N z@nStn{~rim#XbE^Ma&^se*(UFD2*(OMrN#JwvOTn}ddXT@Sqh4@s+i}j1q-(kh|-%?wsNgs!M*#Bp7 z+5VTgrwwlENOGPH$mXC>_LMs(kh8!BWJ55id`Xr+o?`YQJC{0s7w$taD?f+L3`FoJo^p(Cb89X%k-=FNC z)_vU1{OY^YqqTqR{p|aPb)2HKI514t1+Y)_&tm-|OIfZQrAj@HF-(g?hIpYkzQZ&% z!1OaB0?(B+MrldNQf8BfX;x@-O+9V>13WRB6%pNS3f4#Be2%#{2%|MM$H!re(qk{- z8Jy*jpoHzs(i+$x`E?+lFc9>gFG^V7HjrJ)d(r_btsBKn@_qajd8|A|q zBfp|NqS6o7ig7LmXa1 zc8L?}k%oK^YctakA3wzBUY1tF+*`iFIzU}ab~GK*_t+?11AJWwJUY_A?GPLX$3Xt} zxT&J@_ecYdofs3R@<;gu`l9$>$@z_8Lw;kMWc2Gr>7JUVU+8*4r)j@}`;VopSY|#s zl+j;*p!hn}Hn=9O!H(Zdi{;8{oGP@>$21CGsTwb8*<&`PUy3<$*V=#-P&# zqIbT|`8mL9fMEXv9f@ao8smJ!!~i3Nv~F9i2K&vtW*U zYcSrj)08b^Or>Z$sw^g9(PIlrcXn`kKPi<1t%qrUO_b&WPaJTn?@)#1G9mqe_9#aN z4(dM4jxTX;$b!aJosRMSqr1Dcz&raN z0iV6)Cro?2@VWjp{69mBr}37U5ETa3^0_P(gJ z&7yuE=v|l>))85&+@kS%M_-YQwlD4r1)%>qI&|MB_E|bkUq@IjLAf1cf6#}D@nMhi z_Q=dnYqbJ9 zA_YvR_)ax&lJ@hC$Z8qkKzK0zT7`$NFNCEiBmf);Bg%6{R_#Vv9 zEqUz*RgUR?M9_qd#ko2vRuZw=t7+4I4?IResZbKakjX11UbM%--6WWwr@mN`02Yh|?m zyh2BG^nj&* zzhW75V;Opf$MYb3-T^c?1vDrPjTalB&JX5vTtuI_llO)1+^D~a;wvnJd!?xDfV3%A zCfhxGC9Fe%G}uX-T$rn68N}MCoAaX9En1r(ve`lhb<)UQzNdWX$69hYAIm7_>_6x$7$d&H^SM5MeBM4b%-b^Hd*nx4AEAA`Z|bLX ztpoXSUus0r*F)~hgrr8+|85;_s0XyBU~RZy9_IaSPYJs)Ce{YJl6TRsB(L)u z>C4x+t>KfNO~G^D&b%HLrxu-Oc@6i89eJImZ!61Fu#UpcJXKayId=+b4G97Gbt;n~ zntuMq@k+~}U-BNCs$^$2_yukLJkch`=P3Uy{eEdNtlcZE>NCsxM?nscIPqC-qfdf$ z?P500*F6f~?*&reAV*ph;=Y~PKb@u`IS6vLo;JD)(pEi+I$x)06^yyee{GLG7Z{U( z`s;@HdU|CWwyoFZWxPDJWZ8*xmzakJ_I+!Ug!mwCw`%xgXV&={E~P%n%4ivO;+QaY zL+vPkV;4JfrL+h1x&fy<^Ss~k)u-|GhWQU`G<yo*7r$5d{KM{ z`K`-Xw{vFF{{Q>Le2L^UVGoOEXv?ECo5gqE!{#K%VI?iz?93vc<*RdXdJoXbzH7Vr znMI3zF0^6!fv|_~-JNLDj%zO%&a2OSqQckRT~*NC9V~x7woy7^3VOY_FO=c?dbD>> z!|xp4V)C9{w-3SIwJww?o!H(L2)B1p#|Vpevie2SKsQ~`D3A?yPg;#6lA!&cniBDt zD4yH=NuoW1wE^OC#tS;)qIV=Nqty7YRy(gvfco7LLv2(pvv7Xy0$i6j@%es-)g4EB zBt~B=f-&H)8vfod;<-UFI*gLcRWvC4WCD_P7ZvYA=VRk@kkP11UTM~!r)kgMYgB)0n-%e69RO_4a`t!R`Y_LeF^0P5k_N;{MKjtmlKWn5m@t9mwk@QkBowi3oh1Mq2av zS`k2&r;~T{@mx)-_g_p%{t|BIpnSYsgE`@<%!57UP8K(z)eT|wc^3F9c>R!>Ft!#bJc>CW`wPqX6 zZT*yHmocAcvU%Ug&&hml6}HJdXL0NtaNIv;JiKOyZcDS;F0-GJ_;U~00_(Mo`7h?d z=cW|3Hr`HVtC%0gyl?a=;d=aFr_mC^-xvD%#XKuo!O8$mTOnC z9#9ynGOR~{Z_#4l-}~HUisS5qvY1jWUiyvO=f=-(AM}~o-e`WE02&{EiYGV_b3xmW%rsm1yiuwGIMm)(`-Xuq}0ci<7XYhtS>={<)19`A^q?y$)K>4ZiUS|F`uW(#ZC)Dw^jf{rR zOOxTV`PReUwP_?-Uj>~5+H!vm_I-9(?=OWYwbyp&I$Q>ew=1s0^-?u_Uc~WEvU&hY z?FWW-Jyczf_`Y}OkIJV%;qrfzluG`2>nZK~eb)4U;B#rYJx4~Ik>=?duBnKppUQ}* z2ymsrnwY7*i}hzU`J7tCE_=oE%v6jsg|)L_G2XXU%jQYPcNzMrAM2Hvztmo*;2PhT zdP?$U)k^4dNsbQ#9qeUnXJa~Mnd3Uxo&tHwA(Eddn18JKTpYZ8hiAUr@pzWZ+th1q z#@0{FCRQU|wX>U8-g>7gte`!|^3os5 zl5f-KNupuqqhqy-XXD;?-qqBg$6_%4?Q3B+*>SW34E4t*?ORW}Kc)5GZw|kep~>U- z`1Tv)_x85`EBr{g8hcR3YKWtZ$MYMk!!h;Na*S_x;5|Td#`JCI{*8NV8&+V<0_q}G zQsG7a29Ae)jCCIGIi z9d6L=B)-2Qtq8n}b8d#u4EV#oM&(5_T2}UTC7rD@|JR43=fl@9`T3}V_oH-KAWG*4 z*q-mH1O9Z&{GKc9m!0F6OpV_u<=b}Sn9NSoSh1J}`|m@;`EOQ>lwrslc)gylxfVe0 zXjK}yP&I?lD%J0m8L+T>DQfDckUjNjrjB2KLdy?Ttc6@> zhB&tkj4A+(6_aEqXYR(f}Zm6+1YJG$N#t{?DGjCfo1$65SqTip;Hfxn%JkzE` zDc;kQbrowPiznNZa^Q<9!`h#0o_w;u8T+JEbh3U4j0JtSV|~@xvXsW|peRu&z1^8c zM*3~!T>tVPtMoOK!U*aC$eVp^k9sq&lYQP1@qUzxc_aB>Wb>`O_ce+WXl0s$%P_ z5Z2d)tAyq0=0tFP;CjKeGdF(6*qR9Hwf3_Wk~?#wm(nsvu6qvPnK_VKI;?oVzMw#x z0o=b34uKrb7u|#sj#}DDASGd8+Z|Dtm06w$#2#k_F>lEK+`nLe*hd***&^$F7BB+E=2=~TVg$m zD*FdRs3+H8t!wd%q|y$ zt|hCPy@9k|N_O`lz10}jvM1nKh|?bL8L2#*v$DvB`Dg_p<2Yd&6VcXQk);1xSRMGI zfYSxQi2_cUfYZ7F;=yq;;w=n$xra)Q03iR%ByIYX1V(!eRb=;4K`+fz?T~SoJ(C$=F9eY9hsjJrG{}v0|Tpl6T&vGa}ny+AN(U;nNNt^I) zHgdmuA1~AK?vJST1#YC{VcSO|b~ozE72e#8>CpBF)~^=Z1mae8nHK=IBXK@Jc*fK7 zBmwojjH}pBxdsE*@l^fJ4*FdruHPB`lXunVv?w2`cG)JF-?PyF(xmxa3iF#iqRy}T ze|US^ps0>5doBYEF1}!DV)6E+;!VUj;Kz_Jb^y^Cz65k5QRA9~dVtI*C?Df6l0oml zpu`1ZwgyRAW*@pFqQS&{MP5kORGErqNmjS=YT1{Mu9 zCI2^gF`uDi4~y}D>w|v-_d{PNaQU??Aiq94hIYoO@++2icx4-e7?59~{F?(!;qoi> zXXiM=_@^3Tm{9t2I3D?2Qcnb*jeN{J)e^*O+k}i)oP($0HgytZz$UMb#x^u&x}iP; zJR5F>>Q2S{yz!@nZi5?ir)d6-s(s<-V1@1f{+H1GU&_5-s-~cC00DlpS>-a+?3Mp( zl15?PWIO@=h06?n|0}CTVZI)NWNdynv*~*Blh@(i3u$FS@{>e0IiZ1+07-;|ut6`14VR>JRn*25$-$7W) za*YT{13G{XuE^ty;hjNpU&j#nt#79NV~F2xCAt1EKUu#2YVfTH{{IU2A>1Bo3Bv8n zF9bJL^X%dFX;aAl(ey|#D+XE{1i5So^e^Q(471%I(bpdtKBhfE_}t_A<>B+CbN29g z%lZEUANQM)$KMmpQ^()8O~3s3dq2-rqB_JWbt&v0 zeN)f7mvsk}zov^*Yof6nvZOL{zpoM!`b#vDET0_j>y#rn|DpeYgPf;vQbs|3(WzE3 znOlXnj#7oKV}XyYIkdaf6aV=U>*iuGX+-CB!yONxDSCcQ@R-)># z6H~`U&S#)49`>zMxWAa|u%#_Hr(4msz~l5V+d^rFk~WTj9!z8Tkn%B6DDueqtVoLR z{|+W6F`X``_pWNW^q0kr8Xmvnop1eXgDFI6Aobfc7ko4vRPNvC4*EbWsrZAAfX z9jCN)4RoWIIj{MyQTAtO(_d5Jn(a!Dikw<_Myajx`Sk?TEhMrAU2z4CL7egI)lXj4+tH%C$m%JvB>B0E0 z2-gCtH)MJu%j1~$4422N94Q3{nsLt#%H#2>aCv+WwDD|E9{)J^j`FyH%Hv(%V14HZ zYe%R&z5?X&!VvrPpdZVv@Stp}eZNsk+|z1^WD6~W@oI+gS_$K|8pbQ&6UOZQ9go?A zx@Q4xLni&^CrB%FU6Gv|6$LoBCX5)-J|&+~gLKw32;(!A#o7wUxgC*XUyFC>AE*Gx~!`9degS4suAYj070;QeGGRF68s z^{D?)bsPFXk9xOWwm*sKiDZPHO|B+iWV&c9rd1sm@Qh^Otm|V0&V;Yd}U#6)$L(z{Re34AhdNJZ)-># zW8R;=yv(<@sbz+E83!+Oahfvcc$sH;nG?3KwK)x6|L&bWz5|s>{3(r_$zJ0rn{12T zNB7%_ss)}lx|ZCl7hvw~k1fP`xr5PAoD=7!fPFb9J^;r90BfwXfX7U^Ur{g8<#n4S6VbTX;+EA~B^W`_M!X$JQY{wIgW{q;!m3w+nZV)Rh`|J5MAa1K?* zs6m{Gz{?QEcEH7VBoA7QphjYBH;T=j-Q8iM#i^zA}s#z!lP`g z^0TiUj|@nT%&!9bt}w2YuSV|oKK)vHZqE5J^m~_M_fk99RsR|Xk1h2SZ^uk=i&6g> zogsdmwI|dc8-1`L8I*q57wcxfzeend9RHY|qrv)*z8Ojw?5dH!0e$EGnhXZVn_s>X z?E4G6Ey}Z9XSM|>_WvEvHWXi(P9J0OnaYk&7r)hINEL$nc6>X6c7qZg?^6`Mn2=+B z#%<^LG>X)Jr;RjwyJ^h5OU;jx5fiQvCJ2$^cn0a0#h0k64eIFOF#yBy+5O7&^FyLg zF($_p6$LhqlIU1ZmUU=4rowHoZHgH6^J;^1_i4=?d3s<>gtw2pGQGX(4Sz76=NMse zCklAHP9u%idHfsf5AH!jzR=D0$*raGX!BU!_TV~5A9>$2?#}|=`QF448W(pqF+EX# zs(?8;$72M2xX<5Z#P}Q-r}x*quMbtSs~hUYcpZ>8Cga!TpEN4x^Ini0x%&SH9;%S;g7b4QbI!#tp4ki*;>;&+2y z>W(K1Iuc0fOZ}5~<|kq|i*F|TPav+t&t7FQ&XShP`_Yu^rAP~r&SBj-dA~QF95S)} zgh?Qe=Cr&O`=s+=%wEvJ89m@0$^>Cyi{Ia_?~i@N=>>h&@tX!3V-5W;VXnx4gy*bg z3S=|`NHjAFWPJ4biy>w3e<$Fx%ha>HYIo8C+iq>q`X=q6G-og9QaC5}$BIr(RF^4+ zv@aPJaIb!L*7dTY^fu5(Un@#+YS$M!Q7#t&M`vMt4#Ni!=`RAT@ENa|RJ0Fo>fPj~ z_iW5DW1^7eOArnp3WeuqbUd7n26>wt9`i@_ERp6Oh5n_{{)wo6;+_H_4f>98gt5-< z46F;^cdLNzUq9aTv-p!t<43~a;yI)Nn8AHhFL@~A@~<#9Yy-&Yhk7( z$5^ih^rb}~N1Y${42tP0@`0%AFDYnkwvwa9-xuV8JTE%6MPEsCLFcg2{osY^Ui3*8 z4>W5Z&^Se+X>??M4ZK;Cjo`k-(L;t#XG@+tlGP74aC5rnN=brq}c|^(2E-tJKF8@Z zm&4TToPs|c;4g*a@0sn+5d6&z$6r3j-xb{IhLynK1gLHvJ0k6sF7y}(1$1t!X=znr2`Y7RZ41KQZ9Oci^^trHe zkU#g5xK2Emat`{~&p{v0{Y&EGj+!*^?4Em}@iI#&M2(u)SE!ZxYD*jAbxykeFkpC2&RG8*423zqadN z)EqMn`je>-W7km-badBNO2p`Z;{gscv{NO>-PJv zK;2iN?ysS4&$M-)i^IAvIPm*3)%}rh%;?Cx0)0EF@4@}pFyD50QT|FB$9p&27jN#7 zQ1(O~Adp404sC`|omGCS65n;D! zya28V!e?&BBOgl`)4;A8HYP2o+TF9fez*1?lj%46;CsEK{m^Mh$n)U2<8GnhYxhln zxnYqL<$QtjJ@ie(aY=rJxg&9na~ZS~*BzF?6r4-oy^gsda-xZ^R ze79R*eAf{j%6D&Yx)HXuI!^&2#qO z?xH%iT7@|IU`Bc{s}U!!0Zw{>9yCA?xTbc+fOrwfRiKBf2JCkq(E&Zo0eV1Qt8*f~ zSE@qkp^GqjXrumnGxMg)QM2Xk1w2xNZSF zAJ5I}zD4gl@%}}+X7#4NdioDCf_RL6O5Qt~1~Twx6XX7556Tl} zDEk1&JvtTox$oDDDx|snbX^VQpg}GNeG(=Id2eFdlAvv^h7ye7_B%_H8pbc4?~8Le z$|Zx}VLJ}!Q*U({uT982-~-BY$*s>}+@1nho^WVWBJ*6Ng+6*ty30^}n|+hfWvk&b z?R&T3?2j_7kqnuSAg$d1nDi_5+g&H;y?@-q-~jhy*dGmDx5=UV8+-1$=#b-IoFRLS zDCc?ioG_$6!}s(-pYa_z?mfPH4)TA^^DhVZ+<=6B!S_yJAKN)^g87L0H)UrHahMK= z!L;WGmOsYxuZ88e^85=t|D&*c^A9X0|8;27b5C=-;}1CJ{d_X%yH8IqlcIeFTTsSB>JtlB8O3)lBoZI(vh`sY<8k{`=unWY^qsJ~T8c(x_l zb-FXkB#jI8xoWA^g?+M0CtRr8*(GKZa!AZ3BuSc=5hhJiQ9H;goj`Y)YO<+QLmE2c z$>C0rjXM*_+nrkSS!W`-*?BLS?-ofzM-pjp>&RjEQu4Mtm3-!Yl-zV1$ow}l$flPv zN!m+xx(CK(7^dgj6RHy>{tv^iQr9$aUGpOPsDZ9|^zURpeD+T6b;bMN1#$7H0vEHh zou!Q{@$lGFk#vLE+RnN&5`?$8?JVsjHNZdvFdzVrcrw2u0pMW$?_hgd{lWG+{K58C z`y;jYrmxr^d_Pz5zCrQ+(unVG8c$Hh=ATE1JDwS6(MA_d{we#UQ0WBlQu}^!+4D~A z(_5T_{&*PA&wKV>CytX*?M@BZ;Xxf8c>wws;yN|@cj5ZY8Ay1p2c7|d>+Tq*vIi2z z_C>yY1QPlkp^q5GdBAvHt&s4{BV6Od*q7*wVue%<3FD5TeH3GIDw|@P)^~w0ZwXV8a_i!>6|DxS?%b-Ns!gU>dLxvIV)zs^=uZqKQ!sVT2DhrCboS@s5V zJuhLhZEKjCKQ$A6rKPmQ28%tR=*wnusf_f^e zXg$j-c)iwgo2AwsEb}n`e-Xc0^0wx0TU~CF+mW)!JQugJCoS5&3vaA-_4t~-&R%V) zrTJAneU8-{W<5(NbHtYg?sQRlAkKqpGeJ>KAR6 zin`ib88aI!wg!t$tf;Q5x0pqHrA6eqP#W{s?Xrt?Tg4hnO`WX~o(pRm%B!o)BCArY zr-Y-x545kaw!*fSH;br*D0Os9tR{}<&-ttPxxc!LMEuG5^_9z3Znaq~;>s-OK!r_F zKZUt6KNX%I;Q1ws7)DC?_e=PjC7cjT%K3E*#}7wfiDOaf!=TVF4r`COs=}V_Bn5YJeKT%SWW=Vq0B>rM^C=yt;ZzdBu);MLvIjwZ*<+ z*OvMUTh$heT#V*d0?qA0)MYU^V0#fjGM!geZMFX|b8i9|RdxN3zc(+-B$JIjKuBgn z2w}<0WB~#sA&{^o0U`+y5KTfB5(!Dnf`BX$QBeVdVns!WJ1Vubu63zcZHv}gv@U2} zXw}wMTdCTr)z<&{oO|zkZzhB7_xJn%{=Yx1nY)~G?%D3S%e(hIg^-b6SD#tf+1SzA z(%3aQBV$858FJzT|AYy^&SclA1EWNsL$=@H_7u2npr#!ZH_|bC+5$_~x3{%)w|6SH z)iS8%rq;T(UG8+Ze`B^Ey(*w6SI`D`n=%Ul$Dmf?CtlG*G#zl>vFT?ZWeaUrtU^%XE19EUW?n^T|FHg?Va7|>h8A2u5NO& z^*ycKE$%fvt?S&?%VgeSPy%Eo|d#eYBhpp*)HH>s$Ek zw+S|Vqdb@XJ4NLc;eqAl^xvcZ`1adAkeD4cJEkPUjHd}c@!Rj!0{-dpH^nJ_<79re z%#V@zDw&T_`jdemR^~Ha6Tc&6{>!%o<ube z=0B7bs{eFI0xp?Pl)r}j_5V%~bjW;ygjf2Hl)obse2QXJboFDenDja{+dqZZJ0?($ zW0HRr*A+ki{`T8;{MJhNZ)IND;f&1ZNyU66^GfgkZ~sd;Em|&`C)-~re-}uA1%dEI zHw5O-+$er~tH8YkhNFOIv1Lcb?Zj!F_Jan)SZ5_4S##HPbWKbP`bWWQqqHTDoY` zFvFdlJuPcW4ow+4*HXx6>TF-{J{z!r%{tHGCtp)OEIdv1!^yH<^~0fB=zo(L|5g*f zSH^|rVc!M+Wvc1fbH&g5-tU6%US-0|u|IEYX!vr5pRq;3EB~ra7r$quU?mbhH#0CF z{7>j7{c%OF|4B(_xcJ@pU*SLblEU92^{ZlV{%e8x;D5JhrhQbG*1TR{*QPES1G;=2 z?H4t6cGRoisky%T&h8d(rRH1H)6&}DV-KoXx?pbkw3-gow>DAuTCdRQT?(;}QtP$m|oabd$Jv=CbK33zC9X(Z&h3z~~w>4XIFPVgR1<<95`Qe{l^ z->Jnx(JP6;;nA2DkBNrHJ<)HGloO)yI!|x(_Xyq>{Sgt)j-E#pa-z}0-_oKVB%pV+ z=mV7dy%vq(;E!7LE`s}5i}n%WoqF_XqP$Cwo=c5=t4FsHLa#%MZ=_$pbDHB_f=$3W z&pF+(!t6WF8Jr1AK(%uwXPgPk2*;VvnV5uUkSTDS0ZKwEwc#veVu=au#GrGQ18)j- zC-kAF$ngQyWRRlDNl_6_XejbBB5*3|@9RJZ{W$6$+`bc&hN!QB?Q~)%FX|hl6PznZ z2T}h*I?;IpH4*i1ZoxT%h(&#ibVkDbFbwKCGX4ZCoTGHkti3;P) zf`rka70#K8gibUP!I|oW&p^$o-%dZZ3CW-qt=~hL=7eHUi_yVwN5VD|F)D#G-3ePj zZLp4+>BfZL0BpDpZ|qGt0I(4{hVUH;RiKur|A44nns5!+Nz$L9%&r8SM-wtgnN+jai%}v7&3m&97%WtnJms6OE`)~v-KZQ=Fx;_(P%F7c0A!NfKAnZ zM(sSS4cZLpZi+k#n??0QNawYHz78q-Ah!*w+xHLH^{&L5JRTtx!A5RJ}ehaF6-7tJ+?{dI8rnhP{n@d5UpYSN0U1gMG5 zGbE;KF3R0Rdkg{^NW11C8Tl_Att@x}t^A8%Tno=&I_rEGEtW>ZpPg5syeusOls`ba ze0l^Z{~Tl%l}3Q_P&DuXp$_9eaH(NG5?cC*3Su{gBZ+1h5`+ch3IX&FRg-4c{7KX# zM97-ys)h22n_VO77 z6P=659G!v~tBp#GyL~gXd*CLPET8aVZxo^A88Tn&O~QvqIb(0x0^pwl_z(kY zk&h9%ld-!ow_yFm?y>X}yI1Ikd^YwP6z_CqV8G}@dYAJw()&QC&-oLiuLYF@&b!d) zeorJ+^#!Rd_WB4aIWoArzC(+>8A2R$W|Bm)hr#;^l6N@9FDK?jVc;kBR`5AG0pnr5 zo=M0_^^`(_z+&iU%tJUV+5|rIdRgCu`sBMKR7DDS)z`8(?qU>w!0^{e_zwW@fz0|J z7(NZ{{SmQU8-1Mk){FI5C2TR%M)%W;0h|0b+Aqd%=z;g>CD4=y4x`Uye;;!$AXadT zMwFnk!lJ?zo-R$VX8uygp}p-$t4YrRIa$*WolM- zA?w&zePgTGbHsE&$0#6A5-eLoei5>tv)ef9-N&;sRaK?u+lSi5KZ)9dMWr~?hm7WbW zic1;JEDKGW0GCkvsxO#&Y@ikE#4flfWhY_Ga_p;`bOrxbOom%LDshSce`YAH+$SEP z;x8yW@c~MVCR!5@Q(_h+G66N|Czz=1JGssK93|FJak|<_ZXs4aWj>cVoV~;?%UkK# zOS781Y)clZ2LZb=C}!nLh&#lO<|XE{z`VXbJGd?fvgAOJTu2dIt^aunq|mbWeDAVPT>4*f`L;Sw!0?*5%OhP0;lu==3s#scIKkFkZN` zcej>AIN^J>-CC;Vdn-^eL?lozM5bFB>3#xP&SX}Q{oqggs!UJK(lQ>kyTnuv78Vbo zTbz+ioHmqWbj6Df_7FPQNs>1WVM~7q<#$kO+(qb94{wWSPnq^UdiEojuVS*92bDL- z9mrax^5f~T(s^Dnr1N}fNasnS*q0rQ5vcT~1d{P+j!giK9rRgQ)QdJw-=f;s5GLEW zKTNjq2TEl24xo$CD&vJ5%MQNNIe`kl#!~oRZgvErDWGF$_IJNTvty|ktD=lAW!>B0 za{6id(@1)n(b-7B?N`uueYj*kaf*O+BhJ2B6DOHJ8ZMbX87`UsJRCyn!OV}K5S!jR z#bUl9&fdHBaPM-qX&L*cSTd1;Ab~1Un|u0e`{JY&Gl^`*(J3}5*rficqGZ3qIGICo z1@xqjz@F5W9gGvm|M}qmpaelrN{g30spGqQ(r)ymsg~SC#wq#z3~GqiETiqK(0nlx z7GY2sGGk+|&6^^en+PcuBd+T-xys&nb2>XF3GRIl4_pt#i-GGN9x6A%r1$c8H8U~{ z;~Gz~Ps-L}aNcoU%Bf@dW$Zh> zt?18Tod1CH2eude$)4}qUf7{>j}h&{H7YlO!rpA2T|{wPos^$57*Qpf^Rpj-Te~=Y zkm`!R0o}R!>O7&Al2%OF_ULmP+bEb^qu()IluxfEyw1Ty;0@?t5fj)?acw#x(T+hR zAI~tFbWAZwf~^@_W>}`o*d;SOM&2>Q@~$<5g!QkXUjFC|t4CP9JX<=KHoc#k`pj&q z!fGn4P#`9Hh7@HZKPuL9&3&F}+lOe+b2ca;)MJ z-ij%42PHC5>s>*)>2WeJ;A?gG*DulajeCa3P_{QthO!^U$x!wVC9;DtWLP-8mBWG_ zkJ(qgrP`T8WLP-z-C=?BoROGsxkCD6nL&(b9ij%btOd-uokVrL@$PNa}S)nFf!8Q7N_6SCYN9;(D9ubm`=@B{4$tcRMc2M@BTt#$a z+pwT9=t$rg)S4ZP6HGdNvhqeU&t=1;?KEG7tyo!Y9>#@gRl$o6-8F&)IYj06lOUNW zoOE|QS~#+u=L!{4G(4BmzyHNBY2PmhI-@$@W?!BY^eaUG`skCxWk(t{NUE)HkW||R zl*j~BVCUIG#pz$#I?uY{-`QWn3M|)2Pm~$-mxIGY_m{~M=4|~XeT!5Ng3brSt-xbk zc*KFolf}y$&3CfEf;$Tg@mD)dKs}Cl+bT1^qKtoph=5lU&k5I5(ulVFQ-{b zxom`puvZDyY_wD(7G9*8^b%V{zDL6Eu_7{SZ>NNL4-Hq#IP6HJF?@s-pPQ#!D$Y1& z3)bmFrK+$H!{bM(#Pr$%tLce}p_*2bcSuMcj&|BiQx=TjkNb9EY#DAEHkI)$qahZA4Uc(?e>VJU3rmZF4%TY z&`KlSFIhql@s1L`q{#FIeU4by`KoPTK_JBfL|f>@+-pBirTS&F=FI=#Z%2vg>3*J` zel}Q5Pxte5bMg>1Jr($kL)7&2dY+yhqI~HwN%Vnu!Gj;2`7?bvwNF2^46US}N@8RZ z2;C^Qq9snE$;gJ$f{`1Uk=KVPMs8$A5{4>91pdOIijkX`ksU+TJo#pZf1L8AF9b41 zT&y@7YqtRPFq1wlv7BLwwZEna)($gkpQ9;k8&V!kZ5gImIn1n#8m{KX{Y>u~%FpVm z)AU<)JZ3WXo!K@ITWL;t_@fq0->yGHHktBQNI3BW`up&349isI{fcsvM#v$eT0R)< z1JbHHl9XppfoE&NpW8G0tfAq|)-vuK8OKU&F8XYV<)W7+1uh&l->H(bI_EVg_f3|p zzsJMlGFV*H!{4;|n0Mq!5VLpRsZSdtrxA4{_J2!?ZifyK8D7H+KmaL-391%{+!D$tzsrT5LT%4Pr3xg{Y5F(xPL~LPorV1Ge!FOI&*`> z*!Sr+Ej>(9#Ms@ZfZ6~A<5bVF8E2!+U?6=c#avRRzff$I|H>-Q$dx^b$JBC}v5l$a z7n3u_9lfT}IZr@w>yS4g8;!YM$`sj7D&v-T(Y zdy{EH)`RfajniSl95iw5@IUsC^BKr3;1s}GswqC9C$7izW%3_bn+pTh-5r5i^3t42=~2^EDDEE zB0LWP1Onj@N|M5lcT|F?&cyz0R2B_(_O)5{2%VX~-Sd zVooF5tH+E$o^Y-s2K1N*snikk99WH68I6{le99s6@BhRh1)Oq-{0H9`h{7p{$gh6| zcA{{~A@Uof6QXd+A@W~HCr06vL*&1ac1PiqL*%zeXT;)^L!_o7d9gU< z5b5AdQ7le5M22x@K`c%=M22&wA{M6{A|p6c9g9;AkxqR+LD$COltW~+zKAl-u{h-r z8KZ;Yj#!*>h)m#2cPyT=L=M)mxw|nIryL@O>+p--Se$Z*9HHZr?>k~~${{k5A}w{b zSe$Z*Ow#M=XICsvIYf@r4--INEKWH@diCR!IS`9e4v{|2^vB|qL!_TGM`CfxAu@|I z$6|5HAu?OXfw4zpampbwmw7uLi&GAfQ}q@DGkOQU_3q3FN1$~Ukka8h@i_Vrd6Scm zK1B9I@+cgAh`bd^Eeb~;B5#8ZoKZOX5P26UCy>9OCd>(ENdO_pGDyt9!<_MkEZw9^ zhiHyj)O^$uSl`K~7oumqf!6TgGrCB40!}YP&qi9DUWlH9v^c#GU3{Fq0;d zh^_*!;`BoFGO#R8FGMd#`al#;FGR0Ex<3l17ou0LCEOz;@H{Ab6&uINHKJTJ%oL(5g%0C|!84h7>V6(NiYY9-wMJn$kDIS3oU_H9#r%3Lg0O88v!+W2S zL0r=iWk+^3bZL%Ejs@Q*0H?$ECZq({4!@8RgNq|eI0>Y5WCO%0SojkqN3k0^zsBR5 zn2y2->0~h%3j9fVeF;`E#?{&?~KYo<9$f)iaL$- zKG5ll!cmNvYeD5e6pmuV>|YiEyJNi;b3KkRG9r!BI%A4K?-)EvKLyZ8kU55K0ni@;GzHyXBvT(F${$h!Xu|r)vBSk{;h-?) zXE9ifGQ}xQMe#5wy1&IRb@&a*N54h9-y{wcP|(5=LB|{fvCEm*4wKmBObq^_U#^6@ z!XkEsN$gte+{P$Qkz-B=Y2hF?=6--rEwM{osXatI6$768Akts1d+ppgOxS@8(3|bqw{fyCYlHCS$p^g6&c)3;JCq@hWTSaRR zL~#}4*L5I?!6=={-e&yD)XMEblJRc9KP^agNK#J=QhVaes&VnroCd_W#R6qRw4(b{ zW=qh0#*pE^hW~ECvVTY0U`pM- zIBs(NEArb(+!LD66IPF=H7$Ey6I2|VL|Ilx6FC1#lIS37AyW=_5Kgv_A@SJ9nt}BM zWpm-CZ)3_}_~kC;6a<+Db^ilf8yAETz|>wUE~MGoG?e9CO}U#W=ienEC$cD24yWHI z_hr2OvT80>CB+Cy_vo7Uq%1#|%4cvn_I!YRHDTQ`-_qJriA8H$?@3vXXX*R6e7VK6 zk2jQvM3m8dN)=T`85?Cr^M7tbABehPAgW)XitYy`aVQzAg~J-tZ$?O6ARs=}l%dd7 zrrw9c)3hv~@h~Owo}xdeDL3++n{tl(mzv+L8v~CA|W2)ibEu zMODuc`%|41tv1t&a>fws)FsiM@wAehIo=6QYVG=nk@t=8ZEgLwO>t5m#VLogh~Hrx%`0DSlSUz5hWeGo04dsb;eiFGwI=lu}i~ zSV}CT#M6|RQ46KC(4T)&Ze}-g(rZ`B&{B~(38h?#$AYXB$F!5Clcd2(O3$X0Ss7)4 zk`E_N3c*PsxF`s&W|n4vr66|v&x5~z1P6D&3=lR6unLka^z9ic0 z^xBvwF&lUhQB7|kgk+9#oY#sjL_B;M@xNB0RzxXXPa8o2^T!wiUPkgQ5^WNXRWD

#w4r4K(q~8H&N_HH<+YAbVew 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

d}XC`-@R$ixlcY`v@51aRf9li)D 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 Sx7UwY&%PYnK8eJ6^1lH6Ffx(= diff --git a/dependencies/hiredis/hiredis-0.13.3-sles11-x86_64-install-bin.tar.gz b/dependencies/hiredis/hiredis-0.13.3-sles11-x86_64-install-bin.tar.gz deleted file mode 100644 index b7cc8fdd9c364df2e016430d2850e6ae99d915c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80098 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 vqopbD` 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 N-mYq3?$tcJ_kY4%vFHE* diff --git a/dependencies/hiredis/hiredis-1.0.0-el7-x86_64-install-bin.tar.gz b/dependencies/hiredis/hiredis-1.0.0-el7-x86_64-install-bin.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c65293bb76292384a917c7e372fd311b97f983dc GIT binary patch literal 155357 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 z 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 K@Zr7y2nPVv@$#zx literal 0 HcmV?d00001 diff --git a/dependencies/hiredis/patch/sds.h.patch b/dependencies/hiredis/patch/sds.h.patch index 1e8ec0e..9ecf8d9 100644 --- a/dependencies/hiredis/patch/sds.h.patch +++ b/dependencies/hiredis/patch/sds.h.patch @@ -1,20 +1,19 @@ ---- hiredis-0.13.3/sds.h.orig 2016-05-27 13:22:18.410499697 -0400 -+++ hiredis-0.13.3/sds.h 2016-05-27 13:37:08.880365569 -0400 -@@ -39,6 +39,9 @@ - #include "win32.h" - #endif +--- hiredis-1.0.0/sds.h.orig 2020-08-03 14:18:07.000000000 -0400 ++++ hiredis-1.0.0/sds.h 2020-10-10 13:43:56.988507551 -0400 +@@ -44,6 +44,9 @@ + #include + #include +#ifdef __cplusplus +extern "C" { +#endif typedef char *sds; - struct sdshdr { -@@ -102,4 +105,9 @@ - sds sdsRemoveFreeSpace(sds s); - size_t sdsAllocSize(sds s); + /* Note: sdshdr5 is never used, we just access the flags byte directly. +@@ -275,4 +278,8 @@ + int sdsTest(int argc, char *argv[]); + #endif -+ +#ifdef __cplusplus +} +#endif diff --git a/dependencies/hiredis/v0.13.3.tar.gz b/dependencies/hiredis/v0.13.3.tar.gz deleted file mode 100644 index d0270cf7bbf0b6a09dcc713ad7685f7b341141ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58291 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 Yo}1_9xp{7$ujTpw0UCiAZ2*V_0EdAM2mk;8 diff --git a/dependencies/hiredis/v1.0.0.tar.gz b/dependencies/hiredis/v1.0.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c41632b2ff2976b9d92405744ca653462d41c7c4 GIT binary patch literal 97507 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 literal 0 HcmV?d00001 diff --git a/dependencies/redis-plus-plus/Makefile b/dependencies/redis-plus-plus/Makefile new file mode 100644 index 0000000..c70fec8 --- /dev/null +++ b/dependencies/redis-plus-plus/Makefile @@ -0,0 +1,46 @@ +include ../make.variable.include + +PKG_NAME := redis-plus-plus +VERSION := 1.2.1 +ARCHIVE := $(PKG_NAME)-$(VERSION).tar.gz +ARCHIVE_INSTALL := $(PKG_NAME)-$(VERSION)-$(OS)-$(ARCH)-install-bin.tar.gz +PKG_DIR = $(PKG_NAME)-$(VERSION) +GEN_DIR := $(shell pwd)/gen +HIREDIS_PKG := hiredis +HIREDIS_VERSION := 1.0.0 +HIREDIS_PKG_DIR := $(HIREDIS_PKG)-$(HIREDIS_VERSION) +HIREDIS_SRC_DIR := $(HIREDIS_PKG)-$(HIREDIS_VERSION)-src + +all: + test -f $(ARCHIVE_INSTALL) || $(MAKE) $(ARCHIVE_INSTALL) + @echo "Checking to see TARGETDIR is set..." + @test -n "$(TARGETDIR)" || false + mkdir -p $(TARGETDIR) + tar -C $(TARGETDIR) -xzvf $(ARCHIVE_INSTALL) + rm -f $(ARCHIVE_INSTALL) + +$(ARCHIVE_INSTALL): $(PKG_DIR)/Makefile + $(MAKE) -C $(HIREDIS_SRC_DIR) PREFIX=../$(HIREDIS_PKG_DIR) USE_SSL=1 + $(MAKE) -C $(HIREDIS_SRC_DIR) PREFIX=../$(HIREDIS_PKG_DIR) USE_SSL=1 install + cd $(PKG_DIR) && cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=../$(HIREDIS_PKG_DIR) -DCMAKE_INSTALL_PREFIX=../$(PKG_NAME) -DREDIS_PLUS_PLUS_BUILD_TEST=OFF -DREDIS_PLUS_PLUS_BUILD_STATIC=OFF -DREDIS_PLUS_PLUS_USE_TLS=ON + cd $(PKG_DIR) && $(MAKE) + cd $(PKG_DIR) && $(MAKE) install + rm -rf $(HIREDIS_SRC_DIR) + rm -rf $(HIREDIS_PKG_DIR) + rm -rf $(PKG_DIR) + tar -C $(PKG_NAME) -czvf $(ARCHIVE_INSTALL) ./lib ./include + rm -rf $(PKG_NAME) + +$(PKG_DIR)/Makefile: $(ARCHIVE) + tar -xvzf $(ARCHIVE) + tar -xvzf $(HIREDIS_PKG_DIR).tar.gz + mv $(HIREDIS_PKG_DIR) $(HIREDIS_SRC_DIR) + +clean: + rm -rf $(PKG_DIR) + rm -rf $(PKG_NAME) + rm -f $(ARCHIVE_INSTALL) + rm -rf $(HIREDIS_SRC_DIR) + rm -rf $(HIREDIS_PKG_DIR) + rm -rf $(TARGETDIR)/lib/libredis++* + rm -rf $(TARGETDIR)/include/sw diff --git a/dependencies/redis-plus-plus/hiredis-1.0.0.tar.gz b/dependencies/redis-plus-plus/hiredis-1.0.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c41632b2ff2976b9d92405744ca653462d41c7c4 GIT binary patch literal 97507 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 literal 0 HcmV?d00001 diff --git a/dependencies/redis-plus-plus/redis-plus-plus-1.2.1.tar.gz b/dependencies/redis-plus-plus/redis-plus-plus-1.2.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..d5b6ca5402732a6fd81c043d869ef78fe4a67cc9 GIT binary patch literal 131282 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%0Db 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 literal 0 HcmV?d00001 diff --git a/samples/DPSUsageFromCpp/Makefile b/samples/DPSUsageFromCpp/Makefile index b0eb85f..717af59 100644 --- a/samples/DPSUsageFromCpp/Makefile +++ b/samples/DPSUsageFromCpp/Makefile @@ -22,7 +22,16 @@ # # end_generated_IBM_copyright_prolog -DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps +# Since the DPS toolkit version you are using could be more +# recent than the one in the IBM Streams installation directory, +# you may want to ensure that the following DPS toolkit path is correct. +# +# This example includes a C++ operator that uses DPS APIs as well. +# In order to build that C++ operator with the correct .so files +# present in the DPS toolkit's impl directory, it is necessary to +# export the following. This will get used inside the C++ operator's +# impl/bin/archLevel file. +export DPS_TOOLKIT_HOME=$(HOME)/streamsx.dps/com.ibm.streamsx.dps SPLC_FLAGS ?= -a -t $(DPS_TOOLKIT_HOME) SPLC = $(STREAMS_INSTALL)/bin/sc diff --git a/samples/DPSUsageFromCpp/etc/no-sql-kv-store-servers.cfg b/samples/DPSUsageFromCpp/etc/no-sql-kv-store-servers.cfg index c7df47f..de4e93f 100644 --- a/samples/DPSUsageFromCpp/etc/no-sql-kv-store-servers.cfg +++ b/samples/DPSUsageFromCpp/etc/no-sql-kv-store-servers.cfg @@ -2,17 +2,189 @@ # # This file is a simple configuration file for the Streams DPS toolkit. # Any line starting with # is a comment line. -# You must correctly configure the following in this file: +# You must correctly configure the following in this file. # -# 1) In the very first non-comment regular line of this file indicate the name of the key value store that will be used. +# 1) In the very first non-comment regular line of this file, please tell us +# about the name of the key value store product you will be using. # It can ONLY be one of these NoSQL K/V data store product names supported by the DPS toolkit: # -# i) redis -# ii) redis-cluster +# i) memcached +# ii) redis +# iii) cassandra +# iv) cloudant +# v) hbase +# vi) mongo +# vii) couchbase +# viii) redis-cluster +# ix) redis-cluster-plus-plus +# +# Note: A 'redis' configuration can be made to work with a non-cluster redis instance in +# TLS or non-TLS mode. +# +# A 'redis-cluster-plus-plus' configuration can be made to work with a redis cluster in +# TLS/SSL or non-TLS mode. +# +# A 'redis-cluster' configuration can be made to work with a redis cluster only in +# non-TLS mode. The other two redis configurations above makes this one redundant. +# # # 2) Below the line containing the K/V data store product name, please list -# your valid server names or IP addresses. -# (Please see the toolkit documentation for the expected format of the server names for your chosen NoSQL data store product.) +# your valid memcached or redis or cassandra or cloudant or +# hbase or mongo or couchbase or redis-cluster server names or IP addresses. +# (Please read below about the expected format of this for your chosen NoSQL data store product.) +# +# a) For memcached, you must list all the participating servers one per line (names or IP addresses). +# +# (e-g:) +# Machine1 +# Machine2 +# Machine3 +# +# b) For redis, (i.e. redis running in a non cluster mode) please specify one or more +# servers (name or IP address) one per line or if you are working on a single machine +# and if you prefer to use the Unix domain socket instead of TCP, you can simply +# specify unixsocket instead of a server name. For redis, if you decide to use the +# unixsocket, you must also ensure that your redis.conf file on the server side is +# configured properly for a unix domain socket pointing to /tmp/redis.sock file and +# the usual redis port set to 0. +# +# IMPORTANT TIP ABOUT RUNNING MULTIPLE REDIS SERVERS (in a non cluster redis configuration): +# (If you have a heavy workload of put/get requests, then using multiple Redis servers +# may give scaling to improve the overall throughput. If you are going to consider using +# multiple Redis servers that are not configured in a redis-cluster mode, the dps toolkit +# will automatically do the client side partitioning to shard (i.e. spread) your data across +# those servers. You may also decide to run multiple Redis server instances on a single +# machine to take advantage of the available CPU cores. +# If you run multiple Redis servers on a single machine, then you must configure each server +# instance with a unique port in a separate redis.conf.X file where X is your Redis server +# instance number. [For example, if you run 3 instances on the same machine, you can have +# redis.conf.1, redis.conf.2, and redis.conf.3] If you are planning to run multiple Redis server +# instances on the same machine, you may also want to assign unique PID file names in their +# respective configuration files. Having done this, you can start each of those +# redis server instances by running a command from the src directory of your redis installation +# directory: ./redis-server ../redis.conf.X (substitute X with your redis server instance number). +# When there are multiple Redis servers running on a single machine, then you must properly +# specify below each ServerName:Port on a separate line. For Redis, one can optionally provide a +# Redis authentication password after the port number if the Redis environment is configured to +# require authentication before using it. Along with that, one can optinally provide a +# redis server connection timeout value and the use_tls field to indicate whether to +# connect to the Redis server using TLS or not. Default Redis server connection timeout value is +# 3 seconds and user can override it with any non-zero value in seconds. +# For the use_tls field, a value of 1 means that TLS is needed and an absence of that field or +# a value of 0 for that field means that TLS is not needed. TLS makes sense only when a +# public cloud service based single redis server is configured i.e. IBM Compose Redis server or +# an AWS Elasticache Redis or Azure Cache for Redis or an on-prem Redis configured with a single server. +# It is also necessary to have Redis server 6 or above to enable/disable the TLS/SSL feature. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls +# (e-g:) +# Machine1:7001:MyRedisPassword:7:1 +# Machine1:7002:::0 +# Machine1:7003:MyRedisPassword:6 +# +# When there are multiple Redis servers configured, using the dpsXXXXTTL APIs will provide a +# good scaling factor for your high volume put/get requests in comparison to using the APIs that +# are based on the user created named stores. You are encouraged to choose between +# the TTL and non-TTL based APIs according to your functional and scaling needs. +# +# c) In Cassandra, all servers assume an equal role. There is no special primary or coordinator +# server. For Cassandra, you can list either all or just only one of the +# seed servers (names or IP addresses as it is specified in your cassandra.yaml file). +# +# (e-g:) +# Machine1 +# Machine2 +# Machine3 +# +# d) In Cloudant, you must have a personalized URL registered with the Cloudant public +# web offering or with a "Cloudant Local" on-premises private installation. +# Since you have to enter the user id and password below, it is better to create +# a user id specifically for working with the Streams dps toolkit. # +# For the server name, you must enter a single line in the following format: +# http://user:password@user.cloudant.com if you are using the Cloudant service on the web +# (OR) +# http://user:password@XXXXX where XXXXX is a name or IP address of your on-premises +# Cloudant Local load balancer machine. +# +# e) For HBase, you have to specify the HBase REST server address(es) in the format shown below. +# User id and password in the URL below should match the Linux user id and password on +# the machine where the HBase REST server program is running. If you have a multi-machine +# HBase cluster, then you can run the HBase REST server on multiple machines and configure +# one or more REST servers [one per line] below. Configuring multiple REST servers will +# let the DPS toolkit to spray (load balance) your heavy HBase workload to those multiple +# servers and that may be a factor in slightly improving the HBase read/write performance. +# REST server address format: http://user:password@HBase-REST-ServerNameOrIPAddress:port +# +# (e-g:) +# http://user:password@Machine1:8080 +# http://user:password@Machine3:8080 +# http://user:password@Machine3:8080 +# +# f) For Mongo, you can specify a single server or a replica set (for redundancy and +# high availability using automatic fail-over) or a sharded cluster's query router +# mongos seed servers (for HA, load balancing, high throughput and fail-over). +# Please provide it in the following way for one of those three modes of MongoDB configuration. +# +# (e-g for single server, replica set and sharded cluster in that order.) +# Machine1:27017 +# Machine1:27017,Machine1:27018,Machine1:27019/?replicaSet=YOUR_MONGO_REPLICA_SET_NAME +# Machine1:27069,Machine2:27069,Machine3:27069 +# [If you are using a sharded cluster, then you must manually enable sharding for the +# ibm_dps database and the collections created by the DPS in Mongo.] +# +# g) For Couchbase, you can specify one or more server names. Please specify one server name per line. +# You must have already created a Couchbase admin user id and password using the Couchbase +# web console. You must specify that admin user id and password as part of any one of the +# server names you will add below. +# +# (e-g:) +# user:password@Machine1 +# Machine2 +# Machine3 +# +# h) For redis-cluster, you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This HA feature in the DPS toolkit +# is supported only in Redis version 3 and above. For error free application +# start-up as well as for proper reconnection to the auto reconfigured redis cluster +# on abrupt node outages, it is recommended that you specify more than one or even +# better all your redis-cluster primary and replica nodes (server name or IP address +# and a port number). Please note that this way of using the redis-cluster is done +# via an older version of redis-cluster client wrapper built in year 2016. Hence, with +# this configuration, you will not be able to use TLS/SSL in Redis server v6 +# and higher versions. It is good only for using a Redis cluster that is not +# configured with TLS/SSL. If you prefer to work with a more recent version of +# a redis-cluster client wrapper that is well tested with Redis server v6 and +# higher enabled for TLS/SSL or for non-TLS, it is recommended to skip to the next +# section and follow the steps from there. +# +# RedisServerNameOrIPAddress:port:RedisPassword +# (e-g:) +# Machine1:7001:MyRedisPassword +# Machine2:7001:MyRedisPassword +# Machine3:7001:MyRedisPassword +# Machine4:7001:MyRedisPassword +# +# i) redis-cluster-plus-plus: The previous section works only for non-TLS redis-cluster configurations. +# This section explains how to use a TLS/SSL enabled redis-cluster that became available in +# Redis v6 or above. It uses a much newer C++ redis-cluster client wrapper called +# redis-plus-plus that allows us to work with a redis-cluster v6 or above enabled with TLS/SSL or +# non-TLS. For redis-cluster-plus-plus you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This particular HA feature with non-TLS or TLS/SSL +# in the DPS toolkit is supported only in Redis version 6 or above. For error free application start-up +# as well as for proper reconnection to the auto reconfigured redis cluster on abrupt node outages, +# it is recommended that you specify more than one or even better all your redis-cluster primary and +# replica nodes (server name or IP address and a port number). Please refer to the commentary above +# for the non-clustered Redis to understand the connection timeout and TLS usage. Both are supported in +# the clister-mode Redis as well when configuring your key value store product as redis-cluster-plus-plus. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls:RedisClusterCACertificateFile +# (e-g:) +# Machine1:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine2:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine3:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine4:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# +# =============================================================================== redis -127.0.0.1:6379 +# Specify below your NoSQL K/V store servers' names or IP addresses, port numbers, passwords and other fields as applicable. diff --git a/samples/DPSUsageFromJava/Makefile b/samples/DPSUsageFromJava/Makefile index 2c60614..671997e 100644 --- a/samples/DPSUsageFromJava/Makefile +++ b/samples/DPSUsageFromJava/Makefile @@ -22,10 +22,14 @@ # # end_generated_IBM_copyright_prolog -DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps - -# the dps-helper is copied from the toolkit to the impl/lib direcrory of the application -# to ensure it is included in the SAB file +# Since the DPS toolkit version you are using could be more +# recent than the one in the IBM Streams installation directory, +# you may want to ensure that the following DPS toolkit path is correct. +DPS_TOOLKIT_HOME ?= $(HOME)/streamsx.dps/com.ibm.streamsx.dps + +# The dps-helper is copied from the DPS toolkit directory to the +# impl/java/lib directory of this application to ensure it is +# included in the SAB file. DPS_HELPER_JAR = $(DPS_TOOLKIT_HOME)/impl/java/lib/dps-helper.jar SPLC_FLAGS ?= -a -t $(DPS_TOOLKIT_HOME) @@ -40,8 +44,8 @@ distributed: java $(SPLC) $(SPLC_FLAGS) -M $(SPL_MAIN_COMPOSITE) $(SPL_CMD_ARGS) --output-directory=./output/JavaDPSDemo/Distributed java: $(JAVA_CLASS_FILES) - mkdir -p impl/lib - cp $(DPS_HELPER_JAR) impl/lib + mkdir -p impl/java/lib + cp $(DPS_HELPER_JAR) impl/java/lib JAVA_HOME=$(STREAMS_INSTALL)/java ant clean: diff --git a/samples/DPSUsageFromJava/build.xml b/samples/DPSUsageFromJava/build.xml index e812c08..b6b693d 100644 --- a/samples/DPSUsageFromJava/build.xml +++ b/samples/DPSUsageFromJava/build.xml @@ -48,8 +48,8 @@ - - + + diff --git a/samples/DPSUsageFromJava/etc/no-sql-kv-store-servers.cfg b/samples/DPSUsageFromJava/etc/no-sql-kv-store-servers.cfg old mode 100755 new mode 100644 index c7df47f..de4e93f --- a/samples/DPSUsageFromJava/etc/no-sql-kv-store-servers.cfg +++ b/samples/DPSUsageFromJava/etc/no-sql-kv-store-servers.cfg @@ -2,17 +2,189 @@ # # This file is a simple configuration file for the Streams DPS toolkit. # Any line starting with # is a comment line. -# You must correctly configure the following in this file: +# You must correctly configure the following in this file. # -# 1) In the very first non-comment regular line of this file indicate the name of the key value store that will be used. +# 1) In the very first non-comment regular line of this file, please tell us +# about the name of the key value store product you will be using. # It can ONLY be one of these NoSQL K/V data store product names supported by the DPS toolkit: # -# i) redis -# ii) redis-cluster +# i) memcached +# ii) redis +# iii) cassandra +# iv) cloudant +# v) hbase +# vi) mongo +# vii) couchbase +# viii) redis-cluster +# ix) redis-cluster-plus-plus +# +# Note: A 'redis' configuration can be made to work with a non-cluster redis instance in +# TLS or non-TLS mode. +# +# A 'redis-cluster-plus-plus' configuration can be made to work with a redis cluster in +# TLS/SSL or non-TLS mode. +# +# A 'redis-cluster' configuration can be made to work with a redis cluster only in +# non-TLS mode. The other two redis configurations above makes this one redundant. +# # # 2) Below the line containing the K/V data store product name, please list -# your valid server names or IP addresses. -# (Please see the toolkit documentation for the expected format of the server names for your chosen NoSQL data store product.) +# your valid memcached or redis or cassandra or cloudant or +# hbase or mongo or couchbase or redis-cluster server names or IP addresses. +# (Please read below about the expected format of this for your chosen NoSQL data store product.) +# +# a) For memcached, you must list all the participating servers one per line (names or IP addresses). +# +# (e-g:) +# Machine1 +# Machine2 +# Machine3 +# +# b) For redis, (i.e. redis running in a non cluster mode) please specify one or more +# servers (name or IP address) one per line or if you are working on a single machine +# and if you prefer to use the Unix domain socket instead of TCP, you can simply +# specify unixsocket instead of a server name. For redis, if you decide to use the +# unixsocket, you must also ensure that your redis.conf file on the server side is +# configured properly for a unix domain socket pointing to /tmp/redis.sock file and +# the usual redis port set to 0. +# +# IMPORTANT TIP ABOUT RUNNING MULTIPLE REDIS SERVERS (in a non cluster redis configuration): +# (If you have a heavy workload of put/get requests, then using multiple Redis servers +# may give scaling to improve the overall throughput. If you are going to consider using +# multiple Redis servers that are not configured in a redis-cluster mode, the dps toolkit +# will automatically do the client side partitioning to shard (i.e. spread) your data across +# those servers. You may also decide to run multiple Redis server instances on a single +# machine to take advantage of the available CPU cores. +# If you run multiple Redis servers on a single machine, then you must configure each server +# instance with a unique port in a separate redis.conf.X file where X is your Redis server +# instance number. [For example, if you run 3 instances on the same machine, you can have +# redis.conf.1, redis.conf.2, and redis.conf.3] If you are planning to run multiple Redis server +# instances on the same machine, you may also want to assign unique PID file names in their +# respective configuration files. Having done this, you can start each of those +# redis server instances by running a command from the src directory of your redis installation +# directory: ./redis-server ../redis.conf.X (substitute X with your redis server instance number). +# When there are multiple Redis servers running on a single machine, then you must properly +# specify below each ServerName:Port on a separate line. For Redis, one can optionally provide a +# Redis authentication password after the port number if the Redis environment is configured to +# require authentication before using it. Along with that, one can optinally provide a +# redis server connection timeout value and the use_tls field to indicate whether to +# connect to the Redis server using TLS or not. Default Redis server connection timeout value is +# 3 seconds and user can override it with any non-zero value in seconds. +# For the use_tls field, a value of 1 means that TLS is needed and an absence of that field or +# a value of 0 for that field means that TLS is not needed. TLS makes sense only when a +# public cloud service based single redis server is configured i.e. IBM Compose Redis server or +# an AWS Elasticache Redis or Azure Cache for Redis or an on-prem Redis configured with a single server. +# It is also necessary to have Redis server 6 or above to enable/disable the TLS/SSL feature. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls +# (e-g:) +# Machine1:7001:MyRedisPassword:7:1 +# Machine1:7002:::0 +# Machine1:7003:MyRedisPassword:6 +# +# When there are multiple Redis servers configured, using the dpsXXXXTTL APIs will provide a +# good scaling factor for your high volume put/get requests in comparison to using the APIs that +# are based on the user created named stores. You are encouraged to choose between +# the TTL and non-TTL based APIs according to your functional and scaling needs. +# +# c) In Cassandra, all servers assume an equal role. There is no special primary or coordinator +# server. For Cassandra, you can list either all or just only one of the +# seed servers (names or IP addresses as it is specified in your cassandra.yaml file). +# +# (e-g:) +# Machine1 +# Machine2 +# Machine3 +# +# d) In Cloudant, you must have a personalized URL registered with the Cloudant public +# web offering or with a "Cloudant Local" on-premises private installation. +# Since you have to enter the user id and password below, it is better to create +# a user id specifically for working with the Streams dps toolkit. # +# For the server name, you must enter a single line in the following format: +# http://user:password@user.cloudant.com if you are using the Cloudant service on the web +# (OR) +# http://user:password@XXXXX where XXXXX is a name or IP address of your on-premises +# Cloudant Local load balancer machine. +# +# e) For HBase, you have to specify the HBase REST server address(es) in the format shown below. +# User id and password in the URL below should match the Linux user id and password on +# the machine where the HBase REST server program is running. If you have a multi-machine +# HBase cluster, then you can run the HBase REST server on multiple machines and configure +# one or more REST servers [one per line] below. Configuring multiple REST servers will +# let the DPS toolkit to spray (load balance) your heavy HBase workload to those multiple +# servers and that may be a factor in slightly improving the HBase read/write performance. +# REST server address format: http://user:password@HBase-REST-ServerNameOrIPAddress:port +# +# (e-g:) +# http://user:password@Machine1:8080 +# http://user:password@Machine3:8080 +# http://user:password@Machine3:8080 +# +# f) For Mongo, you can specify a single server or a replica set (for redundancy and +# high availability using automatic fail-over) or a sharded cluster's query router +# mongos seed servers (for HA, load balancing, high throughput and fail-over). +# Please provide it in the following way for one of those three modes of MongoDB configuration. +# +# (e-g for single server, replica set and sharded cluster in that order.) +# Machine1:27017 +# Machine1:27017,Machine1:27018,Machine1:27019/?replicaSet=YOUR_MONGO_REPLICA_SET_NAME +# Machine1:27069,Machine2:27069,Machine3:27069 +# [If you are using a sharded cluster, then you must manually enable sharding for the +# ibm_dps database and the collections created by the DPS in Mongo.] +# +# g) For Couchbase, you can specify one or more server names. Please specify one server name per line. +# You must have already created a Couchbase admin user id and password using the Couchbase +# web console. You must specify that admin user id and password as part of any one of the +# server names you will add below. +# +# (e-g:) +# user:password@Machine1 +# Machine2 +# Machine3 +# +# h) For redis-cluster, you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This HA feature in the DPS toolkit +# is supported only in Redis version 3 and above. For error free application +# start-up as well as for proper reconnection to the auto reconfigured redis cluster +# on abrupt node outages, it is recommended that you specify more than one or even +# better all your redis-cluster primary and replica nodes (server name or IP address +# and a port number). Please note that this way of using the redis-cluster is done +# via an older version of redis-cluster client wrapper built in year 2016. Hence, with +# this configuration, you will not be able to use TLS/SSL in Redis server v6 +# and higher versions. It is good only for using a Redis cluster that is not +# configured with TLS/SSL. If you prefer to work with a more recent version of +# a redis-cluster client wrapper that is well tested with Redis server v6 and +# higher enabled for TLS/SSL or for non-TLS, it is recommended to skip to the next +# section and follow the steps from there. +# +# RedisServerNameOrIPAddress:port:RedisPassword +# (e-g:) +# Machine1:7001:MyRedisPassword +# Machine2:7001:MyRedisPassword +# Machine3:7001:MyRedisPassword +# Machine4:7001:MyRedisPassword +# +# i) redis-cluster-plus-plus: The previous section works only for non-TLS redis-cluster configurations. +# This section explains how to use a TLS/SSL enabled redis-cluster that became available in +# Redis v6 or above. It uses a much newer C++ redis-cluster client wrapper called +# redis-plus-plus that allows us to work with a redis-cluster v6 or above enabled with TLS/SSL or +# non-TLS. For redis-cluster-plus-plus you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This particular HA feature with non-TLS or TLS/SSL +# in the DPS toolkit is supported only in Redis version 6 or above. For error free application start-up +# as well as for proper reconnection to the auto reconfigured redis cluster on abrupt node outages, +# it is recommended that you specify more than one or even better all your redis-cluster primary and +# replica nodes (server name or IP address and a port number). Please refer to the commentary above +# for the non-clustered Redis to understand the connection timeout and TLS usage. Both are supported in +# the clister-mode Redis as well when configuring your key value store product as redis-cluster-plus-plus. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls:RedisClusterCACertificateFile +# (e-g:) +# Machine1:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine2:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine3:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine4:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# +# =============================================================================== redis -127.0.0.1:6379 +# Specify below your NoSQL K/V store servers' names or IP addresses, port numbers, passwords and other fields as applicable. diff --git a/samples/DPSUsageFromJava/impl/java/src/application/DataStoreTester.java b/samples/DPSUsageFromJava/impl/java/src/application/DataStoreTester.java index a8ebc4c..89dc333 100644 --- a/samples/DPSUsageFromJava/impl/java/src/application/DataStoreTester.java +++ b/samples/DPSUsageFromJava/impl/java/src/application/DataStoreTester.java @@ -27,16 +27,15 @@ @PrimitiveOperator(name="DataStoreTester", namespace="application", description="This operator is a no-op. It exists for the purpose of demonstrating how to successfully fuse two Java operators that use the DPS toolkit. Because it is fused with the TickerIdGenerator operator, the SharedLoader annotation is used in both classes. See the operators' source for more information.") @InputPorts({@InputPortSet(description="Port that ingests tuples", cardinality=1, optional=false, windowingMode=WindowMode.NonWindowed, windowPunctuationInputMode=WindowPunctuationInputMode.Oblivious), @InputPortSet(description="Optional input ports", optional=true, windowingMode=WindowMode.NonWindowed, windowPunctuationInputMode=WindowPunctuationInputMode.Oblivious)}) -//To compile Add the DPS toolkit's Java library (dps-helper.jar) to the toolkit path of this operator. -//There are 2 ways to do this: -//1. If your application will have access to the Streams install location at runtimen, then you can specify the full path to the location of the dps-helper.jar file present inside the DPS toolkit as follows: +//Add the DPS toolkit's Java library (dps-helper.jar) to the path of this operator. +//There are 2 ways to do this: +//1. If your application will have access to the Streams install location at runtime, then you can specify the full path to the location of the dps-helper.jar file present inside the DPS toolkit as follows: //@Libraries("@STREAMS_INSTALL@/toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar") -//if that path will be accessible at runtime. +//if that path will be accessible at compile time and at runtime. -//2. Or, you can copy the dps-helper.jar from /toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar into the impl/lib folder of this application and reference it as follows: -@Libraries("impl/lib/dps-helper.jar") -//we choose option 2, because the Makefile will copy the dps-helper from the toolkit location to impl/lib +//2. Or, you can copy the dps-helper.jar either from the /toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar or from a more recent version of the DPS toolkit directory into the impl/java/lib folder of this application and reference it as follows. You will have to create the lib sub-directory inside impl/java of this application before copying the jar file there. It is done in the Makefile of this example. If you choose this option, then you must ensure that the @Libraries shown above is commented out and the following one is uncommented. +@Libraries("impl/java/lib/dps-helper.jar") // Add the following annotation if you are going to fuse this Java operator with other Java operators that will also use // the DPS APIs. In that case, it is necessary to add the following annotation so that the fused PE will use a shared class loader. diff --git a/samples/DPSUsageFromJava/impl/java/src/application/TickerIdGenerator.java b/samples/DPSUsageFromJava/impl/java/src/application/TickerIdGenerator.java index fa49f4e..60dcddf 100644 --- a/samples/DPSUsageFromJava/impl/java/src/application/TickerIdGenerator.java +++ b/samples/DPSUsageFromJava/impl/java/src/application/TickerIdGenerator.java @@ -46,16 +46,15 @@ " See Main.spl for examples on how to iterate over the contents of a store") @InputPorts({@InputPortSet(description="Port that ingests tuples", cardinality=1, optional=false, windowingMode=WindowMode.NonWindowed, windowPunctuationInputMode=WindowPunctuationInputMode.Oblivious), @InputPortSet(description="Optional input ports", optional=true, windowingMode=WindowMode.NonWindowed, windowPunctuationInputMode=WindowPunctuationInputMode.Oblivious)}) @OutputPorts({@OutputPortSet(description="Port that produces tuples", cardinality=1, optional=false, windowPunctuationOutputMode=WindowPunctuationOutputMode.Generating), @OutputPortSet(description="Optional output ports", optional=true, windowPunctuationOutputMode=WindowPunctuationOutputMode.Generating)}) + //Add the DPS toolkit's Java library (dps-helper.jar) to the path of this operator. //There are 2 ways to do this: - //1. If your application will have access to the Streams install location at runtime, then you can specify the full path to the location of the dps-helper.jar file present inside the DPS toolkit as follows: //@Libraries("@STREAMS_INSTALL@/toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar") -//if that path will be accessible at runtime. +//if that path will be accessible at compile time and at runtime. -//2. Or, you can copy the dps-helper.jar from /toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar into the impl/lib folder of this application and reference it as follows: -@Libraries("impl/lib/dps-helper.jar") -// we choose option 2, because the Makefile will copy the dps-helper from the toolkit location to impl/lib +//2. Or, you can copy the dps-helper.jar either from the /toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar or from a more recent version of the DPS toolkit directory into the impl/java/lib folder of this application and reference it as follows. You will have to create the lib sub-directory inside impl/java of this application before copying the jar file there. It is done in the Makefile of this example. If you choose this option, then you must ensure that the @Libraries shown above is commented out and the following one is uncommented. +@Libraries("impl/java/lib/dps-helper.jar") //Next, add the following annotation if you are going to fuse this Java operator with other Java operators that will also use //the DPS APIs. In that case, it is necessary to add the following annotation so that the fused PE will use a shared class loader. diff --git a/samples/DPSUsageFromSPL/Makefile b/samples/DPSUsageFromSPL/Makefile index c6ca5ed..3dd9426 100644 --- a/samples/DPSUsageFromSPL/Makefile +++ b/samples/DPSUsageFromSPL/Makefile @@ -22,7 +22,10 @@ # # end_generated_IBM_copyright_prolog -DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps +# Since the DPS toolkit version you are using could be more +# recent than the one in the IBM Streams installation directory, +# you may want to ensure that the following DPS toolkit path is correct. +DPS_TOOLKIT_HOME ?= $(HOME)/streamsx.dps/com.ibm.streamsx.dps SPLC_FLAGS ?= -a -t $(DPS_TOOLKIT_HOME) SPLC = $(STREAMS_INSTALL)/bin/sc diff --git a/samples/DPSUsageFromSPL/etc/no-sql-kv-store-servers.cfg b/samples/DPSUsageFromSPL/etc/no-sql-kv-store-servers.cfg old mode 100755 new mode 100644 index c7df47f..de4e93f --- a/samples/DPSUsageFromSPL/etc/no-sql-kv-store-servers.cfg +++ b/samples/DPSUsageFromSPL/etc/no-sql-kv-store-servers.cfg @@ -2,17 +2,189 @@ # # This file is a simple configuration file for the Streams DPS toolkit. # Any line starting with # is a comment line. -# You must correctly configure the following in this file: +# You must correctly configure the following in this file. # -# 1) In the very first non-comment regular line of this file indicate the name of the key value store that will be used. +# 1) In the very first non-comment regular line of this file, please tell us +# about the name of the key value store product you will be using. # It can ONLY be one of these NoSQL K/V data store product names supported by the DPS toolkit: # -# i) redis -# ii) redis-cluster +# i) memcached +# ii) redis +# iii) cassandra +# iv) cloudant +# v) hbase +# vi) mongo +# vii) couchbase +# viii) redis-cluster +# ix) redis-cluster-plus-plus +# +# Note: A 'redis' configuration can be made to work with a non-cluster redis instance in +# TLS or non-TLS mode. +# +# A 'redis-cluster-plus-plus' configuration can be made to work with a redis cluster in +# TLS/SSL or non-TLS mode. +# +# A 'redis-cluster' configuration can be made to work with a redis cluster only in +# non-TLS mode. The other two redis configurations above makes this one redundant. +# # # 2) Below the line containing the K/V data store product name, please list -# your valid server names or IP addresses. -# (Please see the toolkit documentation for the expected format of the server names for your chosen NoSQL data store product.) +# your valid memcached or redis or cassandra or cloudant or +# hbase or mongo or couchbase or redis-cluster server names or IP addresses. +# (Please read below about the expected format of this for your chosen NoSQL data store product.) +# +# a) For memcached, you must list all the participating servers one per line (names or IP addresses). +# +# (e-g:) +# Machine1 +# Machine2 +# Machine3 +# +# b) For redis, (i.e. redis running in a non cluster mode) please specify one or more +# servers (name or IP address) one per line or if you are working on a single machine +# and if you prefer to use the Unix domain socket instead of TCP, you can simply +# specify unixsocket instead of a server name. For redis, if you decide to use the +# unixsocket, you must also ensure that your redis.conf file on the server side is +# configured properly for a unix domain socket pointing to /tmp/redis.sock file and +# the usual redis port set to 0. +# +# IMPORTANT TIP ABOUT RUNNING MULTIPLE REDIS SERVERS (in a non cluster redis configuration): +# (If you have a heavy workload of put/get requests, then using multiple Redis servers +# may give scaling to improve the overall throughput. If you are going to consider using +# multiple Redis servers that are not configured in a redis-cluster mode, the dps toolkit +# will automatically do the client side partitioning to shard (i.e. spread) your data across +# those servers. You may also decide to run multiple Redis server instances on a single +# machine to take advantage of the available CPU cores. +# If you run multiple Redis servers on a single machine, then you must configure each server +# instance with a unique port in a separate redis.conf.X file where X is your Redis server +# instance number. [For example, if you run 3 instances on the same machine, you can have +# redis.conf.1, redis.conf.2, and redis.conf.3] If you are planning to run multiple Redis server +# instances on the same machine, you may also want to assign unique PID file names in their +# respective configuration files. Having done this, you can start each of those +# redis server instances by running a command from the src directory of your redis installation +# directory: ./redis-server ../redis.conf.X (substitute X with your redis server instance number). +# When there are multiple Redis servers running on a single machine, then you must properly +# specify below each ServerName:Port on a separate line. For Redis, one can optionally provide a +# Redis authentication password after the port number if the Redis environment is configured to +# require authentication before using it. Along with that, one can optinally provide a +# redis server connection timeout value and the use_tls field to indicate whether to +# connect to the Redis server using TLS or not. Default Redis server connection timeout value is +# 3 seconds and user can override it with any non-zero value in seconds. +# For the use_tls field, a value of 1 means that TLS is needed and an absence of that field or +# a value of 0 for that field means that TLS is not needed. TLS makes sense only when a +# public cloud service based single redis server is configured i.e. IBM Compose Redis server or +# an AWS Elasticache Redis or Azure Cache for Redis or an on-prem Redis configured with a single server. +# It is also necessary to have Redis server 6 or above to enable/disable the TLS/SSL feature. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls +# (e-g:) +# Machine1:7001:MyRedisPassword:7:1 +# Machine1:7002:::0 +# Machine1:7003:MyRedisPassword:6 +# +# When there are multiple Redis servers configured, using the dpsXXXXTTL APIs will provide a +# good scaling factor for your high volume put/get requests in comparison to using the APIs that +# are based on the user created named stores. You are encouraged to choose between +# the TTL and non-TTL based APIs according to your functional and scaling needs. +# +# c) In Cassandra, all servers assume an equal role. There is no special primary or coordinator +# server. For Cassandra, you can list either all or just only one of the +# seed servers (names or IP addresses as it is specified in your cassandra.yaml file). +# +# (e-g:) +# Machine1 +# Machine2 +# Machine3 +# +# d) In Cloudant, you must have a personalized URL registered with the Cloudant public +# web offering or with a "Cloudant Local" on-premises private installation. +# Since you have to enter the user id and password below, it is better to create +# a user id specifically for working with the Streams dps toolkit. # +# For the server name, you must enter a single line in the following format: +# http://user:password@user.cloudant.com if you are using the Cloudant service on the web +# (OR) +# http://user:password@XXXXX where XXXXX is a name or IP address of your on-premises +# Cloudant Local load balancer machine. +# +# e) For HBase, you have to specify the HBase REST server address(es) in the format shown below. +# User id and password in the URL below should match the Linux user id and password on +# the machine where the HBase REST server program is running. If you have a multi-machine +# HBase cluster, then you can run the HBase REST server on multiple machines and configure +# one or more REST servers [one per line] below. Configuring multiple REST servers will +# let the DPS toolkit to spray (load balance) your heavy HBase workload to those multiple +# servers and that may be a factor in slightly improving the HBase read/write performance. +# REST server address format: http://user:password@HBase-REST-ServerNameOrIPAddress:port +# +# (e-g:) +# http://user:password@Machine1:8080 +# http://user:password@Machine3:8080 +# http://user:password@Machine3:8080 +# +# f) For Mongo, you can specify a single server or a replica set (for redundancy and +# high availability using automatic fail-over) or a sharded cluster's query router +# mongos seed servers (for HA, load balancing, high throughput and fail-over). +# Please provide it in the following way for one of those three modes of MongoDB configuration. +# +# (e-g for single server, replica set and sharded cluster in that order.) +# Machine1:27017 +# Machine1:27017,Machine1:27018,Machine1:27019/?replicaSet=YOUR_MONGO_REPLICA_SET_NAME +# Machine1:27069,Machine2:27069,Machine3:27069 +# [If you are using a sharded cluster, then you must manually enable sharding for the +# ibm_dps database and the collections created by the DPS in Mongo.] +# +# g) For Couchbase, you can specify one or more server names. Please specify one server name per line. +# You must have already created a Couchbase admin user id and password using the Couchbase +# web console. You must specify that admin user id and password as part of any one of the +# server names you will add below. +# +# (e-g:) +# user:password@Machine1 +# Machine2 +# Machine3 +# +# h) For redis-cluster, you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This HA feature in the DPS toolkit +# is supported only in Redis version 3 and above. For error free application +# start-up as well as for proper reconnection to the auto reconfigured redis cluster +# on abrupt node outages, it is recommended that you specify more than one or even +# better all your redis-cluster primary and replica nodes (server name or IP address +# and a port number). Please note that this way of using the redis-cluster is done +# via an older version of redis-cluster client wrapper built in year 2016. Hence, with +# this configuration, you will not be able to use TLS/SSL in Redis server v6 +# and higher versions. It is good only for using a Redis cluster that is not +# configured with TLS/SSL. If you prefer to work with a more recent version of +# a redis-cluster client wrapper that is well tested with Redis server v6 and +# higher enabled for TLS/SSL or for non-TLS, it is recommended to skip to the next +# section and follow the steps from there. +# +# RedisServerNameOrIPAddress:port:RedisPassword +# (e-g:) +# Machine1:7001:MyRedisPassword +# Machine2:7001:MyRedisPassword +# Machine3:7001:MyRedisPassword +# Machine4:7001:MyRedisPassword +# +# i) redis-cluster-plus-plus: The previous section works only for non-TLS redis-cluster configurations. +# This section explains how to use a TLS/SSL enabled redis-cluster that became available in +# Redis v6 or above. It uses a much newer C++ redis-cluster client wrapper called +# redis-plus-plus that allows us to work with a redis-cluster v6 or above enabled with TLS/SSL or +# non-TLS. For redis-cluster-plus-plus you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This particular HA feature with non-TLS or TLS/SSL +# in the DPS toolkit is supported only in Redis version 6 or above. For error free application start-up +# as well as for proper reconnection to the auto reconfigured redis cluster on abrupt node outages, +# it is recommended that you specify more than one or even better all your redis-cluster primary and +# replica nodes (server name or IP address and a port number). Please refer to the commentary above +# for the non-clustered Redis to understand the connection timeout and TLS usage. Both are supported in +# the clister-mode Redis as well when configuring your key value store product as redis-cluster-plus-plus. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls:RedisClusterCACertificateFile +# (e-g:) +# Machine1:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine2:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine3:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine4:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# +# =============================================================================== redis -127.0.0.1:6379 +# Specify below your NoSQL K/V store servers' names or IP addresses, port numbers, passwords and other fields as applicable. diff --git a/samples/DpsTTLCompositesSample/Makefile b/samples/DpsTTLCompositesSample/Makefile index 439c0df..38ae9cc 100644 --- a/samples/DpsTTLCompositesSample/Makefile +++ b/samples/DpsTTLCompositesSample/Makefile @@ -22,7 +22,10 @@ # # end_generated_IBM_copyright_prolog -DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps:../../com.ibm.streamsx.dps +# Since the DPS toolkit version you are using could be more +# recent than the one in the IBM Streams installation directory, +# you may want to ensure that the following DPS toolkit path is correct. +DPS_TOOLKIT_HOME ?= $(HOME)/streamsx.dps/com.ibm.streamsx.dps SPLC_FLAGS ?= -a -t $(DPS_TOOLKIT_HOME) SPLC = $(STREAMS_INSTALL)/bin/sc diff --git a/samples/DpsTTLCompositesSample/etc/no-sql-kv-store-servers.cfg b/samples/DpsTTLCompositesSample/etc/no-sql-kv-store-servers.cfg old mode 100755 new mode 100644 index dd5150f..de4e93f --- a/samples/DpsTTLCompositesSample/etc/no-sql-kv-store-servers.cfg +++ b/samples/DpsTTLCompositesSample/etc/no-sql-kv-store-servers.cfg @@ -1,2 +1,190 @@ +# =============================================================================== +# +# This file is a simple configuration file for the Streams DPS toolkit. +# Any line starting with # is a comment line. +# You must correctly configure the following in this file. +# +# 1) In the very first non-comment regular line of this file, please tell us +# about the name of the key value store product you will be using. +# It can ONLY be one of these NoSQL K/V data store product names supported by the DPS toolkit: +# +# i) memcached +# ii) redis +# iii) cassandra +# iv) cloudant +# v) hbase +# vi) mongo +# vii) couchbase +# viii) redis-cluster +# ix) redis-cluster-plus-plus +# +# Note: A 'redis' configuration can be made to work with a non-cluster redis instance in +# TLS or non-TLS mode. +# +# A 'redis-cluster-plus-plus' configuration can be made to work with a redis cluster in +# TLS/SSL or non-TLS mode. +# +# A 'redis-cluster' configuration can be made to work with a redis cluster only in +# non-TLS mode. The other two redis configurations above makes this one redundant. +# +# +# 2) Below the line containing the K/V data store product name, please list +# your valid memcached or redis or cassandra or cloudant or +# hbase or mongo or couchbase or redis-cluster server names or IP addresses. +# (Please read below about the expected format of this for your chosen NoSQL data store product.) +# +# a) For memcached, you must list all the participating servers one per line (names or IP addresses). +# +# (e-g:) +# Machine1 +# Machine2 +# Machine3 +# +# b) For redis, (i.e. redis running in a non cluster mode) please specify one or more +# servers (name or IP address) one per line or if you are working on a single machine +# and if you prefer to use the Unix domain socket instead of TCP, you can simply +# specify unixsocket instead of a server name. For redis, if you decide to use the +# unixsocket, you must also ensure that your redis.conf file on the server side is +# configured properly for a unix domain socket pointing to /tmp/redis.sock file and +# the usual redis port set to 0. +# +# IMPORTANT TIP ABOUT RUNNING MULTIPLE REDIS SERVERS (in a non cluster redis configuration): +# (If you have a heavy workload of put/get requests, then using multiple Redis servers +# may give scaling to improve the overall throughput. If you are going to consider using +# multiple Redis servers that are not configured in a redis-cluster mode, the dps toolkit +# will automatically do the client side partitioning to shard (i.e. spread) your data across +# those servers. You may also decide to run multiple Redis server instances on a single +# machine to take advantage of the available CPU cores. +# If you run multiple Redis servers on a single machine, then you must configure each server +# instance with a unique port in a separate redis.conf.X file where X is your Redis server +# instance number. [For example, if you run 3 instances on the same machine, you can have +# redis.conf.1, redis.conf.2, and redis.conf.3] If you are planning to run multiple Redis server +# instances on the same machine, you may also want to assign unique PID file names in their +# respective configuration files. Having done this, you can start each of those +# redis server instances by running a command from the src directory of your redis installation +# directory: ./redis-server ../redis.conf.X (substitute X with your redis server instance number). +# When there are multiple Redis servers running on a single machine, then you must properly +# specify below each ServerName:Port on a separate line. For Redis, one can optionally provide a +# Redis authentication password after the port number if the Redis environment is configured to +# require authentication before using it. Along with that, one can optinally provide a +# redis server connection timeout value and the use_tls field to indicate whether to +# connect to the Redis server using TLS or not. Default Redis server connection timeout value is +# 3 seconds and user can override it with any non-zero value in seconds. +# For the use_tls field, a value of 1 means that TLS is needed and an absence of that field or +# a value of 0 for that field means that TLS is not needed. TLS makes sense only when a +# public cloud service based single redis server is configured i.e. IBM Compose Redis server or +# an AWS Elasticache Redis or Azure Cache for Redis or an on-prem Redis configured with a single server. +# It is also necessary to have Redis server 6 or above to enable/disable the TLS/SSL feature. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls +# (e-g:) +# Machine1:7001:MyRedisPassword:7:1 +# Machine1:7002:::0 +# Machine1:7003:MyRedisPassword:6 +# +# When there are multiple Redis servers configured, using the dpsXXXXTTL APIs will provide a +# good scaling factor for your high volume put/get requests in comparison to using the APIs that +# are based on the user created named stores. You are encouraged to choose between +# the TTL and non-TTL based APIs according to your functional and scaling needs. +# +# c) In Cassandra, all servers assume an equal role. There is no special primary or coordinator +# server. For Cassandra, you can list either all or just only one of the +# seed servers (names or IP addresses as it is specified in your cassandra.yaml file). +# +# (e-g:) +# Machine1 +# Machine2 +# Machine3 +# +# d) In Cloudant, you must have a personalized URL registered with the Cloudant public +# web offering or with a "Cloudant Local" on-premises private installation. +# Since you have to enter the user id and password below, it is better to create +# a user id specifically for working with the Streams dps toolkit. +# +# For the server name, you must enter a single line in the following format: +# http://user:password@user.cloudant.com if you are using the Cloudant service on the web +# (OR) +# http://user:password@XXXXX where XXXXX is a name or IP address of your on-premises +# Cloudant Local load balancer machine. +# +# e) For HBase, you have to specify the HBase REST server address(es) in the format shown below. +# User id and password in the URL below should match the Linux user id and password on +# the machine where the HBase REST server program is running. If you have a multi-machine +# HBase cluster, then you can run the HBase REST server on multiple machines and configure +# one or more REST servers [one per line] below. Configuring multiple REST servers will +# let the DPS toolkit to spray (load balance) your heavy HBase workload to those multiple +# servers and that may be a factor in slightly improving the HBase read/write performance. +# REST server address format: http://user:password@HBase-REST-ServerNameOrIPAddress:port +# +# (e-g:) +# http://user:password@Machine1:8080 +# http://user:password@Machine3:8080 +# http://user:password@Machine3:8080 +# +# f) For Mongo, you can specify a single server or a replica set (for redundancy and +# high availability using automatic fail-over) or a sharded cluster's query router +# mongos seed servers (for HA, load balancing, high throughput and fail-over). +# Please provide it in the following way for one of those three modes of MongoDB configuration. +# +# (e-g for single server, replica set and sharded cluster in that order.) +# Machine1:27017 +# Machine1:27017,Machine1:27018,Machine1:27019/?replicaSet=YOUR_MONGO_REPLICA_SET_NAME +# Machine1:27069,Machine2:27069,Machine3:27069 +# [If you are using a sharded cluster, then you must manually enable sharding for the +# ibm_dps database and the collections created by the DPS in Mongo.] +# +# g) For Couchbase, you can specify one or more server names. Please specify one server name per line. +# You must have already created a Couchbase admin user id and password using the Couchbase +# web console. You must specify that admin user id and password as part of any one of the +# server names you will add below. +# +# (e-g:) +# user:password@Machine1 +# Machine2 +# Machine3 +# +# h) For redis-cluster, you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This HA feature in the DPS toolkit +# is supported only in Redis version 3 and above. For error free application +# start-up as well as for proper reconnection to the auto reconfigured redis cluster +# on abrupt node outages, it is recommended that you specify more than one or even +# better all your redis-cluster primary and replica nodes (server name or IP address +# and a port number). Please note that this way of using the redis-cluster is done +# via an older version of redis-cluster client wrapper built in year 2016. Hence, with +# this configuration, you will not be able to use TLS/SSL in Redis server v6 +# and higher versions. It is good only for using a Redis cluster that is not +# configured with TLS/SSL. If you prefer to work with a more recent version of +# a redis-cluster client wrapper that is well tested with Redis server v6 and +# higher enabled for TLS/SSL or for non-TLS, it is recommended to skip to the next +# section and follow the steps from there. +# +# RedisServerNameOrIPAddress:port:RedisPassword +# (e-g:) +# Machine1:7001:MyRedisPassword +# Machine2:7001:MyRedisPassword +# Machine3:7001:MyRedisPassword +# Machine4:7001:MyRedisPassword +# +# i) redis-cluster-plus-plus: The previous section works only for non-TLS redis-cluster configurations. +# This section explains how to use a TLS/SSL enabled redis-cluster that became available in +# Redis v6 or above. It uses a much newer C++ redis-cluster client wrapper called +# redis-plus-plus that allows us to work with a redis-cluster v6 or above enabled with TLS/SSL or +# non-TLS. For redis-cluster-plus-plus you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This particular HA feature with non-TLS or TLS/SSL +# in the DPS toolkit is supported only in Redis version 6 or above. For error free application start-up +# as well as for proper reconnection to the auto reconfigured redis cluster on abrupt node outages, +# it is recommended that you specify more than one or even better all your redis-cluster primary and +# replica nodes (server name or IP address and a port number). Please refer to the commentary above +# for the non-clustered Redis to understand the connection timeout and TLS usage. Both are supported in +# the clister-mode Redis as well when configuring your key value store product as redis-cluster-plus-plus. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls:RedisClusterCACertificateFile +# (e-g:) +# Machine1:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine2:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine3:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine4:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# +# =============================================================================== redis -localhost:6379 \ No newline at end of file +# Specify below your NoSQL K/V store servers' names or IP addresses, port numbers, passwords and other fields as applicable. diff --git a/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/Makefile b/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/Makefile index 3cf141d..fa7914d 100644 --- a/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/Makefile +++ b/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/Makefile @@ -22,7 +22,10 @@ # # end_generated_IBM_copyright_prolog -DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps +# Since the DPS toolkit version you are using could be more +# recent than the one in the IBM Streams installation directory, +# you may want to ensure that the following DPS toolkit path is correct. +DPS_TOOLKIT_HOME ?= $(HOME)/streamsx.dps/com.ibm.streamsx.dps # If the user wants to use a different version of # the DPS toolkit than the one shipped in the @@ -30,7 +33,14 @@ DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps # always set the STREAMS_SPLPATH environment variable # and point to a specific version of the DPS toolkit. ifndef STREAMS_SPLPATH - SPLC_FLAGS ?= -a -z -t $(DPS_TOOLKIT_HOME) + #SPLC_FLAGS ?= -a -z -t $(DPS_TOOLKIT_HOME) + SPLC_FLAGS ?= -a -z + # This example includes a C++ operator that uses DPS APIs as well. + # In order to build that C++ operator with the correct .so files + # present in the DPS toolkit's impl directory, it is necessary to + # export the following. This will get used inside the C++ operator's + # impl/bin/archLevel file. + export STREAMS_SPLPATH=${DPS_TOOLKIT_HOME} else SPLC_FLAGS ?= -a -z endif diff --git a/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/com.acme.test/Main.spl b/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/com.acme.test/Main.spl index db89495..0e08e91 100644 --- a/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/com.acme.test/Main.spl +++ b/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/com.acme.test/Main.spl @@ -48,6 +48,10 @@ composite Main { // Hence, each operator will be running as individual PEs (Processing Elements) so that // we can verify whether the dps functions will work correctly across different PEs. graph + //This operator is required in order for the C++ operators to function properly. + () as DPSAux1 = DPSAux() { + } + // Let us kick-start our ride into the world of the distributed process store (dps). stream StartSignal = Beacon() { param diff --git a/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/etc/no-sql-kv-store-servers.cfg b/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/etc/no-sql-kv-store-servers.cfg index f5498b6..de4e93f 100644 --- a/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/etc/no-sql-kv-store-servers.cfg +++ b/samples/advanced/01_using_no_sql_db_in_spl_custom_and_cpp_primitive_operators/etc/no-sql-kv-store-servers.cfg @@ -15,16 +15,26 @@ # v) hbase # vi) mongo # vii) couchbase -# viii) aerospike -# ix) redis-cluster +# viii) redis-cluster +# ix) redis-cluster-plus-plus +# +# Note: A 'redis' configuration can be made to work with a non-cluster redis instance in +# TLS or non-TLS mode. +# +# A 'redis-cluster-plus-plus' configuration can be made to work with a redis cluster in +# TLS/SSL or non-TLS mode. +# +# A 'redis-cluster' configuration can be made to work with a redis cluster only in +# non-TLS mode. The other two redis configurations above makes this one redundant. # # # 2) Below the line containing the K/V data store product name, please list # your valid memcached or redis or cassandra or cloudant or -# hbase or mongo or couchbase or aerospike or redis-cluster server names or IP addresses. +# hbase or mongo or couchbase or redis-cluster server names or IP addresses. # (Please read below about the expected format of this for your chosen NoSQL data store product.) # # a) For memcached, you must list all the participating servers one per line (names or IP addresses). +# # (e-g:) # Machine1 # Machine2 @@ -41,7 +51,7 @@ # IMPORTANT TIP ABOUT RUNNING MULTIPLE REDIS SERVERS (in a non cluster redis configuration): # (If you have a heavy workload of put/get requests, then using multiple Redis servers # may give scaling to improve the overall throughput. If you are going to consider using -# multiple Redis servers that are not configured in a redis cluster mode, the dps toolkit +# multiple Redis servers that are not configured in a redis-cluster mode, the dps toolkit # will automatically do the client side partitioning to shard (i.e. spread) your data across # those servers. You may also decide to run multiple Redis server instances on a single # machine to take advantage of the available CPU cores. @@ -56,20 +66,31 @@ # When there are multiple Redis servers running on a single machine, then you must properly # specify below each ServerName:Port on a separate line. For Redis, one can optionally provide a # Redis authentication password after the port number if the Redis environment is configured to -# require authentication before using it. +# require authentication before using it. Along with that, one can optinally provide a +# redis server connection timeout value and the use_tls field to indicate whether to +# connect to the Redis server using TLS or not. Default Redis server connection timeout value is +# 3 seconds and user can override it with any non-zero value in seconds. +# For the use_tls field, a value of 1 means that TLS is needed and an absence of that field or +# a value of 0 for that field means that TLS is not needed. TLS makes sense only when a +# public cloud service based single redis server is configured i.e. IBM Compose Redis server or +# an AWS Elasticache Redis or Azure Cache for Redis or an on-prem Redis configured with a single server. +# It is also necessary to have Redis server 6 or above to enable/disable the TLS/SSL feature. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls # (e-g:) -# Machine1:7001:MyRedisPassword -# Machine1:7002 -# Machine1:7003:MyRedisPassword +# Machine1:7001:MyRedisPassword:7:1 +# Machine1:7002:::0 +# Machine1:7003:MyRedisPassword:6 # # When there are multiple Redis servers configured, using the dpsXXXXTTL APIs will provide a # good scaling factor for your high volume put/get requests in comparison to using the APIs that # are based on the user created named stores. You are encouraged to choose between # the TTL and non-TTL based APIs according to your functional and scaling needs. # -# c) In Cassandra, all servers assume an equal role. There is no special master or coordinator +# c) In Cassandra, all servers assume an equal role. There is no special primary or coordinator # server. For Cassandra, you can list either all or just only one of the # seed servers (names or IP addresses as it is specified in your cassandra.yaml file). +# # (e-g:) # Machine1 # Machine2 @@ -79,13 +100,14 @@ # web offering or with a "Cloudant Local" on-premises private installation. # Since you have to enter the user id and password below, it is better to create # a user id specifically for working with the Streams dps toolkit. +# # For the server name, you must enter a single line in the following format: # http://user:password@user.cloudant.com if you are using the Cloudant service on the web # (OR) # http://user:password@XXXXX where XXXXX is a name or IP address of your on-premises # Cloudant Local load balancer machine. # -# e)For HBase, you have to specify the HBase REST server address(es) in the format shown below. +# e) For HBase, you have to specify the HBase REST server address(es) in the format shown below. # User id and password in the URL below should match the Linux user id and password on # the machine where the HBase REST server program is running. If you have a multi-machine # HBase cluster, then you can run the HBase REST server on multiple machines and configure @@ -93,6 +115,7 @@ # let the DPS toolkit to spray (load balance) your heavy HBase workload to those multiple # servers and that may be a factor in slightly improving the HBase read/write performance. # REST server address format: http://user:password@HBase-REST-ServerNameOrIPAddress:port +# # (e-g:) # http://user:password@Machine1:8080 # http://user:password@Machine3:8080 @@ -102,40 +125,66 @@ # high availability using automatic fail-over) or a sharded cluster's query router # mongos seed servers (for HA, load balancing, high throughput and fail-over). # Please provide it in the following way for one of those three modes of MongoDB configuration. +# # (e-g for single server, replica set and sharded cluster in that order.) # Machine1:27017 # Machine1:27017,Machine1:27018,Machine1:27019/?replicaSet=YOUR_MONGO_REPLICA_SET_NAME # Machine1:27069,Machine2:27069,Machine3:27069 -# [If you are using a sharded cluster, then you must manually enable sharding for the ibm_dps database and -# the collections created by the DPS in Mongo.] +# [If you are using a sharded cluster, then you must manually enable sharding for the +# ibm_dps database and the collections created by the DPS in Mongo.] # # g) For Couchbase, you can specify one or more server names. Please specify one server name per line. -# You must have already created a Couchbase admin user id and password using the Couchbase web console. -# You must specify that admin user id and password as part of any one of the server names you will add below. +# You must have already created a Couchbase admin user id and password using the Couchbase +# web console. You must specify that admin user id and password as part of any one of the +# server names you will add below. +# # (e-g:) # user:password@Machine1 # Machine2 # Machine3 # -# h) For Aerospike, you can specify one or more server names. Please specify one server name per line. -# You can optionally specify the Aerospike port number along with the server name. +# h) For redis-cluster, you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This HA feature in the DPS toolkit +# is supported only in Redis version 3 and above. For error free application +# start-up as well as for proper reconnection to the auto reconfigured redis cluster +# on abrupt node outages, it is recommended that you specify more than one or even +# better all your redis-cluster primary and replica nodes (server name or IP address +# and a port number). Please note that this way of using the redis-cluster is done +# via an older version of redis-cluster client wrapper built in year 2016. Hence, with +# this configuration, you will not be able to use TLS/SSL in Redis server v6 +# and higher versions. It is good only for using a Redis cluster that is not +# configured with TLS/SSL. If you prefer to work with a more recent version of +# a redis-cluster client wrapper that is well tested with Redis server v6 and +# higher enabled for TLS/SSL or for non-TLS, it is recommended to skip to the next +# section and follow the steps from there. +# +# RedisServerNameOrIPAddress:port:RedisPassword # (e-g:) -# Machine1:3000 -# Machine2 -# Machine3:3000 -# -# i) For redis-cluster, you must install and configure Redis instances enabled with -# the clustering option in the redis.conf file. This HA feature is available only -# in Redis version 3 and above. For error free application start-up as well as for -# proper reconnection to the auto reconfigured redis cluster on abrupt node outages, -# it is recommended that you specify more than one or even better all your redis-cluster -# master and slave nodes (server name or IP address and a port number). +# Machine1:7001:MyRedisPassword +# Machine2:7001:MyRedisPassword +# Machine3:7001:MyRedisPassword +# Machine4:7001:MyRedisPassword +# +# i) redis-cluster-plus-plus: The previous section works only for non-TLS redis-cluster configurations. +# This section explains how to use a TLS/SSL enabled redis-cluster that became available in +# Redis v6 or above. It uses a much newer C++ redis-cluster client wrapper called +# redis-plus-plus that allows us to work with a redis-cluster v6 or above enabled with TLS/SSL or +# non-TLS. For redis-cluster-plus-plus you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This particular HA feature with non-TLS or TLS/SSL +# in the DPS toolkit is supported only in Redis version 6 or above. For error free application start-up +# as well as for proper reconnection to the auto reconfigured redis cluster on abrupt node outages, +# it is recommended that you specify more than one or even better all your redis-cluster primary and +# replica nodes (server name or IP address and a port number). Please refer to the commentary above +# for the non-clustered Redis to understand the connection timeout and TLS usage. Both are supported in +# the clister-mode Redis as well when configuring your key value store product as redis-cluster-plus-plus. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls:RedisClusterCACertificateFile # (e-g:) -# Machine1:7001 -# Machine2:7002 -# Machine3:7003 -# Machine4:7004 +# Machine1:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine2:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine3:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine4:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt # # =============================================================================== redis -# As documented above, specify below your NoSQL K/V store servers' names or IP addresses with port numbers and passwords wherever applicable. +# Specify below your NoSQL K/V store servers' names or IP addresses, port numbers, passwords and other fields as applicable. diff --git a/samples/advanced/02_using_no_sql_db_in_spl_custom_operators_and_a_cpp_native_function/Makefile b/samples/advanced/02_using_no_sql_db_in_spl_custom_operators_and_a_cpp_native_function/Makefile index 3cf141d..7e8b5f9 100644 --- a/samples/advanced/02_using_no_sql_db_in_spl_custom_operators_and_a_cpp_native_function/Makefile +++ b/samples/advanced/02_using_no_sql_db_in_spl_custom_operators_and_a_cpp_native_function/Makefile @@ -22,7 +22,10 @@ # # end_generated_IBM_copyright_prolog -DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps +# Since the DPS toolkit version you are using could be more +# recent than the one in the IBM Streams installation directory, +# you may want to ensure that the following DPS toolkit path is correct. +DPS_TOOLKIT_HOME ?= $(HOME)/streamsx.dps/com.ibm.streamsx.dps # If the user wants to use a different version of # the DPS toolkit than the one shipped in the @@ -30,9 +33,16 @@ DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps # always set the STREAMS_SPLPATH environment variable # and point to a specific version of the DPS toolkit. ifndef STREAMS_SPLPATH - SPLC_FLAGS ?= -a -z -t $(DPS_TOOLKIT_HOME) + #SPLC_FLAGS ?= -a -z -t $(DPS_TOOLKIT_HOME) + SPLC_FLAGS ?= -a -z + # This example includes C++ native funtions that use DPS APIs as well. + # In order to build the C++ native functions with the correct .so files + # present in the DPS toolkit's impl directory, it is necessary to + # export the following. This will get used inside the C++ native functions' + # impl/bin/archLevel file. + export STREAMS_SPLPATH=${DPS_TOOLKIT_HOME} else - SPLC_FLAGS ?= -a -z + SPLC_FLAGS ?= -a -z endif SPLC = $(STREAMS_INSTALL)/bin/sc diff --git a/samples/advanced/02_using_no_sql_db_in_spl_custom_operators_and_a_cpp_native_function/etc/no-sql-kv-store-servers.cfg b/samples/advanced/02_using_no_sql_db_in_spl_custom_operators_and_a_cpp_native_function/etc/no-sql-kv-store-servers.cfg index f5498b6..de4e93f 100644 --- a/samples/advanced/02_using_no_sql_db_in_spl_custom_operators_and_a_cpp_native_function/etc/no-sql-kv-store-servers.cfg +++ b/samples/advanced/02_using_no_sql_db_in_spl_custom_operators_and_a_cpp_native_function/etc/no-sql-kv-store-servers.cfg @@ -15,16 +15,26 @@ # v) hbase # vi) mongo # vii) couchbase -# viii) aerospike -# ix) redis-cluster +# viii) redis-cluster +# ix) redis-cluster-plus-plus +# +# Note: A 'redis' configuration can be made to work with a non-cluster redis instance in +# TLS or non-TLS mode. +# +# A 'redis-cluster-plus-plus' configuration can be made to work with a redis cluster in +# TLS/SSL or non-TLS mode. +# +# A 'redis-cluster' configuration can be made to work with a redis cluster only in +# non-TLS mode. The other two redis configurations above makes this one redundant. # # # 2) Below the line containing the K/V data store product name, please list # your valid memcached or redis or cassandra or cloudant or -# hbase or mongo or couchbase or aerospike or redis-cluster server names or IP addresses. +# hbase or mongo or couchbase or redis-cluster server names or IP addresses. # (Please read below about the expected format of this for your chosen NoSQL data store product.) # # a) For memcached, you must list all the participating servers one per line (names or IP addresses). +# # (e-g:) # Machine1 # Machine2 @@ -41,7 +51,7 @@ # IMPORTANT TIP ABOUT RUNNING MULTIPLE REDIS SERVERS (in a non cluster redis configuration): # (If you have a heavy workload of put/get requests, then using multiple Redis servers # may give scaling to improve the overall throughput. If you are going to consider using -# multiple Redis servers that are not configured in a redis cluster mode, the dps toolkit +# multiple Redis servers that are not configured in a redis-cluster mode, the dps toolkit # will automatically do the client side partitioning to shard (i.e. spread) your data across # those servers. You may also decide to run multiple Redis server instances on a single # machine to take advantage of the available CPU cores. @@ -56,20 +66,31 @@ # When there are multiple Redis servers running on a single machine, then you must properly # specify below each ServerName:Port on a separate line. For Redis, one can optionally provide a # Redis authentication password after the port number if the Redis environment is configured to -# require authentication before using it. +# require authentication before using it. Along with that, one can optinally provide a +# redis server connection timeout value and the use_tls field to indicate whether to +# connect to the Redis server using TLS or not. Default Redis server connection timeout value is +# 3 seconds and user can override it with any non-zero value in seconds. +# For the use_tls field, a value of 1 means that TLS is needed and an absence of that field or +# a value of 0 for that field means that TLS is not needed. TLS makes sense only when a +# public cloud service based single redis server is configured i.e. IBM Compose Redis server or +# an AWS Elasticache Redis or Azure Cache for Redis or an on-prem Redis configured with a single server. +# It is also necessary to have Redis server 6 or above to enable/disable the TLS/SSL feature. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls # (e-g:) -# Machine1:7001:MyRedisPassword -# Machine1:7002 -# Machine1:7003:MyRedisPassword +# Machine1:7001:MyRedisPassword:7:1 +# Machine1:7002:::0 +# Machine1:7003:MyRedisPassword:6 # # When there are multiple Redis servers configured, using the dpsXXXXTTL APIs will provide a # good scaling factor for your high volume put/get requests in comparison to using the APIs that # are based on the user created named stores. You are encouraged to choose between # the TTL and non-TTL based APIs according to your functional and scaling needs. # -# c) In Cassandra, all servers assume an equal role. There is no special master or coordinator +# c) In Cassandra, all servers assume an equal role. There is no special primary or coordinator # server. For Cassandra, you can list either all or just only one of the # seed servers (names or IP addresses as it is specified in your cassandra.yaml file). +# # (e-g:) # Machine1 # Machine2 @@ -79,13 +100,14 @@ # web offering or with a "Cloudant Local" on-premises private installation. # Since you have to enter the user id and password below, it is better to create # a user id specifically for working with the Streams dps toolkit. +# # For the server name, you must enter a single line in the following format: # http://user:password@user.cloudant.com if you are using the Cloudant service on the web # (OR) # http://user:password@XXXXX where XXXXX is a name or IP address of your on-premises # Cloudant Local load balancer machine. # -# e)For HBase, you have to specify the HBase REST server address(es) in the format shown below. +# e) For HBase, you have to specify the HBase REST server address(es) in the format shown below. # User id and password in the URL below should match the Linux user id and password on # the machine where the HBase REST server program is running. If you have a multi-machine # HBase cluster, then you can run the HBase REST server on multiple machines and configure @@ -93,6 +115,7 @@ # let the DPS toolkit to spray (load balance) your heavy HBase workload to those multiple # servers and that may be a factor in slightly improving the HBase read/write performance. # REST server address format: http://user:password@HBase-REST-ServerNameOrIPAddress:port +# # (e-g:) # http://user:password@Machine1:8080 # http://user:password@Machine3:8080 @@ -102,40 +125,66 @@ # high availability using automatic fail-over) or a sharded cluster's query router # mongos seed servers (for HA, load balancing, high throughput and fail-over). # Please provide it in the following way for one of those three modes of MongoDB configuration. +# # (e-g for single server, replica set and sharded cluster in that order.) # Machine1:27017 # Machine1:27017,Machine1:27018,Machine1:27019/?replicaSet=YOUR_MONGO_REPLICA_SET_NAME # Machine1:27069,Machine2:27069,Machine3:27069 -# [If you are using a sharded cluster, then you must manually enable sharding for the ibm_dps database and -# the collections created by the DPS in Mongo.] +# [If you are using a sharded cluster, then you must manually enable sharding for the +# ibm_dps database and the collections created by the DPS in Mongo.] # # g) For Couchbase, you can specify one or more server names. Please specify one server name per line. -# You must have already created a Couchbase admin user id and password using the Couchbase web console. -# You must specify that admin user id and password as part of any one of the server names you will add below. +# You must have already created a Couchbase admin user id and password using the Couchbase +# web console. You must specify that admin user id and password as part of any one of the +# server names you will add below. +# # (e-g:) # user:password@Machine1 # Machine2 # Machine3 # -# h) For Aerospike, you can specify one or more server names. Please specify one server name per line. -# You can optionally specify the Aerospike port number along with the server name. +# h) For redis-cluster, you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This HA feature in the DPS toolkit +# is supported only in Redis version 3 and above. For error free application +# start-up as well as for proper reconnection to the auto reconfigured redis cluster +# on abrupt node outages, it is recommended that you specify more than one or even +# better all your redis-cluster primary and replica nodes (server name or IP address +# and a port number). Please note that this way of using the redis-cluster is done +# via an older version of redis-cluster client wrapper built in year 2016. Hence, with +# this configuration, you will not be able to use TLS/SSL in Redis server v6 +# and higher versions. It is good only for using a Redis cluster that is not +# configured with TLS/SSL. If you prefer to work with a more recent version of +# a redis-cluster client wrapper that is well tested with Redis server v6 and +# higher enabled for TLS/SSL or for non-TLS, it is recommended to skip to the next +# section and follow the steps from there. +# +# RedisServerNameOrIPAddress:port:RedisPassword # (e-g:) -# Machine1:3000 -# Machine2 -# Machine3:3000 -# -# i) For redis-cluster, you must install and configure Redis instances enabled with -# the clustering option in the redis.conf file. This HA feature is available only -# in Redis version 3 and above. For error free application start-up as well as for -# proper reconnection to the auto reconfigured redis cluster on abrupt node outages, -# it is recommended that you specify more than one or even better all your redis-cluster -# master and slave nodes (server name or IP address and a port number). +# Machine1:7001:MyRedisPassword +# Machine2:7001:MyRedisPassword +# Machine3:7001:MyRedisPassword +# Machine4:7001:MyRedisPassword +# +# i) redis-cluster-plus-plus: The previous section works only for non-TLS redis-cluster configurations. +# This section explains how to use a TLS/SSL enabled redis-cluster that became available in +# Redis v6 or above. It uses a much newer C++ redis-cluster client wrapper called +# redis-plus-plus that allows us to work with a redis-cluster v6 or above enabled with TLS/SSL or +# non-TLS. For redis-cluster-plus-plus you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This particular HA feature with non-TLS or TLS/SSL +# in the DPS toolkit is supported only in Redis version 6 or above. For error free application start-up +# as well as for proper reconnection to the auto reconfigured redis cluster on abrupt node outages, +# it is recommended that you specify more than one or even better all your redis-cluster primary and +# replica nodes (server name or IP address and a port number). Please refer to the commentary above +# for the non-clustered Redis to understand the connection timeout and TLS usage. Both are supported in +# the clister-mode Redis as well when configuring your key value store product as redis-cluster-plus-plus. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls:RedisClusterCACertificateFile # (e-g:) -# Machine1:7001 -# Machine2:7002 -# Machine3:7003 -# Machine4:7004 +# Machine1:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine2:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine3:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine4:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt # # =============================================================================== redis -# As documented above, specify below your NoSQL K/V store servers' names or IP addresses with port numbers and passwords wherever applicable. +# Specify below your NoSQL K/V store servers' names or IP addresses, port numbers, passwords and other fields as applicable. diff --git a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/Makefile b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/Makefile index 3bd487f..e5524f0 100644 --- a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/Makefile +++ b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/Makefile @@ -22,7 +22,15 @@ # # end_generated_IBM_copyright_prolog -DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps +# Since the DPS toolkit version you are using could be more +# recent than the one in the IBM Streams installation directory, +# you may want to ensure that the following DPS toolkit path is correct. +DPS_TOOLKIT_HOME ?= $(HOME)/streamsx.dps/com.ibm.streamsx.dps + +# The dps-helper is copied from the DPS toolkit directory to the +# impl/java/lib directory of this application to ensure it is +# included in the SAB file. +DPS_HELPER_JAR = $(DPS_TOOLKIT_HOME)/impl/java/lib/dps-helper.jar # If the user wants to use a different version of # the DPS toolkit than the one shipped in the @@ -32,20 +40,27 @@ DPS_TOOLKIT_HOME ?= $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps # # IMPORTANT # --------- -# If the user wants to point to a different DPS toolkit, +# If the user wants to point to a different DPS toolkit directory +# than the one shipped in the IBM Streams installation directory, # then it is necessary to make changes in the following -# three files present in this project directory as well. +# three files present in this project directory as well +# before running this Makefile. # 1) build.xml in the same directory as this Makefile. -# --> In that file, search for dps-helper.jar and change its path to +# --> In that file, search for dps-helper.jar and change its full path to # point to the new DPS toolkit directory being used. # # 2) impl/java/src/com/acme/test/TickerIdGenerator.java -# --> Search for @Libraries and change the path to point to the -# new DPS toolkit directory where the dps-helper.jar is located. +# --> Search for @Libraries, read the commentary there to copy +# the dps-helper.jar file locally within this application and +# activate the correct @Libraries annotation as explained there. # # 3) impl/java/src/com/ibm/acme/test/DataStoreTest.java -# --> Search for @Libraries and change the path to point to the -# new DPS toolkit directory where the dps-helper.jar is located. +# --> Search for @Libraries, read the commentary there to copy +# the dps-helper.jar file locally within this application and +# activate the correct @Libraries annotation as explained there. +# +# This example is already set up correctly with the 3 steps mentioned above. +# ifndef STREAMS_SPLPATH SPLC_FLAGS ?= -a -z -t $(DPS_TOOLKIT_HOME) else @@ -63,6 +78,8 @@ distributed: java $(SPLC) $(SPLC_FLAGS) -M $(SPL_MAIN_COMPOSITE) $(SPL_CMD_ARGS) --output-directory=./output/com.acme.test.Main/Distributed java: $(JAVA_CLASS_FILES) + mkdir -p impl/java/lib + cp $(DPS_HELPER_JAR) impl/java/lib JAVA_HOME=$(STREAMS_INSTALL)/java ant clean: diff --git a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/build.xml b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/build.xml index 7e86ac7..95ae787 100644 --- a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/build.xml +++ b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/build.xml @@ -45,7 +45,11 @@ - + + + + + diff --git a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/etc/no-sql-kv-store-servers.cfg b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/etc/no-sql-kv-store-servers.cfg index f5498b6..de4e93f 100644 --- a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/etc/no-sql-kv-store-servers.cfg +++ b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/etc/no-sql-kv-store-servers.cfg @@ -15,16 +15,26 @@ # v) hbase # vi) mongo # vii) couchbase -# viii) aerospike -# ix) redis-cluster +# viii) redis-cluster +# ix) redis-cluster-plus-plus +# +# Note: A 'redis' configuration can be made to work with a non-cluster redis instance in +# TLS or non-TLS mode. +# +# A 'redis-cluster-plus-plus' configuration can be made to work with a redis cluster in +# TLS/SSL or non-TLS mode. +# +# A 'redis-cluster' configuration can be made to work with a redis cluster only in +# non-TLS mode. The other two redis configurations above makes this one redundant. # # # 2) Below the line containing the K/V data store product name, please list # your valid memcached or redis or cassandra or cloudant or -# hbase or mongo or couchbase or aerospike or redis-cluster server names or IP addresses. +# hbase or mongo or couchbase or redis-cluster server names or IP addresses. # (Please read below about the expected format of this for your chosen NoSQL data store product.) # # a) For memcached, you must list all the participating servers one per line (names or IP addresses). +# # (e-g:) # Machine1 # Machine2 @@ -41,7 +51,7 @@ # IMPORTANT TIP ABOUT RUNNING MULTIPLE REDIS SERVERS (in a non cluster redis configuration): # (If you have a heavy workload of put/get requests, then using multiple Redis servers # may give scaling to improve the overall throughput. If you are going to consider using -# multiple Redis servers that are not configured in a redis cluster mode, the dps toolkit +# multiple Redis servers that are not configured in a redis-cluster mode, the dps toolkit # will automatically do the client side partitioning to shard (i.e. spread) your data across # those servers. You may also decide to run multiple Redis server instances on a single # machine to take advantage of the available CPU cores. @@ -56,20 +66,31 @@ # When there are multiple Redis servers running on a single machine, then you must properly # specify below each ServerName:Port on a separate line. For Redis, one can optionally provide a # Redis authentication password after the port number if the Redis environment is configured to -# require authentication before using it. +# require authentication before using it. Along with that, one can optinally provide a +# redis server connection timeout value and the use_tls field to indicate whether to +# connect to the Redis server using TLS or not. Default Redis server connection timeout value is +# 3 seconds and user can override it with any non-zero value in seconds. +# For the use_tls field, a value of 1 means that TLS is needed and an absence of that field or +# a value of 0 for that field means that TLS is not needed. TLS makes sense only when a +# public cloud service based single redis server is configured i.e. IBM Compose Redis server or +# an AWS Elasticache Redis or Azure Cache for Redis or an on-prem Redis configured with a single server. +# It is also necessary to have Redis server 6 or above to enable/disable the TLS/SSL feature. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls # (e-g:) -# Machine1:7001:MyRedisPassword -# Machine1:7002 -# Machine1:7003:MyRedisPassword +# Machine1:7001:MyRedisPassword:7:1 +# Machine1:7002:::0 +# Machine1:7003:MyRedisPassword:6 # # When there are multiple Redis servers configured, using the dpsXXXXTTL APIs will provide a # good scaling factor for your high volume put/get requests in comparison to using the APIs that # are based on the user created named stores. You are encouraged to choose between # the TTL and non-TTL based APIs according to your functional and scaling needs. # -# c) In Cassandra, all servers assume an equal role. There is no special master or coordinator +# c) In Cassandra, all servers assume an equal role. There is no special primary or coordinator # server. For Cassandra, you can list either all or just only one of the # seed servers (names or IP addresses as it is specified in your cassandra.yaml file). +# # (e-g:) # Machine1 # Machine2 @@ -79,13 +100,14 @@ # web offering or with a "Cloudant Local" on-premises private installation. # Since you have to enter the user id and password below, it is better to create # a user id specifically for working with the Streams dps toolkit. +# # For the server name, you must enter a single line in the following format: # http://user:password@user.cloudant.com if you are using the Cloudant service on the web # (OR) # http://user:password@XXXXX where XXXXX is a name or IP address of your on-premises # Cloudant Local load balancer machine. # -# e)For HBase, you have to specify the HBase REST server address(es) in the format shown below. +# e) For HBase, you have to specify the HBase REST server address(es) in the format shown below. # User id and password in the URL below should match the Linux user id and password on # the machine where the HBase REST server program is running. If you have a multi-machine # HBase cluster, then you can run the HBase REST server on multiple machines and configure @@ -93,6 +115,7 @@ # let the DPS toolkit to spray (load balance) your heavy HBase workload to those multiple # servers and that may be a factor in slightly improving the HBase read/write performance. # REST server address format: http://user:password@HBase-REST-ServerNameOrIPAddress:port +# # (e-g:) # http://user:password@Machine1:8080 # http://user:password@Machine3:8080 @@ -102,40 +125,66 @@ # high availability using automatic fail-over) or a sharded cluster's query router # mongos seed servers (for HA, load balancing, high throughput and fail-over). # Please provide it in the following way for one of those three modes of MongoDB configuration. +# # (e-g for single server, replica set and sharded cluster in that order.) # Machine1:27017 # Machine1:27017,Machine1:27018,Machine1:27019/?replicaSet=YOUR_MONGO_REPLICA_SET_NAME # Machine1:27069,Machine2:27069,Machine3:27069 -# [If you are using a sharded cluster, then you must manually enable sharding for the ibm_dps database and -# the collections created by the DPS in Mongo.] +# [If you are using a sharded cluster, then you must manually enable sharding for the +# ibm_dps database and the collections created by the DPS in Mongo.] # # g) For Couchbase, you can specify one or more server names. Please specify one server name per line. -# You must have already created a Couchbase admin user id and password using the Couchbase web console. -# You must specify that admin user id and password as part of any one of the server names you will add below. +# You must have already created a Couchbase admin user id and password using the Couchbase +# web console. You must specify that admin user id and password as part of any one of the +# server names you will add below. +# # (e-g:) # user:password@Machine1 # Machine2 # Machine3 # -# h) For Aerospike, you can specify one or more server names. Please specify one server name per line. -# You can optionally specify the Aerospike port number along with the server name. +# h) For redis-cluster, you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This HA feature in the DPS toolkit +# is supported only in Redis version 3 and above. For error free application +# start-up as well as for proper reconnection to the auto reconfigured redis cluster +# on abrupt node outages, it is recommended that you specify more than one or even +# better all your redis-cluster primary and replica nodes (server name or IP address +# and a port number). Please note that this way of using the redis-cluster is done +# via an older version of redis-cluster client wrapper built in year 2016. Hence, with +# this configuration, you will not be able to use TLS/SSL in Redis server v6 +# and higher versions. It is good only for using a Redis cluster that is not +# configured with TLS/SSL. If you prefer to work with a more recent version of +# a redis-cluster client wrapper that is well tested with Redis server v6 and +# higher enabled for TLS/SSL or for non-TLS, it is recommended to skip to the next +# section and follow the steps from there. +# +# RedisServerNameOrIPAddress:port:RedisPassword # (e-g:) -# Machine1:3000 -# Machine2 -# Machine3:3000 -# -# i) For redis-cluster, you must install and configure Redis instances enabled with -# the clustering option in the redis.conf file. This HA feature is available only -# in Redis version 3 and above. For error free application start-up as well as for -# proper reconnection to the auto reconfigured redis cluster on abrupt node outages, -# it is recommended that you specify more than one or even better all your redis-cluster -# master and slave nodes (server name or IP address and a port number). +# Machine1:7001:MyRedisPassword +# Machine2:7001:MyRedisPassword +# Machine3:7001:MyRedisPassword +# Machine4:7001:MyRedisPassword +# +# i) redis-cluster-plus-plus: The previous section works only for non-TLS redis-cluster configurations. +# This section explains how to use a TLS/SSL enabled redis-cluster that became available in +# Redis v6 or above. It uses a much newer C++ redis-cluster client wrapper called +# redis-plus-plus that allows us to work with a redis-cluster v6 or above enabled with TLS/SSL or +# non-TLS. For redis-cluster-plus-plus you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This particular HA feature with non-TLS or TLS/SSL +# in the DPS toolkit is supported only in Redis version 6 or above. For error free application start-up +# as well as for proper reconnection to the auto reconfigured redis cluster on abrupt node outages, +# it is recommended that you specify more than one or even better all your redis-cluster primary and +# replica nodes (server name or IP address and a port number). Please refer to the commentary above +# for the non-clustered Redis to understand the connection timeout and TLS usage. Both are supported in +# the clister-mode Redis as well when configuring your key value store product as redis-cluster-plus-plus. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls:RedisClusterCACertificateFile # (e-g:) -# Machine1:7001 -# Machine2:7002 -# Machine3:7003 -# Machine4:7004 +# Machine1:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine2:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine3:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine4:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt # # =============================================================================== redis -# As documented above, specify below your NoSQL K/V store servers' names or IP addresses with port numbers and passwords wherever applicable. +# Specify below your NoSQL K/V store servers' names or IP addresses, port numbers, passwords and other fields as applicable. diff --git a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/impl/java/src/com/acme/test/TickerIdGenerator.java b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/impl/java/src/com/acme/test/TickerIdGenerator.java index 04f064d..4274e98 100644 --- a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/impl/java/src/com/acme/test/TickerIdGenerator.java +++ b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/impl/java/src/com/acme/test/TickerIdGenerator.java @@ -141,13 +141,15 @@ allowed limit (240 characters). You will get an exception for test case 23 and 2 description="Java Operator TickerIdGenerator") @InputPorts({@InputPortSet(description="Port that ingests tuples", cardinality=1, optional=false, windowingMode=WindowMode.NonWindowed, windowPunctuationInputMode=WindowPunctuationInputMode.Oblivious), @InputPortSet(description="Optional input ports", optional=true, windowingMode=WindowMode.NonWindowed, windowPunctuationInputMode=WindowPunctuationInputMode.Oblivious)}) @OutputPorts({@OutputPortSet(description="Port that produces tuples", cardinality=1, optional=false, windowPunctuationOutputMode=WindowPunctuationOutputMode.Generating), @OutputPortSet(description="Optional output ports", optional=true, windowPunctuationOutputMode=WindowPunctuationOutputMode.Generating)}) + //Add the DPS toolkit's Java library (dps-helper.jar) to the path of this operator. //There are 2 ways to do this: //1. If your application will have access to the Streams install location at runtime, then you can specify the full path to the location of the dps-helper.jar file present inside the DPS toolkit as follows: -@Libraries("@STREAMS_INSTALL@/toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar") -//if that path will be accessible at runtime. -//2. Or, you can copy the dps-helper.jar from /toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar into the lib folder of this application and reference it as follows: -//@Libraries("lib/dps-helper.jar") +//@Libraries("@STREAMS_INSTALL@/toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar") +//if that path will be accessible at compile time and at runtime. + +//2. Or, you can copy the dps-helper.jar either from the /toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar or from a more recent version of the DPS toolkit directory into the impl/java/lib folder of this application and reference it as follows. You will have to create the lib sub-directory inside impl/java of this application before copying the jar file there. It is done in the Makefile of this example. If you choose this option, then you must ensure that the @Libraries shown above is commented out and the following one is uncommented. +@Libraries("impl/java/lib/dps-helper.jar") // Add the following annotation if you are going to fuse this Java operator with other Java operators that will also use // the DPS APIs. In that case, it is necessary to add the following annotation so that the fused PE will use a shared class loader. @@ -1530,7 +1532,8 @@ public final void process(StreamingInput inputStream, Tuple tuple) // command you are sending here. // if (dbProductName.equalsIgnoreCase("redis") == true || - dbProductName.equalsIgnoreCase("redis-cluster") == true) { + dbProductName.equalsIgnoreCase("redis-cluster") == true || + dbProductName.equalsIgnoreCase("redis-cluster-plus-plus") == true) { // Let us try some simple Redis native commands (one way calls that don't fetch anything from the DB) // (You can't do get command using this technique. Similarly, no complex type keys or values. // In that case, please use the regular dps APIs.) @@ -1567,6 +1570,16 @@ public final void process(StreamingInput inputStream, Tuple tuple) // a lot of Redis related work using this new API. List myCmdList = new ArrayList(); String redisResult = ""; + String hashTag = ""; + + // If it is Redis cluster, let us use hash tags when running commands that use multiple keys. This is needed to avoid the CROSSSLOT error. + // https://stackoverflow.com/questions/38042629/redis-cross-slot-error + // https://redis.io/topics/cluster-spec#keys-hash-tags + if(dbProductName.equalsIgnoreCase("redis-cluster") == true || dbProductName.equalsIgnoreCase("redis-cluster-plus-plus") == true) { + hashTag = "{my_h_tag}"; + } else { + hashTag = ""; + } // Redis command: SETEX 'My Key 1' 60 'This is MyValue1 with some JSON. ..." // From your Redis command, add the distinct parts into a List @@ -1726,6 +1739,7 @@ public final void process(StreamingInput inputStream, Tuple tuple) myCmdList.clear(); redisResult = ""; myCmdList.add(new RString("PING")); + myCmdList.add(new RString("Hello New York")); try { redisResult = sf.runDataStoreCommand(myCmdList); @@ -1739,15 +1753,15 @@ public final void process(StreamingInput inputStream, Tuple tuple) myCmdList.clear(); redisResult = ""; myCmdList.add(new RString("MSET")); - myCmdList.add(new RString("one")); + myCmdList.add(new RString(hashTag + "one")); myCmdList.add(new RString("1")); - myCmdList.add(new RString("two")); + myCmdList.add(new RString(hashTag + "two")); myCmdList.add(new RString("2")); - myCmdList.add(new RString("three")); + myCmdList.add(new RString(hashTag + "three")); myCmdList.add(new RString("3")); - myCmdList.add(new RString("four")); + myCmdList.add(new RString(hashTag + "four")); myCmdList.add(new RString("4")); - myCmdList.add(new RString("sixty two")); + myCmdList.add(new RString(hashTag + "sixty two")); myCmdList.add(new RString("62")); try { @@ -1771,16 +1785,36 @@ public final void process(StreamingInput inputStream, Tuple tuple) System.out.println("Redis command Test13 [KEYS]-->runDataStoreCommand redisResult=" + sfe.getErrorCode() + ", msg=" + sfe.getErrorMessage()); } + // Redis command: MGET one two three four 'sixty two' + // From your Redis command, add the distinct parts into a list + myCmdList.clear(); + redisResult = ""; + myCmdList.add(new RString("MGET")); + myCmdList.add(new RString(hashTag + "one")); + myCmdList.add(new RString(hashTag + "two")); + myCmdList.add(new RString(hashTag + "three")); + myCmdList.add(new RString(hashTag + "four")); + // This is a non-existing key for which there will be no result returned. + myCmdList.add(new RString(hashTag + "five")); + myCmdList.add(new RString(hashTag + "sixty two")); + + try { + redisResult = sf.runDataStoreCommand(myCmdList); + System.out.println("Redis command Test13b [MGET]-->runDataStoreCommand redisResult=" + redisResult); + } catch (StoreFactoryException sfe) { + System.out.println("Redis command Test13b [MGET]-->runDataStoreCommand redisResult=" + sfe.getErrorCode() + ", msg=" + sfe.getErrorMessage()); + } + // Redis command: DEL one two three four 'sixty two' // From your Redis command, add the distinct parts into a List myCmdList.clear(); redisResult = ""; myCmdList.add(new RString("DEL")); - myCmdList.add(new RString("one")); - myCmdList.add(new RString("two")); - myCmdList.add(new RString("three")); - myCmdList.add(new RString("four")); - myCmdList.add(new RString("sixty two")); + myCmdList.add(new RString(hashTag + "one")); + myCmdList.add(new RString(hashTag + "two")); + myCmdList.add(new RString(hashTag + "three")); + myCmdList.add(new RString(hashTag + "four")); + myCmdList.add(new RString(hashTag + "sixty two")); try { redisResult = sf.runDataStoreCommand(myCmdList); diff --git a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/impl/java/src/com/ibm/acme/test/DataStoreTester.java b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/impl/java/src/com/ibm/acme/test/DataStoreTester.java index d5bf957..24758c3 100644 --- a/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/impl/java/src/com/ibm/acme/test/DataStoreTester.java +++ b/samples/advanced/03_using_no_sql_db_in_spl_custom_and_java_primitive_operators/impl/java/src/com/ibm/acme/test/DataStoreTester.java @@ -47,13 +47,15 @@ description="Java Operator DataStoreTester") @InputPorts({@InputPortSet(description="Port that ingests tuples", cardinality=1, optional=false, windowingMode=WindowMode.NonWindowed, windowPunctuationInputMode=WindowPunctuationInputMode.Oblivious), @InputPortSet(description="Optional input ports", optional=true, windowingMode=WindowMode.NonWindowed, windowPunctuationInputMode=WindowPunctuationInputMode.Oblivious)}) @OutputPorts({@OutputPortSet(description="Port that produces tuples", cardinality=1, optional=false, windowPunctuationOutputMode=WindowPunctuationOutputMode.Generating), @OutputPortSet(description="Optional output ports", optional=true, windowPunctuationOutputMode=WindowPunctuationOutputMode.Generating)}) + //Add the DPS toolkit's Java library (dps-helper.jar) to the path of this operator. //There are 2 ways to do this: //1. If your application will have access to the Streams install location at runtime, then you can specify the full path to the location of the dps-helper.jar file present inside the DPS toolkit as follows: -@Libraries("@STREAMS_INSTALL@/toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar") -//if that path will be accessible at runtime. -//2. Or, you can copy the dps-helper.jar from /toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar into the lib folder of this application and reference it as follows: -//@Libraries("lib/dps-helper.jar") +//@Libraries("@STREAMS_INSTALL@/toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar") +//if that path will be accessible at compile time and at runtime. + +//2. Or, you can copy the dps-helper.jar either from the /toolkits/com.ibm.streamsx.dps/impl/java/lib/dps-helper.jar or from a more recent version of the DPS toolkit directory into the impl/java/lib folder of this application and reference it as follows. You will have to create the lib sub-directory inside impl/java of this application before copying the jar file there. It is done in the Makefile of this example. If you choose this option, then you must ensure that the @Libraries shown above is commented out and the following one is uncommented. +@Libraries("impl/java/lib/dps-helper.jar") // Add the following annotation if you are going to fuse this Java operator with other Java operators that will also use // the DPS APIs. In that case, it is necessary to add the following annotation so that the fused PE will use a shared class loader. diff --git a/samples/advanced/04_all_dps_apis_at_work_in_spl/Makefile b/samples/advanced/04_all_dps_apis_at_work_in_spl/Makefile index 9782536..69e8ffd 100644 --- a/samples/advanced/04_all_dps_apis_at_work_in_spl/Makefile +++ b/samples/advanced/04_all_dps_apis_at_work_in_spl/Makefile @@ -22,7 +22,10 @@ # # end_generated_IBM_copyright_prolog -DPS_TOOLKIT_HOME = $(STREAMS_INSTALL)/toolkits/com.ibm.streamsx.dps +# Since the DPS toolkit version you are using could be more +# recent than the one in the IBM Streams installation directory, +# you may want to ensure that the following DPS toolkit path is correct. +DPS_TOOLKIT_HOME = $(HOME)/streamsx.dps/com.ibm.streamsx.dps # If the user wants to use a different version of # the DPS toolkit than the one shipped in the diff --git a/samples/advanced/04_all_dps_apis_at_work_in_spl/com.acme.test/Main.splmm b/samples/advanced/04_all_dps_apis_at_work_in_spl/com.acme.test/Main.splmm index b391b21..479d93e 100644 --- a/samples/advanced/04_all_dps_apis_at_work_in_spl/com.acme.test/Main.splmm +++ b/samples/advanced/04_all_dps_apis_at_work_in_spl/com.acme.test/Main.splmm @@ -1,6 +1,6 @@ /* * Licensed Materials - Property of IBM - * Copyright IBM Corp. 2011, 2016 + * Copyright IBM Corp. 2011, 2020 * US Government Users Restricted Rights - Use, duplication or * disclosure restricted by GSA ADP Schedule Contract with IBM Corp. */ @@ -2037,6 +2037,7 @@ composite RunNativeDataStoreCommands() { mutable rstring cmd = ""; mutable uint64 err = 0ul; mutable boolean res = true; + mutable rstring hashTag = ""; rstring dbProductName = dpsGetNoSqlDbProductName(); if (dbProductName == "memcached" || dbProductName == "mongo" || @@ -2058,8 +2059,18 @@ composite RunNativeDataStoreCommands() { // We will simply take your command string and run it. So, be sure of what // command you are sending here. // - if (dbProductName == "redis" || dbProductName == "redis-cluster") { + if (dbProductName == "redis" || dbProductName == "redis-cluster" || dbProductName == "redis-cluster-plus-plus") { printStringLn("=== Start of the native data store command execution using Redis ==="); + + // If it is Redis cluster, let us use hash tags when running commands that use multiple keys. This is needed to avoid the CROSSSLOT error. + // https://stackoverflow.com/questions/38042629/redis-cross-slot-error + // https://redis.io/topics/cluster-spec#keys-hash-tags + if(dbProductName == "redis-cluster" || dbProductName == "redis-cluster-plus-plus") { + hashTag = "{my_h_tag}"; + } else { + hashTag = ""; + } + // Let us try some simple Redis native commands (one way calls that don't fetch anything from the DB) // (You can't do get command using this technique. Similarly, no complex type keys or values. // In that case, please use the regular dps APIs.) @@ -2269,6 +2280,7 @@ composite RunNativeDataStoreCommands() { clearM(myCmdList); redisResult = ""; appendM(myCmdList, "PING"); + appendM(myCmdList, "Hello New York"); myFlag = dpsRunDataStoreCommand(myCmdList, redisResult, err); @@ -2279,19 +2291,20 @@ composite RunNativeDataStoreCommands() { } // Redis command: MSET one 1 two 2 three 3 four 4 'sixty two' 62 - // From your Redis command, add the distinct parts into a list + // From your Redis command, add the distinct parts into a list + clearM(myCmdList); redisResult = ""; appendM(myCmdList, "MSET"); - appendM(myCmdList, "one"); + appendM(myCmdList, hashTag + "one"); appendM(myCmdList, "1"); - appendM(myCmdList, "two"); + appendM(myCmdList, hashTag + "two"); appendM(myCmdList, "2"); - appendM(myCmdList, "three"); + appendM(myCmdList, hashTag + "three"); appendM(myCmdList, "3"); - appendM(myCmdList, "four"); + appendM(myCmdList, hashTag + "four"); appendM(myCmdList, "4"); - appendM(myCmdList, "sixty two"); + appendM(myCmdList, hashTag + "sixty two"); appendM(myCmdList, "62"); myFlag = dpsRunDataStoreCommand(myCmdList, redisResult, err); @@ -2317,16 +2330,37 @@ composite RunNativeDataStoreCommands() { printStringLn("Redis command Test13 [KEYS]-->dpsRunDataStoreCommand resultValue=" + (rstring)redisResult); } + // Redis command: MGET one two three four 'sixty two' + // From your Redis command, add the distinct parts into a list + clearM(myCmdList); + redisResult = ""; + appendM(myCmdList, "MGET"); + appendM(myCmdList, hashTag + "one"); + appendM(myCmdList, hashTag + "two"); + appendM(myCmdList, hashTag + "three"); + appendM(myCmdList, hashTag + "four"); + // This is a non-existing key for which there will be no result returned. + appendM(myCmdList, hashTag + "five"); + appendM(myCmdList, hashTag + "sixty two"); + + myFlag = dpsRunDataStoreCommand(myCmdList, redisResult, err); + + if (err != 0ul) { + printStringLn("Redis command Test13b [MGET]-->dpsRunDataStoreCommand rc=" + (rstring)dpsGetLastStoreErrorCode() + ", msg=" + dpsGetLastStoreErrorString()); + } else { + printStringLn("Redis command Test13b [MGET]-->dpsRunDataStoreCommand resultValue=" + (rstring)redisResult); + } + // Redis command: DEL one two three four 'sixty two' // From your Redis command, add the distinct parts into a list clearM(myCmdList); redisResult = ""; appendM(myCmdList, "DEL"); - appendM(myCmdList, "one"); - appendM(myCmdList, "two"); - appendM(myCmdList, "three"); - appendM(myCmdList, "four"); - appendM(myCmdList, "sixty two"); + appendM(myCmdList, hashTag + "one"); + appendM(myCmdList, hashTag + "two"); + appendM(myCmdList, hashTag + "three"); + appendM(myCmdList, hashTag + "four"); + appendM(myCmdList, hashTag + "sixty two"); myFlag = dpsRunDataStoreCommand(myCmdList, redisResult, err); diff --git a/samples/advanced/04_all_dps_apis_at_work_in_spl/etc/no-sql-kv-store-servers.cfg b/samples/advanced/04_all_dps_apis_at_work_in_spl/etc/no-sql-kv-store-servers.cfg index f5498b6..de4e93f 100644 --- a/samples/advanced/04_all_dps_apis_at_work_in_spl/etc/no-sql-kv-store-servers.cfg +++ b/samples/advanced/04_all_dps_apis_at_work_in_spl/etc/no-sql-kv-store-servers.cfg @@ -15,16 +15,26 @@ # v) hbase # vi) mongo # vii) couchbase -# viii) aerospike -# ix) redis-cluster +# viii) redis-cluster +# ix) redis-cluster-plus-plus +# +# Note: A 'redis' configuration can be made to work with a non-cluster redis instance in +# TLS or non-TLS mode. +# +# A 'redis-cluster-plus-plus' configuration can be made to work with a redis cluster in +# TLS/SSL or non-TLS mode. +# +# A 'redis-cluster' configuration can be made to work with a redis cluster only in +# non-TLS mode. The other two redis configurations above makes this one redundant. # # # 2) Below the line containing the K/V data store product name, please list # your valid memcached or redis or cassandra or cloudant or -# hbase or mongo or couchbase or aerospike or redis-cluster server names or IP addresses. +# hbase or mongo or couchbase or redis-cluster server names or IP addresses. # (Please read below about the expected format of this for your chosen NoSQL data store product.) # # a) For memcached, you must list all the participating servers one per line (names or IP addresses). +# # (e-g:) # Machine1 # Machine2 @@ -41,7 +51,7 @@ # IMPORTANT TIP ABOUT RUNNING MULTIPLE REDIS SERVERS (in a non cluster redis configuration): # (If you have a heavy workload of put/get requests, then using multiple Redis servers # may give scaling to improve the overall throughput. If you are going to consider using -# multiple Redis servers that are not configured in a redis cluster mode, the dps toolkit +# multiple Redis servers that are not configured in a redis-cluster mode, the dps toolkit # will automatically do the client side partitioning to shard (i.e. spread) your data across # those servers. You may also decide to run multiple Redis server instances on a single # machine to take advantage of the available CPU cores. @@ -56,20 +66,31 @@ # When there are multiple Redis servers running on a single machine, then you must properly # specify below each ServerName:Port on a separate line. For Redis, one can optionally provide a # Redis authentication password after the port number if the Redis environment is configured to -# require authentication before using it. +# require authentication before using it. Along with that, one can optinally provide a +# redis server connection timeout value and the use_tls field to indicate whether to +# connect to the Redis server using TLS or not. Default Redis server connection timeout value is +# 3 seconds and user can override it with any non-zero value in seconds. +# For the use_tls field, a value of 1 means that TLS is needed and an absence of that field or +# a value of 0 for that field means that TLS is not needed. TLS makes sense only when a +# public cloud service based single redis server is configured i.e. IBM Compose Redis server or +# an AWS Elasticache Redis or Azure Cache for Redis or an on-prem Redis configured with a single server. +# It is also necessary to have Redis server 6 or above to enable/disable the TLS/SSL feature. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls # (e-g:) -# Machine1:7001:MyRedisPassword -# Machine1:7002 -# Machine1:7003:MyRedisPassword +# Machine1:7001:MyRedisPassword:7:1 +# Machine1:7002:::0 +# Machine1:7003:MyRedisPassword:6 # # When there are multiple Redis servers configured, using the dpsXXXXTTL APIs will provide a # good scaling factor for your high volume put/get requests in comparison to using the APIs that # are based on the user created named stores. You are encouraged to choose between # the TTL and non-TTL based APIs according to your functional and scaling needs. # -# c) In Cassandra, all servers assume an equal role. There is no special master or coordinator +# c) In Cassandra, all servers assume an equal role. There is no special primary or coordinator # server. For Cassandra, you can list either all or just only one of the # seed servers (names or IP addresses as it is specified in your cassandra.yaml file). +# # (e-g:) # Machine1 # Machine2 @@ -79,13 +100,14 @@ # web offering or with a "Cloudant Local" on-premises private installation. # Since you have to enter the user id and password below, it is better to create # a user id specifically for working with the Streams dps toolkit. +# # For the server name, you must enter a single line in the following format: # http://user:password@user.cloudant.com if you are using the Cloudant service on the web # (OR) # http://user:password@XXXXX where XXXXX is a name or IP address of your on-premises # Cloudant Local load balancer machine. # -# e)For HBase, you have to specify the HBase REST server address(es) in the format shown below. +# e) For HBase, you have to specify the HBase REST server address(es) in the format shown below. # User id and password in the URL below should match the Linux user id and password on # the machine where the HBase REST server program is running. If you have a multi-machine # HBase cluster, then you can run the HBase REST server on multiple machines and configure @@ -93,6 +115,7 @@ # let the DPS toolkit to spray (load balance) your heavy HBase workload to those multiple # servers and that may be a factor in slightly improving the HBase read/write performance. # REST server address format: http://user:password@HBase-REST-ServerNameOrIPAddress:port +# # (e-g:) # http://user:password@Machine1:8080 # http://user:password@Machine3:8080 @@ -102,40 +125,66 @@ # high availability using automatic fail-over) or a sharded cluster's query router # mongos seed servers (for HA, load balancing, high throughput and fail-over). # Please provide it in the following way for one of those three modes of MongoDB configuration. +# # (e-g for single server, replica set and sharded cluster in that order.) # Machine1:27017 # Machine1:27017,Machine1:27018,Machine1:27019/?replicaSet=YOUR_MONGO_REPLICA_SET_NAME # Machine1:27069,Machine2:27069,Machine3:27069 -# [If you are using a sharded cluster, then you must manually enable sharding for the ibm_dps database and -# the collections created by the DPS in Mongo.] +# [If you are using a sharded cluster, then you must manually enable sharding for the +# ibm_dps database and the collections created by the DPS in Mongo.] # # g) For Couchbase, you can specify one or more server names. Please specify one server name per line. -# You must have already created a Couchbase admin user id and password using the Couchbase web console. -# You must specify that admin user id and password as part of any one of the server names you will add below. +# You must have already created a Couchbase admin user id and password using the Couchbase +# web console. You must specify that admin user id and password as part of any one of the +# server names you will add below. +# # (e-g:) # user:password@Machine1 # Machine2 # Machine3 # -# h) For Aerospike, you can specify one or more server names. Please specify one server name per line. -# You can optionally specify the Aerospike port number along with the server name. +# h) For redis-cluster, you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This HA feature in the DPS toolkit +# is supported only in Redis version 3 and above. For error free application +# start-up as well as for proper reconnection to the auto reconfigured redis cluster +# on abrupt node outages, it is recommended that you specify more than one or even +# better all your redis-cluster primary and replica nodes (server name or IP address +# and a port number). Please note that this way of using the redis-cluster is done +# via an older version of redis-cluster client wrapper built in year 2016. Hence, with +# this configuration, you will not be able to use TLS/SSL in Redis server v6 +# and higher versions. It is good only for using a Redis cluster that is not +# configured with TLS/SSL. If you prefer to work with a more recent version of +# a redis-cluster client wrapper that is well tested with Redis server v6 and +# higher enabled for TLS/SSL or for non-TLS, it is recommended to skip to the next +# section and follow the steps from there. +# +# RedisServerNameOrIPAddress:port:RedisPassword # (e-g:) -# Machine1:3000 -# Machine2 -# Machine3:3000 -# -# i) For redis-cluster, you must install and configure Redis instances enabled with -# the clustering option in the redis.conf file. This HA feature is available only -# in Redis version 3 and above. For error free application start-up as well as for -# proper reconnection to the auto reconfigured redis cluster on abrupt node outages, -# it is recommended that you specify more than one or even better all your redis-cluster -# master and slave nodes (server name or IP address and a port number). +# Machine1:7001:MyRedisPassword +# Machine2:7001:MyRedisPassword +# Machine3:7001:MyRedisPassword +# Machine4:7001:MyRedisPassword +# +# i) redis-cluster-plus-plus: The previous section works only for non-TLS redis-cluster configurations. +# This section explains how to use a TLS/SSL enabled redis-cluster that became available in +# Redis v6 or above. It uses a much newer C++ redis-cluster client wrapper called +# redis-plus-plus that allows us to work with a redis-cluster v6 or above enabled with TLS/SSL or +# non-TLS. For redis-cluster-plus-plus you must install and configure Redis instances enabled with +# the clustering option in the redis.conf file. This particular HA feature with non-TLS or TLS/SSL +# in the DPS toolkit is supported only in Redis version 6 or above. For error free application start-up +# as well as for proper reconnection to the auto reconfigured redis cluster on abrupt node outages, +# it is recommended that you specify more than one or even better all your redis-cluster primary and +# replica nodes (server name or IP address and a port number). Please refer to the commentary above +# for the non-clustered Redis to understand the connection timeout and TLS usage. Both are supported in +# the clister-mode Redis as well when configuring your key value store product as redis-cluster-plus-plus. +# +# RedisServerNameOrIPAddress:port:RedisPassword:ConnectionTimeoutValue:use_tls:RedisClusterCACertificateFile # (e-g:) -# Machine1:7001 -# Machine2:7002 -# Machine3:7003 -# Machine4:7004 +# Machine1:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine2:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine3:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt +# Machine4:7001:MyRedisPassword:7:1:/home/streamsadmin/my-redis-ca.crt # # =============================================================================== redis -# As documented above, specify below your NoSQL K/V store servers' names or IP addresses with port numbers and passwords wherever applicable. +# Specify below your NoSQL K/V store servers' names or IP addresses, port numbers, passwords and other fields as applicable.