Commit Graph

1453 Commits

Author SHA1 Message Date
Mark Paluch
b0d139af2e DATAREDIS-665 - Upgrade to Lettuce 5.0 RC1.
Adapt to changes in Lettuce API.
2017-07-20 15:55:02 +02:00
Mark Paluch
54ba6e3494 DATAREDIS-663 - Inherit Project Reactor version from dependency management.
Adapt to BOM import in Spring Data Build pom.
2017-07-20 11:06:02 +02:00
Christoph Strobl
4fc58ad8cf DATAREDIS-661 - Polishing.
Update JavaDoc and remove usage of MapUtils brought in via optional transitive dependency.

Original Pull Request: #255
2017-07-18 14:01:35 +02:00
Mark Paluch
8f88b78eeb DATAREDIS-661 - Refactor RedisServerCommands.getConfig(…) output to Properties.
Use Properties instead of List of Strings arranged as sequence of key-value pairs to improve value lookup. Properties allows direct value lookup whereas the List previously required List scanning for an index and another index access to retrieve the actual value.

Original Pull Request: #255
2017-07-18 14:00:37 +02:00
Christoph Strobl
50551fd182 DATAREDIS-508 - Polishing.
Update JavaDoc, remove trailing whitespace and skip cluster tests if cluster not available.
2017-07-18 13:12:44 +02:00
Mark Paluch
12b030b1f7 DATAREDIS-508 - Support lettuce Pub/Sub when using Redis Cluster.
We now use Lettuce's Redis Cluster Pub/Sub connection to create Pub/Sub connections in a cluster.
2017-07-18 13:12:25 +02:00
Mark Paluch
36f680ff5b DATAREDIS-481 - Polishing.
Reduce visibility of DefaultRedisCacheWriter as trivial implementation. Replace ConnectionCallback with Java 8 functions. Increase visibility of the RedisCache constructor to allow subclassing. Move factory methods to create DefaultRedisCacheWriter to RedisCacheWriter interface.

Refactor RedisCacheManagerConfigurator to stateful RedisCacheManagerBuilder. Remove RedisCache.setTransactionAware override in RedisCacheManagerConfigurator removing behavior not compliant with AbstractTransactionSupportingCacheManager. Terminate interrupted cache wait loop with exception. Javadoc, formatting, reorder methods.

Allow ConversionService configuration via RedisCacheConfiguration. Accept cache keys that are either convertible to String or that override toString to obtain the String representation of the cache key.

Original pull request: #252.
2017-07-13 10:08:46 +02:00
Christoph Strobl
a9c2b1cdda DATAREDIS-481 - Revise RedisCache.
RedisCache now operates directly with RedisConnectionFactory allowing each Cache to use its own SerializationPair for cache key and value conversion.

A RedisCacheManager with default settings is created with RedisCacheManager.create(connectionFactory). Use RedisCacheManager.builder(…) to obtain a builder to customize cache settings.

RedisCacheManager cm = RedisCacheManager.builder(connectionFactory)
  .cacheDefaults(defaultCacheConfig())
  .initialCacheConfigurations(singletonMap("predefined", defaultCacheConfig().disableCachingNullValues()))
  .transactionAware()
  .build();

The behavior of a single RedisCache is defined via its RedisCacheConfiguration. Starting from defaultCacheConfig() the configuration can be altered as needed.

RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
  .entryTtl(Duration.ofSeconds(1))
  .disableCachingNullValues();

RedisCacheManager defaults to a lock-free RedisCacheWriter for reading & writing binary values. Lock-free caching improves throughput. The lack of entry locking can lead to overlapping, non atomic commands, for putIfAbsent and clean methods as those require multiple commands sent to Redis. The locking counterpart prevents command overlap by setting an explicit lock key and checking against presence of this key, which leads to additional requests and potential command wait times.

