19
19
20
20
import static org .assertj .core .api .Assertions .assertThat ;
21
21
import static org .mockito .ArgumentMatchers .any ;
22
- import static org .mockito .ArgumentMatchers .anyInt ;
23
22
import static org .mockito .ArgumentMatchers .eq ;
24
23
import static org .mockito .BDDMockito .then ;
25
24
import static org .mockito .Mockito .atLeast ;
@@ -48,6 +47,8 @@ public class BasicLoadBalancingPolicyPreferredRemoteDcsTest
48
47
@ Mock protected DefaultNode node10 ;
49
48
@ Mock protected DefaultNode node11 ;
50
49
@ Mock protected DefaultNode node12 ;
50
+ @ Mock protected DefaultNode node13 ;
51
+ @ Mock protected DefaultNode node14 ;
51
52
52
53
@ Override
53
54
@ Test
@@ -70,13 +71,16 @@ public void should_prioritize_and_shuffle_replicas() {
70
71
when (tokenMap .getReplicas (KEYSPACE , ROUTING_KEY )).thenReturn (ImmutableSet .of (node3 , node5 ));
71
72
72
73
assertThat (policy .newQueryPlan (request , session ))
73
- .containsExactly (node3 , node5 , node1 , node2 , node4 , node9 , node10 , node6 , node7 , node12 );
74
+ .containsExactly (
75
+ node3 , node5 , node1 , node2 , node4 , node9 , node10 , node6 , node7 , node12 , node13 );
74
76
assertThat (policy .newQueryPlan (request , session ))
75
- .containsExactly (node3 , node5 , node2 , node4 , node1 , node9 , node10 , node6 , node7 , node12 );
77
+ .containsExactly (
78
+ node3 , node5 , node2 , node4 , node1 , node9 , node10 , node6 , node7 , node12 , node13 );
76
79
assertThat (policy .newQueryPlan (request , session ))
77
- .containsExactly (node3 , node5 , node4 , node1 , node2 , node9 , node10 , node6 , node7 , node12 );
80
+ .containsExactly (
81
+ node3 , node5 , node4 , node1 , node2 , node9 , node10 , node6 , node7 , node12 , node13 );
78
82
79
- verify (policy , times (3 )).shuffleHead (any (), eq (2 ));
83
+ verify (policy , times (12 )).shuffleHead (any (), eq (2 ));
80
84
// No power of two choices with only two replicas
81
85
verify (session , never ()).getPools ();
82
86
}
@@ -90,32 +94,45 @@ public void should_prioritize_single_replica() {
90
94
91
95
// node3 always first, round-robin on the rest
92
96
assertThat (policy .newQueryPlan (request , session ))
93
- .containsExactly (node3 , node1 , node2 , node4 , node5 , node9 , node10 , node6 , node7 , node12 );
97
+ .containsExactly (
98
+ node3 , node1 , node2 , node4 , node5 , node9 , node10 , node6 , node7 , node12 , node13 );
94
99
assertThat (policy .newQueryPlan (request , session ))
95
- .containsExactly (node3 , node2 , node4 , node5 , node1 , node9 , node10 , node6 , node7 , node12 );
100
+ .containsExactly (
101
+ node3 , node2 , node4 , node5 , node1 , node9 , node10 , node6 , node7 , node12 , node13 );
96
102
assertThat (policy .newQueryPlan (request , session ))
97
- .containsExactly (node3 , node4 , node5 , node1 , node2 , node9 , node10 , node6 , node7 , node12 );
103
+ .containsExactly (
104
+ node3 , node4 , node5 , node1 , node2 , node9 , node10 , node6 , node7 , node12 , node13 );
98
105
assertThat (policy .newQueryPlan (request , session ))
99
- .containsExactly (node3 , node5 , node1 , node2 , node4 , node9 , node10 , node6 , node7 , node12 );
106
+ .containsExactly (
107
+ node3 , node5 , node1 , node2 , node4 , node9 , node10 , node6 , node7 , node12 , node13 );
100
108
101
109
// Should not shuffle replicas since there is only one
102
- verify (policy , never ()).shuffleHead (any (), anyInt ());
110
+ verify (policy , never ()).shuffleHead (any (), eq (1 ));
111
+ // But should shuffle remote nodes
112
+ verify (policy , times (12 )).shuffleHead (any (), eq (2 ));
103
113
}
104
114
105
115
@ Override
106
116
protected void assertRoundRobinQueryPlans () {
107
117
for (int i = 0 ; i < 3 ; i ++) {
108
118
assertThat (policy .newQueryPlan (request , session ))
109
- .containsExactly (node1 , node2 , node3 , node4 , node5 , node9 , node10 , node6 , node7 , node12 );
119
+ .containsExactly (
120
+ node1 , node2 , node3 , node4 , node5 , node9 , node10 , node6 , node7 , node12 , node13 );
110
121
assertThat (policy .newQueryPlan (request , session ))
111
- .containsExactly (node2 , node3 , node4 , node5 , node1 , node9 , node10 , node6 , node7 , node12 );
122
+ .containsExactly (
123
+ node2 , node3 , node4 , node5 , node1 , node9 , node10 , node6 , node7 , node12 , node13 );
112
124
assertThat (policy .newQueryPlan (request , session ))
113
- .containsExactly (node3 , node4 , node5 , node1 , node2 , node9 , node10 , node6 , node7 , node12 );
125
+ .containsExactly (
126
+ node3 , node4 , node5 , node1 , node2 , node9 , node10 , node6 , node7 , node12 , node13 );
114
127
assertThat (policy .newQueryPlan (request , session ))
115
- .containsExactly (node4 , node5 , node1 , node2 , node3 , node9 , node10 , node6 , node7 , node12 );
128
+ .containsExactly (
129
+ node4 , node5 , node1 , node2 , node3 , node9 , node10 , node6 , node7 , node12 , node13 );
116
130
assertThat (policy .newQueryPlan (request , session ))
117
- .containsExactly (node5 , node1 , node2 , node3 , node4 , node9 , node10 , node6 , node7 , node12 );
131
+ .containsExactly (
132
+ node5 , node1 , node2 , node3 , node4 , node9 , node10 , node6 , node7 , node12 , node13 );
118
133
}
134
+
135
+ verify (policy , atLeast (15 )).shuffleHead (any (), eq (2 ));
119
136
}
120
137
121
138
@ Override
@@ -129,6 +146,8 @@ protected BasicLoadBalancingPolicy createAndInitPolicy() {
129
146
when (node10 .getDatacenter ()).thenReturn ("dc3" );
130
147
when (node11 .getDatacenter ()).thenReturn ("dc3" );
131
148
when (node12 .getDatacenter ()).thenReturn ("dc4" );
149
+ when (node13 .getDatacenter ()).thenReturn ("dc4" );
150
+ when (node14 .getDatacenter ()).thenReturn ("dc4" );
132
151
133
152
// Accept 2 nodes per remote DC
134
153
when (defaultProfile .getInt (
@@ -166,12 +185,14 @@ protected void shuffleHead(Object[] currentNodes, int headLength) {
166
185
.put (UUID .randomUUID (), node10 )
167
186
.put (UUID .randomUUID (), node11 )
168
187
.put (UUID .randomUUID (), node12 )
188
+ .put (UUID .randomUUID (), node13 )
189
+ .put (UUID .randomUUID (), node14 )
169
190
.build ();
170
191
policy .init (nodes , distanceReporter );
171
192
assertThat (policy .getLiveNodes ().dc ("dc1" )).containsExactly (node1 , node2 , node3 , node4 , node5 );
172
193
assertThat (policy .getLiveNodes ().dc ("dc2" )).containsExactly (node6 , node7 ); // only 2 allowed
173
194
assertThat (policy .getLiveNodes ().dc ("dc3" )).containsExactly (node9 , node10 ); // only 2 allowed
174
- assertThat (policy .getLiveNodes ().dc ("dc4" )).containsExactly (node12 ); // only 1 allowed
195
+ assertThat (policy .getLiveNodes ().dc ("dc4" )).containsExactly (node12 , node13 ); // only 2 allowed
175
196
return policy ;
176
197
}
177
198
}
0 commit comments