You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by is...@apache.org on 2022/01/03 08:08:34 UTC
[solr] 13/28: Adding defaultIfAbsent, minor formatting fixes
This is an automated email from the ASF dual-hosted git repository.
ishan pushed a commit to branch jira/SOLR15694
in repository https://gitbox.apache.org/repos/asf/solr.git
commit 072f65909e7fc1e9bde4500af537b1e54ff7c2aa
Author: Ishan Chattopadhyaya <is...@apache.org>
AuthorDate: Fri Dec 10 13:28:45 2021 +0530
Adding defaultIfAbsent, minor formatting fixes
---
.../java/org/apache/solr/cloud/ZkController.java | 4 +-
.../java/org/apache/solr/core/CoreContainer.java | 2 +-
.../src/java/org/apache/solr/core/NodeRoles.java | 89 +++++++++++++---------
.../test/org/apache/solr/cloud/NodeRolesTest.java | 9 +--
4 files changed, 56 insertions(+), 48 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index e7b15bf..5e71098 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -852,7 +852,7 @@ public class ZkController implements Closeable {
cmdExecutor.ensureExists(ZkStateReader.NODE_ROLES, zkClient);
for (NodeRoles.Role role : NodeRoles.Role.values()) {
cmdExecutor.ensureExists(ZkStateReader.NODE_ROLES + "/" + role.roleName, zkClient);
- for (String v : role.supportedVals()) {
+ for (String v : role.supportedModes()) {
cmdExecutor.ensureExists(ZkStateReader.NODE_ROLES + "/" + role.roleName + "/"+v, zkClient);
}
}
@@ -1091,7 +1091,7 @@ public class ZkController implements Closeable {
ops.add(Op.create(nodePath, null, zkClient.getZkACLProvider().getACLsToAdd(nodePath), CreateMode.EPHEMERAL));
// Create the roles node as well
- cc.nodeRoles.ROLES.forEach((role, val) -> ops.add(Op.create(ZkStateReader.NODE_ROLES + "/" + role.roleName+ "/"+val +"/"+ nodeName,
+ cc.nodeRoles.getRoles().forEach((role, val) -> ops.add(Op.create(ZkStateReader.NODE_ROLES + "/" + role.roleName+ "/"+val +"/"+ nodeName,
null, zkClient.getZkACLProvider().getACLsToAdd(nodePath), CreateMode.EPHEMERAL)));
zkClient.multi(ops, true);
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index f7e9a1f..72a0df3 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -947,7 +947,7 @@ public class CoreContainer {
});
clusterSingletons.setReady();
- if (NodeRoles.PREFERRED.equals(nodeRoles.getRoleVal(NodeRoles.Role.OVERSEER))) {
+ if (NodeRoles.PREFERRED.equals(nodeRoles.getRoleMode(NodeRoles.Role.OVERSEER))) {
try {
log.info("This node is started as a preferred overseer");
zkSys.getZkController().setPreferredOverseer();
diff --git a/solr/core/src/java/org/apache/solr/core/NodeRoles.java b/solr/core/src/java/org/apache/solr/core/NodeRoles.java
index fb3f011..b72e5ec 100644
--- a/solr/core/src/java/org/apache/solr/core/NodeRoles.java
+++ b/solr/core/src/java/org/apache/solr/core/NodeRoles.java
@@ -30,46 +30,65 @@ public class NodeRoles implements MapWriter {
public static final String NODE_ROLES_PROP = "solr.node.roles";
- public Map<Role, String> ROLES ;
+ public static final String ON = "on";
+ public static final String OFF = "off";
+ public static final String ALLOWED = "allowed";
+ public static final String DISALLOWED = "disallowed";
+ public static final String PREFERRED = "preferred";
- public NodeRoles(String role) {
- ROLES = new EnumMap<>(Role.class);
- if (StringUtils.isEmpty(role)) {
- role = DEFAULT_ROLE;
+ public static final String DEFAULT_ROLES_STRING = "data:on,overseer:allowed";
+
+ // Map of roles to mode that are applicable for this node.
+ private Map<Role, String> nodeRoles;
+
+ public NodeRoles(String rolesString) {
+ Map<Role, String> roles = new EnumMap<>(Role.class);
+ if (StringUtils.isEmpty(rolesString)) {
+ rolesString = DEFAULT_ROLES_STRING;
}
- List<String> rolesList = StrUtils.splitSmart(role, ',');
- for (String s : rolesList) {
- List<String> roleVal = StrUtils.splitSmart(s,':');
- Role r = Role.getRole(roleVal.get(0));
- if(r.supportedVals().contains(roleVal.get(1))) {
- ROLES.put(r, roleVal.get(1));
+ List<String> rolesList = StrUtils.splitSmart(rolesString, ',');
+ for (String s: rolesList) {
+ List<String> roleMode = StrUtils.splitSmart(s,':');
+ Role r = Role.getRole(roleMode.get(0));
+ if (r.supportedModes().contains(roleMode.get(1))) {
+ roles.put(r, roleMode.get(1));
} else {
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "UNKNOWN role value :"+roleVal.get(0));
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown role mode: " + roleMode.get(0));
}
}
- ROLES = Collections.unmodifiableMap(ROLES);
+ for(Role r: Role.values()) {
+ if (!roles.containsKey(r)) {
+ roles.put(r, r.defaultIfAbsent());
+ }
+ }
+ nodeRoles = Collections.unmodifiableMap(roles);
}
- public String getRoleVal(Role role) {
- return ROLES.get(role);
+ public Map<Role, String> getRoles() {
+ return nodeRoles;
}
-
+ public String getRoleMode(Role role) {
+ return nodeRoles.get(role);
+ }
@Override
public void writeMap(EntryWriter ew) {
- ROLES.forEach((role, s) -> ew.putNoEx(role.roleName, s));
+ nodeRoles.forEach((role, s) -> ew.putNoEx(role.roleName, s));
}
public enum Role {
- DATA("data") ,
+ DATA("data"),
OVERSEER("overseer") {
@Override
- public Set<String> supportedVals() {
- return OVERSEER_VALS;
+ public Set<String> supportedModes() {
+ return Set.of(ALLOWED, PREFERRED, DISALLOWED);
+ }
+ @Override
+ public String defaultIfAbsent() {
+ return DISALLOWED;
}
- },
- COORDINATOR("coordinator");
+ };
public final String roleName;
@@ -78,16 +97,21 @@ public class NodeRoles implements MapWriter {
}
public static Role getRole(String value) {
- // Given a user string "overseer", convert to OVERSEER and return the enum value
- for (Role role : Role.values()) {
- if(value.equals(role.roleName)) return role;
+ for (Role role: Role.values()) {
+ if (value.equals(role.roleName)) return role;
}
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown role : "+value);
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unknown role: " + value);
}
- public Set<String> supportedVals() {
- return ON_OFF;
+ public Set<String> supportedModes() {
+ return Set.of(ON, OFF);
+ }
+ /**
+ * Default mode for a role in nodes where this role is not specified.
+ */
+ public String defaultIfAbsent() {
+ return OFF;
}
@Override
@@ -95,13 +119,4 @@ public class NodeRoles implements MapWriter {
return super.toString().toLowerCase();
}
}
-
- public static final String ON = "on";
- public static final String OFF = "off";
- public static final Set<String> ON_OFF = Set.of(ON,OFF);
- public static final String ALLOWED = "allowed";
- public static final String DISALLOWED = "disallowed";
- public static final String PREFERRED = "preferred";
- public static final Set<String> OVERSEER_VALS = Set.of(ALLOWED, DISALLOWED, PREFERRED);
- public static final String DEFAULT_ROLE = "data:on,overseer:allowed";
}
diff --git a/solr/core/src/test/org/apache/solr/cloud/NodeRolesTest.java b/solr/core/src/test/org/apache/solr/cloud/NodeRolesTest.java
index 18a16fe..a2e3651 100644
--- a/solr/core/src/test/org/apache/solr/cloud/NodeRolesTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/NodeRolesTest.java
@@ -48,7 +48,6 @@ public class NodeRolesTest extends SolrCloudTestCase {
@SuppressWarnings("unchecked")
public void testRoleIntegration() throws Exception {
-
JettySolrRunner j0 = cluster.getJettySolrRunner(0);
JettySolrRunner j1 = null, j2 = null;
j1 = startNodeWithRoles("overseer:preferred,data:off");
@@ -58,19 +57,15 @@ public class NodeRolesTest extends SolrCloudTestCase {
assertEquals(j1.getNodeName(), rsp._getStr("node-roles/data/off[0]", null));
OverseerRolesTest.waitForNewOverseer(20, j1.getNodeName(), false);
- //start another node that is overseer but has data
+ // start another node that is overseer but has data
j2 = startNodeWithRoles("overseer:preferred,data:on");
rsp = new V2Request.Builder("/cluster/node-roles").GET().build().process(cluster.getSolrClient());
-
assertTrue( ((Collection)rsp._get("node-roles/overseer/preferred", Collections.emptyList())).contains(j2.getNodeName()));
assertTrue( ((Collection)rsp._get("node-roles/data/on", Collections.emptyList())).contains(j2.getNodeName()));
-
-
rsp = new V2Request.Builder("/cluster/node-roles/overseer").GET().build().process(cluster.getSolrClient());
-
assertTrue( ((Collection)rsp._get("overseer/preferred", Collections.emptyList())).contains(j2.getNodeName()));
assertTrue( ((Collection)rsp._get("overseer/preferred", Collections.emptyList())).contains(j1.getNodeName()));
@@ -78,8 +73,6 @@ public class NodeRolesTest extends SolrCloudTestCase {
assertTrue( ((Collection)rsp._get("overseer/preferred", Collections.emptyList())).contains(j2.getNodeName()));
assertTrue( ((Collection)rsp._get("overseer/preferred", Collections.emptyList())).contains(j1.getNodeName()));
-
-
String COLLECTION_NAME = "TEST_ROLES";
CollectionAdminRequest
.createCollection(COLLECTION_NAME, "conf", 3, 1)