39
39
import org .elasticsearch .common .Priority ;
40
40
import org .elasticsearch .common .inject .Inject ;
41
41
import org .elasticsearch .common .io .stream .StreamInput ;
42
+ import org .elasticsearch .common .settings .ClusterSettings ;
42
43
import org .elasticsearch .common .settings .Setting ;
43
44
import org .elasticsearch .common .settings .Setting .Property ;
45
+ import org .elasticsearch .common .settings .Settings ;
44
46
import org .elasticsearch .common .unit .TimeValue ;
45
47
import org .elasticsearch .threadpool .ThreadPool ;
46
48
import org .elasticsearch .threadpool .ThreadPool .Names ;
@@ -59,11 +61,21 @@ public class TransportAddVotingConfigExclusionsAction extends TransportMasterNod
59
61
public static final Setting <Integer > MAXIMUM_VOTING_CONFIG_EXCLUSIONS_SETTING
60
62
= Setting .intSetting ("cluster.max_voting_config_exclusions" , 10 , 1 , Property .Dynamic , Property .NodeScope );
61
63
64
+ private volatile int maxVotingConfigExclusions ;
65
+
62
66
@ Inject
63
- public TransportAddVotingConfigExclusionsAction (TransportService transportService , ClusterService clusterService , ThreadPool threadPool ,
64
- ActionFilters actionFilters , IndexNameExpressionResolver indexNameExpressionResolver ) {
67
+ public TransportAddVotingConfigExclusionsAction (Settings settings , ClusterSettings clusterSettings , TransportService transportService ,
68
+ ClusterService clusterService , ThreadPool threadPool , ActionFilters actionFilters ,
69
+ IndexNameExpressionResolver indexNameExpressionResolver ) {
65
70
super (AddVotingConfigExclusionsAction .NAME , transportService , clusterService , threadPool , actionFilters ,
66
71
AddVotingConfigExclusionsRequest ::new , indexNameExpressionResolver );
72
+
73
+ maxVotingConfigExclusions = MAXIMUM_VOTING_CONFIG_EXCLUSIONS_SETTING .get (settings );
74
+ clusterSettings .addSettingsUpdateConsumer (MAXIMUM_VOTING_CONFIG_EXCLUSIONS_SETTING , this ::setMaxVotingConfigExclusions );
75
+ }
76
+
77
+ private void setMaxVotingConfigExclusions (int maxVotingConfigExclusions ) {
78
+ this .maxVotingConfigExclusions = maxVotingConfigExclusions ;
67
79
}
68
80
69
81
@ Override
@@ -80,7 +92,8 @@ protected AddVotingConfigExclusionsResponse read(StreamInput in) throws IOExcept
80
92
protected void masterOperation (AddVotingConfigExclusionsRequest request , ClusterState state ,
81
93
ActionListener <AddVotingConfigExclusionsResponse > listener ) throws Exception {
82
94
83
- resolveVotingConfigExclusionsAndCheckMaximum (request , state ); // throws IAE if no nodes matched or maximum exceeded
95
+ resolveVotingConfigExclusionsAndCheckMaximum (request , state , maxVotingConfigExclusions );
96
+ // throws IAE if no nodes matched or maximum exceeded
84
97
85
98
clusterService .submitStateUpdateTask ("add-voting-config-exclusions" , new ClusterStateUpdateTask (Priority .URGENT ) {
86
99
@@ -89,14 +102,14 @@ protected void masterOperation(AddVotingConfigExclusionsRequest request, Cluster
89
102
@ Override
90
103
public ClusterState execute (ClusterState currentState ) {
91
104
assert resolvedExclusions == null : resolvedExclusions ;
92
- resolvedExclusions = resolveVotingConfigExclusionsAndCheckMaximum (request , currentState );
105
+ final int finalMaxVotingConfigExclusions = TransportAddVotingConfigExclusionsAction .this .maxVotingConfigExclusions ;
106
+ resolvedExclusions = resolveVotingConfigExclusionsAndCheckMaximum (request , currentState , finalMaxVotingConfigExclusions );
93
107
94
108
final CoordinationMetaData .Builder builder = CoordinationMetaData .builder (currentState .coordinationMetaData ());
95
109
resolvedExclusions .forEach (builder ::addVotingConfigExclusion );
96
110
final MetaData newMetaData = MetaData .builder (currentState .metaData ()).coordinationMetaData (builder .build ()).build ();
97
111
final ClusterState newState = ClusterState .builder (currentState ).metaData (newMetaData ).build ();
98
- assert newState .getVotingConfigExclusions ().size () <= MAXIMUM_VOTING_CONFIG_EXCLUSIONS_SETTING .get (
99
- currentState .metaData ().settings ());
112
+ assert newState .getVotingConfigExclusions ().size () <= finalMaxVotingConfigExclusions ;
100
113
return newState ;
101
114
}
102
115
@@ -148,9 +161,10 @@ public void onTimeout(TimeValue timeout) {
148
161
}
149
162
150
163
private static Set <VotingConfigExclusion > resolveVotingConfigExclusionsAndCheckMaximum (AddVotingConfigExclusionsRequest request ,
151
- ClusterState state ) {
152
- return request .resolveVotingConfigExclusionsAndCheckMaximum (state ,
153
- MAXIMUM_VOTING_CONFIG_EXCLUSIONS_SETTING .get (state .metaData ().settings ()), MAXIMUM_VOTING_CONFIG_EXCLUSIONS_SETTING .getKey ());
164
+ ClusterState state ,
165
+ int maxVotingConfigExclusions ) {
166
+ return request .resolveVotingConfigExclusionsAndCheckMaximum (state , maxVotingConfigExclusions ,
167
+ MAXIMUM_VOTING_CONFIG_EXCLUSIONS_SETTING .getKey ());
154
168
}
155
169
156
170
@ Override
0 commit comments