Package org.apache.solr.client.solrj.impl

## Class CloudHttp2SolrClient.Builder

- java.lang.Object
- - org.apache.solr.client.solrj.impl.CloudHttp2SolrClient.Builder

Direct Known Subclasses:
  `CloudSolrClient.Builder`

Enclosing class:
  CloudHttp2SolrClient

    public static class CloudHttp2SolrClient.Builder
    extends Object

Constructs `CloudHttp2SolrClient` instances from provided configuration.

### Field Summary

Fields
`protected boolean` `directUpdatesToLeadersOnly`
`protected Http2SolrClient` `httpClient`
`protected Http2SolrClient.Builder` `internalClientBuilder`
`protected boolean` `parallelUpdates`
`protected boolean` `shardLeadersOnly`
`protected List<String>` `solrUrls`
`protected ClusterStateProvider` `stateProvider`
`protected String` `zkChroot`
`protected Collection<String>` `zkHosts`

### Constructor Summary

Constructors
`Builder​(List<String> solrUrls)` Provide a series of Solr URLs to be used when configuring `CloudHttp2SolrClient` instances.
`Builder​(List<String> zkHosts, Optional<String> zkChroot)` Provide a series of ZK hosts which will be used when configuring `CloudHttp2SolrClient` instances.
`Builder​(ClusterStateProvider stateProvider)` for an expert use-case

### Method Summary

All Methods Instance Methods Concrete Methods Deprecated Methods
`CloudHttp2SolrClient` `build()` Create a `CloudHttp2SolrClient` based on the provided configuration.
`CloudHttp2SolrClient.Builder` `canUseZkACLs​(boolean canUseZkACLs)` Whether to use the default ZK ACLs when building a ZK Client.
`CloudHttp2SolrClient.Builder` `sendDirectUpdatesToAnyShardReplica()` Tells `CloudHttp2SolrClient.Builder` that created clients can send updates to any shard replica (shard leaders and non-leaders).
`CloudHttp2SolrClient.Builder` `sendDirectUpdatesToShardLeadersOnly()` Tells `CloudHttp2SolrClient.Builder` that created clients should send direct updates to shard leaders only.
`CloudHttp2SolrClient.Builder` `sendUpdatesOnlyToShardLeaders()` Tells `CloudHttp2SolrClient.Builder` that created clients should be configured such that `CloudSolrClient.isUpdatesToLeaders()` returns `true`.
`CloudHttp2SolrClient.Builder` `sendUpdatesToAnyReplica()` Tells `CloudHttp2SolrClient.Builder` that created clients should be configured such that `CloudSolrClient.isUpdatesToLeaders()` returns `false`.
`CloudHttp2SolrClient.Builder` `setParallelCacheRefreshes​(int parallelCacheRefreshesLocks)` Deprecated. Please use `withParallelCacheRefreshes(int)`
`CloudHttp2SolrClient.Builder` `setRetryExpiryTime​(int secs)` Deprecated. Please use `withRetryExpiryTime(long, TimeUnit)`
`CloudHttp2SolrClient.Builder` `withCollectionCacheTtl​(int timeToLiveSeconds)` Deprecated. Please use `withCollectionCacheTtl(long, TimeUnit)`
`CloudHttp2SolrClient.Builder` `withCollectionCacheTtl​(long timeToLive, TimeUnit unit)` Sets the cache ttl for DocCollection Objects cached.
`CloudHttp2SolrClient.Builder` `withDefaultCollection​(String defaultCollection)` Sets the default collection for request.
`CloudHttp2SolrClient.Builder` `withHttpClient​(Http2SolrClient httpSolrClient)` Deprecated. Please use `withInternalClientBuilder(Http2SolrClient.Builder)`
`CloudHttp2SolrClient.Builder` `withHttpClientBuilder​(Http2SolrClient.Builder internalClientBuilder)` If provided, the CloudHttp2SolrClient will build it's internal Http2SolrClient using this builder (instead of the empty default one).
`CloudHttp2SolrClient.Builder` `withInternalClientBuilder​(Http2SolrClient.Builder internalClientBuilder)` Deprecated.
`CloudHttp2SolrClient.Builder` `withParallelCacheRefreshes​(int parallelCacheRefreshesLocks)` When caches are expired then they are refreshed after acquiring a lock.
`CloudHttp2SolrClient.Builder` `withParallelUpdates​(boolean parallelUpdates)` Tells `CloudHttp2SolrClient.Builder` whether created clients should send shard updates serially or in parallel
`CloudHttp2SolrClient.Builder` `withRequestWriter​(RequestWriter requestWriter)` Provides a `RequestWriter` for created clients to use when handing requests.
`CloudHttp2SolrClient.Builder` `withResponseParser​(ResponseParser responseParser)` Provides a `ResponseParser` for created clients to use when handling requests.
`CloudHttp2SolrClient.Builder` `withRetryExpiryTime​(long expiryTime, TimeUnit unit)` This is the time to wait to re-fetch the state after getting the same state version from ZK
`CloudHttp2SolrClient.Builder` `withZkClientTimeout​(int zkClientTimeout, TimeUnit unit)` Sets the Zk client session timeout
`CloudHttp2SolrClient.Builder` `withZkConnectTimeout​(int zkConnectTimeout, TimeUnit unit)` Sets the Zk connection timeout

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### zkHosts

    protected Collection<String> zkHosts