Original pull request: #252.
2017-07-13 10:08:36 +02:00
Christoph Strobl
eb3ad1e351 DATAREDIS-659 - Polishing.
Update JavaDoc and assert nullability contract.
Use slowlog-max-len in tests instead of maxclients avoiding potential ulimit errors.

Original Pull Request: #253
2017-07-07 14:22:51 +02:00
Mark Paluch
4c88fe1794 DATAREDIS-659 - Polishing.
Replace anonymous inner classes with lambdas. Reformat.

Original Pull Request: #253
2017-07-07 14:22:37 +02:00
Mark Paluch
1f2610ba91 DATAREDIS-659 - Provide ReactiveServerCommands for basic server interaction.
Original Pull Request: #253
2017-07-07 14:22:17 +02:00
Mark Paluch
772d412ba8 DATAREDIS-660 - Adapt to API changes in mapping subsystem. 2017-07-04 14:34:47 +02:00
Christoph Strobl
a06162de0e DATAREDIS-625 - Remove outdated copy of TestSubscriber.
Remove copy of TestSubscriber and replace usage with StepVerifier.
2017-06-30 08:47:57 +02:00
Mark Paluch
1a13667d25 DATAREDIS-657 - RedisRepositoryConfigurationExtensionUnitTests now need to provide a BeanDefinitionRegistry. 2017-06-26 17:03:49 +02:00
Mark Paluch
3185173805 DATAREDIS-656 - Reduce default LettuceConnectionFactory shutdown timeout to 100ms.
Reducing the default to 100 milliseconds is a good compromise to retain a quiet time in for parallel execution and optimize for default, single-threaded execution (such as test execution or regular application shutdown). The shutdown timeout can be adjusted to fit specific application needs.

Previously, LettuceConnectionFactory used different defaults: 2 seconds if used LettuceClientConfiguration and 60 seconds without LettuceClientConfiguration. In any case, defaults delay shutdown and cause severe delays in total. The driver default of two seconds provides enough time to complete long-running tasks before the actual thread pool shutdown.

Original Pull Request: #251
2017-06-20 14:45:07 +02:00
Mark Paluch
475d1bbf41 DATAREDIS-646 - After release cleanups. 2017-06-14 17:14:08 +02:00
Mark Paluch
663bb4a182 DATAREDIS-646 - Prepare next development iteration. 2017-06-14 17:14:07 +02:00
Mark Paluch
55e055f8ea DATAREDIS-646 - Release version 2.0 M4 (Kay). 2017-06-14 17:03:48 +02:00
Mark Paluch
a468a2d43a DATAREDIS-646 - Prepare 2.0 M4 (Kay). 2017-06-14 17:03:00 +02:00
Mark Paluch
32a56f46b1 DATAREDIS-646 - Updated changelog. 2017-06-14 17:02:59 +02:00
Christoph Strobl
5755ee392d DATAREDIS-647 - Polishing.
Use List#toArray(T[] a) instead of Collection#stream().toArray().

Original Pull Request: #250
2017-06-12 14:18:23 +02:00
Mark Paluch
78e5b89d1b DATAREDIS-647 - Correct SDIFF & SINTER behavior.
We now consider the last key in SDIFF command execution on Redis Cluster to correctly compute the set difference. 
For reactive connections we collect the result sets entirely before applying further computation. Previously, the zip function could return a previous view of the result that caused too many/too few results.

Original Pull Request: #250
2017-06-12 14:08:01 +02:00
Mark Paluch
95768983b6 DATAREDIS-645 - Polishing.
Migrate LettuceReactiveStringCommandsTests to StepVerifier and replace Collection.stream().toArray(…) with Collection.toArray(…).

Original Pull Request: #249
2017-06-12 13:26:03 +02:00
Mark Paluch
d6ea867e37 DATAREDIS-645 - Introduce absent values in ReactiveStringCommands.
We now return AbsentByteBufferResponse to indicate absence of a Redis key when retrieving the key as top-level element. CommandResponse indicates via isPresent its presence or absence of a response value. Omission of absent values can cause a stream with a different response structure compared to the request. Retaining the stream sequence is required for response to request correlation.

