Skip to content

Commit 63ea3bd

Browse files
committed
Add support for kdb and kurrent protocols
1 parent 82d0c02 commit 63ea3bd

File tree

3 files changed

+53
-42
lines changed

3 files changed

+53
-42
lines changed

db-client-java/src/main/java/io/kurrent/dbclient/ConnectionSettingsBuilder.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
*/
1717
public class ConnectionSettingsBuilder {
1818
private static final Logger logger = LoggerFactory.getLogger(ConnectionSettingsBuilder.class);
19+
private static final Set<String> SUPPORTED_PROTOCOLS = new HashSet<>(Arrays.asList("esdb", "esdb+discover", "kurrent", "kdb", "kdb+discover", "kurrent+discover"));
20+
1921
private boolean _dnsDiscover = false;
2022
private int _maxDiscoverAttempts = 3;
2123
private int _discoveryInterval = 500;
@@ -257,10 +259,13 @@ void parseGossipSeed(String host) {
257259
}
258260

259261
static KurrentDBClientSettings parseFromUrl(ConnectionSettingsBuilder builder, URL url) {
260-
if (!url.getProtocol().equals("esdb") && !url.getProtocol().equals("esdb+discover"))
262+
if (!SUPPORTED_PROTOCOLS.contains(url.getProtocol()))
261263
throw new RuntimeException(String.format("Unknown URL scheme: %s", url.getProtocol()));
262264

263-
builder.dnsDiscover(url.getProtocol().equals("esdb+discover"));
265+
if (url.getProtocol().startsWith("esdb"))
266+
logger.warn("The 'esdb' protocol is deprecated. Please use 'kurrent' or 'kdb' instead.");
267+
268+
builder.dnsDiscover(url.getProtocol().endsWith("+discover"));
264269

265270
if (url.getUserInfo() != null && !url.getUserInfo().isEmpty()) {
266271
String[] splits = url.getUserInfo().split(":", 2);

db-client-java/src/test/java/io/kurrent/dbclient/misc/ParseInvalidConnectionStringTests.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,20 @@ public static Stream<Arguments> invalidConnectionStrings() {
1414
return Stream.of(
1515
Arguments.of("localhost"),
1616
Arguments.of("https://console.eventstore.cloud/"),
17-
Arguments.of("esbd+discovery://localhost"),
18-
Arguments.of("esdb://my:great@username:UyeXx8$^PsOo4jG88FlCauR1Coz25q@host?nodePreference=follower&tlsVerifyCert=false"),
19-
Arguments.of("esdb://host1,host2:200:300?tlsVerifyCert=false"),
20-
Arguments.of("esdb://localhost/&tlsVerifyCert=false"),
21-
Arguments.of("esdb://localhost?tlsVerifyCert=false?nodePreference=follower"),
22-
Arguments.of("esdb://localhost?tlsVerifyCert=false&nodePreference=any"),
23-
Arguments.of("esdb://localhost?tlsVerifyCert=if you feel like it"),
24-
Arguments.of("esdb://localhost?keepAliveInterval=-3"),
25-
Arguments.of("esdb://localhost?keepAliveInterval=sdfksjsfl"),
26-
Arguments.of("esdb://localhost?keepAliveTimeout=sdfksjsfl"),
27-
Arguments.of("esdb://localhost?keepAliveTimeout=-3"),
28-
Arguments.of("esdb://localhost?nodePreference=read_only_replica"),
29-
Arguments.of("esdb://localhost?userCertFile=/path/to/cert"),
30-
Arguments.of("esdb://localhost?userKeyFile=/path/to/key")
17+
Arguments.of("kurnt+discovery://localhost"),
18+
Arguments.of("kurrent://my:great@username:UyeXx8$^PsOo4jG88FlCauR1Coz25q@host?nodePreference=follower&tlsVerifyCert=false"),
19+
Arguments.of("kurrent://host1,host2:200:300?tlsVerifyCert=false"),
20+
Arguments.of("kurrent://localhost/&tlsVerifyCert=false"),
21+
Arguments.of("kurrent://localhost?tlsVerifyCert=false?nodePreference=follower"),
22+
Arguments.of("kurrent://localhost?tlsVerifyCert=false&nodePreference=any"),
23+
Arguments.of("kurrent://localhost?tlsVerifyCert=if you feel like it"),
24+
Arguments.of("kurrent://localhost?keepAliveInterval=-3"),
25+
Arguments.of("kurrent://localhost?keepAliveInterval=sdfksjsfl"),
26+
Arguments.of("kurrent://localhost?keepAliveTimeout=sdfksjsfl"),
27+
Arguments.of("kurrent://localhost?keepAliveTimeout=-3"),
28+
Arguments.of("kurrent://localhost?nodePreference=read_only_replica"),
29+
Arguments.of("kurrent://localhost?userCertFile=/path/to/cert"),
30+
Arguments.of("kurrent://localhost?userKeyFile=/path/to/key")
3131
);
3232
}
3333

db-client-java/src/test/java/io/kurrent/dbclient/misc/ParseValidConnectionStringTests.java

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.kurrent.dbclient.misc;
22

33
import java.net.InetSocketAddress;
4+
import java.util.List;
45
import java.util.stream.IntStream;
56
import java.util.stream.Stream;
67

@@ -16,110 +17,115 @@
1617
public class ParseValidConnectionStringTests {
1718
private final JsonMapper mapper = new JsonMapper();
1819

20+
private static final List<String> PROTOCOLS = List.of("esdb", "kurrent", "kdb");
1921

2022
public static Stream<Arguments> validConnectionStrings() {
21-
return Stream.of(
23+
List<Arguments> baseConnectionStrings = List.of(
2224
Arguments.of(
23-
"esdb://localhost",
25+
"://localhost",
2426
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"localhost\",\"port\":2113}]}"
2527
),
2628
Arguments.of(
27-
"esdb://localhost:2114",
29+
"://localhost:2114",
2830
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"localhost\",\"port\":2114}]}"
2931
),
3032
Arguments.of(
31-
"esdb://user:pass@localhost:2114",
33+
"://user:pass@localhost:2114",
3234
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"defaultCredentials\":{\"login\":\"user\",\"password\":\"pass\"},\"hosts\":[{\"address\":\"localhost\",\"port\":2114}]}"
3335
),
3436
Arguments.of(
35-
"esdb://user:pass@localhost:2114/",
37+
"://user:pass@localhost:2114/",
3638
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"defaultCredentials\":{\"login\":\"user\",\"password\":\"pass\"},\"hosts\":[{\"address\":\"localhost\",\"port\":2114}]}"
3739
),
3840
Arguments.of(
39-
"esdb://user:pass@localhost:2114/?tlsVerifyCert=false",
41+
"://user:pass@localhost:2114/?tlsVerifyCert=false",
4042
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":false,\"throwOnAppendFailure\":true,\"defaultCredentials\":{\"login\":\"user\",\"password\":\"pass\"},\"hosts\":[{\"address\":\"localhost\",\"port\":2114}]}"
4143
),
4244
Arguments.of(
43-
"esdb://user:pass@localhost:2114?tlsVerifyCert=false",
45+
"://user:pass@localhost:2114?tlsVerifyCert=false",
4446
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":false,\"throwOnAppendFailure\":true,\"defaultCredentials\":{\"login\":\"user\",\"password\":\"pass\"},\"hosts\":[{\"address\":\"localhost\",\"port\":2114}]}"
4547
),
4648
Arguments.of(
47-
"esdb://user:pass@localhost:2114?tls=false",
49+
"://user:pass@localhost:2114?tls=false",
4850
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":false,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"defaultCredentials\":{\"login\":\"user\",\"password\":\"pass\"},\"hosts\":[{\"address\":\"localhost\",\"port\":2114}]}"
4951
),
5052
Arguments.of(
51-
"esdb://host1,host2,host3",
53+
"://host1,host2,host3",
5254
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"host1\",\"port\":2113},{\"address\":\"host2\",\"port\":2113},{\"address\":\"host3\",\"port\":2113}]}"
5355
),
5456
Arguments.of(
55-
"esdb://host1:1234,host2:4321,host3:3231",
57+
"://host1:1234,host2:4321,host3:3231",
5658
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"host1\",\"port\":1234},{\"address\":\"host2\",\"port\":4321},{\"address\":\"host3\",\"port\":3231}]}"
5759
),
5860
Arguments.of(
59-
"esdb://bubaqp2rh41uf5akmj0g-0.mesdb.eventstore.cloud:2113,bubaqp2rh41uf5akmj0g-1.mesdb.eventstore.cloud:2113,bubaqp2rh41uf5akmj0g-2.mesdb.eventstore.cloud:2113",
61+
"://bubaqp2rh41uf5akmj0g-0.mesdb.eventstore.cloud:2113,bubaqp2rh41uf5akmj0g-1.mesdb.eventstore.cloud:2113,bubaqp2rh41uf5akmj0g-2.mesdb.eventstore.cloud:2113",
6062
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"bubaqp2rh41uf5akmj0g-0.mesdb.eventstore.cloud\",\"port\":2113},{\"address\":\"bubaqp2rh41uf5akmj0g-1.mesdb.eventstore.cloud\",\"port\":2113},{\"address\":\"bubaqp2rh41uf5akmj0g-2.mesdb.eventstore.cloud\",\"port\":2113}]}"
6163
),
6264
Arguments.of(
63-
"esdb://user:pass@host1:1234,host2:4321,host3:3231?nodePreference=follower",
65+
"://user:pass@host1:1234,host2:4321,host3:3231?nodePreference=follower",
6466
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"follower\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"defaultCredentials\":{\"login\":\"user\",\"password\":\"pass\"},\"hosts\":[{\"address\":\"host1\",\"port\":1234},{\"address\":\"host2\",\"port\":4321},{\"address\":\"host3\",\"port\":3231}]}"
6567
),
6668
Arguments.of(
67-
"esdb://host1,host2,host3?tls=false",
69+
"://host1,host2,host3?tls=false",
6870
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":false,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"host1\",\"port\":2113},{\"address\":\"host2\",\"port\":2113},{\"address\":\"host3\",\"port\":2113}]}"
6971
),
7072
Arguments.of(
71-
"esdb://127.0.0.1:21573?tls=false",
73+
"://127.0.0.1:21573?tls=false",
7274
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":false,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"127.0.0.1\",\"port\":21573}]}"
7375
),
7476
Arguments.of(
75-
"esdb://host1,host2,host3?tlsVerifyCert=false",
77+
"://host1,host2,host3?tlsVerifyCert=false",
7678
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":false,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"host1\",\"port\":2113},{\"address\":\"host2\",\"port\":2113},{\"address\":\"host3\",\"port\":2113}]}"
7779
),
7880
Arguments.of(
79-
"esdb+discover://user:pass@host?nodePreference=follower&tlsVerifyCert=false",
81+
"+discover://user:pass@host?nodePreference=follower&tlsVerifyCert=false",
8082
"{\"dnsDiscover\":true,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"follower\",\"tls\":true,\"tlsVerifyCert\":false,\"throwOnAppendFailure\":true,\"defaultCredentials\":{\"login\":\"user\",\"password\":\"pass\"},\"hosts\":[{\"address\":\"host\",\"port\":2113}]}"
8183
),
8284
Arguments.of(
83-
"esdb://my%3Agreat%40username:UyeXx8%24%5EPsOo4jG88FlCauR1Coz25q@host?nodePreference=follower&tlsVerifyCert=false",
85+
"://my%3Agreat%40username:UyeXx8%24%5EPsOo4jG88FlCauR1Coz25q@host?nodePreference=follower&tlsVerifyCert=false",
8486
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"follower\",\"tls\":true,\"tlsVerifyCert\":false,\"throwOnAppendFailure\":true,\"defaultCredentials\":{\"login\":\"my:great@username\",\"password\":\"UyeXx8$^PsOo4jG88FlCauR1Coz25q\"},\"hosts\":[{\"address\":\"host\",\"port\":2113}]}"
8587
),
8688
Arguments.of(
87-
"esdb://host?maxDiscoverAttempts=200&discoveryInterval=1000&gossipTimeout=1&nodePreference=leader&tls=false&tlsVerifyCert=false&throwOnAppendFailure=false",
89+
"://host?maxDiscoverAttempts=200&discoveryInterval=1000&gossipTimeout=1&nodePreference=leader&tls=false&tlsVerifyCert=false&throwOnAppendFailure=false",
8890
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":200,\"discoveryInterval\":1000,\"gossipTimeout\":1,\"nodePreference\":\"leader\",\"tls\":false,\"tlsVerifyCert\":false,\"throwOnAppendFailure\":false,\"hosts\":[{\"address\":\"host\",\"port\":2113}]}"
8991
),
9092
Arguments.of(
91-
"esdb://host?MaxDiscoverAttempts=200&discoveryinterval=1000&GOSSIPTIMEOUT=1&nOdEpReFeReNcE=leader&TLS=false&TlsVerifyCert=false&THROWOnAppendFailure=false",
93+
"://host?MaxDiscoverAttempts=200&discoveryinterval=1000&GOSSIPTIMEOUT=1&nOdEpReFeReNcE=leader&TLS=false&TlsVerifyCert=false&THROWOnAppendFailure=false",
9294
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":200,\"discoveryInterval\":1000,\"gossipTimeout\":1,\"nodePreference\":\"leader\",\"tls\":false,\"tlsVerifyCert\":false,\"throwOnAppendFailure\":false,\"hosts\":[{\"address\":\"host\",\"port\":2113}]}"
9395
),
9496
Arguments.of(
95-
"esdb://localhost?keepAliveTimeout=20&keepAliveInterval=10",
97+
"://localhost?keepAliveTimeout=20&keepAliveInterval=10",
9698
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"localhost\",\"port\":2113}], \"keepAliveTimeout\": \"20\", \"keepAliveInterval\": \"10\"}"
9799
),
98100
Arguments.of(
99-
"esdb://localhost?keepAliveTimeout=20&keepAliveInterval=10&nodePreference=readOnlyReplica",
101+
"://localhost?keepAliveTimeout=20&keepAliveInterval=10&nodePreference=readOnlyReplica",
100102
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"readOnlyReplica\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"localhost\",\"port\":2113}], \"keepAliveTimeout\": \"20\", \"keepAliveInterval\": \"10\"}"
101103
),
102104
Arguments.of(
103-
"esdb://127.0.0.1:21573?defaultDeadline=60000",
105+
"://127.0.0.1:21573?defaultDeadline=60000",
104106
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"127.0.0.1\",\"port\":21573}], \"defaultDeadline\": 60000}"
105107
),
106108
Arguments.of(
107-
"esdb://127.0.0.1:21573?tlsCaFile=/path/to/cert",
109+
"://127.0.0.1:21573?tlsCaFile=/path/to/cert",
108110
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"127.0.0.1\",\"port\":21573}], \"tlsCaFile\": \"/path/to/cert\"}"
109111
),
110112
Arguments.of(
111-
"esdb://127.0.0.1:21573?userCertFile=/path/to/cert&userKeyFile=/path/to/key",
113+
"://127.0.0.1:21573?userCertFile=/path/to/cert&userKeyFile=/path/to/key",
112114
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"127.0.0.1\",\"port\":21573}], \"defaultClientCertificate\": {\"clientCertFile\": \"/path/to/cert\", \"clientKeyFile\": \"/path/to/key\"}}"
113115
),
114116
Arguments.of(
115-
"esdb://localhost?feature=foobar",
117+
"://localhost?feature=foobar",
116118
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"localhost\",\"port\":2113}], \"features\": \"foobar\"}"
117119
),
118120
Arguments.of(
119-
"esdb://localhost?feature=foobar&feature=baz",
121+
"://localhost?feature=foobar&feature=baz",
120122
"{\"dnsDiscover\":false,\"maxDiscoverAttempts\":3,\"discoveryInterval\":500,\"gossipTimeout\":3000,\"nodePreference\":\"leader\",\"tls\":true,\"tlsVerifyCert\":true,\"throwOnAppendFailure\":true,\"hosts\":[{\"address\":\"localhost\",\"port\":2113}], \"features\": [\"foobar\", \"baz\"]}"
121123
)
122124
);
125+
126+
return baseConnectionStrings.stream()
127+
.flatMap(base -> PROTOCOLS.stream()
128+
.map(protocol -> Arguments.of(protocol + base.get()[0], base.get()[1])));
123129
}
124130

125131
public void assertEquals(KurrentDBClientSettings settings, KurrentDBClientSettings other) {

0 commit comments

Comments
 (0)