org.wildfly.clustering.singleton.election.PreferredSingletonElectionPolicy Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of wildfly-clustering-singleton-api Show documentation
Show all versions of wildfly-clustering-singleton-api Show documentation
Public API for installing singleton MSC services.
/*
* Copyright The WildFly Authors
* SPDX-License-Identifier: Apache-2.0
*/
package org.wildfly.clustering.singleton.election;
import java.util.Arrays;
import java.util.List;
import org.wildfly.clustering.group.Node;
import org.wildfly.clustering.singleton.SingletonElectionPolicy;
/**
* An election policy that always elects a preferred node, and defers to a default policy
* if the preferred node is not a candidate. The means of specifying the preferred node is
* the responsibility of the extending class.
* @author Paul Ferraro
*/
public class PreferredSingletonElectionPolicy implements SingletonElectionPolicy {
private final List preferences;
private final SingletonElectionPolicy policy;
public PreferredSingletonElectionPolicy(SingletonElectionPolicy policy, Preference... preferences) {
this(policy, Arrays.asList(preferences));
}
public PreferredSingletonElectionPolicy(SingletonElectionPolicy policy, List preferences) {
this.policy = policy;
this.preferences = preferences;
}
@Override
public Node elect(List candidates) {
for (Preference preference: this.preferences) {
for (Node candidate: candidates) {
if (preference.preferred(candidate)) {
return candidate;
}
}
}
return this.policy.elect(candidates);
}
}