<extensionManifest><groupId>org.apache.nifi</groupId><artifactId>nifi-redis-nar</artifactId><version>2.4.0</version><parentNar><groupId>org.apache.nifi</groupId><artifactId>nifi-redis-service-api-nar</artifactId><version>2.4.0</version></parentNar><systemApiVersion>2.1.0</systemApiVersion><buildInfo><tag>rel/nifi-2.4.0</tag><branch>main</branch><revision>1</revision></buildInfo><extensions><extension><name>org.apache.nifi.redis.processor.PutRedisHashRecord</name><type>PROCESSOR</type><description>Puts record field data into Redis using a specified hash value, which is determined by a RecordPath to a field in each record containing the hash value. The record fields and values are stored as key/value pairs associated by the hash value. NOTE: Neither the evaluated hash value nor any of the field values can be null. If the hash value is null, the FlowFile will be routed to failure. For each of the field values, if the value is null that field will be not set in Redis.</description><tags><tag>put</tag><tag>redis</tag><tag>hash</tag><tag>record</tag></tags><properties><property><name>record-reader</name><displayName>Record Reader</displayName><description>Specifies the Controller Service to use for parsing incoming data and determining the data's schema</description><controllerServiceDefinition><className>org.apache.nifi.serialization.RecordReaderFactory</className><groupId>org.apache.nifi</groupId><artifactId>nifi-standard-services-api-nar</artifactId><version>2.4.0</version></controllerServiceDefinition><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>redis-connection-pool</name><displayName>Redis Connection Pool</displayName><description></description><controllerServiceDefinition><className>org.apache.nifi.redis.RedisConnectionPool</className><groupId>org.apache.nifi</groupId><artifactId>nifi-redis-service-api-nar</artifactId><version>2.4.0</version></controllerServiceDefinition><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>hash-value-record-path</name><displayName>Hash Value Record Path</displayName><description>Specifies a RecordPath to evaluate against each Record in order to determine the hash value associated with all the record fields/values (see 'hset' in Redis documentation for more details). The RecordPath must point at exactly one field or an error will occur.</description><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>data-record-path</name><displayName>Data Record Path</displayName><description>This property denotes a RecordPath that will be evaluated against each incoming Record and the Record that results from evaluating the RecordPath will be sent to Redis instead of sending the entire incoming Record. The property defaults to the root '/' which corresponds to a 'flat' record (all fields/values at the top level of  the Record.</description><defaultValue>/</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>charset</name><displayName>Character Set</displayName><description>Specifies the character set to use when storing record field values as strings. All fields will be converted to strings using this character set before being stored in Redis.</description><defaultValue>UTF-8</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>true</expressionLanguageSupported><expressionLanguageScope>FLOWFILE_ATTRIBUTES</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property></properties><relationships><relationship><name>failure</name><description>FlowFiles containing Records with processing errors will be routed to this relationship</description><autoTerminated>false</autoTerminated></relationship><relationship><name>success</name><description>FlowFiles having all Records stored in Redis will be routed to this relationship</description><autoTerminated>false</autoTerminated></relationship></relationships><writesAttributes><writesAttribute><name>redis.success.record.count</name><description>Number of records written to Redis</description></writesAttribute></writesAttributes><inputRequirement>INPUT_REQUIRED</inputRequirement></extension><extension><name>org.apache.nifi.redis.service.RedisConnectionPoolService</name><type>CONTROLLER_SERVICE</type><description>A service that provides connections to Redis.</description><tags><tag>redis</tag><tag>cache</tag></tags><properties><property><name>Redis Mode</name><displayName>Redis Mode</displayName><description>The type of Redis being communicated with - standalone, sentinel, or clustered.</description><defaultValue>Standalone</defaultValue><allowableValues><allowableValue><displayName>Standalone</displayName><value>Standalone</value><description>A single standalone Redis instance.</description></allowableValue><allowableValue><displayName>Sentinel</displayName><value>Sentinel</value><description>Redis Sentinel which provides high-availability. Described further at https://redis.io/topics/sentinel</description></allowableValue><allowableValue><displayName>Cluster</displayName><value>Cluster</value><description>Clustered Redis which provides sharding and replication. Described further at https://redis.io/topics/cluster-spec</description></allowableValue></allowableValues><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Connection String</name><displayName>Connection String</displayName><description>The connection string for Redis. In a standalone instance this value will be of the form hostname:port. In a sentinel instance this value will be the comma-separated list of sentinels, such as host1:port1,host2:port2,host3:port3. In a clustered instance this value will be the comma-separated list of cluster masters, such as host1:port,host2:port,host3:port.</description><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>true</expressionLanguageSupported><expressionLanguageScope>ENVIRONMENT</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Database Index</name><displayName>Database Index</displayName><description>The database index to be used by connections created from this connection pool. See the databases property in redis.conf, by default databases 0-15 will be available.</description><defaultValue>0</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>true</expressionLanguageSupported><expressionLanguageScope>ENVIRONMENT</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Communication Timeout</name><displayName>Communication Timeout</displayName><description>The timeout to use when attempting to communicate with Redis.</description><defaultValue>10 seconds</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Cluster Max Redirects</name><displayName>Cluster Max Redirects</displayName><description>The maximum number of redirects that can be performed when clustered.</description><defaultValue>5</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Sentinel Master</name><displayName>Sentinel Master</displayName><description>The name of the sentinel master, require when Mode is set to Sentinel</description><required>false</required><sensitive>false</sensitive><expressionLanguageSupported>true</expressionLanguageSupported><expressionLanguageScope>ENVIRONMENT</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Username</name><displayName>Username</displayName><description>The username used to authenticate to the Redis server.</description><required>false</required><sensitive>false</sensitive><expressionLanguageSupported>true</expressionLanguageSupported><expressionLanguageScope>ENVIRONMENT</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Password</name><displayName>Password</displayName><description>The password used to authenticate to the Redis server. See the 'requirepass' property in redis.conf.</description><required>false</required><sensitive>true</sensitive><expressionLanguageSupported>true</expressionLanguageSupported><expressionLanguageScope>ENVIRONMENT</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Sentinel Username</name><displayName>Sentinel Username</displayName><description>The username used to authenticate to the Redis sentinel server.</description><required>false</required><sensitive>false</sensitive><expressionLanguageSupported>true</expressionLanguageSupported><expressionLanguageScope>ENVIRONMENT</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Sentinel Password</name><displayName>Sentinel Password</displayName><description>The password used to authenticate to the Redis Sentinel server. See the 'requirepass' and 'sentinel sentinel-pass' properties in sentinel.conf.</description><required>false</required><sensitive>true</sensitive><expressionLanguageSupported>true</expressionLanguageSupported><expressionLanguageScope>ENVIRONMENT</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>SSL Context Service</name><displayName>SSL Context Service</displayName><description>If specified, this service will be used to create an SSL Context that will be used to secure communications; if not specified, communications will not be secure</description><controllerServiceDefinition><className>org.apache.nifi.ssl.SSLContextProvider</className><groupId>org.apache.nifi</groupId><artifactId>nifi-standard-services-api-nar</artifactId><version>2.4.0</version></controllerServiceDefinition><required>false</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Max Total</name><displayName>Pool - Max Total</displayName><description>The maximum number of connections that can be allocated by the pool (checked out to clients, or idle awaiting checkout). A negative value indicates that there is no limit.</description><defaultValue>8</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Max Idle</name><displayName>Pool - Max Idle</displayName><description>The maximum number of idle connections that can be held in the pool, or a negative value if there is no limit.</description><defaultValue>8</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Min Idle</name><displayName>Pool - Min Idle</displayName><description>The target for the minimum number of idle connections to maintain in the pool. If the configured value of Min Idle is greater than the configured value for Max Idle, then the value of Max Idle will be used instead.</description><defaultValue>0</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Block When Exhausted</name><displayName>Pool - Block When Exhausted</displayName><description>Whether or not clients should block and wait when trying to obtain a connection from the pool when the pool has no available connections. Setting this to false means an error will occur immediately when a client requests a connection and none are available.</description><defaultValue>true</defaultValue><allowableValues><allowableValue><displayName>true</displayName><value>true</value><description></description></allowableValue><allowableValue><displayName>false</displayName><value>false</value><description></description></allowableValue></allowableValues><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Max Wait Time</name><displayName>Pool - Max Wait Time</displayName><description>The amount of time to wait for an available connection when Block When Exhausted is set to true.</description><defaultValue>10 seconds</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Min Evictable Idle Time</name><displayName>Pool - Min Evictable Idle Time</displayName><description>The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.</description><defaultValue>60 seconds</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Time Between Eviction Runs</name><displayName>Pool - Time Between Eviction Runs</displayName><description>The amount of time between attempting to evict idle connections from the pool.</description><defaultValue>30 seconds</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Num Tests Per Eviction Run</name><displayName>Pool - Num Tests Per Eviction Run</displayName><description>The number of connections to tests per eviction attempt. A negative value indicates to test all connections.</description><defaultValue>-1</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Test On Create</name><displayName>Pool - Test On Create</displayName><description>Whether or not connections should be tested upon creation.</description><defaultValue>false</defaultValue><allowableValues><allowableValue><displayName>true</displayName><value>true</value><description></description></allowableValue><allowableValue><displayName>false</displayName><value>false</value><description></description></allowableValue></allowableValues><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Test On Borrow</name><displayName>Pool - Test On Borrow</displayName><description>Whether or not connections should be tested upon borrowing from the pool.</description><defaultValue>false</defaultValue><allowableValues><allowableValue><displayName>true</displayName><value>true</value><description></description></allowableValue><allowableValue><displayName>false</displayName><value>false</value><description></description></allowableValue></allowableValues><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Test On Return</name><displayName>Pool - Test On Return</displayName><description>Whether or not connections should be tested upon returning to the pool.</description><defaultValue>false</defaultValue><allowableValues><allowableValue><displayName>true</displayName><value>true</value><description></description></allowableValue><allowableValue><displayName>false</displayName><value>false</value><description></description></allowableValue></allowableValues><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>Pool - Test While Idle</name><displayName>Pool - Test While Idle</displayName><description>Whether or not connections should be tested while idle.</description><defaultValue>true</defaultValue><allowableValues><allowableValue><displayName>true</displayName><value>true</value><description></description></allowableValue><allowableValue><displayName>false</displayName><value>false</value><description></description></allowableValue></allowableValues><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property></properties><providedServiceAPIs><providedServiceAPI><className>org.apache.nifi.redis.RedisConnectionPool</className><groupId>org.apache.nifi</groupId><artifactId>nifi-redis-service-api-nar</artifactId><version>2.4.0</version></providedServiceAPI></providedServiceAPIs></extension><extension><name>org.apache.nifi.redis.service.RedisDistributedMapCacheClientService</name><type>CONTROLLER_SERVICE</type><description>An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service relies on the WATCH, MULTI, and EXEC commands in Redis, which are not fully supported when Redis is clustered. As a result, this service can only be used with a Redis Connection Pool that is configured for standalone or sentinel mode. Sentinel mode can be used to provide high-availability configurations.</description><tags><tag>redis</tag><tag>distributed</tag><tag>cache</tag><tag>map</tag></tags><properties><property><name>redis-connection-pool</name><displayName>Redis Connection Pool</displayName><description></description><controllerServiceDefinition><className>org.apache.nifi.redis.RedisConnectionPool</className><groupId>org.apache.nifi</groupId><artifactId>nifi-redis-service-api-nar</artifactId><version>2.4.0</version></controllerServiceDefinition><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>redis-cache-ttl</name><displayName>TTL</displayName><description>Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever</description><defaultValue>0 secs</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property></properties><providedServiceAPIs><providedServiceAPI><className>org.apache.nifi.distributed.cache.client.AtomicDistributedMapCacheClient</className><groupId>org.apache.nifi</groupId><artifactId>nifi-standard-services-api-nar</artifactId><version>2.4.0</version></providedServiceAPI><providedServiceAPI><className>org.apache.nifi.distributed.cache.client.DistributedMapCacheClient</className><groupId>org.apache.nifi</groupId><artifactId>nifi-standard-services-api-nar</artifactId><version>2.4.0</version></providedServiceAPI></providedServiceAPIs></extension><extension><name>org.apache.nifi.redis.service.SimpleRedisDistributedMapCacheClientService</name><type>CONTROLLER_SERVICE</type><description>An implementation of DistributedMapCacheClient that uses Redis as the backing cache. This service is intended to be used when a non-atomic DistributedMapCacheClient is required.</description><tags><tag>redis</tag><tag>distributed</tag><tag>cache</tag><tag>map</tag></tags><properties><property><name>redis-connection-pool</name><displayName>Redis Connection Pool</displayName><description></description><controllerServiceDefinition><className>org.apache.nifi.redis.RedisConnectionPool</className><groupId>org.apache.nifi</groupId><artifactId>nifi-redis-service-api-nar</artifactId><version>2.4.0</version></controllerServiceDefinition><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property><property><name>redis-cache-ttl</name><displayName>TTL</displayName><description>Indicates how long the data should exist in Redis. Setting '0 secs' would mean the data would exist forever</description><defaultValue>0 secs</defaultValue><required>true</required><sensitive>false</sensitive><expressionLanguageSupported>false</expressionLanguageSupported><expressionLanguageScope>NONE</expressionLanguageScope><dynamicallyModifiesClasspath>false</dynamicallyModifiesClasspath><dynamic>false</dynamic></property></properties><providedServiceAPIs><providedServiceAPI><className>org.apache.nifi.distributed.cache.client.DistributedMapCacheClient</className><groupId>org.apache.nifi</groupId><artifactId>nifi-standard-services-api-nar</artifactId><version>2.4.0</version></providedServiceAPI></providedServiceAPIs></extension></extensions></extensionManifest>