Skip to content

Commit 360b249

Browse files
authored
Merge pull request #41 from jlinn/jedis-3
Upgrade to Jedis 3.0.1
2 parents 9352e51 + c1e4349 commit 360b249

File tree

9 files changed

+801
-32
lines changed

9 files changed

+801
-32
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Maven dependency:
2121
<dependency>
2222
<groupId>net.joelinn</groupId>
2323
<artifactId>quartz-redis-jobstore</artifactId>
24-
<version>1.1.14</version>
24+
<version>1.2.0</version>
2525
</dependency>
2626
```
2727

changelog.md

+3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
# Changelog
2+
### 2019-07-02
3+
* Upgrade to Jedis 3.0.1
4+
25
### 2019-06-26
36
* Delete job data map set from Redis prior to storing new job data when updating / overwriting a job.
47
This will prevent keys which were removed from the job's data map prior to storage from being preserved.

pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
<groupId>net.joelinn</groupId>
66
<artifactId>quartz-redis-jobstore</artifactId>
7-
<version>1.1.16-SNAPSHOT</version>
7+
<version>1.2.0-SNAPSHOT</version>
88
<packaging>jar</packaging>
99
<name>quartz-redis-jobstore</name>
1010
<description>A Quartz Scheduler JobStore using Redis.</description>
@@ -63,7 +63,7 @@
6363
<dependency>
6464
<groupId>redis.clients</groupId>
6565
<artifactId>jedis</artifactId>
66-
<version>2.9.0</version>
66+
<version>3.0.1</version>
6767
</dependency>
6868

6969
<dependency>

src/main/java/net/joelinn/quartz/jobstore/AbstractRedisStorage.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@
1111
import org.quartz.utils.ClassUtils;
1212
import org.slf4j.Logger;
1313
import org.slf4j.LoggerFactory;
14-
import redis.clients.jedis.JedisCommands;
1514
import redis.clients.jedis.Tuple;
15+
import redis.clients.jedis.commands.JedisCommands;
16+
import redis.clients.jedis.params.SetParams;
1617

1718
import java.io.IOException;
1819
import java.util.*;
@@ -82,7 +83,7 @@ public AbstractRedisStorage setClusterCheckInterval(long clusterCheckInterval) {
8283
*/
8384
public boolean lock(T jedis){
8485
UUID lockId = UUID.randomUUID();
85-
final String setResponse = jedis.set(redisSchema.lockKey(), lockId.toString(), "NX", "PX", lockTimeout);
86+
final String setResponse = jedis.set(redisSchema.lockKey(), lockId.toString(), SetParams.setParams().nx().px(lockTimeout));
8687
boolean lockAcquired = !isNullOrEmpty(setResponse) && setResponse.equals("OK");
8788
if(lockAcquired){
8889
// save the random value used to lock so that we can successfully unlock later
@@ -787,7 +788,7 @@ protected boolean isJobConcurrentExecutionDisallowed(Class<? extends Job> jobCla
787788
* @return true if lock was acquired successfully; false otherwise
788789
*/
789790
protected boolean lockTrigger(TriggerKey triggerKey, T jedis){
790-
return jedis.set(redisSchema.triggerLockKey(triggerKey), schedulerInstanceId, "NX", "PX", TRIGGER_LOCK_TIMEOUT).equals("OK");
791+
return jedis.set(redisSchema.triggerLockKey(triggerKey), schedulerInstanceId, SetParams.setParams().nx().px(TRIGGER_LOCK_TIMEOUT)).equals("OK");
791792
}
792793

793794
/**

src/main/java/net/joelinn/quartz/jobstore/RedisClusterStorage.java

+20-20
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import com.fasterxml.jackson.core.type.TypeReference;
55
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import net.joelinn.quartz.jobstore.jedis.JedisClusterCommandsWrapper;
67
import org.quartz.Calendar;
78
import org.quartz.*;
89
import org.quartz.impl.matchers.GroupMatcher;
@@ -13,15 +14,14 @@
1314
import org.quartz.spi.TriggerFiredResult;
1415
import org.slf4j.Logger;
1516
import org.slf4j.LoggerFactory;
16-
import redis.clients.jedis.JedisCluster;
1717

1818
import java.util.*;
1919

2020
/**
2121
* Joe Linn
2222
* 8/22/2015
2323
*/
24-
public class RedisClusterStorage extends AbstractRedisStorage<JedisCluster> {
24+
public class RedisClusterStorage extends AbstractRedisStorage<JedisClusterCommandsWrapper> {
2525
private static final Logger logger = LoggerFactory.getLogger(RedisClusterStorage.class);
2626

2727
public RedisClusterStorage(RedisJobStoreSchema redisSchema, ObjectMapper mapper, SchedulerSignaler signaler, String schedulerInstanceId, int lockTimeout) {
@@ -38,7 +38,7 @@ public RedisClusterStorage(RedisJobStoreSchema redisSchema, ObjectMapper mapper,
3838
*/
3939
@Override
4040
@SuppressWarnings("unchecked")
41-
public void storeJob(JobDetail jobDetail, boolean replaceExisting, JedisCluster jedis) throws ObjectAlreadyExistsException {
41+
public void storeJob(JobDetail jobDetail, boolean replaceExisting, JedisClusterCommandsWrapper jedis) throws ObjectAlreadyExistsException {
4242
final String jobHashKey = redisSchema.jobHashKey(jobDetail.getKey());
4343
final String jobDataMapHashKey = redisSchema.jobDataMapHashKey(jobDetail.getKey());
4444
final String jobGroupSetKey = redisSchema.jobGroupSetKey(jobDetail.getKey());
@@ -67,7 +67,7 @@ public void storeJob(JobDetail jobDetail, boolean replaceExisting, JedisCluster
6767
* @return true if the job was removed; false if it did not exist
6868
*/
6969
@Override
70-
public boolean removeJob(JobKey jobKey, JedisCluster jedis) throws JobPersistenceException {
70+
public boolean removeJob(JobKey jobKey, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
7171
final String jobHashKey = redisSchema.jobHashKey(jobKey);
7272
final String jobBlockedKey = redisSchema.jobBlockedKey(jobKey);
7373
final String jobDataMapHashKey = redisSchema.jobDataMapHashKey(jobKey);
@@ -123,7 +123,7 @@ public boolean removeJob(JobKey jobKey, JedisCluster jedis) throws JobPersistenc
123123
* @throws ObjectAlreadyExistsException
124124
*/
125125
@Override
126-
public void storeTrigger(OperableTrigger trigger, boolean replaceExisting, JedisCluster jedis) throws JobPersistenceException {
126+
public void storeTrigger(OperableTrigger trigger, boolean replaceExisting, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
127127
final String triggerHashKey = redisSchema.triggerHashKey(trigger.getKey());
128128
final String triggerGroupSetKey = redisSchema.triggerGroupSetKey(trigger.getKey());
129129
final String jobTriggerSetKey = redisSchema.jobTriggersSetKey(trigger.getJobKey());
@@ -185,7 +185,7 @@ public void storeTrigger(OperableTrigger trigger, boolean replaceExisting, Jedis
185185
* @return true if the trigger was found and removed
186186
*/
187187
@Override
188-
protected boolean removeTrigger(TriggerKey triggerKey, boolean removeNonDurableJob, JedisCluster jedis) throws JobPersistenceException, ClassNotFoundException {
188+
protected boolean removeTrigger(TriggerKey triggerKey, boolean removeNonDurableJob, JedisClusterCommandsWrapper jedis) throws JobPersistenceException, ClassNotFoundException {
189189
final String triggerHashKey = redisSchema.triggerHashKey(triggerKey);
190190
final String triggerGroupSetKey = redisSchema.triggerGroupSetKey(triggerKey);
191191

@@ -240,7 +240,7 @@ protected boolean removeTrigger(TriggerKey triggerKey, boolean removeNonDurableJ
240240
* @throws JobPersistenceException if the unset operation failed
241241
*/
242242
@Override
243-
public boolean unsetTriggerState(String triggerHashKey, JedisCluster jedis) throws JobPersistenceException {
243+
public boolean unsetTriggerState(String triggerHashKey, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
244244
boolean removed = false;
245245
List<Long> responses = new ArrayList<>(RedisTriggerState.values().length);
246246
for (RedisTriggerState state : RedisTriggerState.values()) {
@@ -267,7 +267,7 @@ public boolean unsetTriggerState(String triggerHashKey, JedisCluster jedis) thro
267267
* @throws JobPersistenceException
268268
*/
269269
@Override
270-
public void storeCalendar(String name, Calendar calendar, boolean replaceExisting, boolean updateTriggers, JedisCluster jedis) throws JobPersistenceException {
270+
public void storeCalendar(String name, Calendar calendar, boolean replaceExisting, boolean updateTriggers, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
271271
final String calendarHashKey = redisSchema.calendarHashKey(name);
272272
if (!replaceExisting && jedis.exists(calendarHashKey)) {
273273
throw new ObjectAlreadyExistsException(String.format("Calendar with key %s already exists.", calendarHashKey));
@@ -305,7 +305,7 @@ public void storeCalendar(String name, Calendar calendar, boolean replaceExistin
305305
* @return true if a calendar with the given name was found and removed
306306
*/
307307
@Override
308-
public boolean removeCalendar(String calendarName, JedisCluster jedis) throws JobPersistenceException {
308+
public boolean removeCalendar(String calendarName, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
309309
final String calendarTriggersSetKey = redisSchema.calendarTriggersSetKey(calendarName);
310310

311311
if (jedis.scard(calendarTriggersSetKey) > 0) {
@@ -326,7 +326,7 @@ public boolean removeCalendar(String calendarName, JedisCluster jedis) throws Jo
326326
* @return the set of all JobKeys which have the given group name
327327
*/
328328
@Override
329-
public Set<JobKey> getJobKeys(GroupMatcher<JobKey> matcher, JedisCluster jedis) {
329+
public Set<JobKey> getJobKeys(GroupMatcher<JobKey> matcher, JedisClusterCommandsWrapper jedis) {
330330
Set<JobKey> jobKeys = new HashSet<>();
331331
if (matcher.getCompareWithOperator() == StringMatcher.StringOperatorName.EQUALS) {
332332
final String jobGroupSetKey = redisSchema.jobGroupSetKey(new JobKey("", matcher.getCompareToValue()));
@@ -362,7 +362,7 @@ public Set<JobKey> getJobKeys(GroupMatcher<JobKey> matcher, JedisCluster jedis)
362362
* @return the set of all TriggerKeys which have the given group name
363363
*/
364364
@Override
365-
public Set<TriggerKey> getTriggerKeys(GroupMatcher<TriggerKey> matcher, JedisCluster jedis) {
365+
public Set<TriggerKey> getTriggerKeys(GroupMatcher<TriggerKey> matcher, JedisClusterCommandsWrapper jedis) {
366366
Set<TriggerKey> triggerKeys = new HashSet<>();
367367
if (matcher.getCompareWithOperator() == StringMatcher.StringOperatorName.EQUALS) {
368368
final String triggerGroupSetKey = redisSchema.triggerGroupSetKey(new TriggerKey("", matcher.getCompareToValue()));
@@ -398,7 +398,7 @@ public Set<TriggerKey> getTriggerKeys(GroupMatcher<TriggerKey> matcher, JedisClu
398398
* @return the state of the trigger
399399
*/
400400
@Override
401-
public Trigger.TriggerState getTriggerState(TriggerKey triggerKey, JedisCluster jedis) {
401+
public Trigger.TriggerState getTriggerState(TriggerKey triggerKey, JedisClusterCommandsWrapper jedis) {
402402
final String triggerHashKey = redisSchema.triggerHashKey(triggerKey);
403403
Map<RedisTriggerState, Double> scores = new HashMap<>(RedisTriggerState.values().length);
404404
for (RedisTriggerState redisTriggerState : RedisTriggerState.values()) {
@@ -420,7 +420,7 @@ public Trigger.TriggerState getTriggerState(TriggerKey triggerKey, JedisCluster
420420
* @throws JobPersistenceException if the desired trigger does not exist
421421
*/
422422
@Override
423-
public void pauseTrigger(TriggerKey triggerKey, JedisCluster jedis) throws JobPersistenceException {
423+
public void pauseTrigger(TriggerKey triggerKey, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
424424
final String triggerHashKey = redisSchema.triggerHashKey(triggerKey);
425425
Boolean exists = jedis.exists(triggerHashKey);
426426
Double completedScore = jedis.zscore(redisSchema.triggerStateKey(RedisTriggerState.COMPLETED), triggerHashKey);
@@ -453,7 +453,7 @@ public void pauseTrigger(TriggerKey triggerKey, JedisCluster jedis) throws JobPe
453453
* @throws JobPersistenceException
454454
*/
455455
@Override
456-
public Collection<String> pauseTriggers(GroupMatcher<TriggerKey> matcher, JedisCluster jedis) throws JobPersistenceException {
456+
public Collection<String> pauseTriggers(GroupMatcher<TriggerKey> matcher, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
457457
Set<String> pausedTriggerGroups = new HashSet<>();
458458
if (matcher.getCompareWithOperator() == StringMatcher.StringOperatorName.EQUALS) {
459459
final String triggerGroupSetKey = redisSchema.triggerGroupSetKey(new TriggerKey("", matcher.getCompareToValue()));
@@ -494,7 +494,7 @@ public Collection<String> pauseTriggers(GroupMatcher<TriggerKey> matcher, JedisC
494494
* @throws JobPersistenceException
495495
*/
496496
@Override
497-
public Collection<String> pauseJobs(GroupMatcher<JobKey> groupMatcher, JedisCluster jedis) throws JobPersistenceException {
497+
public Collection<String> pauseJobs(GroupMatcher<JobKey> groupMatcher, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
498498
Set<String> pausedJobGroups = new HashSet<>();
499499
if (groupMatcher.getCompareWithOperator() == StringMatcher.StringOperatorName.EQUALS) {
500500
final String jobGroupSetKey = redisSchema.jobGroupSetKey(new JobKey("", groupMatcher.getCompareToValue()));
@@ -531,7 +531,7 @@ public Collection<String> pauseJobs(GroupMatcher<JobKey> groupMatcher, JedisClus
531531
* @param jedis a thread-safe Redis connection
532532
*/
533533
@Override
534-
public void resumeTrigger(TriggerKey triggerKey, JedisCluster jedis) throws JobPersistenceException {
534+
public void resumeTrigger(TriggerKey triggerKey, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
535535
final String triggerHashKey = redisSchema.triggerHashKey(triggerKey);
536536
Boolean exists = jedis.sismember(redisSchema.triggersSet(), triggerHashKey);
537537
Double isPaused = jedis.zscore(redisSchema.triggerStateKey(RedisTriggerState.PAUSED), triggerHashKey);
@@ -567,7 +567,7 @@ public void resumeTrigger(TriggerKey triggerKey, JedisCluster jedis) throws JobP
567567
* @return the names of trigger groups which were resumed
568568
*/
569569
@Override
570-
public Collection<String> resumeTriggers(GroupMatcher<TriggerKey> matcher, JedisCluster jedis) throws JobPersistenceException {
570+
public Collection<String> resumeTriggers(GroupMatcher<TriggerKey> matcher, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
571571
Set<String> resumedTriggerGroups = new HashSet<>();
572572
if (matcher.getCompareWithOperator() == StringMatcher.StringOperatorName.EQUALS) {
573573
final String triggerGroupSetKey = redisSchema.triggerGroupSetKey(new TriggerKey("", matcher.getCompareToValue()));
@@ -596,7 +596,7 @@ public Collection<String> resumeTriggers(GroupMatcher<TriggerKey> matcher, Jedis
596596
* @return the set of job groups which were matched and resumed
597597
*/
598598
@Override
599-
public Collection<String> resumeJobs(GroupMatcher<JobKey> matcher, JedisCluster jedis) throws JobPersistenceException {
599+
public Collection<String> resumeJobs(GroupMatcher<JobKey> matcher, JedisClusterCommandsWrapper jedis) throws JobPersistenceException {
600600
Set<String> resumedJobGroups = new HashSet<>();
601601
if (matcher.getCompareWithOperator() == StringMatcher.StringOperatorName.EQUALS) {
602602
final String jobGroupSetKey = redisSchema.jobGroupSetKey(new JobKey("", matcher.getCompareToValue()));
@@ -631,7 +631,7 @@ public Collection<String> resumeJobs(GroupMatcher<JobKey> matcher, JedisCluster
631631
* could be fired.
632632
*/
633633
@Override
634-
public List<TriggerFiredResult> triggersFired(List<OperableTrigger> triggers, JedisCluster jedis) throws JobPersistenceException, ClassNotFoundException {
634+
public List<TriggerFiredResult> triggersFired(List<OperableTrigger> triggers, JedisClusterCommandsWrapper jedis) throws JobPersistenceException, ClassNotFoundException {
635635
List<TriggerFiredResult> results = new ArrayList<>();
636636
for (OperableTrigger trigger : triggers) {
637637
final String triggerHashKey = redisSchema.triggerHashKey(trigger.getKey());
@@ -716,7 +716,7 @@ public List<TriggerFiredResult> triggersFired(List<OperableTrigger> triggers, Je
716716
* @param jedis a thread-safe Redis connection
717717
*/
718718
@Override
719-
public void triggeredJobComplete(OperableTrigger trigger, JobDetail jobDetail, Trigger.CompletedExecutionInstruction triggerInstCode, JedisCluster jedis) throws JobPersistenceException, ClassNotFoundException {
719+
public void triggeredJobComplete(OperableTrigger trigger, JobDetail jobDetail, Trigger.CompletedExecutionInstruction triggerInstCode, JedisClusterCommandsWrapper jedis) throws JobPersistenceException, ClassNotFoundException {
720720
final String jobHashKey = redisSchema.jobHashKey(jobDetail.getKey());
721721
final String jobDataMapHashKey = redisSchema.jobDataMapHashKey(jobDetail.getKey());
722722
final String triggerHashKey = redisSchema.triggerHashKey(trigger.getKey());

src/main/java/net/joelinn/quartz/jobstore/RedisJobStore.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.fasterxml.jackson.annotation.JsonInclude;
44
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import net.joelinn.quartz.jobstore.jedis.JedisClusterCommandsWrapper;
56
import net.joelinn.quartz.jobstore.mixin.CronTriggerMixin;
67
import net.joelinn.quartz.jobstore.mixin.HolidayCalendarMixin;
78
import net.joelinn.quartz.jobstore.mixin.JobDetailMixin;
@@ -14,7 +15,8 @@
1415
import org.slf4j.Logger;
1516
import org.slf4j.LoggerFactory;
1617
import redis.clients.jedis.*;
17-
import redis.clients.util.Pool;
18+
import redis.clients.jedis.commands.JedisCommands;
19+
import redis.clients.jedis.util.Pool;
1820

1921
import java.util.*;
2022

@@ -28,7 +30,7 @@ public class RedisJobStore implements JobStore {
2830

2931
private Pool<Jedis> jedisPool;
3032

31-
private JedisCluster jedisCluster;
33+
private JedisClusterCommandsWrapper jedisCluster;
3234

3335
/**
3436
* Redis lock timeout in milliseconds
@@ -122,7 +124,7 @@ public RedisJobStore setJedisPool(Pool<Jedis> jedisPool) {
122124
}
123125

124126

125-
public RedisJobStore setJedisCluster(JedisCluster jedisCluster) {
127+
public RedisJobStore setJedisCluster(JedisClusterCommandsWrapper jedisCluster) {
126128
this.jedisCluster = jedisCluster;
127129
return this;
128130
}
@@ -162,7 +164,7 @@ public void initialize(ClassLoadHelper loadHelper, SchedulerSignaler signaler) t
162164
if (redisCluster && jedisCluster == null) {
163165
Set<HostAndPort> nodes = buildNodesSetFromHost();
164166
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
165-
jedisCluster = new JedisCluster(nodes, this.conTimeout, this.soTimeout, this.conRetries, this.password,jedisPoolConfig);
167+
jedisCluster = new JedisClusterCommandsWrapper(new JedisCluster(nodes, this.conTimeout, this.soTimeout, this.conRetries, this.password,jedisPoolConfig));
166168
storage = new RedisClusterStorage(redisSchema, mapper, signaler, instanceId, lockTimeout);
167169
} else if (jedisPool == null) {
168170
JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();

0 commit comments

Comments
 (0)