Skip to content
This repository was archived by the owner on Dec 13, 2023. It is now read-only.

Commit 787f856

Browse files
Merge pull request #972 from davidwadden/redis-auth
Redis Authentication Support
2 parents 4853900 + a24b7c8 commit 787f856

7 files changed

Lines changed: 142 additions & 34 deletions

File tree

redis-persistence/dependencies.lock

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@
6767
"project": true
6868
},
6969
"com.netflix.dyno-queues:dyno-queues-redis": {
70-
"locked": "2.0.0-rc4",
71-
"requested": "2.0.0-rc4"
70+
"locked": "2.0.0-rc5",
71+
"requested": "2.0.0-rc5"
7272
},
7373
"com.netflix.servo:servo-core": {
7474
"firstLevelTransitive": [
@@ -189,8 +189,8 @@
189189
"project": true
190190
},
191191
"com.netflix.dyno-queues:dyno-queues-redis": {
192-
"locked": "2.0.0-rc4",
193-
"requested": "2.0.0-rc4"
192+
"locked": "2.0.0-rc5",
193+
"requested": "2.0.0-rc5"
194194
},
195195
"com.netflix.servo:servo-core": {
196196
"firstLevelTransitive": [
@@ -311,8 +311,8 @@
311311
"project": true
312312
},
313313
"com.netflix.dyno-queues:dyno-queues-redis": {
314-
"locked": "2.0.0-rc4",
315-
"requested": "2.0.0-rc4"
314+
"locked": "2.0.0-rc5",
315+
"requested": "2.0.0-rc5"
316316
},
317317
"com.netflix.servo:servo-core": {
318318
"firstLevelTransitive": [
@@ -443,8 +443,8 @@
443443
"project": true
444444
},
445445
"com.netflix.dyno-queues:dyno-queues-redis": {
446-
"locked": "2.0.0-rc4",
447-
"requested": "2.0.0-rc4"
446+
"locked": "2.0.0-rc5",
447+
"requested": "2.0.0-rc5"
448448
},
449449
"com.netflix.servo:servo-core": {
450450
"firstLevelTransitive": [
@@ -565,8 +565,8 @@
565565
"project": true
566566
},
567567
"com.netflix.dyno-queues:dyno-queues-redis": {
568-
"locked": "2.0.0-rc4",
569-
"requested": "2.0.0-rc4"
568+
"locked": "2.0.0-rc5",
569+
"requested": "2.0.0-rc5"
570570
},
571571
"com.netflix.servo:servo-core": {
572572
"firstLevelTransitive": [
@@ -687,8 +687,8 @@
687687
"project": true
688688
},
689689
"com.netflix.dyno-queues:dyno-queues-redis": {
690-
"locked": "2.0.0-rc4",
691-
"requested": "2.0.0-rc4"
690+
"locked": "2.0.0-rc5",
691+
"requested": "2.0.0-rc5"
692692
},
693693
"com.netflix.servo:servo-core": {
694694
"firstLevelTransitive": [
@@ -817,8 +817,8 @@
817817
"project": true
818818
},
819819
"com.netflix.dyno-queues:dyno-queues-redis": {
820-
"locked": "2.0.0-rc4",
821-
"requested": "2.0.0-rc4"
820+
"locked": "2.0.0-rc5",
821+
"requested": "2.0.0-rc5"
822822
},
823823
"com.netflix.servo:servo-core": {
824824
"firstLevelTransitive": [
@@ -947,8 +947,8 @@
947947
"project": true
948948
},
949949
"com.netflix.dyno-queues:dyno-queues-redis": {
950-
"locked": "2.0.0-rc4",
951-
"requested": "2.0.0-rc4"
950+
"locked": "2.0.0-rc5",
951+
"requested": "2.0.0-rc5"
952952
},
953953
"com.netflix.servo:servo-core": {
954954
"firstLevelTransitive": [
@@ -1077,8 +1077,8 @@
10771077
"project": true
10781078
},
10791079
"com.netflix.dyno-queues:dyno-queues-redis": {
1080-
"locked": "2.0.0-rc4",
1081-
"requested": "2.0.0-rc4"
1080+
"locked": "2.0.0-rc5",
1081+
"requested": "2.0.0-rc5"
10821082
},
10831083
"com.netflix.servo:servo-core": {
10841084
"firstLevelTransitive": [

redis-persistence/src/main/java/com/netflix/conductor/jedis/ConfigurationHostSupplierProvider.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ private List<Host> parseHostsFrom(String hostConfig){
5151
String host = hostConfigValues[0];
5252
int port = Integer.parseInt(hostConfigValues[1]);
5353
String rack = hostConfigValues[2];
54+
55+
if (hostConfigValues.length >= 4) {
56+
String password = hostConfigValues[3];
57+
return new Host(host, port, rack, Host.Status.Up, null, password);
58+
}
59+
5460
return new Host(host, port, rack, Host.Status.Up);
5561
}).collect(Collectors.toList());
5662

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package com.netflix.conductor.jedis;
2+
3+
import com.netflix.conductor.dyno.SystemPropertiesDynomiteConfiguration;
4+
import com.netflix.dyno.connectionpool.Host;
5+
import java.io.IOException;
6+
import java.io.InputStream;
7+
import java.util.List;
8+
import java.util.Map;
9+
import java.util.Properties;
10+
import org.junit.Assert;
11+
import org.junit.Before;
12+
import org.junit.Test;
13+
14+
public class ConfigurationHostSupplierProviderTest {
15+
16+
private TestPropertiesDynomiteConfiguration configuration;
17+
private ConfigurationHostSupplierProvider provider;
18+
19+
@Before
20+
public void setUp() throws Exception {
21+
configuration = new TestPropertiesDynomiteConfiguration();
22+
provider = new ConfigurationHostSupplierProvider(configuration);
23+
}
24+
25+
@Test
26+
public void getHost() throws Exception {
27+
configuration.setProperty("workflow.dynomite.cluster.hosts", "dyno1:8102:us-east-1c");
28+
29+
List<Host> hosts = provider.get().getHosts();
30+
31+
Assert.assertEquals(1, hosts.size());
32+
Host firstHost = hosts.get(0);
33+
Assert.assertEquals("dyno1", firstHost.getHostName());
34+
Assert.assertEquals(8102, firstHost.getPort());
35+
Assert.assertEquals("us-east-1c", firstHost.getRack());
36+
Assert.assertTrue(firstHost.isUp());
37+
}
38+
39+
@Test
40+
public void getMultipleHosts() throws Exception {
41+
configuration.setProperty("workflow.dynomite.cluster.hosts",
42+
"dyno1:8102:us-east-1c;dyno2:8103:us-east-1c");
43+
44+
List<Host> hosts = provider.get().getHosts();
45+
46+
Assert.assertEquals(2, hosts.size());
47+
Host firstHost = hosts.get(0);
48+
Assert.assertEquals("dyno1", firstHost.getHostName());
49+
Assert.assertEquals(8102, firstHost.getPort());
50+
Assert.assertEquals("us-east-1c", firstHost.getRack());
51+
Assert.assertTrue(firstHost.isUp());
52+
Host secondHost = hosts.get(1);
53+
Assert.assertEquals("dyno2", secondHost.getHostName());
54+
Assert.assertEquals(8103, secondHost.getPort());
55+
Assert.assertEquals("us-east-1c", secondHost.getRack());
56+
Assert.assertTrue(secondHost.isUp());
57+
}
58+
59+
@Test
60+
public void getAuthenticatedHost() throws Exception {
61+
configuration
62+
.setProperty("workflow.dynomite.cluster.hosts", "redis1:6432:us-east-1c:password");
63+
64+
List<Host> hosts = provider.get().getHosts();
65+
66+
Assert.assertEquals(1, hosts.size());
67+
Host firstHost = hosts.get(0);
68+
Assert.assertEquals("redis1", firstHost.getHostName());
69+
Assert.assertEquals(6432, firstHost.getPort());
70+
Assert.assertEquals("us-east-1c", firstHost.getRack());
71+
Assert.assertEquals("password", firstHost.getPassword());
72+
Assert.assertTrue(firstHost.isUp());
73+
}
74+
75+
private static class TestPropertiesDynomiteConfiguration extends
76+
SystemPropertiesDynomiteConfiguration {
77+
78+
private Properties prop;
79+
80+
TestPropertiesDynomiteConfiguration() {
81+
prop = new Properties();
82+
}
83+
84+
@Override
85+
public String getProperty(String key, String defaultValue) {
86+
return prop.getOrDefault(key, defaultValue).toString();
87+
}
88+
89+
@Override
90+
public Map<String, Object> getAll() {
91+
return (Map) prop;
92+
}
93+
94+
public void setProperty(String key, String value) {
95+
prop.setProperty(key, value);
96+
}
97+
}
98+
}

server/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ format is host:port:rack separated by semicolon
2626
for AWS Elasticache Redis (cluster mode enabled) the format is configuration_endpoint:port:us-east-1e. The region in this case does not matter
2727
`workflow.dynomite.cluster.hosts=host1:8102:us-east-1c;host2:8102:us-east-1d;host3:8102:us-east-1e`
2828

29+
#### Redis authentication
30+
An optional 4th colon-delimited field can be appended to the cluster definition to specify the password for Redis authentication.
31+
`workflow.dynomite.cluster.hosts=host1:8102:us-east-1c:password`
32+
2933
### Dynomite cluster name
3034
`workflow.dynomite.cluster.name=dyno_cluster_name`
3135

server/dependencies.lock

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@
136136
"firstLevelTransitive": [
137137
"com.netflix.conductor:conductor-redis-persistence"
138138
],
139-
"locked": "2.0.0-rc4"
139+
"locked": "2.0.0-rc5"
140140
},
141141
"com.netflix.runtime:health-api": {
142142
"firstLevelTransitive": [
@@ -495,7 +495,7 @@
495495
"firstLevelTransitive": [
496496
"com.netflix.conductor:conductor-redis-persistence"
497497
],
498-
"locked": "2.0.0-rc4"
498+
"locked": "2.0.0-rc5"
499499
},
500500
"com.netflix.runtime:health-api": {
501501
"firstLevelTransitive": [
@@ -854,7 +854,7 @@
854854
"firstLevelTransitive": [
855855
"com.netflix.conductor:conductor-redis-persistence"
856856
],
857-
"locked": "2.0.0-rc4"
857+
"locked": "2.0.0-rc5"
858858
},
859859
"com.netflix.runtime:health-api": {
860860
"firstLevelTransitive": [
@@ -1213,7 +1213,7 @@
12131213
"firstLevelTransitive": [
12141214
"com.netflix.conductor:conductor-redis-persistence"
12151215
],
1216-
"locked": "2.0.0-rc4"
1216+
"locked": "2.0.0-rc5"
12171217
},
12181218
"com.netflix.runtime:health-api": {
12191219
"firstLevelTransitive": [
@@ -1642,7 +1642,7 @@
16421642
"firstLevelTransitive": [
16431643
"com.netflix.conductor:conductor-redis-persistence"
16441644
],
1645-
"locked": "2.0.0-rc4"
1645+
"locked": "2.0.0-rc5"
16461646
},
16471647
"com.netflix.runtime:health-api": {
16481648
"firstLevelTransitive": [
@@ -2001,7 +2001,7 @@
20012001
"firstLevelTransitive": [
20022002
"com.netflix.conductor:conductor-redis-persistence"
20032003
],
2004-
"locked": "2.0.0-rc4"
2004+
"locked": "2.0.0-rc5"
20052005
},
20062006
"com.netflix.runtime:health-api": {
20072007
"firstLevelTransitive": [
@@ -2360,7 +2360,7 @@
23602360
"firstLevelTransitive": [
23612361
"com.netflix.conductor:conductor-redis-persistence"
23622362
],
2363-
"locked": "2.0.0-rc4"
2363+
"locked": "2.0.0-rc5"
23642364
},
23652365
"com.netflix.runtime:health-api": {
23662366
"firstLevelTransitive": [
@@ -2719,7 +2719,7 @@
27192719
"firstLevelTransitive": [
27202720
"com.netflix.conductor:conductor-redis-persistence"
27212721
],
2722-
"locked": "2.0.0-rc4"
2722+
"locked": "2.0.0-rc5"
27232723
},
27242724
"com.netflix.runtime:health-api": {
27252725
"firstLevelTransitive": [
@@ -3086,7 +3086,7 @@
30863086
"firstLevelTransitive": [
30873087
"com.netflix.conductor:conductor-redis-persistence"
30883088
],
3089-
"locked": "2.0.0-rc4"
3089+
"locked": "2.0.0-rc5"
30903090
},
30913091
"com.netflix.runtime:health-api": {
30923092
"firstLevelTransitive": [
@@ -3453,7 +3453,7 @@
34533453
"firstLevelTransitive": [
34543454
"com.netflix.conductor:conductor-redis-persistence"
34553455
],
3456-
"locked": "2.0.0-rc4"
3456+
"locked": "2.0.0-rc5"
34573457
},
34583458
"com.netflix.runtime:health-api": {
34593459
"firstLevelTransitive": [
@@ -3820,7 +3820,7 @@
38203820
"firstLevelTransitive": [
38213821
"com.netflix.conductor:conductor-redis-persistence"
38223822
],
3823-
"locked": "2.0.0-rc4"
3823+
"locked": "2.0.0-rc5"
38243824
},
38253825
"com.netflix.runtime:health-api": {
38263826
"firstLevelTransitive": [

test-harness/dependencies.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@
206206
"firstLevelTransitive": [
207207
"com.netflix.conductor:conductor-redis-persistence"
208208
],
209-
"locked": "2.0.0-rc4"
209+
"locked": "2.0.0-rc5"
210210
},
211211
"com.netflix.eureka:eureka-client": {
212212
"firstLevelTransitive": [
@@ -670,7 +670,7 @@
670670
"firstLevelTransitive": [
671671
"com.netflix.conductor:conductor-redis-persistence"
672672
],
673-
"locked": "2.0.0-rc4"
673+
"locked": "2.0.0-rc5"
674674
},
675675
"com.netflix.eureka:eureka-client": {
676676
"firstLevelTransitive": [
@@ -1134,7 +1134,7 @@
11341134
"firstLevelTransitive": [
11351135
"com.netflix.conductor:conductor-redis-persistence"
11361136
],
1137-
"locked": "2.0.0-rc4"
1137+
"locked": "2.0.0-rc5"
11381138
},
11391139
"com.netflix.eureka:eureka-client": {
11401140
"firstLevelTransitive": [
@@ -1598,7 +1598,7 @@
15981598
"firstLevelTransitive": [
15991599
"com.netflix.conductor:conductor-redis-persistence"
16001600
],
1601-
"locked": "2.0.0-rc4"
1601+
"locked": "2.0.0-rc5"
16021602
},
16031603
"com.netflix.eureka:eureka-client": {
16041604
"firstLevelTransitive": [

versionsOfDependencies.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ ext {
99
revCassandraUnit = '3.5.0.1'
1010
revCommonsLang3 = '3.0'
1111
revCommonsIo = '2.4'
12-
revDynoQueues = '2.0.0-rc4'
12+
revDynoQueues = '2.0.0-rc5'
1313
revElasticSearch5 = '5.6.8'
1414
revElasticSearch5Client = '5.6.8'
1515
revElasticSearch6 = '6.5.1'

0 commit comments

Comments
 (0)