aswinshakil commented on code in PR #7293:
URL: https://github.com/apache/ozone/pull/7293#discussion_r1847083450
##########
hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/checksum/ContainerChecksumTreeManager.java:
##########
@@ -143,12 +149,148 @@ public void markBlocksAsDeleted(KeyValueContainerData
data, Collection<Long> del
}
}
- public ContainerDiff diff(KeyValueContainerData thisContainer,
ContainerProtos.ContainerChecksumInfo otherInfo)
- throws IOException {
- // TODO HDDS-10928 compare the checksum info of the two containers and
return a summary.
- // Callers can act on this summary to repair their container replica
using the peer's replica.
- // This method will use the read lock, which is unused in the current
implementation.
- return new ContainerDiff();
+ public ContainerDiff diff(KeyValueContainerData thisContainer,
ContainerProtos.ContainerChecksumInfo peerChecksumInfo)
+ throws Exception {
+ ContainerDiff report = new ContainerDiff();
+ try {
+ captureLatencyNs(metrics.getMerkleTreeDiffLatencyNS(), () -> {
+ Preconditions.assertNotNull(thisContainer, "Container data is null");
+ Preconditions.assertNotNull(peerChecksumInfo, "Peer checksum info is
null");
+ Optional<ContainerProtos.ContainerChecksumInfo.Builder>
thisContainerChecksumInfoBuilder =
+ read(thisContainer);
+ if (!thisContainerChecksumInfoBuilder.isPresent()) {
+ throw new IOException("The container #" +
thisContainer.getContainerID() +
+ " doesn't have container checksum");
+ }
+
+ if (thisContainer.getContainerID() !=
peerChecksumInfo.getContainerID()) {
+ throw new IOException("Container Id does not match for container " +
thisContainer.getContainerID());
+ }
+
+ ContainerProtos.ContainerChecksumInfo thisChecksumInfo =
thisContainerChecksumInfoBuilder.get().build();
+ compareContainerMerkleTree(thisChecksumInfo, peerChecksumInfo, report);
+ });
+ } catch (Exception ex) {
+ metrics.incrementMerkleTreeDiffFailures();
+ throw new Exception("Container Diff failed for container #" +
thisContainer.getContainerID(), ex);
+ }
+
+ // Update Container Diff metrics based on the diff report.
+ if (report.needsRepair()) {
+ metrics.incrementRepairContainerDiffs();
+ } else {
+ metrics.incrementNoRepairContainerDiffs();
+ }
+ metrics.incrementMerkleTreeDiffSuccesses();
+ return report;
+ }
Review Comment:
It would be helpful to get total number of diffs done for debugging purposes
in the future.
--
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]