GET and GETSET commands use presence of CommandResponse to filter response emission. Both commands return a single element so absence does not interferes with the request structure.

Previously, we just returned an empty byte-array that caused downstream errors deserializing and emitting null values that are prohibited in Reactive Streams.

Original Pull Request: #249
2017-06-12 13:04:13 +02:00
Mark Paluch
18a6440e98 DATAREDIS-631 - Updated changelog. 2017-06-08 11:56:21 +02:00
Christoph Strobl
5f9cb22ad5 DATAREDIS-574 - Polishing.
Updated reference Documentation, JavaDoc and add some minor code changes (rename methods, fix return types, diamond  operators,…).

Original Pull Request: #236
2017-06-08 10:55:12 +02:00
Mark Paluch
3819ded01c DATAREDIS-574 - Introduce RedisPassword value object.
Encapsulate Redis passwords within a GC-friendly container that allows mapping and consumption in a functional style.

Original Pull Request: #236
2017-06-08 10:54:21 +02:00
Mark Paluch
a403a530d3 DATAREDIS-574 - Introduce dedicated RedisClientConfiguration for Jedis & Lettuce.
We added Jedis-/LettuceClientConfiguration and mutable Jedis-/LettuceClientConfiguration to encapsulate Jedis/Lettuce specific client features. Those should be used for ConnectionFactory configuration.

Additionally we added RedisStandaloneConfiguration next to the existing configurations for Sentinel and Cluster.

Along the way we also removed superfluous test system properties and Gemfire specific hooks and truststore customization.

Original Pull Request: #236
2017-06-08 10:53:04 +02:00
Mark Paluch
fef47c54c6 DATAREDIS-630 - Updated changelog. 2017-06-07 12:23:37 +02:00
Mark Paluch
45f1382e00 DATAREDIS-651 - Upgrade to Reactor 3.1 M2. 2017-06-01 10:03:07 +02:00
Mark Paluch
771c4d96da DATAREDIS-622 - After release cleanups. 2017-05-09 11:34:42 +02:00
Mark Paluch
24565a1632 DATAREDIS-622 - Prepare next development iteration. 2017-05-09 11:34:41 +02:00
Mark Paluch
ae2868cd11 DATAREDIS-622 - Release version 2.0 M3 (Kay). 2017-05-09 11:23:00 +02:00
Mark Paluch
7f22a6c434 DATAREDIS-622 - Prepare 2.0 M3 (Kay). 2017-05-09 11:22:12 +02:00
Mark Paluch
9776012449 DATAREDIS-622 - Updated changelog. 2017-05-09 11:22:10 +02:00
Christoph Strobl
00c433c74f DATAREDIS-640 - Adapt to API changes in repository interfaces.
We now follow a more consistent naming scheme for the methods in repository that are driven by the following guidelines:

* Methods referring to an identifier now all end on …ById(…).
* Methods taking or returning a collection are named …All(…)

Please see DATACMNS-944 for details.
2017-05-03 18:05:01 +02:00
Mark Paluch
abea6fdef2 DATAREDIS-642 - Upgrade to Lettuce 5.0 M2. 2017-05-03 14:39:07 +02:00
Mark Paluch
1216134ce2 DATAREDIS-637 - Shut down connection-exclusive ClusterCommandExecutor.
We now shut down ClusterCommandExecutor via LettuceClusterConnection and JedisClusterConnection if the ClusterCommandExecutor was created through the connection instance. In such case ClusterCommandExecutor is managed through Lettuce/JedisClusterConnection and disposed on connection close.

Previously ClusterCommandExecutor created through a ClusterConnection was not disposed.

Original pull request: #247.
2017-05-03 14:23:20 +02:00
Mark Paluch
4e2fb1b7a0 DATAREDIS-626 - Polishing.
Refactor server and scripting commands to their own implementations and interfaces.

