[7.x] Add "content" tier as new "data_content" role (#62247) (#62322)

Similar to the work in #60994 where we introduced the `data_hot`, `data_warm`, etc node roles. This
introduces a new `data_content` node role to be used for the Content tier.

Currently this tier is not used anywhere, but subsequent work will use this tier.

Relates to #60848
This commit is contained in:
Lee Hinman 2020-09-14 09:42:57 -06:00 committed by GitHub
parent 13c193a9fc
commit bf9651c635
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 6 deletions

View File

@ -19,16 +19,17 @@ import org.elasticsearch.xpack.cluster.routing.allocation.DataTierAllocationDeci
import java.util.Set; import java.util.Set;
/** /**
* The {@code DataTier} class encapsulates the formalization of the "hot", * The {@code DataTier} class encapsulates the formalization of the "content",
* "warm", "cold", and "frozen" tiers as node roles. In contains the roles * "hot", "warm", "cold", and "frozen" tiers as node roles. In contains the
* themselves as well as helpers for validation and determining if a node has * roles themselves as well as helpers for validation and determining if a node
* a tier configured. * has a tier configured.
* *
* Related: * Related:
* {@link org.elasticsearch.xpack.cluster.routing.allocation.DataTierAllocationDecider} * {@link org.elasticsearch.xpack.cluster.routing.allocation.DataTierAllocationDecider}
*/ */
public class DataTier { public class DataTier {
public static final String DATA_CONTENT = "data_content";
public static final String DATA_HOT = "data_hot"; public static final String DATA_HOT = "data_hot";
public static final String DATA_WARM = "data_warm"; public static final String DATA_WARM = "data_warm";
public static final String DATA_COLD = "data_cold"; public static final String DATA_COLD = "data_cold";
@ -38,7 +39,8 @@ public class DataTier {
* Returns true if the given tier name is a valid tier * Returns true if the given tier name is a valid tier
*/ */
public static boolean validTierName(String tierName) { public static boolean validTierName(String tierName) {
return DATA_HOT.equals(tierName) || return DATA_CONTENT.equals(tierName) ||
DATA_HOT.equals(tierName) ||
DATA_WARM.equals(tierName) || DATA_WARM.equals(tierName) ||
DATA_COLD.equals(tierName) || DATA_COLD.equals(tierName) ||
DATA_FROZEN.equals(tierName); DATA_FROZEN.equals(tierName);
@ -61,6 +63,23 @@ public class DataTier {
return false; return false;
} }
public static DiscoveryNodeRole DATA_CONTENT_NODE_ROLE = new DiscoveryNodeRole("data_content", "s") {
@Override
public boolean isEnabledByDefault(final Settings settings) {
return false;
}
@Override
public Setting<Boolean> legacySetting() {
return null;
}
@Override
public boolean canContainData() {
return true;
}
};
public static DiscoveryNodeRole DATA_HOT_NODE_ROLE = new DiscoveryNodeRole("data_hot", "h") { public static DiscoveryNodeRole DATA_HOT_NODE_ROLE = new DiscoveryNodeRole("data_hot", "h") {
@Override @Override
public boolean isEnabledByDefault(final Settings settings) { public boolean isEnabledByDefault(final Settings settings) {
@ -129,6 +148,10 @@ public class DataTier {
} }
}; };
public static boolean isContentNode(DiscoveryNode discoveryNode) {
return discoveryNode.getRoles().contains(DATA_CONTENT_NODE_ROLE) || discoveryNode.getRoles().contains(DiscoveryNodeRole.DATA_ROLE);
}
public static boolean isHotNode(DiscoveryNode discoveryNode) { public static boolean isHotNode(DiscoveryNode discoveryNode) {
return discoveryNode.getRoles().contains(DATA_HOT_NODE_ROLE) || discoveryNode.getRoles().contains(DiscoveryNodeRole.DATA_ROLE); return discoveryNode.getRoles().contains(DATA_HOT_NODE_ROLE) || discoveryNode.getRoles().contains(DiscoveryNodeRole.DATA_ROLE);
} }

View File

@ -423,6 +423,7 @@ public class XPackPlugin extends XPackClientPlugin implements ExtensiblePlugin,
@Override @Override
public Set<DiscoveryNodeRole> getRoles() { public Set<DiscoveryNodeRole> getRoles() {
return new HashSet<>(Arrays.asList( return new HashSet<>(Arrays.asList(
DataTier.DATA_CONTENT_NODE_ROLE,
DataTier.DATA_HOT_NODE_ROLE, DataTier.DATA_HOT_NODE_ROLE,
DataTier.DATA_WARM_NODE_ROLE, DataTier.DATA_WARM_NODE_ROLE,
DataTier.DATA_COLD_NODE_ROLE, DataTier.DATA_COLD_NODE_ROLE,

View File

@ -40,6 +40,13 @@ public class DataTierTests extends ESTestCase {
.map(DiscoveryNode::getId) .map(DiscoveryNode::getId)
.toArray(String[]::new); .toArray(String[]::new);
final String[] contentNodes =
StreamSupport.stream(discoveryNodes.getNodes().values().spliterator(), false)
.map(n -> n.value)
.filter(DataTier::isContentNode)
.map(DiscoveryNode::getId)
.toArray(String[]::new);
final String[] hotNodes = final String[] hotNodes =
StreamSupport.stream(discoveryNodes.getNodes().values().spliterator(), false) StreamSupport.stream(discoveryNodes.getNodes().values().spliterator(), false)
.map(n -> n.value) .map(n -> n.value)
@ -69,11 +76,13 @@ public class DataTierTests extends ESTestCase {
.toArray(String[]::new); .toArray(String[]::new);
assertThat(discoveryNodes.resolveNodes("data:true"), arrayContainingInAnyOrder(dataNodes)); assertThat(discoveryNodes.resolveNodes("data:true"), arrayContainingInAnyOrder(dataNodes));
assertThat(discoveryNodes.resolveNodes("data_content:true"), arrayContainingInAnyOrder(contentNodes));
assertThat(discoveryNodes.resolveNodes("data_hot:true"), arrayContainingInAnyOrder(hotNodes)); assertThat(discoveryNodes.resolveNodes("data_hot:true"), arrayContainingInAnyOrder(hotNodes));
assertThat(discoveryNodes.resolveNodes("data_warm:true"), arrayContainingInAnyOrder(warmNodes)); assertThat(discoveryNodes.resolveNodes("data_warm:true"), arrayContainingInAnyOrder(warmNodes));
assertThat(discoveryNodes.resolveNodes("data_cold:true"), arrayContainingInAnyOrder(coldNodes)); assertThat(discoveryNodes.resolveNodes("data_cold:true"), arrayContainingInAnyOrder(coldNodes));
assertThat(discoveryNodes.resolveNodes("data_frozen:true"), arrayContainingInAnyOrder(frozenNodes)); assertThat(discoveryNodes.resolveNodes("data_frozen:true"), arrayContainingInAnyOrder(frozenNodes));
Set<String> allTiers = new HashSet<>(Arrays.asList(hotNodes)); Set<String> allTiers = new HashSet<>(Arrays.asList(contentNodes));
allTiers.addAll(Arrays.asList(hotNodes));
allTiers.addAll(Arrays.asList(warmNodes)); allTiers.addAll(Arrays.asList(warmNodes));
allTiers.addAll(Arrays.asList(coldNodes)); allTiers.addAll(Arrays.asList(coldNodes));
allTiers.addAll(Arrays.asList(frozenNodes)); allTiers.addAll(Arrays.asList(frozenNodes));
@ -100,6 +109,7 @@ public class DataTierTests extends ESTestCase {
private static List<DiscoveryNode> randomNodes(final int numNodes) { private static List<DiscoveryNode> randomNodes(final int numNodes) {
Set<DiscoveryNodeRole> allRoles = new HashSet<>(DiscoveryNodeRole.BUILT_IN_ROLES); Set<DiscoveryNodeRole> allRoles = new HashSet<>(DiscoveryNodeRole.BUILT_IN_ROLES);
allRoles.remove(DiscoveryNodeRole.DATA_ROLE); allRoles.remove(DiscoveryNodeRole.DATA_ROLE);
allRoles.add(DataTier.DATA_CONTENT_NODE_ROLE);
allRoles.add(DataTier.DATA_HOT_NODE_ROLE); allRoles.add(DataTier.DATA_HOT_NODE_ROLE);
allRoles.add(DataTier.DATA_WARM_NODE_ROLE); allRoles.add(DataTier.DATA_WARM_NODE_ROLE);
allRoles.add(DataTier.DATA_COLD_NODE_ROLE); allRoles.add(DataTier.DATA_COLD_NODE_ROLE);