Bug fixes and added redis sentinel supportability changes.

pull/27/head
Ranjith Manickam 2018-12-04 03:11:58 +05:30
parent 551a855675
commit ecca5a5794
1 changed files with 23 additions and 24 deletions

View File

@ -17,26 +17,25 @@ import java.util.concurrent.TimeUnit;
/** author: Ranjith Manickam @ 3 Dec' 2018 */ /** author: Ranjith Manickam @ 3 Dec' 2018 */
public class StandardDataCache extends RedisCache { public class StandardDataCache extends RedisCache {
private boolean triggerDataSync; private boolean processDataSync;
private Date expiryJobTriggered; private long expiryJob;
private Date dataSyncJobTriggered; private long dataSyncJob;
private final int expiryJobTriggerInterval;
private final int dataSyncJobTriggerInterval;
private final int sessionExpiryTime; private final int sessionExpiryTime;
private final long expiryJobTriggerInterval;
private final long dataSyncJobTriggerInterval;
private final Map<String, SessionData> sessionData; private final Map<String, SessionData> sessionData;
public StandardDataCache(Properties properties, int sessionExpiryTime) { public StandardDataCache(Properties properties, int sessionExpiryTime) {
super(properties); super(properties);
this.sessionExpiryTime = sessionExpiryTime; this.sessionExpiryTime = sessionExpiryTime;
this.sessionData = new ConcurrentHashMap<>(); this.sessionData = new ConcurrentHashMap<>();
this.expiryJobTriggered = new Date(); this.expiryJob = new Date().getTime();
this.dataSyncJobTriggered = new Date(); this.dataSyncJob = new Date().getTime();
this.triggerDataSync = false; this.processDataSync = false;
this.expiryJobTriggerInterval = Integer.parseInt(DataCacheFactory.getProperty(properties, DataCacheConstants.SESSION_EXPIRY_JOB_INTERVAL)); this.expiryJobTriggerInterval = TimeUnit.MINUTES.toMillis(Integer.parseInt(DataCacheFactory.getProperty(properties, DataCacheConstants.SESSION_EXPIRY_JOB_INTERVAL)));
this.dataSyncJobTriggerInterval = Integer.parseInt(DataCacheFactory.getProperty(properties, DataCacheConstants.SESSION_DATA_SYNC_JOB_INTERVAL)); this.dataSyncJobTriggerInterval = TimeUnit.MINUTES.toMillis(Integer.parseInt(DataCacheFactory.getProperty(properties, DataCacheConstants.SESSION_DATA_SYNC_JOB_INTERVAL)));
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@ -46,7 +45,7 @@ public class StandardDataCache extends RedisCache {
try { try {
return super.set(key, value); return super.set(key, value);
} catch (RuntimeException ex) { } catch (RuntimeException ex) {
this.triggerDataSync = true; this.processDataSync = true;
} }
return value; return value;
} }
@ -59,7 +58,7 @@ public class StandardDataCache extends RedisCache {
retValue = super.setnx(key, value); retValue = super.setnx(key, value);
} catch (RuntimeException ex) { } catch (RuntimeException ex) {
retValue = this.sessionData.containsKey(key) ? 0L : 1L; retValue = this.sessionData.containsKey(key) ? 0L : 1L;
this.triggerDataSync = true; this.processDataSync = true;
} }
if (retValue == 1L) { if (retValue == 1L) {
@ -74,7 +73,7 @@ public class StandardDataCache extends RedisCache {
try { try {
return super.expire(key, seconds); return super.expire(key, seconds);
} catch (RuntimeException ex) { } catch (RuntimeException ex) {
this.triggerDataSync = true; this.processDataSync = true;
} }
return null; return null;
} }
@ -89,7 +88,7 @@ public class StandardDataCache extends RedisCache {
try { try {
return super.get(key); return super.get(key);
} catch (RuntimeException ex) { } catch (RuntimeException ex) {
this.triggerDataSync = true; this.processDataSync = true;
throw ex; throw ex;
} }
} }
@ -101,7 +100,7 @@ public class StandardDataCache extends RedisCache {
try { try {
return super.delete(key); return super.delete(key);
} catch (RuntimeException ex) { } catch (RuntimeException ex) {
this.triggerDataSync = true; this.processDataSync = true;
} }
return (value == null) ? 0L : 1L; return (value == null) ? 0L : 1L;
} }
@ -133,21 +132,21 @@ public class StandardDataCache extends RedisCache {
/** To handle session data. */ /** To handle session data. */
private synchronized void handleSessionData() { private synchronized void handleSessionData() {
// redis sync // redis sync
if (this.triggerDataSync) { if (this.processDataSync) {
long difference = new Date().getTime() - this.dataSyncJobTriggered.getTime(); long difference = new Date().getTime() - this.dataSyncJob;
if (difference >= TimeUnit.MINUTES.toMillis(this.dataSyncJobTriggerInterval)) { if (difference >= this.dataSyncJobTriggerInterval) {
new SessionDataSyncThread(this, this.sessionData, this.sessionExpiryTime); new SessionDataSyncThread(this, this.sessionData, this.sessionExpiryTime);
this.triggerDataSync = false; this.processDataSync = false;
this.dataSyncJobTriggered = new Date(); this.dataSyncJob = new Date().getTime();
} }
} }
// session expiry // session expiry
long difference = new Date().getTime() - this.expiryJobTriggered.getTime(); long difference = new Date().getTime() - this.expiryJob;
if (difference >= TimeUnit.MINUTES.toMillis(this.expiryJobTriggerInterval)) { if (difference >= this.expiryJobTriggerInterval) {
new SessionDataExpiryThread(this.sessionData, this.sessionExpiryTime); new SessionDataExpiryThread(this.sessionData, this.sessionExpiryTime);
this.expiryJobTriggered = new Date(); this.expiryJob = new Date().getTime();
} }
} }