Don't send expirations del events when expiration time does not change.
Expiration time is rounded up, so in case of many request per second from a single session we can skip sending of delete event to reduce the traffic. This is good because actually at the moment the redis repository is subscribed for this events, even though it ignores them. Fix gh-315
This commit is contained in:
@@ -59,7 +59,7 @@ public class RedisSessionExpirationPolicyTests {
|
||||
RedisOperationsSessionRepository repository = new RedisOperationsSessionRepository(sessionRedisOperations);
|
||||
policy = new RedisSessionExpirationPolicy(sessionRedisOperations, repository);
|
||||
session = new MapSession();
|
||||
session.setLastAccessedTime(1429116694665L);
|
||||
session.setLastAccessedTime(1429116694675L);
|
||||
session.setId("12345");
|
||||
|
||||
when(sessionRedisOperations.boundSetOps(anyString())).thenReturn(setOperations);
|
||||
@@ -81,6 +81,19 @@ public class RedisSessionExpirationPolicyTests {
|
||||
verify(setOperations).remove("expires:"+ session.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onExpirationUpdatedDoNotSendDeleteWhenExpirationTimeDoesNotChange() throws Exception {
|
||||
long originalExpirationTimeInMs = RedisSessionExpirationPolicy.expiresInMillis(session) - 10;
|
||||
long originalRoundedToNextMinInMs = RedisSessionExpirationPolicy.roundUpToNextMinute(originalExpirationTimeInMs);
|
||||
String originalExpireKey = policy.getExpirationKey(originalRoundedToNextMinInMs);
|
||||
|
||||
policy.onExpirationUpdated(originalExpirationTimeInMs, session);
|
||||
|
||||
// verify the original is not removed
|
||||
verify(sessionRedisOperations).boundSetOps(originalExpireKey);
|
||||
verify(setOperations, never()).remove("expires:"+ session.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onExpirationUpdatedAddsExpirationTimeRoundedUp() throws Exception {
|
||||
long expirationTimeInMs = RedisSessionExpirationPolicy.expiresInMillis(session);
|
||||
|
||||
Reference in New Issue
Block a user