This is an automated email from the ASF dual-hosted git repository.
alizamus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/helix.git
The following commit(s) were added to refs/heads/master by this push:
new 74236c5 Use correct session ID in PerInstanceAccessor (#1733)
74236c5 is described below
commit 74236c5d810cab1117136f932de3e6df4d3c4d80
Author: Ali Reza Zamani Zadeh Najari <[email protected]>
AuthorDate: Wed May 12 11:00:38 2021 -0700
Use correct session ID in PerInstanceAccessor (#1733)
In this commit, the correct session id derived from LiveInstance ephemeral
owner
has been used to read the current state information.
---
.../resources/helix/PerInstanceAccessor.java | 22 ++++++++++++++--------
.../helix/rest/server/TestPerInstanceAccessor.java | 19 +++++++++++++++++++
2 files changed, 33 insertions(+), 8 deletions(-)
diff --git
a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/PerInstanceAccessor.java
b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/PerInstanceAccessor.java
index d588f54..f7bb2af 100644
---
a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/PerInstanceAccessor.java
+++
b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/PerInstanceAccessor.java
@@ -46,12 +46,14 @@ import org.apache.helix.ConfigAccessor;
import org.apache.helix.HelixAdmin;
import org.apache.helix.HelixDataAccessor;
import org.apache.helix.HelixException;
+import org.apache.helix.PropertyKey;
import org.apache.helix.manager.zk.ZKHelixDataAccessor;
import org.apache.helix.model.CurrentState;
import org.apache.helix.model.Error;
import org.apache.helix.model.HealthStat;
import org.apache.helix.model.HelixConfigScope;
import org.apache.helix.model.InstanceConfig;
+import org.apache.helix.model.LiveInstance;
import org.apache.helix.model.Message;
import org.apache.helix.model.ParticipantHistory;
import org.apache.helix.model.builder.HelixConfigScopeBuilder;
@@ -390,13 +392,15 @@ public class PerInstanceAccessor extends
AbstractHelixResource {
root.put(Properties.id.name(), instanceName);
ArrayNode resourcesNode =
root.putArray(PerInstanceProperties.resources.name());
- List<String> sessionIds =
accessor.getChildNames(accessor.keyBuilder().sessions(instanceName));
- if (sessionIds == null || sessionIds.size() == 0) {
+ List<String> liveInstances =
accessor.getChildNames(accessor.keyBuilder().liveInstances());
+ if (!liveInstances.contains(instanceName)) {
return null;
}
+ LiveInstance liveInstance =
+ accessor.getProperty(accessor.keyBuilder().liveInstance(instanceName));
- // Only get resource list from current session id
- String currentSessionId = sessionIds.get(0);
+ // get the current session id
+ String currentSessionId = liveInstance.getEphemeralOwner();
List<String> resources =
accessor.getChildNames(accessor.keyBuilder().currentStates(instanceName,
currentSessionId));
@@ -416,13 +420,15 @@ public class PerInstanceAccessor extends
AbstractHelixResource {
@PathParam("instanceName") String instanceName,
@PathParam("resourceName") String resourceName) throws IOException {
HelixDataAccessor accessor = getDataAccssor(clusterId);
- List<String> sessionIds =
accessor.getChildNames(accessor.keyBuilder().sessions(instanceName));
- if (sessionIds == null || sessionIds.size() == 0) {
+ List<String> liveInstances =
accessor.getChildNames(accessor.keyBuilder().liveInstances());
+ if (!liveInstances.contains(instanceName)) {
return notFound();
}
+ LiveInstance liveInstance =
+ accessor.getProperty(accessor.keyBuilder().liveInstance(instanceName));
- // Only get resource list from current session id
- String currentSessionId = sessionIds.get(0);
+ // get the current session id
+ String currentSessionId = liveInstance.getEphemeralOwner();
CurrentState resourceCurrentState = accessor.getProperty(
accessor.keyBuilder().currentState(instanceName, currentSessionId,
resourceName));
if (resourceCurrentState == null) {
diff --git
a/helix-rest/src/test/java/org/apache/helix/rest/server/TestPerInstanceAccessor.java
b/helix-rest/src/test/java/org/apache/helix/rest/server/TestPerInstanceAccessor.java
index ecc83dc..6f9321a 100644
---
a/helix-rest/src/test/java/org/apache/helix/rest/server/TestPerInstanceAccessor.java
+++
b/helix-rest/src/test/java/org/apache/helix/rest/server/TestPerInstanceAccessor.java
@@ -31,7 +31,9 @@ import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.apache.helix.HelixDataAccessor;
@@ -522,4 +524,21 @@ public class TestPerInstanceAccessor extends
AbstractTestClass {
System.out.println("End test :" + TestHelper.getTestMethodName());
}
+
+ @Test(dependsOnMethods = "testValidateDeltaInstanceConfigForUpdate")
+ public void testGetResourcesOnInstance() throws JsonProcessingException,
InterruptedException {
+ System.out.println("Start test :" + TestHelper.getTestMethodName());
+ String body = new
JerseyUriRequestBuilder("clusters/{}/instances/{}/resources")
+ .isBodyReturnExpected(true).format(CLUSTER_NAME,
INSTANCE_NAME).get(this);
+ JsonNode node = OBJECT_MAPPER.readTree(body);
+ ArrayNode arrayOfResource =
+ (ArrayNode)
node.get(PerInstanceAccessor.PerInstanceProperties.resources.name());
+ Assert.assertTrue(arrayOfResource.size() != 0);
+ String dbNameString= arrayOfResource.get(0).toString();
+ String dbName = dbNameString.substring(1,dbNameString.length()-1);
+ // The below calls should successfully return
+ body = new JerseyUriRequestBuilder("clusters/{}/instances/{}/resources/{}")
+ .isBodyReturnExpected(true).format(CLUSTER_NAME, INSTANCE_NAME,
dbName).get(this);
+ System.out.println("End test :" + TestHelper.getTestMethodName());
+ }
}