xBis7 commented on code in PR #5882:
URL: https://github.com/apache/ozone/pull/5882#discussion_r1444358188
##########
hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java:
##########
@@ -1572,6 +1572,83 @@ public void testScmStatsFromNodeReport()
}
}
+ private List<StorageReportProto> generateStorageReportProto(
+ int volumeCount, UUID dnId, long capacity, long used) {
+ List<StorageReportProto> reports = new ArrayList<>(volumeCount);
+ boolean failed = true;
+ for (int x = 0; x < volumeCount; x++) {
+ long free = capacity - used;
+ String storagePath = testDir.getAbsolutePath() + "/" + dnId;
+ reports.add(HddsTestUtils
+ .createStorageReport(dnId, storagePath, capacity,
+ used, free, null, failed));
+ failed = !failed;
+ }
+ return reports;
+ }
+
+ @Test
Review Comment:
We can avoid repetition by parameterising the test. It can have only 1 dn
and the parameters can be the `capacity` and `used` from the
`generateStorageReportProto` and the expected result.
Regarding parameterising the test, here is an example
https://github.com/apache/ozone/blob/master/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/fs/ozone/TestOzoneFsSnapshot.java#L208-L251
##########
hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html:
##########
@@ -48,6 +48,8 @@ <h2>Node Status</h2>
<tr>
<th ng-click = "columnSort('hostname')"
class="nodeStatusInfo"><span ng-class = "{'sorting' : (columnName !=
'hostname'), 'sortasc' : (columnName == 'hostname' && !reverse),
'sortdesc':(columnName == 'hostname'
&& !reverse)}">HostName</span></th>
+ <th ng-click = "columnSort('usedpercent')" class="nodeStatusInfo"
><span ng-class="{'sorting' : (columnName != 'usedpercent'), 'sortasc' :
(columnName == 'usedpercent' && !reverse),
+ 'sortdesc':(columnName ==
'usedpercent' && !reverse)}">Used Percent</span></th>
Review Comment:
Nit: Wouldn't it be more intuitive if we renamed it to `Used Space Percent`
or `Used Space Percentage`? Or is it too long and it breaks the UI?
##########
hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/node/TestSCMNodeManager.java:
##########
@@ -1572,6 +1572,83 @@ public void testScmStatsFromNodeReport()
}
}
+ private List<StorageReportProto> generateStorageReportProto(
+ int volumeCount, UUID dnId, long capacity, long used) {
+ List<StorageReportProto> reports = new ArrayList<>(volumeCount);
+ boolean failed = true;
+ for (int x = 0; x < volumeCount; x++) {
+ long free = capacity - used;
+ String storagePath = testDir.getAbsolutePath() + "/" + dnId;
+ reports.add(HddsTestUtils
+ .createStorageReport(dnId, storagePath, capacity,
+ used, free, null, failed));
+ failed = !failed;
+ }
+ return reports;
+ }
+
+ @Test
+ public void testCalculateStoragePercentage()
+ throws IOException, AuthenticationException {
+ OzoneConfiguration conf = getConf();
+ conf.setTimeDuration(OZONE_SCM_HEARTBEAT_PROCESS_INTERVAL, 1000,
+ MILLISECONDS);
+ try (SCMNodeManager nodeManager = createNodeManager(conf)) {
+ EventQueue eventQueue = (EventQueue) scm.getEventQueue();
+ LayoutVersionManager versionManager =
+ nodeManager.getLayoutVersionManager();
+ LayoutVersionProto layoutInfo = toLayoutVersionProto(
+ versionManager.getMetadataLayoutVersion(),
+ versionManager.getSoftwareLayoutVersion());
+ // Generate the first DataNode
+ DatanodeDetails dn1 = MockDatanodeDetails.randomDatanodeDetails();
+ UUID dnId1 = dn1.getUuid();
+ int volumeCount = 10;
+ List<StorageReportProto> reports1 = generateStorageReportProto(
+ volumeCount, dnId1, 1000, 600);
+ nodeManager.register(dn1, HddsTestUtils.createNodeReport(reports1,
+ emptyList()), null);
+ nodeManager.processHeartbeat(dn1, layoutInfo);
+ // Generate the 2nd DataNode
+ DatanodeDetails dn2 = MockDatanodeDetails.randomDatanodeDetails();
+ UUID dnId2 = dn2.getUuid();
+ List<StorageReportProto> reports2 = generateStorageReportProto(
+ volumeCount, dnId2, 1000, 1000);
+ nodeManager.register(dn2, HddsTestUtils.createNodeReport(reports2,
+ emptyList()), null);
+ nodeManager.processHeartbeat(dn2, layoutInfo);
+ // Generate the 3rd DataNode
+ DatanodeDetails dn3 = MockDatanodeDetails.randomDatanodeDetails();
+ UUID dnId3 = dn3.getUuid();
+ List<StorageReportProto> reports3 = generateStorageReportProto(
+ volumeCount, dnId3, 1000, 1001);
+ nodeManager.register(dn3, HddsTestUtils.createNodeReport(reports3,
+ emptyList()), null);
+ nodeManager.processHeartbeat(dn3, layoutInfo);
+ // Generate the 4th DataNode
+ DatanodeDetails dn4 = MockDatanodeDetails.randomDatanodeDetails();
+ UUID dnId4 = dn4.getUuid();
+ nodeManager.register(dn4, null, null);
+ nodeManager.processHeartbeat(dn4, layoutInfo);
+
Review Comment:
Can you add a 5th dn with a decimal percentage?
--
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]