GrantPSpencer opened a new pull request, #2653:
URL: https://github.com/apache/helix/pull/2653

   ### Issues
   
   - [ ] My PR addresses the following Helix issues and references them in the 
PR description:
   
   The PartitionAssignment API fails for waged clusters where a resource does 
not have a respective resource config defined for it in ZK. 
   
   This is the error that is shown to users:
   ```
   {
     "error" : "Failed to compute partition assignment: 
org.apache.helix.HelixException: getIdealAssignmentForWagedFullAuto(): 
Calculation failed: Failed to compute BestPossibleState!"
   }
   ```
   
   This is the error that is found in helix-rest logs (truncated)
   ```
   2023/10/11 03:20:59.336 ERROR [HelixUtil] [qtp1938380262-5394685] 
[helix-rest] [] getIdealAssignmentForWagedFullAuto(): Failed to compute 
ResourceAssignments!
   java.lang.NullPointerException: null
   at 
java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:177)
 ~[?:?]
   at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169) ~[?:?]
   at 
java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) 
~[?:?]
   at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) 
~[?:?]
   at 
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) 
~[?:?]
   at 
java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) 
~[?:?]
   at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
~[?:?]
   at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) 
~[?:?]
   at 
org.apache.helix.util.HelixUtil.getAssignmentForWagedFullAutoImpl(HelixUtil.java:318)
 ~[helix-core-1.1.1-dev-202303311728.jar:1.1.1-dev-202303311728]
   at 
org.apache.helix.util.HelixUtil.getTargetAssignmentForWagedFullAuto(HelixUtil.java:219)
 ~[helix-core-1.1.1-dev-202303311728.jar:1.1.1-dev-202303311728]
   ```
   
   ### Description
   
   - [ ] Here are some details about my PR, including screenshots of any UI 
changes:
   
   partitionAssignment API fails for clusters where resource configs aren't set 
due to NPE. This NPE occurs because getResourceConfig() will return null if the 
resource config does not exist, which is then added into the 
wagedResourceConfigs list. The below code is where the NPE occurs as one of the 
items in the list is null.
   
   ```
         dataProvider.setResourceConfigMap(resourceConfigs.stream()
             .collect(Collectors.toMap(ResourceConfig::getResourceName, 
Function.identity())));
   ```
   
   ### Tests
   
   - [ ] The following tests are written for this issue:
   No new unit tests. But I did test this by deploying helix-rest locally to 
confirm that the partitionAssignment API worked after the change
   
   - The following is the result of the "mvn test" command on the appropriate 
module:
   
   $mvn test -o -Dtest=TestResourceAssignmentOptimizerAccessor -pl=helix-rest
   ```
   [INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
   [INFO] 
   [INFO] 
   [INFO] --- jacoco:0.8.6:report (generate-code-coverage-report) @ helix-rest 
---
   [INFO] Loading execution data file 
/Users/gspencer/Desktop/git-repos/helix/helix-rest/target/jacoco.exec
   [INFO] Analyzed bundle 'Apache Helix :: Restful Interface' with 92 classes
   [INFO] 
------------------------------------------------------------------------
   [INFO] BUILD SUCCESS
   [INFO] 
------------------------------------------------------------------------
   [INFO] Total time:  54.333 s
   [INFO] Finished at: 2023-10-10T21:11:40-07:00
   [INFO] 
------------------------------------------------------------------------
   
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to