diff --git a/solr/core/src/java/org/apache/solr/core/HttpSolrClientProvider.java b/solr/core/src/java/org/apache/solr/core/HttpSolrClientProvider.java index b10eae05f24..c209940dbbd 100644 --- a/solr/core/src/java/org/apache/solr/core/HttpSolrClientProvider.java +++ b/solr/core/src/java/org/apache/solr/core/HttpSolrClientProvider.java @@ -46,7 +46,7 @@ final class HttpSolrClientProvider implements AutoCloseable { initializeMetrics(parentContext); this.httpClientBuilder = - new Http2SolrClient.Builder().withListenerFactory(List.of(trackHttpSolrMetrics)); + new Http2SolrClient.Builder().addListenerFactory(trackHttpSolrMetrics); if (cfg != null) { httpClientBuilder diff --git a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java index 14e79e6866c..1437dee63ea 100644 --- a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java +++ b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java @@ -312,7 +312,7 @@ public void init(PluginInfo info) { .withIdleTimeout(soTimeout, TimeUnit.MILLISECONDS) .withExecutor(commExecutor) .withMaxConnectionsPerHost(maxConnectionsPerHost) - .withListenerFactory(List.of(this.httpListenerFactory)); + .addListenerFactory(this.httpListenerFactory); this.defaultClient = httpSolrClientBuilder.build(); this.loadbalancer = new LBHttp2SolrClient.Builder<>(httpSolrClientBuilder).build(); diff --git a/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java b/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java index f956a367ccf..6a129a137e9 100644 --- a/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java +++ b/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java @@ -444,7 +444,7 @@ private Optional<String> getUserFromJettyRequest(Request request) { client.addListenerFactory(() -> listener); } if (builder != null) { - builder.withListenerFactory(List.of(() -> listener)); + builder.addListenerFactory(() -> listener); } } diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java index b2dd4c94566..9dcd00936e2 100644 --- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java +++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java @@ -140,8 +140,8 @@ protected Http2SolrClient(String serverBaseUrl, Builder builder) { this.httpClient = createHttpClient(builder); this.closeClient = true; } - if (builder.listenerFactory != null) { - this.listenerFactory.addAll(builder.listenerFactory); + if (builder.listenerFactories != null) { + this.listenerFactory.addAll(builder.listenerFactories); } updateDefaultMimeTypeForParser(); @@ -907,7 +907,7 @@ public static class Builder protected Long keyStoreReloadIntervalSecs; - private List<HttpListenerFactory> listenerFactory; + private List<HttpListenerFactory> listenerFactories = new ArrayList<>(0); public Builder() { super(); @@ -933,8 +933,26 @@ public Builder(String baseSolrUrl) { this.baseSolrUrl = baseSolrUrl; } - public Http2SolrClient.Builder withListenerFactory(List<HttpListenerFactory> listenerFactory) { - this.listenerFactory = listenerFactory; + /** + * specify a listener factory, which will be appened to any existing values. + * + * @param listenerFactory a HttpListenerFactory + * @return This Builder + */ + public Http2SolrClient.Builder addListenerFactory(HttpListenerFactory listenerFactory) { + this.listenerFactories.add(listenerFactory); + return this; + } + + /** + * Specify listener factories, which will replace any existing values. + * + * @param listenerFactories a list of HttpListenerFactory instances + * @return This Builder + */ + public Http2SolrClient.Builder withListenerFactories(List<HttpListenerFactory> listenerFactories) { + this.listenerFactories.clear(); + this.listenerFactories.addAll(listenerFactories); return this; } @@ -1110,9 +1128,9 @@ public Builder withHttpClient(Http2SolrClient http2SolrClient) { if (this.urlParamNames == null) { this.urlParamNames = http2SolrClient.urlParamNames; } - if (this.listenerFactory == null) { - this.listenerFactory = new ArrayList<HttpListenerFactory>(); - http2SolrClient.listenerFactory.forEach(this.listenerFactory::add); + if (this.listenerFactories.isEmpty()) { + this.listenerFactories.clear(); + http2SolrClient.listenerFactory.forEach(this.listenerFactories::add); } if (this.executor == null) { this.executor = http2SolrClient.executor;