1
1
package com .datastax .oss .driver .core .metadata ;
2
2
3
3
import static org .assertj .core .api .Assertions .assertThat ;
4
- import static org .junit .Assume .assumeTrue ;
5
4
6
5
import com .datastax .oss .driver .api .core .CqlSession ;
7
- import com .datastax .oss .driver .api .core .Version ;
8
6
import com .datastax .oss .driver .api .core .config .DefaultDriverOption ;
9
7
import com .datastax .oss .driver .api .core .config .DriverConfigLoader ;
10
8
import com .datastax .oss .driver .api .core .cql .ResultSet ;
11
9
import com .datastax .oss .driver .api .core .metadata .EndPoint ;
12
10
import com .datastax .oss .driver .api .core .metadata .Node ;
11
+ import com .datastax .oss .driver .api .testinfra .ScyllaRequirement ;
13
12
import com .datastax .oss .driver .api .testinfra .ccm .CcmBridge ;
14
13
import com .datastax .oss .driver .api .testinfra .session .SessionUtils ;
15
14
import java .net .InetAddress ;
19
18
import java .util .Objects ;
20
19
import java .util .Set ;
21
20
import java .util .stream .Collectors ;
22
- import org .junit .Before ;
23
21
import org .junit .Test ;
24
22
23
+ @ ScyllaRequirement (minOSS = "6.2.0" , minEnterprise = "2025.1.0" )
25
24
public class ZeroTokenNodesIT {
26
-
27
- @ Before
28
- public void checkScyllaVersion () {
29
- // minOSS = "6.2.0",
30
- // minEnterprise = "2025.1.0",
31
- // Zero-token nodes introduced in scylladb/scylladb#19684
32
- // 2025.1 is an estimated future version and it still may not have this change in.
33
- // This number may need to be adjusted once CI picks up this test.
34
- assumeTrue (CcmBridge .SCYLLA_ENABLEMENT );
35
- if (CcmBridge .SCYLLA_ENTERPRISE ) {
36
- assumeTrue (
37
- CcmBridge .VERSION .compareTo (Objects .requireNonNull (Version .parse ("2025.1.0" ))) >= 0 );
38
- } else {
39
- assumeTrue (CcmBridge .VERSION .compareTo (Objects .requireNonNull (Version .parse ("6.2.0" ))) >= 0 );
40
- }
41
- }
42
-
43
25
@ Test
44
26
public void should_not_ignore_zero_token_peer_when_option_is_enabled () {
45
27
CqlSession session = null ;
46
28
CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
47
- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (3 ).withIpPrefix ( "127.0.1." ). build ()) {
29
+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (3 ).build ()) {
48
30
ccmBridge .create ();
49
31
ccmBridge .startWithArgs ("--wait-for-binary-proto" );
50
32
ccmBridge .addWithoutStart (4 , "dc1" );
@@ -63,8 +45,13 @@ public void should_not_ignore_zero_token_peer_when_option_is_enabled() {
63
45
Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
64
46
Set <String > toStrings =
65
47
nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
48
+
66
49
assertThat (toStrings )
67
- .containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" , "/127.0.1.3:9042" , "/127.0.1.4:9042" );
50
+ .containsOnly (
51
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
52
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )),
53
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (3 )),
54
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (4 )));
68
55
} finally {
69
56
if (session != null ) session .close ();
70
57
}
@@ -74,7 +61,7 @@ public void should_not_ignore_zero_token_peer_when_option_is_enabled() {
74
61
public void should_not_discover_zero_token_DC_when_option_is_disabled () {
75
62
CqlSession session = null ;
76
63
CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
77
- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).withIpPrefix ( "127.0.1." ). build ()) {
64
+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).build ()) {
78
65
ccmBridge .create ();
79
66
ccmBridge .updateNodeConfig (3 , "join_ring" , false );
80
67
ccmBridge .updateNodeConfig (4 , "join_ring" , false );
@@ -97,11 +84,15 @@ public void should_not_discover_zero_token_DC_when_option_is_disabled() {
97
84
Objects .requireNonNull (rs .one ()).getInetAddress ("rpc_address" );
98
85
landedOn .add (Objects .requireNonNull (broadcastRpcInetAddress ).toString ());
99
86
}
100
- assertThat (landedOn ).containsOnly ("/127.0.1.1" , "/127.0.1.2" );
87
+ assertThat (landedOn )
88
+ .containsOnly ("/" + ccmBridge .getNodeIpAddress (1 ), "/" + ccmBridge .getNodeIpAddress (2 ));
101
89
Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
102
90
Set <String > toStrings =
103
91
nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
104
- assertThat (toStrings ).containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" );
92
+ assertThat (toStrings )
93
+ .containsOnly (
94
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
95
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )));
105
96
} finally {
106
97
if (session != null ) session .close ();
107
98
}
@@ -111,7 +102,7 @@ public void should_not_discover_zero_token_DC_when_option_is_disabled() {
111
102
public void should_discover_zero_token_DC_when_option_is_enabled () {
112
103
CqlSession session = null ;
113
104
CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
114
- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).withIpPrefix ( "127.0.1." ). build ()) {
105
+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).build ()) {
115
106
ccmBridge .create ();
116
107
ccmBridge .updateNodeConfig (3 , "join_ring" , false );
117
108
ccmBridge .updateNodeConfig (4 , "join_ring" , false );
@@ -136,13 +127,18 @@ public void should_discover_zero_token_DC_when_option_is_enabled() {
136
127
landedOn .add (Objects .requireNonNull (broadcastRpcInetAddress ).toString ());
137
128
}
138
129
// LBP should still target local datacenter:
139
- assertThat (landedOn ).containsOnly ("/127.0.1.1" , "/127.0.1.2" );
130
+ assertThat (landedOn )
131
+ .containsOnly ("/" + ccmBridge .getNodeIpAddress (1 ), "/" + ccmBridge .getNodeIpAddress (2 ));
140
132
Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
141
133
Set <String > toStrings =
142
134
nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
143
135
// Metadata should have all nodes:
144
136
assertThat (toStrings )
145
- .containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" , "/127.0.1.3:9042" , "/127.0.1.4:9042" );
137
+ .containsOnly (
138
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
139
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )),
140
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (3 )),
141
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (4 )));
146
142
} finally {
147
143
if (session != null ) session .close ();
148
144
}
@@ -152,7 +148,7 @@ public void should_discover_zero_token_DC_when_option_is_enabled() {
152
148
public void should_connect_to_zero_token_contact_point () {
153
149
CqlSession session = null ;
154
150
CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
155
- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 ).withIpPrefix ( "127.0.1." ). build ()) {
151
+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 ).build ()) {
156
152
ccmBridge .create ();
157
153
ccmBridge .startWithArgs ("--wait-for-binary-proto" );
158
154
ccmBridge .addWithoutStart (3 , "dc1" );
@@ -169,7 +165,11 @@ public void should_connect_to_zero_token_contact_point() {
169
165
Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
170
166
Set <String > toStrings =
171
167
nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
172
- assertThat (toStrings ).containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" , "/127.0.1.3:9042" );
168
+ assertThat (toStrings )
169
+ .containsOnly (
170
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
171
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )),
172
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (3 )));
173
173
} finally {
174
174
if (session != null ) session .close ();
175
175
}
@@ -182,7 +182,7 @@ public void should_connect_to_zero_token_DC() {
182
182
// method.
183
183
CqlSession session = null ;
184
184
CcmBridge .Builder ccmBridgeBuilder = CcmBridge .builder ();
185
- try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).withIpPrefix ( "127.0.1." ). build ()) {
185
+ try (CcmBridge ccmBridge = ccmBridgeBuilder .withNodes (2 , 2 ).build ()) {
186
186
ccmBridge .create ();
187
187
ccmBridge .updateNodeConfig (3 , "join_ring" , false );
188
188
ccmBridge .updateNodeConfig (4 , "join_ring" , false );
@@ -207,12 +207,17 @@ public void should_connect_to_zero_token_DC() {
207
207
landedOn .add (Objects .requireNonNull (broadcastRpcInetAddress ).toString ());
208
208
}
209
209
// LBP should still target local datacenter:
210
- assertThat (landedOn ).containsOnly ("/127.0.1.1" , "/127.0.1.2" );
210
+ assertThat (landedOn )
211
+ .containsOnly ("/" + ccmBridge .getNodeIpAddress (1 ), "/" + ccmBridge .getNodeIpAddress (2 ));
211
212
Collection <Node > nodes = session .getMetadata ().getNodes ().values ();
212
213
Set <String > toStrings =
213
214
nodes .stream ().map (Node ::getEndPoint ).map (EndPoint ::toString ).collect (Collectors .toSet ());
214
215
// Metadata should have valid ordinary peers plus zero-token contact point:
215
- assertThat (toStrings ).containsOnly ("/127.0.1.1:9042" , "/127.0.1.2:9042" , "/127.0.1.3:9042" );
216
+ assertThat (toStrings )
217
+ .containsOnly (
218
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (1 )),
219
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (2 )),
220
+ String .format ("/%s:9042" , ccmBridge .getNodeIpAddress (3 )));
216
221
} finally {
217
222
if (session != null ) session .close ();
218
223
}
0 commit comments