1616import com .google .common .collect .ImmutableList ;
1717import io .trino .gateway .ha .clustermonitor .ClusterStats ;
1818import io .trino .gateway .ha .clustermonitor .TrinoStatus ;
19+ import io .trino .gateway .ha .config .ProxyBackendConfiguration ;
1920import io .trino .gateway .ha .config .RoutingConfiguration ;
2021import org .junit .jupiter .api .BeforeEach ;
2122import org .junit .jupiter .api .Test ;
@@ -39,6 +40,7 @@ final class TestQueryCountBasedRouter
3940 static final int SAME_QUERY_COUNT = 5 ;
4041 QueryCountBasedRouter queryCountBasedRouter ;
4142 ImmutableList <ClusterStats > clusters ;
43+ RoutingConfiguration routingConfiguration = new RoutingConfiguration ();
4244
4345 TestQueryCountBasedRouter ()
4446 {
@@ -156,7 +158,6 @@ public void init()
156158 .addAll (getClusterStatsList ("etl" ))
157159 .build ();
158160
159- RoutingConfiguration routingConfiguration = new RoutingConfiguration ();
160161 queryCountBasedRouter = new QueryCountBasedRouter (null , null , routingConfiguration );
161162 queryCountBasedRouter .updateBackEndStats (clusters );
162163 }
@@ -166,7 +167,8 @@ void testUserWithSameNoOfQueuedQueries()
166167 {
167168 // The user u1 has same number of queries queued on each cluster
168169 // The query needs to be routed to cluster with least number of queries running
169- String proxyTo = queryCountBasedRouter .provideClusterForRoutingGroup ("etl" , "u1" );
170+ ProxyBackendConfiguration proxyConfig = queryCountBasedRouter .provideBackendConfiguration ("etl" , "u1" );
171+ String proxyTo = proxyConfig .getProxyTo ();
170172
171173 assertThat (proxyTo ).isEqualTo (BACKEND_URL_3 );
172174 assertThat (proxyTo ).isNotEqualTo (BACKEND_URL_UNHEALTHY );
@@ -181,7 +183,8 @@ void testUserWithSameNoOfQueuedQueries()
181183 assertThat (c3Stats .userQueuedCount ().getOrDefault ("u1" , 0 ))
182184 .isEqualTo (6 );
183185
184- proxyTo = queryCountBasedRouter .provideClusterForRoutingGroup ("etl" , "u1" );
186+ proxyConfig = queryCountBasedRouter .provideBackendConfiguration ("etl" , "u1" );
187+ proxyTo = proxyConfig .getProxyTo ();
185188
186189 assertThat (proxyTo ).isEqualTo (BACKEND_URL_1 );
187190 assertThat (proxyTo ).isNotEqualTo (BACKEND_URL_UNHEALTHY );
@@ -192,31 +195,39 @@ void testUserWithDifferentQueueLengthUser1()
192195 {
193196 // The user u2 has different number of queries queued on each cluster
194197 // The query needs to be routed to cluster with least number of queued for that user
195- String proxyTo = queryCountBasedRouter .provideDefaultCluster ("u2" );
198+ ProxyBackendConfiguration proxyConfig = queryCountBasedRouter .provideBackendConfiguration (routingConfiguration .getDefaultRoutingGroup (), "u2" );
199+ String proxyTo = proxyConfig .getProxyTo ();
200+
196201 assertThat (BACKEND_URL_2 ).isEqualTo (proxyTo );
197202 assertThat (BACKEND_URL_UNHEALTHY ).isNotEqualTo (proxyTo );
198203 }
199204
200205 @ Test
201206 void testUserWithDifferentQueueLengthUser2 ()
202207 {
203- String proxyTo = queryCountBasedRouter .provideDefaultCluster ("u3" );
208+ ProxyBackendConfiguration proxyConfig = queryCountBasedRouter .provideBackendConfiguration (routingConfiguration .getDefaultRoutingGroup (), "u3" );
209+ String proxyTo = proxyConfig .getProxyTo ();
210+
204211 assertThat (BACKEND_URL_1 ).isEqualTo (proxyTo );
205212 assertThat (BACKEND_URL_UNHEALTHY ).isNotEqualTo (proxyTo );
206213 }
207214
208215 @ Test
209216 void testUserWithNoQueuedQueries ()
210217 {
211- String proxyTo = queryCountBasedRouter .provideDefaultCluster ("u101" );
218+ ProxyBackendConfiguration proxyConfig = queryCountBasedRouter .provideBackendConfiguration (routingConfiguration .getDefaultRoutingGroup (), "u101" );
219+ String proxyTo = proxyConfig .getProxyTo ();
220+
212221 assertThat (BACKEND_URL_3 ).isEqualTo (proxyTo );
213222 }
214223
215224 @ Test
216225 void testAdhocRoutingGroupFailOver ()
217226 {
218227 // The ETL routing group doesn't exist
219- String proxyTo = queryCountBasedRouter .provideClusterForRoutingGroup ("NonExisting" , "u1" );
228+ ProxyBackendConfiguration proxyConfig = queryCountBasedRouter .provideBackendConfiguration ("NonExisting" , "u1" );
229+ String proxyTo = proxyConfig .getProxyTo ();
230+
220231 assertThat (BACKEND_URL_3 ).isEqualTo (proxyTo );
221232 assertThat (BACKEND_URL_UNHEALTHY ).isNotEqualTo (proxyTo );
222233 }
@@ -231,7 +242,9 @@ void testClusterWithLeastQueueCount()
231242 .build ();
232243 queryCountBasedRouter .updateBackEndStats (clusters );
233244
234- String proxyTo = queryCountBasedRouter .provideClusterForRoutingGroup ("NonExisting" , "u1" );
245+ ProxyBackendConfiguration proxyConfig = queryCountBasedRouter .provideBackendConfiguration ("NonExisting" , "u1" );
246+ String proxyTo = proxyConfig .getProxyTo ();
247+
235248 assertThat (BACKEND_URL_4 ).isEqualTo (proxyTo );
236249 assertThat (BACKEND_URL_UNHEALTHY ).isNotEqualTo (proxyTo );
237250 }
@@ -248,7 +261,9 @@ void testClusterWithLeastRunningCount()
248261
249262 queryCountBasedRouter .updateBackEndStats (clusters );
250263
251- String proxyTo = queryCountBasedRouter .provideClusterForRoutingGroup ("NonExisting" , "u1" );
264+ ProxyBackendConfiguration proxyConfig = queryCountBasedRouter .provideBackendConfiguration ("NonExisting" , "u1" );
265+ String proxyTo = proxyConfig .getProxyTo ();
266+
252267 assertThat (BACKEND_URL_5 ).isEqualTo (proxyTo );
253268 assertThat (BACKEND_URL_UNHEALTHY ).isNotEqualTo (proxyTo );
254269 }
0 commit comments