3939import org .elasticsearch .cluster .metadata .RepositoriesMetadata ;
4040import org .elasticsearch .cluster .metadata .RepositoryMetadata ;
4141import org .elasticsearch .cluster .node .DiscoveryNode ;
42+ import org .elasticsearch .cluster .node .DiscoveryNodeRole ;
4243import org .elasticsearch .cluster .service .ClusterService ;
4344import org .elasticsearch .common .Strings ;
4445import org .elasticsearch .common .component .AbstractLifecycleComponent ;
5657import java .util .HashMap ;
5758import java .util .List ;
5859import java .util .Map ;
60+ import java .util .Set ;
5961
6062/**
6163 * Service responsible for maintaining and providing access to snapshot repositories on nodes.
@@ -86,7 +88,9 @@ public RepositoriesService(Settings settings, ClusterService clusterService, Tra
8688 // Doesn't make sense to maintain repositories on non-master and non-data nodes
8789 // Nothing happens there anyway
8890 if (DiscoveryNode .isDataNode (settings ) || DiscoveryNode .isMasterNode (settings )) {
89- clusterService .addHighPriorityApplier (this );
91+ if (isDedicatedVotingOnlyNode (DiscoveryNode .getRolesFromSettings (settings )) == false ) {
92+ clusterService .addHighPriorityApplier (this );
93+ }
9094 }
9195 this .verifyAction = new VerifyNodeRepositoryAction (transportService , clusterService , this );
9296 }
@@ -279,9 +283,9 @@ protected void doRun() {
279283 });
280284 }
281285
282- static boolean isDedicatedVotingOnlyNode (DiscoveryNode node ) {
283- return node . isMasterNode ( ) && node . isDataNode ( ) == false &&
284- node . getRoles () .stream ().anyMatch (role -> role .roleName ().equals ("voting_only" ));
286+ static boolean isDedicatedVotingOnlyNode (Set < DiscoveryNodeRole > roles ) {
287+ return roles . contains ( DiscoveryNodeRole . MASTER_ROLE ) && roles . contains ( DiscoveryNodeRole . DATA_ROLE ) == false &&
288+ roles .stream ().anyMatch (role -> role .roleName ().equals ("voting_only" ));
285289 }
286290
287291 /**
@@ -294,9 +298,6 @@ static boolean isDedicatedVotingOnlyNode(DiscoveryNode node) {
294298 public void applyClusterState (ClusterChangedEvent event ) {
295299 try {
296300 final ClusterState state = event .state ();
297- if (isDedicatedVotingOnlyNode (state .nodes ().getLocalNode ())) {
298- return ;
299- }
300301 RepositoriesMetadata oldMetadata = event .previousState ().getMetadata ().custom (RepositoriesMetadata .TYPE );
301302 RepositoriesMetadata newMetadata = state .getMetadata ().custom (RepositoriesMetadata .TYPE );
302303
0 commit comments