adoroszlai commented on code in PR #6112:
URL: https://github.com/apache/ozone/pull/6112#discussion_r1469290312
##########
hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/recon/TestReconAndAdminContainerCLI.java:
##########
@@ -303,23 +305,54 @@ public void testNodesInDecommissionOrMaintenance(
TestNodeUtil.waitForDnToReachPersistedOpState(nodeToGoOffline1,
IN_SERVICE);
TestNodeUtil.waitForDnToReachPersistedOpState(nodeToGoOffline2,
IN_SERVICE);
- compareRMReportToReconResponse(underReplicatedState.toString());
- compareRMReportToReconResponse(overReplicatedState.toString());
+ compareRMReportToReconResponse(underReplicatedState);
+ compareRMReportToReconResponse(overReplicatedState);
}
/**
* The purpose of this method, isn't to validate the numbers
* but to make sure that they are consistent between
* Recon and the ReplicationManager.
*/
- private static void compareRMReportToReconResponse(String containerState)
+ private static void compareRMReportToReconResponse(UnHealthyContainerStates
containerState)
throws Exception {
- Assertions.assertFalse(Strings.isNullOrEmpty(containerState));
+ assertNotNull(containerState);
+
+ // Both threads are running every 1 second.
+ // Wait until all values are equal.
+ GenericTestUtils.waitFor(() -> assertReportsMatch(containerState),
+ 1000, 40000);
+ }
- ReplicationManagerReport rmReport =
scmClient.getReplicationManagerReport();
- UnhealthyContainersResponse reconResponse =
- TestReconEndpointUtil
- .getUnhealthyContainersFromRecon(CONF, containerState);
+ private static boolean assertReportsMatch(UnHealthyContainerStates state) {
+ ReplicationManagerReport rmReport;
+ UnhealthyContainersResponse reconResponse;
+
+ try {
+ rmReport = scmClient.getReplicationManagerReport();
+ reconResponse = TestReconEndpointUtil
+ .getUnhealthyContainersFromRecon(CONF, state);
+
+ long rmMissingCounter = rmReport.getStat(
+ ReplicationManagerReport.HealthState.MISSING);
+ long rmUnderReplCounter = rmReport.getStat(
+ ReplicationManagerReport.HealthState.UNDER_REPLICATED);
+ long rmOverReplCounter = rmReport.getStat(
+ ReplicationManagerReport.HealthState.OVER_REPLICATED);
+ long rmMisReplCounter = rmReport.getStat(
+ ReplicationManagerReport.HealthState.MIS_REPLICATED);
+
+ assertEquals(rmMissingCounter, reconResponse.getMissingCount());
+ assertEquals(rmUnderReplCounter,
reconResponse.getUnderReplicatedCount());
+ assertEquals(rmOverReplCounter, reconResponse.getOverReplicatedCount());
+ assertEquals(rmMisReplCounter, reconResponse.getMisReplicatedCount());
+ } catch (IOException e) {
+ LOG.info("Error getting report", e);
+ return false;
+ } catch (AssertionError e) {
+ LOG.info("Reports do not match (yet): {}", e.getMessage());
+ return false;
+ }
long rmMissingCounter = rmReport.getStat(
Review Comment:
Not necessary, but we need the variables outside the try-catch for later
use. Since this is just accessing fixed values, I don't think it matters much.
--
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]