From 138c14fa5c939b5f1ce868285b98467e5b40dc6d Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 28 Jul 2017 11:16:25 +0300 Subject: [PATCH 01/10] [maven-release-plugin] prepare release redisson-2.10.0 --- pom.xml | 4 ++-- redisson-all/pom.xml | 4 ++-- redisson-tomcat/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-6/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-7/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-8/pom.xml | 2 +- redisson/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 4d828a6e0..08c36c7d6 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.redisson redisson-parent - 2.9.5-SNAPSHOT + 2.10.0 pom Redisson @@ -27,7 +27,7 @@ scm:git:git@github.com:redisson/redisson.git scm:git:git@github.com:redisson/redisson.git scm:git:git@github.com:redisson/redisson.git - HEAD + redisson-2.10.0 diff --git a/redisson-all/pom.xml b/redisson-all/pom.xml index 746f0c197..cf7c7e145 100644 --- a/redisson-all/pom.xml +++ b/redisson-all/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.9.5-SNAPSHOT + 2.10.0 ../ @@ -26,7 +26,7 @@ scm:git:git@github.com:mrniko/redisson.git scm:git:git@github.com:mrniko/redisson.git scm:git:git@github.com:mrniko/redisson.git - redisson-parent-0.9.0 + redisson-2.10.0 diff --git a/redisson-tomcat/pom.xml b/redisson-tomcat/pom.xml index 5f8a9299b..b2250936c 100644 --- a/redisson-tomcat/pom.xml +++ b/redisson-tomcat/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.9.5-SNAPSHOT + 2.10.0 ../ diff --git a/redisson-tomcat/redisson-tomcat-6/pom.xml b/redisson-tomcat/redisson-tomcat-6/pom.xml index faf6a5b94..c97e15f78 100644 --- a/redisson-tomcat/redisson-tomcat-6/pom.xml +++ b/redisson-tomcat/redisson-tomcat-6/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.9.5-SNAPSHOT + 2.10.0 ../ diff --git a/redisson-tomcat/redisson-tomcat-7/pom.xml b/redisson-tomcat/redisson-tomcat-7/pom.xml index f38e49bfc..93bf302ff 100644 --- a/redisson-tomcat/redisson-tomcat-7/pom.xml +++ b/redisson-tomcat/redisson-tomcat-7/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.9.5-SNAPSHOT + 2.10.0 ../ diff --git a/redisson-tomcat/redisson-tomcat-8/pom.xml b/redisson-tomcat/redisson-tomcat-8/pom.xml index d60e2a45c..b9a8d3221 100644 --- a/redisson-tomcat/redisson-tomcat-8/pom.xml +++ b/redisson-tomcat/redisson-tomcat-8/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.9.5-SNAPSHOT + 2.10.0 ../ diff --git a/redisson/pom.xml b/redisson/pom.xml index 6fdb8decc..9db2f9d16 100644 --- a/redisson/pom.xml +++ b/redisson/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.9.5-SNAPSHOT + 2.10.0 ../ From 25468044a6dfc93c5399cd8a705919cdc33fdaff Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 28 Jul 2017 11:16:40 +0300 Subject: [PATCH 02/10] [maven-release-plugin] prepare for next development iteration --- pom.xml | 4 ++-- redisson-all/pom.xml | 4 ++-- redisson-tomcat/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-6/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-7/pom.xml | 2 +- redisson-tomcat/redisson-tomcat-8/pom.xml | 2 +- redisson/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 08c36c7d6..c900ac810 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ org.redisson redisson-parent - 2.10.0 + 2.10.1-SNAPSHOT pom Redisson @@ -27,7 +27,7 @@ scm:git:git@github.com:redisson/redisson.git scm:git:git@github.com:redisson/redisson.git scm:git:git@github.com:redisson/redisson.git - redisson-2.10.0 + HEAD diff --git a/redisson-all/pom.xml b/redisson-all/pom.xml index cf7c7e145..61f24b88d 100644 --- a/redisson-all/pom.xml +++ b/redisson-all/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.10.0 + 2.10.1-SNAPSHOT ../ @@ -26,7 +26,7 @@ scm:git:git@github.com:mrniko/redisson.git scm:git:git@github.com:mrniko/redisson.git scm:git:git@github.com:mrniko/redisson.git - redisson-2.10.0 + redisson-parent-0.9.0 diff --git a/redisson-tomcat/pom.xml b/redisson-tomcat/pom.xml index b2250936c..f7c254372 100644 --- a/redisson-tomcat/pom.xml +++ b/redisson-tomcat/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.10.0 + 2.10.1-SNAPSHOT ../ diff --git a/redisson-tomcat/redisson-tomcat-6/pom.xml b/redisson-tomcat/redisson-tomcat-6/pom.xml index c97e15f78..6cbbf9689 100644 --- a/redisson-tomcat/redisson-tomcat-6/pom.xml +++ b/redisson-tomcat/redisson-tomcat-6/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.10.0 + 2.10.1-SNAPSHOT ../ diff --git a/redisson-tomcat/redisson-tomcat-7/pom.xml b/redisson-tomcat/redisson-tomcat-7/pom.xml index 93bf302ff..e4f8ad74b 100644 --- a/redisson-tomcat/redisson-tomcat-7/pom.xml +++ b/redisson-tomcat/redisson-tomcat-7/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.10.0 + 2.10.1-SNAPSHOT ../ diff --git a/redisson-tomcat/redisson-tomcat-8/pom.xml b/redisson-tomcat/redisson-tomcat-8/pom.xml index b9a8d3221..90f4c9187 100644 --- a/redisson-tomcat/redisson-tomcat-8/pom.xml +++ b/redisson-tomcat/redisson-tomcat-8/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-tomcat - 2.10.0 + 2.10.1-SNAPSHOT ../ diff --git a/redisson/pom.xml b/redisson/pom.xml index 9db2f9d16..f38db1119 100644 --- a/redisson/pom.xml +++ b/redisson/pom.xml @@ -4,7 +4,7 @@ org.redisson redisson-parent - 2.10.0 + 2.10.1-SNAPSHOT ../ From 16c3258086cf2c00a7e6b69c46c4445b1e0012e4 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Fri, 28 Jul 2017 15:12:04 +0300 Subject: [PATCH 03/10] Update CHANGELOG.md --- CHANGELOG.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7b5201860..ac4a5a703 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,25 @@ Redisson Releases History ================================ ### Please Note: trunk is current development branch. -__[Redisson PRO](https://redisson.pro)__ now costs only __$975__ per year and supports unlimited Redisson instances +Try __[Redisson PRO](https://redisson.pro)__ version. + +### 28-Jul-2017 - versions 2.10.0 and 3.5.0 released + +Feature - __Local Cache support for Hibernate Cache__ Please read [documentation](https://github.com/redisson/redisson/wiki/14.-Integration-with-frameworks/#1431-hibernate-cache-local-cache) for more details +Feature - __Local Cache support for Spring Cache__ Please read [documentation](https://github.com/redisson/redisson/wiki/14.-Integration-with-frameworks/#1421-spring-cache-local-cache) for more details +Feature - __`RedissonLocalCachedMapCache` object added__ Please read [documentation](https://github.com/redisson/redisson/wiki/7.-distributed-collections/#713-map-local-cache-for-expiring-entries) for more details +Feature - __`BlockingFairDeque` object added__ Please read [documentation](https://github.com/redisson/redisson/wiki/7.-distributed-collections#714-blocking-fair-deque) for more details +Feature - __`RLockReactive` object added__ +Feature - __`RReadWriteLockReactive` object added__ +Feature - __`RSemaphoreReactive` object added__ +Feature - `unlink`, `flushdbParallel`, `flushallParallel` methods added +Fixed - ContextClassLoader should be used by Redisson Codec for Tomcat session's object serialization +Fixed - Spring Cache `NullValue` does not implement Serializable +Fixed - `RLocalCachedMap` doesn't work with non-json and non-binary codecs +Fixed - Tomcat RedissonSessionManager doesn't remove session on invalidation/expiration +Fixed - `RedissonBatch` shouldn't require `reactor.fn.Supplier` dependency +Fixed - Spring Session 1.3.x compatibility (thanks to Vcgoyo) +Fixed - priority queues should acquire lock before polling the element ### 12-Jul-2017 - versions 2.9.4 and 3.4.4 released From aa1e74ad6aa7ae2f88d2ad6e79c7e910c276e64b Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Fri, 28 Jul 2017 15:17:23 +0300 Subject: [PATCH 04/10] Update README.md --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 94bcfeaa6..da38e9ce7 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ Based on high-performance async and lock-free Java Redis client and [Netty](http | Stable Release Version | JDK Version compatibility | Release Date | | ------------- | ------------- | ------------| -| 3.4.4 | 1.8+ | 12.07.2017 | -| 2.9.4 | 1.6, 1.7, 1.8 and Android | 12.07.2017 | +| 3.5.0 | 1.8+ | 28.07.2017 | +| 2.10.0 | 1.6, 1.7, 1.8 and Android | 28.07.2017 | __NOTE__: Both version lines have same features except `CompletionStage` interface added in 3.x.x @@ -82,23 +82,23 @@ Quick start org.redisson redisson - 3.4.4 + 3.5.0 org.redisson redisson - 2.9.4 + 2.10.0 #### Gradle // JDK 1.8+ compatible - compile 'org.redisson:redisson:3.4.4' + compile 'org.redisson:redisson:3.5.0' // JDK 1.6+ compatible - compile 'org.redisson:redisson:2.9.4' + compile 'org.redisson:redisson:2.10.0' #### Java @@ -123,11 +123,11 @@ RExecutorService executor = redisson.getExecutorService("myExecutorService"); Downloads =============================== -[Redisson 3.4.4](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson&v=3.4.4&e=jar), -[Redisson node 3.4.4](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=3.4.4&e=jar) +[Redisson 3.5.0](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson&v=3.5.0&e=jar), +[Redisson node 3.5.0](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=3.5.0&e=jar) -[Redisson 2.9.4](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson&v=2.9.4&e=jar), -[Redisson node 2.9.4](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=2.9.4&e=jar) +[Redisson 2.10.0](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson&v=2.10.0&e=jar), +[Redisson node 2.10.0](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=2.10.0&e=jar) ### Supported by From e37d7107b7806db27e1aa3cdbfcda2cc33d8e077 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Fri, 28 Jul 2017 15:19:14 +0300 Subject: [PATCH 05/10] Update README.md --- redisson-tomcat/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/redisson-tomcat/README.md b/redisson-tomcat/README.md index f2d90344c..c3bc10c6d 100644 --- a/redisson-tomcat/README.md +++ b/redisson-tomcat/README.md @@ -26,22 +26,22 @@ Usage **2** Copy two jars into `TOMCAT_BASE/lib` directory: 1. __For JDK 1.8+__ - [redisson-all-3.4.4.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=3.4.4&e=jar) + [redisson-all-3.5.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=3.5.0&e=jar) for Tomcat 6.x - [redisson-tomcat-6-3.4.4.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-6&v=3.4.4&e=jar) + [redisson-tomcat-6-3.5.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-6&v=3.5.0&e=jar) for Tomcat 7.x - [redisson-tomcat-7-3.4.4.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-7&v=3.4.4&e=jar) + [redisson-tomcat-7-3.5.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-7&v=3.5.0&e=jar) for Tomcat 8.x - [redisson-tomcat-8-3.4.4.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-8&v=3.4.4&e=jar) + [redisson-tomcat-8-3.5.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-8&v=3.5.0&e=jar) 2. __For JDK 1.6+__ - [redisson-all-2.9.4.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=2.9.4&e=jar) + [redisson-all-2.10.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-all&v=2.10.0&e=jar) for Tomcat 6.x - [redisson-tomcat-6-2.9.4.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-6&v=2.9.4&e=jar) + [redisson-tomcat-6-2.10.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-6&v=2.10.0&e=jar) for Tomcat 7.x - [redisson-tomcat-7-2.9.4.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-7&v=2.9.4&e=jar) + [redisson-tomcat-7-2.10.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-7&v=2.10.0&e=jar) for Tomcat 8.x - [redisson-tomcat-8-2.9.4.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-8&v=2.9.4&e=jar) + [redisson-tomcat-8-2.10.0.jar](https://repository.sonatype.org/service/local/artifact/maven/redirect?r=central-proxy&g=org.redisson&a=redisson-tomcat-8&v=2.10.0&e=jar) From 056adfa7d5288e2864443b937cdc3cb9234cc9ae Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 28 Jul 2017 16:05:23 +0300 Subject: [PATCH 07/10] RedissonSession attributes should be read in first order to avoid invalidated session exception. #974 --- .../org/redisson/tomcat/RedissonSession.java | 43 +++++++++++-------- .../tomcat/RedissonSessionManager.java | 12 +++++- .../org/redisson/tomcat/RedissonSession.java | 43 +++++++++++-------- .../tomcat/RedissonSessionManager.java | 12 +++++- .../org/redisson/tomcat/RedissonSession.java | 43 +++++++++++-------- .../tomcat/RedissonSessionManager.java | 12 +++++- 6 files changed, 105 insertions(+), 60 deletions(-) diff --git a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java index a8981b95b..930cc6adb 100644 --- a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -19,7 +19,6 @@ import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import java.util.concurrent.TimeUnit; import org.apache.catalina.session.StandardSession; @@ -163,24 +162,30 @@ public class RedissonSession extends StandardSession { } } - public void load() { - Set> entrySet = map.readAllEntrySet(); - for (Entry entry : entrySet) { - if ("session:creationTime".equals(entry.getKey())) { - creationTime = (Long) entry.getValue(); - } else if ("session:lastAccessedTime".equals(entry.getKey())) { - lastAccessedTime = (Long) entry.getValue(); - } else if ("session:thisAccessedTime".equals(entry.getKey())) { - thisAccessedTime = (Long) entry.getValue(); - } else if ("session:maxInactiveInterval".equals(entry.getKey())) { - maxInactiveInterval = (Integer) entry.getValue(); - } else if ("session:isValid".equals(entry.getKey())) { - isValid = (Boolean) entry.getValue(); - } else if ("session:isNew".equals(entry.getKey())) { - isNew = (Boolean) entry.getValue(); - } else { - setAttribute(entry.getKey(), entry.getValue(), false); - } + public void load(Map attrs) { + Long creationTime = (Long) attrs.remove("session:creationTime"); + if (creationTime != null) { + this.creationTime = creationTime; + } + Long lastAccessedTime = (Long) attrs.remove("session:lastAccessedTime"); + if (lastAccessedTime != null) { + this.lastAccessedTime = lastAccessedTime; + } + Long thisAccessedTime = (Long) attrs.remove("session:thisAccessedTime"); + if (thisAccessedTime != null) { + this.thisAccessedTime = thisAccessedTime; + } + Boolean isValid = (Boolean) attrs.remove("session:isValid"); + if (isValid != null) { + this.isValid = isValid; + } + Boolean isNew = (Boolean) attrs.remove("session:isNew"); + if (isNew != null) { + this.isNew = isNew; + } + + for (Entry entry : attrs.entrySet()) { + setAttribute(entry.getKey(), entry.getValue(), false); } } diff --git a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index 693f0350b..a0abf7ec7 100644 --- a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -17,6 +17,7 @@ package org.redisson.tomcat; import java.io.File; import java.io.IOException; +import java.util.Map; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -114,9 +115,18 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { public Session findSession(String id) throws IOException { Session result = super.findSession(id); if (result == null && id != null) { + Map attrs = getMap(id).readAllMap(); + if (attrs.isEmpty()) { + log.info("Session " + id + " can't be found"); + return null; + } + RedissonSession session = (RedissonSession) createEmptySession(); session.setId(id); - session.load(); + session.load(attrs); + + session.access(); + session.endAccess(); return session; } diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java index 5c90fd02e..3df3b6e03 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -19,7 +19,6 @@ import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import java.util.concurrent.TimeUnit; import org.apache.catalina.session.StandardSession; @@ -167,24 +166,30 @@ public class RedissonSession extends StandardSession { } } - public void load() { - Set> entrySet = map.readAllEntrySet(); - for (Entry entry : entrySet) { - if ("session:creationTime".equals(entry.getKey())) { - creationTime = (Long) entry.getValue(); - } else if ("session:lastAccessedTime".equals(entry.getKey())) { - lastAccessedTime = (Long) entry.getValue(); - } else if ("session:thisAccessedTime".equals(entry.getKey())) { - thisAccessedTime = (Long) entry.getValue(); - } else if ("session:maxInactiveInterval".equals(entry.getKey())) { - maxInactiveInterval = (Integer) entry.getValue(); - } else if ("session:isValid".equals(entry.getKey())) { - isValid = (Boolean) entry.getValue(); - } else if ("session:isNew".equals(entry.getKey())) { - isNew = (Boolean) entry.getValue(); - } else { - setAttribute(entry.getKey(), entry.getValue(), false); - } + public void load(Map attrs) { + Long creationTime = (Long) attrs.remove("session:creationTime"); + if (creationTime != null) { + this.creationTime = creationTime; + } + Long lastAccessedTime = (Long) attrs.remove("session:lastAccessedTime"); + if (lastAccessedTime != null) { + this.lastAccessedTime = lastAccessedTime; + } + Long thisAccessedTime = (Long) attrs.remove("session:thisAccessedTime"); + if (thisAccessedTime != null) { + this.thisAccessedTime = thisAccessedTime; + } + Boolean isValid = (Boolean) attrs.remove("session:isValid"); + if (isValid != null) { + this.isValid = isValid; + } + Boolean isNew = (Boolean) attrs.remove("session:isNew"); + if (isNew != null) { + this.isNew = isNew; + } + + for (Entry entry : attrs.entrySet()) { + setAttribute(entry.getKey(), entry.getValue(), false); } } diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index bbc6f5e24..9fc57f0b7 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -17,6 +17,7 @@ package org.redisson.tomcat; import java.io.File; import java.io.IOException; +import java.util.Map; import org.apache.catalina.Context; import org.apache.catalina.LifecycleException; @@ -92,9 +93,18 @@ public class RedissonSessionManager extends ManagerBase { public Session findSession(String id) throws IOException { Session result = super.findSession(id); if (result == null && id != null) { + Map attrs = getMap(id).readAllMap(); + if (attrs.isEmpty()) { + log.info("Session " + id + " can't be found"); + return null; + } + RedissonSession session = (RedissonSession) createEmptySession(); session.setId(id); - session.load(); + session.load(attrs); + + session.access(); + session.endAccess(); return session; } diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java index 5c90fd02e..3df3b6e03 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -19,7 +19,6 @@ import java.lang.reflect.Field; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import java.util.concurrent.TimeUnit; import org.apache.catalina.session.StandardSession; @@ -167,24 +166,30 @@ public class RedissonSession extends StandardSession { } } - public void load() { - Set> entrySet = map.readAllEntrySet(); - for (Entry entry : entrySet) { - if ("session:creationTime".equals(entry.getKey())) { - creationTime = (Long) entry.getValue(); - } else if ("session:lastAccessedTime".equals(entry.getKey())) { - lastAccessedTime = (Long) entry.getValue(); - } else if ("session:thisAccessedTime".equals(entry.getKey())) { - thisAccessedTime = (Long) entry.getValue(); - } else if ("session:maxInactiveInterval".equals(entry.getKey())) { - maxInactiveInterval = (Integer) entry.getValue(); - } else if ("session:isValid".equals(entry.getKey())) { - isValid = (Boolean) entry.getValue(); - } else if ("session:isNew".equals(entry.getKey())) { - isNew = (Boolean) entry.getValue(); - } else { - setAttribute(entry.getKey(), entry.getValue(), false); - } + public void load(Map attrs) { + Long creationTime = (Long) attrs.remove("session:creationTime"); + if (creationTime != null) { + this.creationTime = creationTime; + } + Long lastAccessedTime = (Long) attrs.remove("session:lastAccessedTime"); + if (lastAccessedTime != null) { + this.lastAccessedTime = lastAccessedTime; + } + Long thisAccessedTime = (Long) attrs.remove("session:thisAccessedTime"); + if (thisAccessedTime != null) { + this.thisAccessedTime = thisAccessedTime; + } + Boolean isValid = (Boolean) attrs.remove("session:isValid"); + if (isValid != null) { + this.isValid = isValid; + } + Boolean isNew = (Boolean) attrs.remove("session:isNew"); + if (isNew != null) { + this.isNew = isNew; + } + + for (Entry entry : attrs.entrySet()) { + setAttribute(entry.getKey(), entry.getValue(), false); } } diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index ec97729ea..dfa577e31 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -17,6 +17,7 @@ package org.redisson.tomcat; import java.io.File; import java.io.IOException; +import java.util.Map; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleState; @@ -91,9 +92,18 @@ public class RedissonSessionManager extends ManagerBase { public Session findSession(String id) throws IOException { Session result = super.findSession(id); if (result == null && id != null) { + Map attrs = getMap(id).readAllMap(); + if (attrs.isEmpty()) { + log.info("Session " + id + " can't be found"); + return null; + } + RedissonSession session = (RedissonSession) createEmptySession(); session.setId(id); - session.load(); + session.load(attrs); + + session.access(); + session.endAccess(); return session; } From 2bdccfccf155765334fe9df68f427e551c11ded0 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 31 Jul 2017 11:10:07 +0300 Subject: [PATCH 08/10] RMapCache.putAll couldn't handle map with entries amount larger than 5000. #951 --- .../main/java/org/redisson/RedissonMapCache.java | 9 ++++++--- .../java/org/redisson/RedissonMapCacheTest.java | 13 +++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonMapCache.java b/redisson/src/main/java/org/redisson/RedissonMapCache.java index c052ce7a3..ef56a5a6f 100644 --- a/redisson/src/main/java/org/redisson/RedissonMapCache.java +++ b/redisson/src/main/java/org/redisson/RedissonMapCache.java @@ -1291,7 +1291,11 @@ public class RedissonMapCache extends RedissonMap implements RMapCac } return commandExecutor.evalWriteAsync(getName(), codec, RedisCommands.EVAL_VOID, - "for i, value in ipairs(ARGV) do " + "for i=1, #ARGV, 5000 do " + + "redis.call('hmset', KEYS[1], unpack(ARGV, i, math.min(i+4999, table.getn(ARGV)))) " + + "end; " + + + "for i, value in ipairs(ARGV) do " + "if i % 2 == 0 then " + "local val = struct.pack('dLc0', 0, string.len(value), value); " + "ARGV[i] = val; " @@ -1300,8 +1304,7 @@ public class RedissonMapCache extends RedissonMap implements RMapCac + "local msg = struct.pack('Lc0Lc0', string.len(key), key, string.len(value), value); " + "redis.call('publish', KEYS[2], msg); " + "end;" - + "end;" - + "return redis.call('hmset', KEYS[1], unpack(ARGV)); ", + + "end;", Arrays.asList(getName(), getCreatedChannelName()), params.toArray()); } diff --git a/redisson/src/test/java/org/redisson/RedissonMapCacheTest.java b/redisson/src/test/java/org/redisson/RedissonMapCacheTest.java index f8bf50aeb..89e3a4d4c 100644 --- a/redisson/src/test/java/org/redisson/RedissonMapCacheTest.java +++ b/redisson/src/test/java/org/redisson/RedissonMapCacheTest.java @@ -432,6 +432,19 @@ public class RedissonMapCacheTest extends BaseMapTest { Assert.assertEquals(1, map.size()); } + @Test + public void testPutAllBig() { + Map joinMap = new HashMap(); + for (int i = 0; i < 100000; i++) { + joinMap.put(i, "" + i); + } + + Map map = redisson.getMapCache("simple"); + map.putAll(joinMap); + + assertThat(map.size()).isEqualTo(joinMap.size()); + } + @Test public void testPutAll() { Map map = redisson.getMapCache("simple"); From b93cba087b80fea1c164a91e36ec6858d4234384 Mon Sep 17 00:00:00 2001 From: Nikita Date: Mon, 7 Aug 2017 13:48:20 +0300 Subject: [PATCH 09/10] refactoring --- .../main/java/org/redisson/RedissonMultiLock.java | 11 ----------- .../main/java/org/redisson/RedissonRedLock.java | 14 -------------- 2 files changed, 25 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonMultiLock.java b/redisson/src/main/java/org/redisson/RedissonMultiLock.java index c5007e988..32b980ab2 100644 --- a/redisson/src/main/java/org/redisson/RedissonMultiLock.java +++ b/redisson/src/main/java/org/redisson/RedissonMultiLock.java @@ -20,16 +20,13 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.ListIterator; -import java.util.Queue; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicReference; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import org.redisson.api.RFuture; import org.redisson.api.RLock; -import io.netty.util.concurrent.Future; import io.netty.util.internal.ThreadLocalRandom; /** @@ -226,12 +223,4 @@ public class RedissonMultiLock implements Lock { throw new UnsupportedOperationException(); } - protected boolean isLockFailed(Future future) { - return !future.isSuccess(); - } - - protected boolean isAllLocksAcquired(AtomicReference lockedLockHolder, AtomicReference failed, Queue lockedLocks) { - return lockedLockHolder.get() == null && failed.get() == null; - } - } diff --git a/redisson/src/main/java/org/redisson/RedissonRedLock.java b/redisson/src/main/java/org/redisson/RedissonRedLock.java index 86fd7feaa..4b6aa4689 100644 --- a/redisson/src/main/java/org/redisson/RedissonRedLock.java +++ b/redisson/src/main/java/org/redisson/RedissonRedLock.java @@ -16,13 +16,9 @@ package org.redisson; import java.util.List; -import java.util.Queue; -import java.util.concurrent.atomic.AtomicReference; import org.redisson.api.RLock; -import io.netty.util.concurrent.Future; - /** * RedLock locking algorithm implementation for multiple locks. * It manages all locks as one. @@ -58,14 +54,4 @@ public class RedissonRedLock extends RedissonMultiLock { unlockInner(locks); } - @Override - protected boolean isLockFailed(Future future) { - return false; - } - - @Override - protected boolean isAllLocksAcquired(AtomicReference lockedLockHolder, AtomicReference failed, Queue lockedLocks) { - return (lockedLockHolder.get() == null && failed.get() == null) || lockedLocks.size() >= minLocksAmount(locks); - } - } From b573eadd80fa8969b56fa9400e1458af6dbacc10 Mon Sep 17 00:00:00 2001 From: Nikita Date: Fri, 11 Aug 2017 11:19:08 +0300 Subject: [PATCH 10/10] Added readMode property for RedissonSessionManager #974 --- .../java/org/redisson/tomcat/RedissonSession.java | 14 +++++++++++++- .../redisson/tomcat/RedissonSessionManager.java | 13 ++++++++++++- .../java/org/redisson/tomcat/RedissonSession.java | 14 +++++++++++++- .../redisson/tomcat/RedissonSessionManager.java | 13 ++++++++++++- .../java/org/redisson/tomcat/RedissonSession.java | 15 ++++++++++++++- .../redisson/tomcat/RedissonSessionManager.java | 14 +++++++++++++- 6 files changed, 77 insertions(+), 6 deletions(-) diff --git a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java index 930cc6adb..e59905564 100644 --- a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import org.apache.catalina.session.StandardSession; import org.redisson.api.RMap; +import org.redisson.tomcat.RedissonSessionManager.ReadMode; /** * Redisson Session object for Apache Tomcat @@ -35,10 +36,12 @@ public class RedissonSession extends StandardSession { private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; + private final RedissonSessionManager.ReadMode readMode; - public RedissonSession(RedissonSessionManager manager) { + public RedissonSession(RedissonSessionManager manager, RedissonSessionManager.ReadMode readMode) { super(manager); this.redissonManager = manager; + this.readMode = readMode; try { Field attr = StandardSession.class.getDeclaredField("attributes"); @@ -50,6 +53,15 @@ public class RedissonSession extends StandardSession { private static final long serialVersionUID = -2518607181636076487L; + @Override + public Object getAttribute(String name) { + if (readMode == ReadMode.REDIS) { + return map.get(name); + } + + return super.getAttribute(name); + } + @Override public void setId(String id, boolean notify) { super.setId(id, notify); diff --git a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index a0abf7ec7..07cc4f5ea 100644 --- a/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-6/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -41,13 +41,24 @@ import org.redisson.config.Config; */ public class RedissonSessionManager extends ManagerBase implements Lifecycle { + public enum ReadMode {REDIS, MEMORY} + private final Log log = LogFactory.getLog(RedissonSessionManager.class); protected LifecycleSupport lifecycle = new LifecycleSupport(this); private RedissonClient redisson; private String configPath; + private ReadMode readMode = ReadMode.MEMORY; + public String getReadMode() { + return readMode.toString(); + } + + public void setReadMode(String readMode) { + this.readMode = ReadMode.valueOf(readMode); + } + public void setConfigPath(String configPath) { this.configPath = configPath; } @@ -135,7 +146,7 @@ public class RedissonSessionManager extends ManagerBase implements Lifecycle { @Override public Session createEmptySession() { - return new RedissonSession(this); + return new RedissonSession(this, readMode); } @Override diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java index 3df3b6e03..b82004555 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import org.apache.catalina.session.StandardSession; import org.redisson.api.RMap; +import org.redisson.tomcat.RedissonSessionManager.ReadMode; /** * Redisson Session object for Apache Tomcat @@ -35,10 +36,12 @@ public class RedissonSession extends StandardSession { private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; + private final RedissonSessionManager.ReadMode readMode; - public RedissonSession(RedissonSessionManager manager) { + public RedissonSession(RedissonSessionManager manager, RedissonSessionManager.ReadMode readMode) { super(manager); this.redissonManager = manager; + this.readMode = readMode; try { Field attr = StandardSession.class.getDeclaredField("attributes"); attrs = (Map) attr.get(this); @@ -49,6 +52,15 @@ public class RedissonSession extends StandardSession { private static final long serialVersionUID = -2518607181636076487L; + @Override + public Object getAttribute(String name) { + if (readMode == ReadMode.REDIS) { + return map.get(name); + } + + return super.getAttribute(name); + } + @Override public void setId(String id, boolean notify) { super.setId(id, notify); diff --git a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index 9fc57f0b7..2a53bb402 100644 --- a/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-7/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -40,11 +40,22 @@ import org.redisson.config.Config; */ public class RedissonSessionManager extends ManagerBase { + public enum ReadMode {REDIS, MEMORY} + private final Log log = LogFactory.getLog(RedissonSessionManager.class); private RedissonClient redisson; private String configPath; + private ReadMode readMode = ReadMode.MEMORY; + public String getReadMode() { + return readMode.toString(); + } + + public void setReadMode(String readMode) { + this.readMode = ReadMode.valueOf(readMode); + } + public void setConfigPath(String configPath) { this.configPath = configPath; } @@ -113,7 +124,7 @@ public class RedissonSessionManager extends ManagerBase { @Override public Session createEmptySession() { - return new RedissonSession(this); + return new RedissonSession(this, readMode); } @Override diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java index 3df3b6e03..b0132f570 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSession.java @@ -23,6 +23,7 @@ import java.util.concurrent.TimeUnit; import org.apache.catalina.session.StandardSession; import org.redisson.api.RMap; +import org.redisson.tomcat.RedissonSessionManager.ReadMode; /** * Redisson Session object for Apache Tomcat @@ -35,10 +36,13 @@ public class RedissonSession extends StandardSession { private final RedissonSessionManager redissonManager; private final Map attrs; private RMap map; + private final RedissonSessionManager.ReadMode readMode; - public RedissonSession(RedissonSessionManager manager) { + public RedissonSession(RedissonSessionManager manager, RedissonSessionManager.ReadMode readMode) { super(manager); this.redissonManager = manager; + this.readMode = readMode; + try { Field attr = StandardSession.class.getDeclaredField("attributes"); attrs = (Map) attr.get(this); @@ -49,6 +53,15 @@ public class RedissonSession extends StandardSession { private static final long serialVersionUID = -2518607181636076487L; + @Override + public Object getAttribute(String name) { + if (readMode == ReadMode.REDIS) { + return map.get(name); + } + + return super.getAttribute(name); + } + @Override public void setId(String id, boolean notify) { super.setId(id, notify); diff --git a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java index dfa577e31..b16d6c075 100644 --- a/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java +++ b/redisson-tomcat/redisson-tomcat-8/src/main/java/org/redisson/tomcat/RedissonSessionManager.java @@ -39,11 +39,23 @@ import org.redisson.config.Config; */ public class RedissonSessionManager extends ManagerBase { + public enum ReadMode {REDIS, MEMORY} + private final Log log = LogFactory.getLog(RedissonSessionManager.class); private RedissonClient redisson; private String configPath; + private ReadMode readMode = ReadMode.MEMORY; + + public String getReadMode() { + return readMode.toString(); + } + + public void setReadMode(String readMode) { + this.readMode = ReadMode.valueOf(readMode); + } + public void setConfigPath(String configPath) { this.configPath = configPath; } @@ -112,7 +124,7 @@ public class RedissonSessionManager extends ManagerBase { @Override public Session createEmptySession() { - return new RedissonSession(this); + return new RedissonSession(this, readMode); } @Override