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
The following commit(s) were added to refs/heads/jira/SOLR15694 by this push:
new b49e976 Adding defaultIfAbsent, minor formatting fixes
b49e976 is described below
commit b49e9762970bf32323521e4144476728d91f8bec
Author: Ishan Chattopadhyaya <[email protected]>
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 f32e2cd..80d356f 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -946,7 +946,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)