#### solrUrls

    protected List<String> solrUrls

#### zkChroot

    protected String zkChroot

#### httpClient

    protected Http2SolrClient httpClient

#### shardLeadersOnly

    protected boolean shardLeadersOnly

#### directUpdatesToLeadersOnly

    protected boolean directUpdatesToLeadersOnly

#### parallelUpdates

    protected boolean parallelUpdates

#### stateProvider

    protected ClusterStateProvider stateProvider

#### internalClientBuilder

    protected Http2SolrClient.Builder internalClientBuilder

### Constructor Detail

#### Builder

    public Builder​(List<String> solrUrls)

Provide a series of Solr URLs to be used when configuring `CloudHttp2SolrClient` instances. The solr client will use these urls to understand the cluster topology, which solr nodes are active etc.

Provided Solr URLs are expected to point to the root Solr path ("http://hostname:8983/solr"); they should not include any collections, cores, or other path components.

Usage example:

       final List<String> solrBaseUrls = new ArrayList<String>();
       solrBaseUrls.add("http://solr1:8983/solr"); solrBaseUrls.add("http://solr2:8983/solr"); solrBaseUrls.add("http://solr3:8983/solr");
       final SolrClient client = new CloudHttp2SolrClient.Builder(solrBaseUrls).build();

#### Builder

    public Builder​(List<String> zkHosts,
                   Optional<String> zkChroot)

Provide a series of ZK hosts which will be used when configuring `CloudHttp2SolrClient` instances.

Usage example when Solr stores data at the ZooKeeper root ('/'):

       final List<String> zkServers = new ArrayList<String>();
       zkServers.add("zookeeper1:2181"); zkServers.add("zookeeper2:2181"); zkServers.add("zookeeper3:2181");
       final SolrClient client = new CloudHttp2SolrClient.Builder(zkServers, Optional.empty()).build();

Usage example when Solr data is stored in a ZooKeeper chroot:

        final List<String> zkServers = new ArrayList<String>();
        zkServers.add("zookeeper1:2181"); zkServers.add("zookeeper2:2181"); zkServers.add("zookeeper3:2181");
        final SolrClient client = new CloudHttp2SolrClient.Builder(zkServers, Optional.of("/solr")).build();

Parameters:
  `zkHosts` - a List of at least one ZooKeeper host and port (e.g. "zookeeper1:2181")
  `zkChroot` - the path to the root ZooKeeper node containing Solr data. Provide `java.util.Optional.empty()` if no ZK chroot is used.

#### Builder

    public Builder​(ClusterStateProvider stateProvider)

for an expert use-case

### Method Detail

#### canUseZkACLs

    public CloudHttp2SolrClient.Builder canUseZkACLs​(boolean canUseZkACLs)

Whether to use the default ZK ACLs when building a ZK Client.

#### sendUpdatesOnlyToShardLeaders

    public CloudHttp2SolrClient.Builder sendUpdatesOnlyToShardLeaders()

Tells `CloudHttp2SolrClient.Builder` that created clients should be configured such that `CloudSolrClient.isUpdatesToLeaders()` returns `true`.

See Also:
  `sendUpdatesToAnyReplica()`, `CloudSolrClient.isUpdatesToLeaders()`

#### sendUpdatesToAnyReplica

    public CloudHttp2SolrClient.Builder sendUpdatesToAnyReplica()

Tells `CloudHttp2SolrClient.Builder` that created clients should be configured such that `CloudSolrClient.isUpdatesToLeaders()` returns `false`.

See Also:
  `sendUpdatesOnlyToShardLeaders()`, `CloudSolrClient.isUpdatesToLeaders()`

#### sendDirectUpdatesToShardLeadersOnly

    public CloudHttp2SolrClient.Builder sendDirectUpdatesToShardLeadersOnly()

Tells `CloudHttp2SolrClient.Builder` that created clients should send direct updates to shard leaders only.

UpdateRequests whose leaders cannot be found will "fail fast" on the client side with a `SolrException`

See Also:
  `sendDirectUpdatesToAnyShardReplica()`, `CloudSolrClient.isDirectUpdatesToLeadersOnly()`

#### sendDirectUpdatesToAnyShardReplica

    public CloudHttp2SolrClient.Builder sendDirectUpdatesToAnyShardReplica()

Tells `CloudHttp2SolrClient.Builder` that created clients can send updates to any shard replica (shard leaders and non-leaders).

