From 4b0af99f7686e5274cc4075884e933237816e3e0 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Fri, 8 Jul 2022 19:37:44 -0700 Subject: [PATCH 1/9] YARN-11160. Support getResourceProfiles, getResourceProfile API's for Federation. --- .../yarn/server/router/RouterMetrics.java | 65 +++++++++++++++++++ .../clientrm/FederationClientInterceptor.java | 43 +++++++++++- .../clientrm/RouterYarnClientUtils.java | 60 +++++++++++------ .../yarn/server/router/TestRouterMetrics.java | 65 +++++++++++++++++++ .../resources/profiles/sample-profiles-1.json | 6 ++ 5 files changed, 216 insertions(+), 23 deletions(-) create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/profiles/sample-profiles-1.json diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/RouterMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/RouterMetrics.java index e6e20e2af8c1a..42a22600d2b8b 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/RouterMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/RouterMetrics.java @@ -87,6 +87,10 @@ public final class RouterMetrics { private MutableGaugeInt numGetQueueInfoFailedRetrieved; @Metric("# of moveApplicationAcrossQueues failed to be retrieved") private MutableGaugeInt numMoveApplicationAcrossQueuesFailedRetrieved; + @Metric("# of getResourceProfiles failed to be retrieved") + private MutableGaugeInt numGetResourceProfilesFailedRetrieved; + @Metric("# of getResourceProfile failed to be retrieved") + private MutableGaugeInt numGetResourceProfileFailedRetrieved; // Aggregate metrics are shared, and don't have to be looked up per call @Metric("Total number of successful Submitted apps and latency(ms)") @@ -138,6 +142,11 @@ public final class RouterMetrics { private MutableRate totalSucceededGetQueueInfoRetrieved; @Metric("Total number of successful Retrieved moveApplicationAcrossQueues and latency(ms)") private MutableRate totalSucceededMoveApplicationAcrossQueuesRetrieved; + @Metric("Total number of successful Retrieved getResourceProfiles and latency(ms)") + private MutableRate totalSucceededGetResourceProfilesRetrieved; + + @Metric("Total number of successful Retrieved getResourceProfile and latency(ms)") + private MutableRate totalSucceededGetResourceProfileRetrieved; /** * Provide quantile counters for all latencies. @@ -165,6 +174,8 @@ public final class RouterMetrics { private MutableQuantiles signalToContainerLatency; private MutableQuantiles getQueueInfoLatency; private MutableQuantiles moveApplicationAcrossQueuesLatency; + private MutableQuantiles getResourceProfilesLatency; + private MutableQuantiles getResourceProfileLatency; private static volatile RouterMetrics instance = null; private static MetricsRegistry registry; @@ -255,6 +266,14 @@ private RouterMetrics() { moveApplicationAcrossQueuesLatency = registry.newQuantiles("moveApplicationAcrossQueuesLatency", "latency of move application across queues timeouts", "ops", "latency", 10); + + getResourceProfilesLatency = + registry.newQuantiles("getResourceProfilesLatency", + "latency of get resource profiles timeouts", "ops", "latency", 10); + + getResourceProfileLatency = + registry.newQuantiles("getResourceProfileLatency", + "latency of get resource profile timeouts", "ops", "latency", 10); } public static RouterMetrics getMetrics() { @@ -391,6 +410,16 @@ public long getNumSucceededMoveApplicationAcrossQueuesRetrieved() { return totalSucceededMoveApplicationAcrossQueuesRetrieved.lastStat().numSamples(); } + @VisibleForTesting + public long getNumSucceededGetResourceProfilesRetrieved() { + return totalSucceededGetResourceProfilesRetrieved.lastStat().numSamples(); + } + + @VisibleForTesting + public long getNumSucceededGetResourceProfileRetrieved() { + return totalSucceededGetResourceProfileRetrieved.lastStat().numSamples(); + } + @VisibleForTesting public double getLatencySucceededAppsCreated() { return totalSucceededAppsCreated.lastStat().mean(); @@ -506,6 +535,16 @@ public double getLatencySucceededMoveApplicationAcrossQueuesRetrieved() { return totalSucceededMoveApplicationAcrossQueuesRetrieved.lastStat().mean(); } + @VisibleForTesting + public double getLatencySucceededGetResourceProfilesRetrieved() { + return totalSucceededGetResourceProfilesRetrieved.lastStat().mean(); + } + + @VisibleForTesting + public double getLatencySucceededGetResourceProfileRetrieved() { + return totalSucceededGetResourceProfileRetrieved.lastStat().mean(); + } + @VisibleForTesting public int getAppsFailedCreated() { return numAppsFailedCreated.value(); @@ -619,6 +658,14 @@ public int getMoveApplicationAcrossQueuesFailedRetrieved() { return numMoveApplicationAcrossQueuesFailedRetrieved.value(); } + public int getResourceProfilesFailedRetrieved() { + return numGetResourceProfilesFailedRetrieved.value(); + } + + public int getResourceProfileFailedRetrieved() { + return numGetResourceProfileFailedRetrieved.value(); + } + public void succeededAppsCreated(long duration) { totalSucceededAppsCreated.add(duration); getNewApplicationLatency.add(duration); @@ -734,6 +781,16 @@ public void succeededMoveApplicationAcrossQueuesRetrieved(long duration) { moveApplicationAcrossQueuesLatency.add(duration); } + public void succeededGetResourceProfilesRetrieved(long duration) { + totalSucceededGetResourceProfilesRetrieved.add(duration); + getResourceProfilesLatency.add(duration); + } + + public void succeededGetResourceProfileRetrieved(long duration) { + totalSucceededGetResourceProfileRetrieved.add(duration); + getResourceProfileLatency.add(duration); + } + public void incrAppsFailedCreated() { numAppsFailedCreated.incr(); } @@ -825,4 +882,12 @@ public void incrGetQueueInfoFailedRetrieved() { public void incrMoveApplicationAcrossQueuesFailedRetrieved() { numMoveApplicationAcrossQueuesFailedRetrieved.incr(); } + + public void incrGetResourceProfilesFailedRetrieved() { + numGetResourceProfilesFailedRetrieved.incr(); + } + + public void incrGetResourceProfileFailedRetrieved() { + numGetResourceProfileFailedRetrieved.incr(); + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/FederationClientInterceptor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/FederationClientInterceptor.java index 8edca5bf3686a..4f0ed85f7159e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/FederationClientInterceptor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/FederationClientInterceptor.java @@ -1448,13 +1448,52 @@ public UpdateApplicationTimeoutsResponse updateApplicationTimeouts( @Override public GetAllResourceProfilesResponse getResourceProfiles( GetAllResourceProfilesRequest request) throws YarnException, IOException { - throw new NotImplementedException("Code is not implemented"); + if (request == null) { + routerMetrics.incrGetResourceProfilesFailedRetrieved(); + RouterServerUtil.logAndThrowException("Missing getResourceProfiles request.", null); + } + long startTime = clock.getTime(); + ClientMethod remoteMethod = new ClientMethod("getResourceProfiles", + new Class[] {GetAllResourceProfilesRequest.class}, new Object[] {request}); + Collection resourceProfiles; + try { + resourceProfiles = invokeAppClientProtocolMethod(true, remoteMethod, + GetAllResourceProfilesResponse.class); + } catch (Exception ex) { + routerMetrics.incrGetResourceProfilesFailedRetrieved(); + LOG.error("Unable to get resource profiles due to exception.", ex); + throw ex; + } + long stopTime = clock.getTime(); + routerMetrics.succeededGetResourceProfilesRetrieved(stopTime - startTime); + // Merge the GetAllResourceProfilesResponse + return RouterYarnClientUtils.mergeClusterResourceProfilesResponse(resourceProfiles); } @Override public GetResourceProfileResponse getResourceProfile( GetResourceProfileRequest request) throws YarnException, IOException { - throw new NotImplementedException("Code is not implemented"); + if (request == null || request.getProfileName() == null) { + routerMetrics.incrGetResourceProfileFailedRetrieved(); + RouterServerUtil.logAndThrowException("Missing getResourceProfile request or profileName.", + null); + } + long startTime = clock.getTime(); + ClientMethod remoteMethod = new ClientMethod("getResourceProfile", + new Class[] {GetResourceProfileRequest.class}, new Object[] {request}); + Collection resourceProfile; + try { + resourceProfile = invokeAppClientProtocolMethod(true, remoteMethod, + GetResourceProfileResponse.class); + } catch (Exception ex) { + routerMetrics.incrGetResourceProfileFailedRetrieved(); + LOG.error("Unable to get resource profile due to exception.", ex); + throw ex; + } + long stopTime = clock.getTime(); + routerMetrics.succeededGetResourceProfileRetrieved(stopTime - startTime); + // Merge the GetResourceProfileResponse + return RouterYarnClientUtils.mergeClusterResourceProfileResponse(resourceProfile); } @Override diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java index fc3a2a1bf780b..1445bed6209d4 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java @@ -25,27 +25,9 @@ import java.util.Set; import java.util.HashSet; -import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetLabelsToNodesResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; -import org.apache.hadoop.yarn.api.protocolrecords.ReservationListResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceTypeInfoResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse; -import org.apache.hadoop.yarn.api.records.ApplicationId; -import org.apache.hadoop.yarn.api.records.ApplicationReport; -import org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport; -import org.apache.hadoop.yarn.api.records.YarnClusterMetrics; -import org.apache.hadoop.yarn.api.records.NodeReport; -import org.apache.hadoop.yarn.api.records.NodeId; -import org.apache.hadoop.yarn.api.records.NodeLabel; -import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; -import org.apache.hadoop.yarn.api.records.ReservationAllocationState; -import org.apache.hadoop.yarn.api.records.ResourceTypeInfo; -import org.apache.hadoop.yarn.api.records.QueueInfo; +import com.google.common.collect.Maps; +import org.apache.hadoop.yarn.api.protocolrecords.*; +import org.apache.hadoop.yarn.api.records.*; import org.apache.hadoop.yarn.server.uam.UnmanagedApplicationManager; import org.apache.hadoop.yarn.util.Records; import org.apache.hadoop.yarn.util.resource.Resources; @@ -417,5 +399,41 @@ public static GetQueueInfoResponse mergeQueues( queueResponse.setQueueInfo(queueInfo); return queueResponse; } + + /** + * Merges a list of GetAllResourceProfilesResponse. + * + * @param responses a list of GetAllResourceProfilesResponse to merge. + * @return the merged GetAllResourceProfilesResponse. + */ + public static GetAllResourceProfilesResponse mergeClusterResourceProfilesResponse( + Collection responses) { + GetAllResourceProfilesResponse profilesResponse = + Records.newRecord(GetAllResourceProfilesResponse.class); + Map profilesMap = Maps.newHashMap(); + for (GetAllResourceProfilesResponse response : responses) { + if (response != null && response.getResourceProfiles() != null) { + profilesMap.putAll(response.getResourceProfiles()); + } + } + profilesResponse.setResourceProfiles(profilesMap); + return profilesResponse; + } + + public static GetResourceProfileResponse mergeClusterResourceProfileResponse( + Collection responses) { + GetResourceProfileResponse profileResponse = + Records.newRecord(GetResourceProfileResponse.class); + Resource resource = Resource.newInstance(0, 0); + for (GetResourceProfileResponse response : responses) { + if (response != null && response.getResource() != null) { + resource.setMemorySize(resource.getMemorySize() + response.getResource().getMemorySize()); + resource.setVirtualCores(resource.getVirtualCores() + + response.getResource().getVirtualCores()); + } + } + profileResponse.setResource(resource); + return profileResponse; + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/TestRouterMetrics.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/TestRouterMetrics.java index 0869ed493a0a7..61fcd5385a40c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/TestRouterMetrics.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/TestRouterMetrics.java @@ -428,6 +428,16 @@ public void moveApplicationAcrossQueuesFailed() { LOG.info("Mocked: failed moveApplicationAcrossQueuesFailed call"); metrics.incrMoveApplicationAcrossQueuesFailedRetrieved(); } + + public void getResourceProfilesFailed() { + LOG.info("Mocked: failed getResourceProfilesFailed call"); + metrics.incrGetResourceProfilesFailedRetrieved(); + } + + public void getResourceProfileFailed() { + LOG.info("Mocked: failed getResourceProfileFailed call"); + metrics.incrGetResourceProfileFailedRetrieved(); + } } // Records successes for all calls @@ -553,6 +563,16 @@ public void moveApplicationAcrossQueuesRetrieved(long duration) { LOG.info("Mocked: successful moveApplicationAcrossQueues call with duration {}", duration); metrics.succeededMoveApplicationAcrossQueuesRetrieved(duration); } + + public void getResourceProfilesRetrieved(long duration) { + LOG.info("Mocked: successful getResourceProfiles call with duration {}", duration); + metrics.succeededGetResourceProfilesRetrieved(duration); + } + + public void getResourceProfileRetrieved(long duration) { + LOG.info("Mocked: successful getResourceProfile call with duration {}", duration); + metrics.succeededGetResourceProfileRetrieved(duration); + } } @Test @@ -905,4 +925,49 @@ public void testMoveApplicationAcrossQueuesRetrievedFailed() { metrics.getMoveApplicationAcrossQueuesFailedRetrieved()); } + @Test + public void testSucceededGetResourceProfilesRetrieved() { + long totalGoodBefore = metrics.getNumSucceededGetResourceProfilesRetrieved(); + goodSubCluster.getResourceProfilesRetrieved(150); + Assert.assertEquals(totalGoodBefore + 1, + metrics.getNumSucceededGetResourceProfilesRetrieved()); + Assert.assertEquals(150, + metrics.getLatencySucceededGetResourceProfilesRetrieved(), ASSERT_DOUBLE_DELTA); + goodSubCluster.getResourceProfilesRetrieved(300); + Assert.assertEquals(totalGoodBefore + 2, + metrics.getNumSucceededGetResourceProfilesRetrieved()); + Assert.assertEquals(225, + metrics.getLatencySucceededGetResourceProfilesRetrieved(), ASSERT_DOUBLE_DELTA); + } + + @Test + public void testGetResourceProfilesRetrievedFailed() { + long totalBadBefore = metrics.getResourceProfilesFailedRetrieved(); + badSubCluster.getResourceProfilesFailed(); + Assert.assertEquals(totalBadBefore + 1, + metrics.getResourceProfilesFailedRetrieved()); + } + + @Test + public void testSucceededGetResourceProfileRetrieved() { + long totalGoodBefore = metrics.getNumSucceededGetResourceProfileRetrieved(); + goodSubCluster.getResourceProfileRetrieved(150); + Assert.assertEquals(totalGoodBefore + 1, + metrics.getNumSucceededGetResourceProfileRetrieved()); + Assert.assertEquals(150, + metrics.getLatencySucceededGetResourceProfileRetrieved(), ASSERT_DOUBLE_DELTA); + goodSubCluster.getResourceProfileRetrieved(300); + Assert.assertEquals(totalGoodBefore + 2, + metrics.getNumSucceededGetResourceProfileRetrieved()); + Assert.assertEquals(225, + metrics.getLatencySucceededGetResourceProfileRetrieved(), ASSERT_DOUBLE_DELTA); + } + + @Test + public void testGetResourceProfileRetrievedFailed() { + long totalBadBefore = metrics.getResourceProfileFailedRetrieved(); + badSubCluster.getResourceProfileFailed(); + Assert.assertEquals(totalBadBefore + 1, + metrics.getResourceProfileFailedRetrieved()); + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/profiles/sample-profiles-1.json b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/profiles/sample-profiles-1.json new file mode 100644 index 0000000000000..9107af02e7d38 --- /dev/null +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/profiles/sample-profiles-1.json @@ -0,0 +1,6 @@ +{ + "default" : { + "memory-mb" : 2048, + "vcores" : 2 + } +} From 16680a8fb304ca50ebb447720b4052f95bc7d221 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Fri, 8 Jul 2022 22:20:48 -0700 Subject: [PATCH 2/9] YARN-11160. Fix CheckStyle. --- .../clientrm/RouterYarnClientUtils.java | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java index 1445bed6209d4..c0ad5c0b77087 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java @@ -25,9 +25,30 @@ import java.util.Set; import java.util.HashSet; -import com.google.common.collect.Maps; -import org.apache.hadoop.yarn.api.protocolrecords.*; -import org.apache.hadoop.yarn.api.records.*; +import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodesResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetLabelsToNodesResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.ReservationListResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceTypeInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceProfilesResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetResourceProfileResponse; +import org.apache.hadoop.yarn.api.records.ApplicationId; +import org.apache.hadoop.yarn.api.records.ApplicationReport; +import org.apache.hadoop.yarn.api.records.ApplicationResourceUsageReport; +import org.apache.hadoop.yarn.api.records.YarnClusterMetrics; +import org.apache.hadoop.yarn.api.records.NodeReport; +import org.apache.hadoop.yarn.api.records.NodeId; +import org.apache.hadoop.yarn.api.records.NodeLabel; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; +import org.apache.hadoop.yarn.api.records.ReservationAllocationState; +import org.apache.hadoop.yarn.api.records.ResourceTypeInfo; +import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.server.uam.UnmanagedApplicationManager; import org.apache.hadoop.yarn.util.Records; import org.apache.hadoop.yarn.util.resource.Resources; @@ -410,7 +431,7 @@ public static GetAllResourceProfilesResponse mergeClusterResourceProfilesRespons Collection responses) { GetAllResourceProfilesResponse profilesResponse = Records.newRecord(GetAllResourceProfilesResponse.class); - Map profilesMap = Maps.newHashMap(); + Map profilesMap = new HashMap<>(); for (GetAllResourceProfilesResponse response : responses) { if (response != null && response.getResourceProfiles() != null) { profilesMap.putAll(response.getResourceProfiles()); @@ -420,8 +441,14 @@ public static GetAllResourceProfilesResponse mergeClusterResourceProfilesRespons return profilesResponse; } + /** + * Merges a list of GetResourceProfileResponse. + * + * @param responses a list of GetResourceProfileResponse to merge. + * @return the merged GetResourceProfileResponse. + */ public static GetResourceProfileResponse mergeClusterResourceProfileResponse( - Collection responses) { + Collection responses) { GetResourceProfileResponse profileResponse = Records.newRecord(GetResourceProfileResponse.class); Resource resource = Resource.newInstance(0, 0); From 1f109eb1b730bd20af63db5091a9280d00a3078c Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Sat, 9 Jul 2022 01:20:30 -0700 Subject: [PATCH 3/9] YARN-11160. Add Junit Test. --- .../clientrm/RouterYarnClientUtils.java | 14 ++++- .../TestFederationClientInterceptor.java | 57 ++++++++++++++++++- .../resources/profiles/sample-profiles-1.json | 18 ++++++ .../src/test/resources/yarn-site.xml | 8 +++ 4 files changed, 95 insertions(+), 2 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java index c0ad5c0b77087..afca75f60816e 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java @@ -434,7 +434,19 @@ public static GetAllResourceProfilesResponse mergeClusterResourceProfilesRespons Map profilesMap = new HashMap<>(); for (GetAllResourceProfilesResponse response : responses) { if (response != null && response.getResourceProfiles() != null) { - profilesMap.putAll(response.getResourceProfiles()); + for (Map.Entry entry : response.getResourceProfiles().entrySet()) { + String key = entry.getKey(); + Resource value = entry.getValue(); + if (profilesMap.containsKey(key)) { + Resource resourceValue = profilesMap.get(key); + resourceValue.setVirtualCores( + resourceValue.getVirtualCores() + value.getVirtualCores()); + resourceValue.setMemorySize(resourceValue.getMemorySize() + value.getMemorySize()); + profilesMap.put(key, resourceValue); + } else { + profilesMap.put(key, value); + } + } } } profilesResponse.setResourceProfiles(profilesMap); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java index 0ede9865e0a47..4234572dd8dd3 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java @@ -78,6 +78,10 @@ import org.apache.hadoop.yarn.api.protocolrecords.MoveApplicationAcrossQueuesResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoRequest; import org.apache.hadoop.yarn.api.protocolrecords.GetQueueInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceProfilesRequest; +import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceProfilesResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetResourceProfileRequest; +import org.apache.hadoop.yarn.api.protocolrecords.GetResourceProfileResponse; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext; @@ -188,7 +192,6 @@ protected YarnConfiguration createConfiguration() { // Disable StateStoreFacade cache conf.setInt(YarnConfiguration.FEDERATION_CACHE_TIME_TO_LIVE_SECS, 0); - return conf; } @@ -1169,4 +1172,56 @@ public void testGetQueueInfo() throws Exception { Assert.assertEquals(queueInfo.getChildQueues().size(), 12, 0); Assert.assertEquals(queueInfo.getAccessibleNodeLabels().size(), 1); } + + @Test + public void testGetResourceProfiles() throws Exception { + LOG.info("Test FederationClientInterceptor : Get Resource Profiles request."); + + // null request + LambdaTestUtils.intercept(YarnException.class, "Missing getResourceProfiles request.", + () -> interceptor.getResourceProfiles(null)); + + // normal request + GetAllResourceProfilesRequest request = GetAllResourceProfilesRequest.newInstance(); + GetAllResourceProfilesResponse response = interceptor.getResourceProfiles(request); + + Assert.assertNotNull(response); + Assert.assertEquals(response.getResourceProfiles().get("maximum").getMemorySize(), 32768); + Assert.assertEquals(response.getResourceProfiles().get("maximum").getVirtualCores(), 16); + Assert.assertEquals(response.getResourceProfiles().get("default").getMemorySize(), 8192); + Assert.assertEquals(response.getResourceProfiles().get("default").getVirtualCores(), 8); + Assert.assertEquals(response.getResourceProfiles().get("minimum").getMemorySize(), 4096); + Assert.assertEquals(response.getResourceProfiles().get("minimum").getVirtualCores(), 4); + } + + @Test + public void testGetResourceProfile() throws Exception { + LOG.info("Test FederationClientInterceptor : Get Resource Profile request."); + + // null request + LambdaTestUtils.intercept(YarnException.class, + "Missing getResourceProfile request or profileName.", () -> interceptor.getResourceProfile(null)); + + // normal request + GetResourceProfileRequest request = GetResourceProfileRequest.newInstance("maximum"); + GetResourceProfileResponse response = interceptor.getResourceProfile(request); + + Assert.assertNotNull(response); + Assert.assertEquals(response.getResource().getMemorySize(), 32768); + Assert.assertEquals(response.getResource().getVirtualCores(), 16); + + request = GetResourceProfileRequest.newInstance("default"); + response = interceptor.getResourceProfile(request); + + Assert.assertNotNull(response); + Assert.assertEquals(response.getResource().getMemorySize(), 8192); + Assert.assertEquals(response.getResource().getVirtualCores(), 8); + + request = GetResourceProfileRequest.newInstance("minimum"); + response = interceptor.getResourceProfile(request); + + Assert.assertNotNull(response); + Assert.assertEquals(response.getResource().getMemorySize(), 4096); + Assert.assertEquals(response.getResource().getVirtualCores(), 4); + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/profiles/sample-profiles-1.json b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/profiles/sample-profiles-1.json index 9107af02e7d38..8485ab6f3d550 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/profiles/sample-profiles-1.json +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/profiles/sample-profiles-1.json @@ -1,4 +1,22 @@ { + "___asflicense__": [ + "", + "Licensed to the Apache Software Foundation (ASF) under one", + "or more contributor license agreements. See the NOTICE file", + "distributed with this work for additional information", + "regarding copyright ownership. The ASF licenses this file", + "to you under the Apache License, Version 2.0 (the", + "\"License\"); you may not use this file except in compliance", + "with the License. You may obtain a copy of the License at", + "", + " http://www.apache.org/licenses/LICENSE-2.0", + "", + "Unless required by applicable law or agreed to in writing, software", + "distributed under the License is distributed on an \"AS IS\" BASIS,", + "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.", + "See the License for the specific language governing permissions and", + "limitations under the License." + ], "default" : { "memory-mb" : 2048, "vcores" : 2 diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/yarn-site.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/yarn-site.xml index 310a1612486bf..84d4171c79cd4 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/yarn-site.xml +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/resources/yarn-site.xml @@ -31,4 +31,12 @@ yarn.cluster.max-application-priority 50 + + yarn.resourcemanager.resource-profiles.enabled + true + + + yarn.resourcemanager.resource-profiles.source-file + profiles/sample-profiles-1.json + From 3079a7033d6d6c7bbc2c6602dc32ef37894c12da Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Sat, 9 Jul 2022 04:08:59 -0700 Subject: [PATCH 4/9] YARN-11160. Add Junit Test & Fix CheckStyle. --- .../TestFederationClientInterceptor.java | 3 +- .../clientrm/TestRouterYarnClientUtils.java | 78 +++++++++++++++++-- 2 files changed, 72 insertions(+), 9 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java index 4234572dd8dd3..3909ac8c8a415 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java @@ -1200,7 +1200,8 @@ public void testGetResourceProfile() throws Exception { // null request LambdaTestUtils.intercept(YarnException.class, - "Missing getResourceProfile request or profileName.", () -> interceptor.getResourceProfile(null)); + "Missing getResourceProfile request or profileName.", + () -> interceptor.getResourceProfile(null)); // normal request GetResourceProfileRequest request = GetResourceProfileRequest.newInstance("maximum"); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java index 435a8bd85176b..ef9dfb5893c0f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java @@ -27,14 +27,7 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.hadoop.thirdparty.com.google.common.collect.ImmutableSet; -import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetLabelsToNodesResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; -import org.apache.hadoop.yarn.api.protocolrecords.ReservationListResponse; -import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceTypeInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.*; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationReport; @@ -539,4 +532,73 @@ public void testMergeResourceTypes() { Assert.assertTrue(CollectionUtils.isEqualCollection(expectedResponse, response.getResourceTypeInfo())); } + + @Test + public void testMergeResourceProfiles() { + // normal response1 + Map profiles = new HashMap<>(); + Resource resource1 = Resource.newInstance(1024, 1); + GetAllResourceProfilesResponse response1 = GetAllResourceProfilesResponse.newInstance(); + profiles.put("maximum", resource1); + response1.setResourceProfiles(profiles); + + // normal response2 + profiles = new HashMap<>(); + Resource resource2 = Resource.newInstance(2048, 2); + GetAllResourceProfilesResponse response2 = GetAllResourceProfilesResponse.newInstance(); + profiles.put("maximum", resource2); + response2.setResourceProfiles(profiles); + + // empty response + GetAllResourceProfilesResponse response3 = GetAllResourceProfilesResponse.newInstance(); + + // null response + GetAllResourceProfilesResponse response4 = null; + + List responses = new ArrayList<>(); + responses.add(response1); + responses.add(response2); + responses.add(response3); + responses.add(response4); + + GetAllResourceProfilesResponse response = + RouterYarnClientUtils.mergeClusterResourceProfilesResponse(responses); + Resource resource = response.getResourceProfiles().get("maximum"); + Assert.assertEquals(resource.getVirtualCores(), 3); + Assert.assertEquals(resource.getMemorySize(), 3072); + } + + @Test + public void testMergeResourceProfile() { + // normal response1 + Resource resource1 = Resource.newInstance(1024, 1); + GetResourceProfileResponse response1 = + Records.newRecord(GetResourceProfileResponse.class); + response1.setResource(resource1); + + // normal response2 + Resource resource2 = Resource.newInstance(2048, 2); + GetResourceProfileResponse response2 = + Records.newRecord(GetResourceProfileResponse.class); + response2.setResource(resource2); + + // empty response + GetResourceProfileResponse response3 = + Records.newRecord(GetResourceProfileResponse.class); + + // null response + GetResourceProfileResponse response4 = null; + + List responses = new ArrayList<>(); + responses.add(response1); + responses.add(response2); + responses.add(response3); + responses.add(response4); + + GetResourceProfileResponse response = + RouterYarnClientUtils.mergeClusterResourceProfileResponse(responses); + Resource resource = response.getResource(); + Assert.assertEquals(resource.getVirtualCores(), 3); + Assert.assertEquals(resource.getMemorySize(), 3072); + } } From 52176b8a0848594a9264081f81632aa1832c061d Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Wed, 13 Jul 2022 21:42:34 -0700 Subject: [PATCH 5/9] YARN-11160. Fix CheckStyle. --- .../TestFederationClientInterceptor.java | 53 +++++++++---------- .../clientrm/TestRouterYarnClientUtils.java | 19 +++++-- 2 files changed, 38 insertions(+), 34 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java index 3909ac8c8a415..d04db9d45c20f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java @@ -82,19 +82,7 @@ import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceProfilesResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetResourceProfileRequest; import org.apache.hadoop.yarn.api.protocolrecords.GetResourceProfileResponse; -import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; -import org.apache.hadoop.yarn.api.records.ApplicationId; -import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext; -import org.apache.hadoop.yarn.api.records.ContainerLaunchContext; -import org.apache.hadoop.yarn.api.records.Priority; -import org.apache.hadoop.yarn.api.records.YarnApplicationState; -import org.apache.hadoop.yarn.api.records.QueueACL; -import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; -import org.apache.hadoop.yarn.api.records.ReservationId; -import org.apache.hadoop.yarn.api.records.ContainerId; -import org.apache.hadoop.yarn.api.records.ApplicationTimeoutType; -import org.apache.hadoop.yarn.api.records.SignalContainerCommand; -import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.*; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.server.federation.policies.manager.UniformBroadcastPolicyManager; @@ -1186,12 +1174,19 @@ public void testGetResourceProfiles() throws Exception { GetAllResourceProfilesResponse response = interceptor.getResourceProfiles(request); Assert.assertNotNull(response); - Assert.assertEquals(response.getResourceProfiles().get("maximum").getMemorySize(), 32768); - Assert.assertEquals(response.getResourceProfiles().get("maximum").getVirtualCores(), 16); - Assert.assertEquals(response.getResourceProfiles().get("default").getMemorySize(), 8192); - Assert.assertEquals(response.getResourceProfiles().get("default").getVirtualCores(), 8); - Assert.assertEquals(response.getResourceProfiles().get("minimum").getMemorySize(), 4096); - Assert.assertEquals(response.getResourceProfiles().get("minimum").getVirtualCores(), 4); + Map resProfiles = response.getResourceProfiles(); + + Resource maxResProfiles = resProfiles.get("maximum"); + Assert.assertEquals(maxResProfiles.getMemorySize(), 32768); + Assert.assertEquals(maxResProfiles.getVirtualCores(), 16); + + Resource defaultResProfiles = resProfiles.get("default"); + Assert.assertEquals(defaultResProfiles.getMemorySize(), 8192); + Assert.assertEquals(defaultResProfiles.getVirtualCores(), 8); + + Resource minimumResProfiles = resProfiles.get("minimum"); + Assert.assertEquals(minimumResProfiles.getMemorySize(), 4096); + Assert.assertEquals(minimumResProfiles.getVirtualCores(), 4); } @Test @@ -1211,18 +1206,18 @@ public void testGetResourceProfile() throws Exception { Assert.assertEquals(response.getResource().getMemorySize(), 32768); Assert.assertEquals(response.getResource().getVirtualCores(), 16); - request = GetResourceProfileRequest.newInstance("default"); - response = interceptor.getResourceProfile(request); + GetResourceProfileRequest request2 = GetResourceProfileRequest.newInstance("default"); + GetResourceProfileResponse response2 = interceptor.getResourceProfile(request2); - Assert.assertNotNull(response); - Assert.assertEquals(response.getResource().getMemorySize(), 8192); - Assert.assertEquals(response.getResource().getVirtualCores(), 8); + Assert.assertNotNull(response2); + Assert.assertEquals(response2.getResource().getMemorySize(), 8192); + Assert.assertEquals(response2.getResource().getVirtualCores(), 8); - request = GetResourceProfileRequest.newInstance("minimum"); - response = interceptor.getResourceProfile(request); + GetResourceProfileRequest request3 = GetResourceProfileRequest.newInstance("minimum"); + GetResourceProfileResponse response3 = interceptor.getResourceProfile(request3); - Assert.assertNotNull(response); - Assert.assertEquals(response.getResource().getMemorySize(), 4096); - Assert.assertEquals(response.getResource().getVirtualCores(), 4); + Assert.assertNotNull(response3); + Assert.assertEquals(response3.getResource().getMemorySize(), 4096); + Assert.assertEquals(response3.getResource().getVirtualCores(), 4); } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java index ef9dfb5893c0f..0ab2e8a7e5ce5 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestRouterYarnClientUtils.java @@ -27,7 +27,16 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.hadoop.thirdparty.com.google.common.collect.ImmutableSet; -import org.apache.hadoop.yarn.api.protocolrecords.*; +import org.apache.hadoop.yarn.api.protocolrecords.GetApplicationsResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetClusterMetricsResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetNodesToLabelsResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetClusterNodeLabelsResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetLabelsToNodesResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetQueueUserAclsInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.ReservationListResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceTypeInfoResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetResourceProfileResponse; +import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceProfilesResponse; import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; import org.apache.hadoop.yarn.api.records.ApplicationId; import org.apache.hadoop.yarn.api.records.ApplicationReport; @@ -564,8 +573,8 @@ public void testMergeResourceProfiles() { GetAllResourceProfilesResponse response = RouterYarnClientUtils.mergeClusterResourceProfilesResponse(responses); Resource resource = response.getResourceProfiles().get("maximum"); - Assert.assertEquals(resource.getVirtualCores(), 3); - Assert.assertEquals(resource.getMemorySize(), 3072); + Assert.assertEquals(3, resource.getVirtualCores()); + Assert.assertEquals(3072, resource.getMemorySize()); } @Test @@ -598,7 +607,7 @@ public void testMergeResourceProfile() { GetResourceProfileResponse response = RouterYarnClientUtils.mergeClusterResourceProfileResponse(responses); Resource resource = response.getResource(); - Assert.assertEquals(resource.getVirtualCores(), 3); - Assert.assertEquals(resource.getMemorySize(), 3072); + Assert.assertEquals(3, resource.getVirtualCores()); + Assert.assertEquals(3072, resource.getMemorySize()); } } From ed92e5be9b52bd626a58a2c28d5acbcbca9bbd87 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Thu, 14 Jul 2022 06:50:07 -0700 Subject: [PATCH 6/9] YARN-11160. Fix CheckStyle. --- .../clientrm/TestFederationClientInterceptor.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java index d04db9d45c20f..cccd4e06f8eb0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java @@ -82,7 +82,20 @@ import org.apache.hadoop.yarn.api.protocolrecords.GetAllResourceProfilesResponse; import org.apache.hadoop.yarn.api.protocolrecords.GetResourceProfileRequest; import org.apache.hadoop.yarn.api.protocolrecords.GetResourceProfileResponse; -import org.apache.hadoop.yarn.api.records.*; +import org.apache.hadoop.yarn.api.records.ApplicationAttemptId; +import org.apache.hadoop.yarn.api.records.ApplicationId; +import org.apache.hadoop.yarn.api.records.ApplicationSubmissionContext; +import org.apache.hadoop.yarn.api.records.ContainerLaunchContext; +import org.apache.hadoop.yarn.api.records.Priority; +import org.apache.hadoop.yarn.api.records.YarnApplicationState; +import org.apache.hadoop.yarn.api.records.QueueACL; +import org.apache.hadoop.yarn.api.records.QueueUserACLInfo; +import org.apache.hadoop.yarn.api.records.ReservationId; +import org.apache.hadoop.yarn.api.records.ContainerId; +import org.apache.hadoop.yarn.api.records.ApplicationTimeoutType; +import org.apache.hadoop.yarn.api.records.SignalContainerCommand; +import org.apache.hadoop.yarn.api.records.QueueInfo; +import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.conf.YarnConfiguration; import org.apache.hadoop.yarn.exceptions.YarnException; import org.apache.hadoop.yarn.server.federation.policies.manager.UniformBroadcastPolicyManager; From e4b7a926c44ccbaa46bf591bdf4a24cad00ff781 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Fri, 15 Jul 2022 18:16:05 -0700 Subject: [PATCH 7/9] YARN-11160. Add merge resource method. --- .../yarn/util/resource/ResourceUtils.java | 31 ++++++++++++++----- .../yarn/util/resource/TestResourceUtils.java | 24 ++++++++++++++ .../clientrm/RouterYarnClientUtils.java | 19 ++++-------- 3 files changed, 53 insertions(+), 21 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java index d4d14d3b3ddda..dcbbcdd505a8a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java @@ -115,8 +115,8 @@ private static void checkSpecialResources( * Supporting 'memory', 'memory-mb', 'vcores' also as invalid resource * names, in addition to 'MEMORY' for historical reasons */ - String[] keys = { "memory", ResourceInformation.MEMORY_URI, - ResourceInformation.VCORES_URI }; + String[] keys = {"memory", ResourceInformation.MEMORY_URI, + ResourceInformation.VCORES_URI}; for(String key : keys) { if (resourceInformationMap.containsKey(key)) { LOG.warn("Attempt to define resource '" + key + "', but it is not allowed."); @@ -234,7 +234,8 @@ static void validateNameOfResourceNameAndThrowException(String resourceName) } /** - * Get maximum allocation from config, *THIS WILL NOT UPDATE INTERNAL DATA* + * Get maximum allocation from config, *THIS WILL NOT UPDATE INTERNAL DATA. + * * @param conf config * @return maximum allocation */ @@ -379,7 +380,7 @@ public static Map getResourceTypeIndex() { /** * Get the resource types to be supported by the system. - * @return A map of the resource name to a ResouceInformation object + * @return A map of the resource name to a ResourceInformation object * which contains details such as the unit. */ public static Map getResourceTypes() { @@ -473,10 +474,10 @@ private static void addResourcesFileToConf(String resourceFile, LOG.debug("Found {}, adding to configuration", resourceFile); conf.addResource(ris); } catch (FileNotFoundException fe) { - LOG.info("Unable to find '" + resourceFile + "'."); + LOG.info("Unable to find '{}'.", resourceFile); } catch (IOException | YarnException ex) { - LOG.error("Exception trying to read resource types configuration '" - + resourceFile + "'.", ex); + LOG.error("Exception trying to read resource types configuration '{}'.", + resourceFile, ex); throw new YarnRuntimeException(ex); } } @@ -668,7 +669,7 @@ public static List getResourcesTypeInfo() { /** * Reinitialize all resource types from external source (in case of client, * server will send the updated list and local resourceutils cache will be - * updated as per server's list of resources) + * updated as per server's list of resources). * * @param resourceTypeInfo * List of resource types @@ -857,6 +858,7 @@ private static Map parseResourcesString(String resourcesStr) { units = "Gi"; } else if (units.isEmpty()) { // do nothing; + LOG.debug("units is empty."); } else { throw new IllegalArgumentException("Acceptable units are M/G or empty"); } @@ -917,4 +919,17 @@ private static void validateResourceTypes( } return res; } + + public static Resource mergeResources(Resource r1, Resource r2) { + Resource resource = Resource.newInstance(0, 0); + if (r1 != null && r2 != null) { + resource.setVirtualCores(r1.getVirtualCores() + r2.getVirtualCores()); + resource.setMemorySize(r1.getMemorySize() + r2.getMemorySize()); + } else if (r1 != null && r2 == null) { + resource = r1; + } else if (r1 == null && r2 != null) { + resource = r2; + } + return resource; + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceUtils.java index 8f742fa902fc1..e17a1f598ba4f 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceUtils.java @@ -600,4 +600,28 @@ public void testMultipleOpsForResourcesWithTags() throws Exception { assertThat(mulResource.getResourceInformation("yarn.io/test-volume"). getValue()).isEqualTo(2); } + + @Test + public void testMergeResources() { + Resource res1 = ResourceUtils.createResourceFromString("memory=20g,vcores=3", + ResourceUtils.getResourcesTypeInfo()); + Resource res2 = ResourceUtils.createResourceFromString("memory=40g,vcores=3", + ResourceUtils.getResourcesTypeInfo()); + + Resource result = ResourceUtils.mergeResources(res1, res2); + Assert.assertEquals(61440, result.getMemorySize()); + Assert.assertEquals(6, result.getVirtualCores()); + + Resource result1 = ResourceUtils.mergeResources(res1, null); + Assert.assertEquals(20480, result1.getMemorySize()); + Assert.assertEquals(3, result1.getVirtualCores()); + + Resource result2 = ResourceUtils.mergeResources(null, res2); + Assert.assertEquals(40960, result2.getMemorySize()); + Assert.assertEquals(3, result2.getVirtualCores()); + + Resource result3 = ResourceUtils.mergeResources(null, null); + Assert.assertEquals(0, result3.getMemorySize()); + Assert.assertEquals(0, result3.getVirtualCores()); + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java index afca75f60816e..91e9db608433d 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java @@ -51,6 +51,7 @@ import org.apache.hadoop.yarn.api.records.Resource; import org.apache.hadoop.yarn.server.uam.UnmanagedApplicationManager; import org.apache.hadoop.yarn.util.Records; +import org.apache.hadoop.yarn.util.resource.ResourceUtils; import org.apache.hadoop.yarn.util.resource.Resources; /** @@ -436,16 +437,9 @@ public static GetAllResourceProfilesResponse mergeClusterResourceProfilesRespons if (response != null && response.getResourceProfiles() != null) { for (Map.Entry entry : response.getResourceProfiles().entrySet()) { String key = entry.getKey(); - Resource value = entry.getValue(); - if (profilesMap.containsKey(key)) { - Resource resourceValue = profilesMap.get(key); - resourceValue.setVirtualCores( - resourceValue.getVirtualCores() + value.getVirtualCores()); - resourceValue.setMemorySize(resourceValue.getMemorySize() + value.getMemorySize()); - profilesMap.put(key, resourceValue); - } else { - profilesMap.put(key, value); - } + Resource r1 = profilesMap.getOrDefault(key, null); + Resource r2 = entry.getValue(); + profilesMap.put(key, ResourceUtils.mergeResources(r1, r2)); } } } @@ -466,9 +460,8 @@ public static GetResourceProfileResponse mergeClusterResourceProfileResponse( Resource resource = Resource.newInstance(0, 0); for (GetResourceProfileResponse response : responses) { if (response != null && response.getResource() != null) { - resource.setMemorySize(resource.getMemorySize() + response.getResource().getMemorySize()); - resource.setVirtualCores(resource.getVirtualCores() + - response.getResource().getVirtualCores()); + Resource responseResource = response.getResource(); + resource = ResourceUtils.mergeResources(resource, responseResource); } } profileResponse.setResource(resource); From 5198950f04a9b0be4b389154f4115c365caf9cfe Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Sun, 17 Jul 2022 05:53:04 -0700 Subject: [PATCH 8/9] YARN-11160. Support getResourceProfiles, getResourceProfile API's for Federation. --- .../yarn/util/resource/ResourceUtils.java | 16 +------------ .../yarn/util/resource/TestResourceUtils.java | 24 ------------------- .../clientrm/RouterYarnClientUtils.java | 4 ++-- 3 files changed, 3 insertions(+), 41 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java index dcbbcdd505a8a..1433c24e9e10c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-api/src/main/java/org/apache/hadoop/yarn/util/resource/ResourceUtils.java @@ -115,8 +115,7 @@ private static void checkSpecialResources( * Supporting 'memory', 'memory-mb', 'vcores' also as invalid resource * names, in addition to 'MEMORY' for historical reasons */ - String[] keys = {"memory", ResourceInformation.MEMORY_URI, - ResourceInformation.VCORES_URI}; + String[] keys = {"memory", ResourceInformation.MEMORY_URI, ResourceInformation.VCORES_URI}; for(String key : keys) { if (resourceInformationMap.containsKey(key)) { LOG.warn("Attempt to define resource '" + key + "', but it is not allowed."); @@ -919,17 +918,4 @@ private static void validateResourceTypes( } return res; } - - public static Resource mergeResources(Resource r1, Resource r2) { - Resource resource = Resource.newInstance(0, 0); - if (r1 != null && r2 != null) { - resource.setVirtualCores(r1.getVirtualCores() + r2.getVirtualCores()); - resource.setMemorySize(r1.getMemorySize() + r2.getMemorySize()); - } else if (r1 != null && r2 == null) { - resource = r1; - } else if (r1 == null && r2 != null) { - resource = r2; - } - return resource; - } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceUtils.java index e17a1f598ba4f..8f742fa902fc1 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/resource/TestResourceUtils.java @@ -600,28 +600,4 @@ public void testMultipleOpsForResourcesWithTags() throws Exception { assertThat(mulResource.getResourceInformation("yarn.io/test-volume"). getValue()).isEqualTo(2); } - - @Test - public void testMergeResources() { - Resource res1 = ResourceUtils.createResourceFromString("memory=20g,vcores=3", - ResourceUtils.getResourcesTypeInfo()); - Resource res2 = ResourceUtils.createResourceFromString("memory=40g,vcores=3", - ResourceUtils.getResourcesTypeInfo()); - - Resource result = ResourceUtils.mergeResources(res1, res2); - Assert.assertEquals(61440, result.getMemorySize()); - Assert.assertEquals(6, result.getVirtualCores()); - - Resource result1 = ResourceUtils.mergeResources(res1, null); - Assert.assertEquals(20480, result1.getMemorySize()); - Assert.assertEquals(3, result1.getVirtualCores()); - - Resource result2 = ResourceUtils.mergeResources(null, res2); - Assert.assertEquals(40960, result2.getMemorySize()); - Assert.assertEquals(3, result2.getVirtualCores()); - - Resource result3 = ResourceUtils.mergeResources(null, null); - Assert.assertEquals(0, result3.getMemorySize()); - Assert.assertEquals(0, result3.getVirtualCores()); - } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java index 91e9db608433d..3c7d81b1bbd81 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java @@ -439,7 +439,7 @@ public static GetAllResourceProfilesResponse mergeClusterResourceProfilesRespons String key = entry.getKey(); Resource r1 = profilesMap.getOrDefault(key, null); Resource r2 = entry.getValue(); - profilesMap.put(key, ResourceUtils.mergeResources(r1, r2)); + profilesMap.put(key, r1 == null ? r2 : Resources.add(r1, r2)); } } } @@ -461,7 +461,7 @@ public static GetResourceProfileResponse mergeClusterResourceProfileResponse( for (GetResourceProfileResponse response : responses) { if (response != null && response.getResource() != null) { Resource responseResource = response.getResource(); - resource = ResourceUtils.mergeResources(resource, responseResource); + resource = Resources.add(resource, responseResource); } } profileResponse.setResource(resource); From 01c2415a4576e77d8cb8461bda73d79e6b1ddba4 Mon Sep 17 00:00:00 2001 From: slfan1989 Date: Sun, 17 Jul 2022 16:26:28 -0700 Subject: [PATCH 9/9] YARN-11160. Fix CheckStyle. --- .../clientrm/FederationClientInterceptor.java | 14 +++++------ .../clientrm/RouterYarnClientUtils.java | 3 ++- .../TestFederationClientInterceptor.java | 24 +++++++++---------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/FederationClientInterceptor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/FederationClientInterceptor.java index 4f0ed85f7159e..7e7bd5afcf5f7 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/FederationClientInterceptor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/FederationClientInterceptor.java @@ -1455,18 +1455,17 @@ public GetAllResourceProfilesResponse getResourceProfiles( long startTime = clock.getTime(); ClientMethod remoteMethod = new ClientMethod("getResourceProfiles", new Class[] {GetAllResourceProfilesRequest.class}, new Object[] {request}); - Collection resourceProfiles; + Collection resourceProfiles = null; try { resourceProfiles = invokeAppClientProtocolMethod(true, remoteMethod, GetAllResourceProfilesResponse.class); } catch (Exception ex) { routerMetrics.incrGetResourceProfilesFailedRetrieved(); - LOG.error("Unable to get resource profiles due to exception.", ex); - throw ex; + RouterServerUtil.logAndThrowException("Unable to get resource profiles due to exception.", + ex); } long stopTime = clock.getTime(); routerMetrics.succeededGetResourceProfilesRetrieved(stopTime - startTime); - // Merge the GetAllResourceProfilesResponse return RouterYarnClientUtils.mergeClusterResourceProfilesResponse(resourceProfiles); } @@ -1481,18 +1480,17 @@ public GetResourceProfileResponse getResourceProfile( long startTime = clock.getTime(); ClientMethod remoteMethod = new ClientMethod("getResourceProfile", new Class[] {GetResourceProfileRequest.class}, new Object[] {request}); - Collection resourceProfile; + Collection resourceProfile = null; try { resourceProfile = invokeAppClientProtocolMethod(true, remoteMethod, GetResourceProfileResponse.class); } catch (Exception ex) { routerMetrics.incrGetResourceProfileFailedRetrieved(); - LOG.error("Unable to get resource profile due to exception.", ex); - throw ex; + RouterServerUtil.logAndThrowException("Unable to get resource profile due to exception.", + ex); } long stopTime = clock.getTime(); routerMetrics.succeededGetResourceProfileRetrieved(stopTime - startTime); - // Merge the GetResourceProfileResponse return RouterYarnClientUtils.mergeClusterResourceProfileResponse(resourceProfile); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java index 3c7d81b1bbd81..d72e72a6cff17 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/main/java/org/apache/hadoop/yarn/server/router/clientrm/RouterYarnClientUtils.java @@ -439,7 +439,8 @@ public static GetAllResourceProfilesResponse mergeClusterResourceProfilesRespons String key = entry.getKey(); Resource r1 = profilesMap.getOrDefault(key, null); Resource r2 = entry.getValue(); - profilesMap.put(key, r1 == null ? r2 : Resources.add(r1, r2)); + Resource rAdd = r1 == null ? r2 : Resources.add(r1, r2); + profilesMap.put(key, rAdd); } } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java index cccd4e06f8eb0..64995ca1dac93 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-router/src/test/java/org/apache/hadoop/yarn/server/router/clientrm/TestFederationClientInterceptor.java @@ -1190,16 +1190,16 @@ public void testGetResourceProfiles() throws Exception { Map resProfiles = response.getResourceProfiles(); Resource maxResProfiles = resProfiles.get("maximum"); - Assert.assertEquals(maxResProfiles.getMemorySize(), 32768); - Assert.assertEquals(maxResProfiles.getVirtualCores(), 16); + Assert.assertEquals(32768, maxResProfiles.getMemorySize()); + Assert.assertEquals(16, maxResProfiles.getVirtualCores()); Resource defaultResProfiles = resProfiles.get("default"); - Assert.assertEquals(defaultResProfiles.getMemorySize(), 8192); - Assert.assertEquals(defaultResProfiles.getVirtualCores(), 8); + Assert.assertEquals(8192, defaultResProfiles.getMemorySize()); + Assert.assertEquals(8, defaultResProfiles.getVirtualCores()); Resource minimumResProfiles = resProfiles.get("minimum"); - Assert.assertEquals(minimumResProfiles.getMemorySize(), 4096); - Assert.assertEquals(minimumResProfiles.getVirtualCores(), 4); + Assert.assertEquals(4096, minimumResProfiles.getMemorySize()); + Assert.assertEquals(4, minimumResProfiles.getVirtualCores()); } @Test @@ -1216,21 +1216,21 @@ public void testGetResourceProfile() throws Exception { GetResourceProfileResponse response = interceptor.getResourceProfile(request); Assert.assertNotNull(response); - Assert.assertEquals(response.getResource().getMemorySize(), 32768); - Assert.assertEquals(response.getResource().getVirtualCores(), 16); + Assert.assertEquals(32768, response.getResource().getMemorySize()); + Assert.assertEquals(16, response.getResource().getVirtualCores()); GetResourceProfileRequest request2 = GetResourceProfileRequest.newInstance("default"); GetResourceProfileResponse response2 = interceptor.getResourceProfile(request2); Assert.assertNotNull(response2); - Assert.assertEquals(response2.getResource().getMemorySize(), 8192); - Assert.assertEquals(response2.getResource().getVirtualCores(), 8); + Assert.assertEquals(8192, response2.getResource().getMemorySize()); + Assert.assertEquals(8, response2.getResource().getVirtualCores()); GetResourceProfileRequest request3 = GetResourceProfileRequest.newInstance("minimum"); GetResourceProfileResponse response3 = interceptor.getResourceProfile(request3); Assert.assertNotNull(response3); - Assert.assertEquals(response3.getResource().getMemorySize(), 4096); - Assert.assertEquals(response3.getResource().getVirtualCores(), 4); + Assert.assertEquals(4096, response3.getResource().getMemorySize()); + Assert.assertEquals(4, response3.getResource().getVirtualCores()); } }