Cluster Update Settings API

edit

The Cluster Update Settings API allows to update cluster wide settings.

Cluster Update Settings Request

edit

A ClusterUpdateSettingsRequest:

ClusterUpdateSettingsRequest request = new ClusterUpdateSettingsRequest();

Cluster Settings

edit

At least one setting to be updated must be provided:

request.transientSettings(transientSettings); 
request.persistentSettings(persistentSettings); 

Sets the transient settings to be applied

Sets the persistent setting to be applied

Providing the Settings

edit

The settings to be applied can be provided in different ways:

String transientSettingKey =
        RecoverySettings.INDICES_RECOVERY_MAX_BYTES_PER_SEC_SETTING.getKey();
int transientSettingValue = 10;
Settings transientSettings =
        Settings.builder()
        .put(transientSettingKey, transientSettingValue, ByteSizeUnit.BYTES)
        .build(); 

String persistentSettingKey =
        EnableAllocationDecider.CLUSTER_ROUTING_ALLOCATION_ENABLE_SETTING.getKey();
String persistentSettingValue =
        EnableAllocationDecider.Allocation.NONE.name();
Settings persistentSettings =
        Settings.builder()
        .put(persistentSettingKey, persistentSettingValue)
        .build(); 

Creates a transient setting as Settings

Creates a persistent setting as Settings

Settings.Builder transientSettingsBuilder =
        Settings.builder()
        .put(transientSettingKey, transientSettingValue, ByteSizeUnit.BYTES);
request.transientSettings(transientSettingsBuilder); 

Settings provided as Settings.Builder

request.transientSettings(
        "{\"indices.recovery.max_bytes_per_sec\": \"10b\"}"
        , XContentType.JSON); 

Settings provided as String

Map<String, Object> map = new HashMap<>();
map.put(transientSettingKey
        , transientSettingValue + ByteSizeUnit.BYTES.getSuffix());
request.transientSettings(map); 

Settings provided as a Map

Optional Arguments

edit

The following arguments can optionally be provided:

request.timeout(TimeValue.timeValueMinutes(2)); 
request.timeout("2m"); 

Timeout to wait for the all the nodes to acknowledge the settings were applied as a TimeValue

Timeout to wait for the all the nodes to acknowledge the settings were applied as a String

request.masterNodeTimeout(TimeValue.timeValueMinutes(1)); 
request.masterNodeTimeout("1m"); 

Timeout to connect to the master node as a TimeValue

Timeout to connect to the master node as a String

Synchronous Execution

edit
ClusterUpdateSettingsResponse response = client.cluster().putSettings(request);

Asynchronous Execution

edit

The asynchronous execution of a cluster update settings requires both the ClusterUpdateSettingsRequest instance and an ActionListener instance to be passed to the asynchronous method:

client.cluster().putSettingsAsync(request, listener); 

The ClusterUpdateSettingsRequest to execute and the ActionListener to use when the execution completes

The asynchronous method does not block and returns immediately. Once it is completed the ActionListener is called back using the onResponse method if the execution successfully completed or using the onFailure method if it failed.

A typical listener for ClusterUpdateSettingsResponse looks like:

ActionListener<ClusterUpdateSettingsResponse> listener =
        new ActionListener<ClusterUpdateSettingsResponse>() {
    @Override
    public void onResponse(ClusterUpdateSettingsResponse response) {
        
    }

    @Override
    public void onFailure(Exception e) {
        
    }
};

Called when the execution is successfully completed. The response is provided as an argument

Called in case of a failure. The raised exception is provided as an argument

Cluster Update Settings Response

edit

The returned ClusterUpdateSettings allows to retrieve information about the executed operation as follows:

boolean acknowledged = response.isAcknowledged(); 
Settings transientSettingsResponse = response.getTransientSettings(); 
Settings persistentSettingsResponse = response.getPersistentSettings(); 

Indicates whether all of the nodes have acknowledged the request

Indicates which transient settings have been applied

Indicates which persistent settings have been applied