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