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());
+  }
 }

Reply via email to