Fix JavaDoc indentations. Fix typos. Replace explicit type arguments with diamond syntax. Replace anonymous inner classes with method references and lambdas, where possible. Use shared ClientResources with LettuceConnectionFactory tests.

Align reactive command implementation visibility with blocking command implementation visibility to package-protected. These implementations are not an extension point and subject to be used through their interfaces.

Original pull request: #247.
2017-05-03 14:23:13 +02:00
Christoph Strobl
c636400104 DATAREDIS-626 - Refactor RedisConnection implementations to Redis feature-specific interfaces.
We refactored JedisConnection and LettuceConnection from monolithic connection classes into modular classes that organize methods according the Redis feature group and created segregated interfaces per Redis feature group. Segregated interfaces reduce the number of methods available on the interface to the used data type. This refactoring reduces the responsibility of JedisConnection/LettuceConnection and JedisClusterConnection/LettuceClusterConnection to a minimum of commands.

To preserve backwards-compatibility with users of the connection classes, we introduced DefaultedRedisConnection and DefaultedRedisClusterConnection to forward calls from the connection facade to the specific implementation. Deprecation of connection facade method assists migration off these methods towards using methods on the feature group interface.

LettuceConnection connection = …

connection.keyCommands().del(key);

connection.hashCommands().hSet(key, field, value);

Original pull request: #247.
2017-05-03 14:23:01 +02:00
Mark Paluch
016af63dd4 DATAREDIS-636 - Adapt to Range API changes.
Related ticket: DATACMNS-1050.
2017-04-26 18:21:24 +02:00
Mark Paluch
dfbdd95fda DATAREDIS-634 - Polishing.
Enable Keyspace events in RedisKeyValueAdapterTests. Depending on the test order, Redis might miss the required notify-keyspace-events configuration.
2017-04-24 16:17:07 +02:00
Mark Paluch
cd789f9722 DATAREDIS-634 - Adapt to moved CustomConversions to Spring Data Commons.
Introduce RedisCustomConversions extending o.s.d.convert.CustomConversions.

Remove o.s.d.mongo.core.convert.CustomConversions implementation code and utility classes and let it extend RedisCustomConversions. Replace references to o.s.d.r.c.c.CustomConversions with o.s.d.convert.CustomConversions. Adapt tests.

Introduce constructors for ObjectHashMapper and RedisKeyValueAdapter requiring o.s.d.convert.CustomConversions and deprecate constructors accepting o.s.d.r.c.c.CustomConversions.

Related ticket: DATACMNS-1035.
2017-04-24 14:50:38 +02:00
Mark Paluch
be74bbebde DATAREDIS-633 - Adapt to renamed KeyValueQuery.getCriteria() method.
Original Pull Request: #246
2017-04-24 10:38:28 +02:00
Oliver Gierke
db72361056 DATAREDIS-628 - Updated changelog. 2017-04-19 21:04:20 +02:00
Oliver Gierke
91a0e03528 DATAREDIS-627 - Updated changelog. 2017-04-19 20:01:49 +02:00
Mark Paluch
0898bbbbe9 DATAREDIS-629 - Polishing.
Replace new PageRequest(…) with PageRequest.of(…).
2017-04-19 15:41:12 +02:00
Mark Paluch
eeac253c06 DATAREDIS-629 - Adopt changed Mono and Flux error handling API.
Replace Flux/Mono.onErrorResumeWith(…) with Flux/Mono.onErrorMap(…) and turn translateException into a method returning a mapping function instead of a reactive type emitting the mapped exception. Replace otherwiseIfEmpty(…) with switchIfEmpty(…) and otherwiseReturn(…) with onErrorReturn(…).
2017-04-19 15:33:15 +02:00
Oliver Gierke
89ae33f8c8 DATAREDIS-608 - Updated changelog. 2017-04-19 13:04:10 +02:00
Oliver Gierke
2c731c241e DATAREDIS-607 - Updated changelog. 2017-04-19 11:50:50 +02:00