Shard leaders are still preferred, but the created clients will fallback to using other replicas if a leader cannot be found.

See Also:
  `sendDirectUpdatesToShardLeadersOnly()`, `CloudSolrClient.isDirectUpdatesToLeadersOnly()`

#### withRequestWriter

    public CloudHttp2SolrClient.Builder withRequestWriter​(RequestWriter requestWriter)

Provides a `RequestWriter` for created clients to use when handing requests.

#### withResponseParser

    public CloudHttp2SolrClient.Builder withResponseParser​(ResponseParser responseParser)

Provides a `ResponseParser` for created clients to use when handling requests.

#### withParallelUpdates

    public CloudHttp2SolrClient.Builder withParallelUpdates​(boolean parallelUpdates)

Tells `CloudHttp2SolrClient.Builder` whether created clients should send shard updates serially or in parallel

When an `UpdateRequest` affects multiple shards, `CloudHttp2SolrClient` splits it up and sends a request to each affected shard. This setting chooses whether those sub-requests are sent serially or in parallel.

If not set, this defaults to 'true' and sends sub-requests in parallel.

#### setParallelCacheRefreshes

    @Deprecated(since="9.2")
    public CloudHttp2SolrClient.Builder setParallelCacheRefreshes​(int parallelCacheRefreshesLocks)

Deprecated.
Please use `withParallelCacheRefreshes(int)`
When caches are expired then they are refreshed after acquiring a lock. Use this to set the number of locks.

Defaults to 3.

#### withParallelCacheRefreshes

    public CloudHttp2SolrClient.Builder withParallelCacheRefreshes​(int parallelCacheRefreshesLocks)

When caches are expired then they are refreshed after acquiring a lock. Use this to set the number of locks.

Defaults to 3.

#### setRetryExpiryTime

    @Deprecated(since="9.2")
    public CloudHttp2SolrClient.Builder setRetryExpiryTime​(int secs)

Deprecated.
Please use `withRetryExpiryTime(long, TimeUnit)`
This is the time to wait to re-fetch the state after getting the same state version from ZK

#### withRetryExpiryTime

    public CloudHttp2SolrClient.Builder withRetryExpiryTime​(long expiryTime,
                                                            TimeUnit unit)

This is the time to wait to re-fetch the state after getting the same state version from ZK

#### withDefaultCollection

    public CloudHttp2SolrClient.Builder withDefaultCollection​(String defaultCollection)

Sets the default collection for request.

#### withCollectionCacheTtl

    @Deprecated(since="9.2")
    public CloudHttp2SolrClient.Builder withCollectionCacheTtl​(int timeToLiveSeconds)

Deprecated.
Please use `withCollectionCacheTtl(long, TimeUnit)`
Sets the cache ttl for DocCollection Objects cached.

Parameters:
  `timeToLiveSeconds` - ttl value in seconds

#### withCollectionCacheTtl

    public CloudHttp2SolrClient.Builder withCollectionCacheTtl​(long timeToLive,
                                                               TimeUnit unit)

Sets the cache ttl for DocCollection Objects cached.

Parameters:
  `timeToLive` - ttl value

#### withHttpClient

    @Deprecated(since="9.9")
    public CloudHttp2SolrClient.Builder withHttpClient​(Http2SolrClient httpSolrClient)

Deprecated.
Please use `withInternalClientBuilder(Http2SolrClient.Builder)`
Set the internal `Http2SolrClient`.

Note: closing the client instance is the responsibility of the caller.

Returns:
  this

#### withHttpClientBuilder

    public CloudHttp2SolrClient.Builder withHttpClientBuilder​(Http2SolrClient.Builder internalClientBuilder)

If provided, the CloudHttp2SolrClient will build it's internal Http2SolrClient using this builder (instead of the empty default one). Providing this builder allows users to configure the internal clients (authentication, timeouts, etc.).

Parameters:
  `internalClientBuilder` - the builder to use for creating the internal http client.
Returns:
  this

#### withInternalClientBuilder

    @Deprecated(since="9.10")
    public CloudHttp2SolrClient.Builder withInternalClientBuilder​(Http2SolrClient.Builder internalClientBuilder)

Deprecated.

#### withZkConnectTimeout

    public CloudHttp2SolrClient.Builder withZkConnectTimeout​(int zkConnectTimeout,
                                                             TimeUnit unit)

Sets the Zk connection timeout

Parameters:
  `zkConnectTimeout` - timeout value
  `unit` - time unit

#### withZkClientTimeout

    public CloudHttp2SolrClient.Builder withZkClientTimeout​(int zkClientTimeout,
                                                            TimeUnit unit)

Sets the Zk client session timeout

Parameters:
  `zkClientTimeout` - timeout value
  `unit` - time unit

#### build

    public CloudHttp2SolrClient build()

Create a `CloudHttp2SolrClient` based on the provided configuration.