errose28 commented on code in PR #8893:
URL: https://github.com/apache/ozone/pull/8893#discussion_r2291947842
##########
hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/keyvalue/TestContainerReconciliationWithMockDatanodes.java:
##########
@@ -305,6 +310,30 @@ public void
testContainerReconciliationWithPeerFailure(FailureLocation failureLo
mockContainerProtocolCalls();
}
+ @Test
+ public void testContainerReconciliationFailureContainerScan()
+ throws Exception {
+ // Use synchronous on-demand scans to re-build the merkle trees after
corruption.
+ datanodes.forEach(d -> d.scanContainer(CONTAINER_ID));
+
+ // Each datanode should have had one on-demand scan during test setup, and
a second one after corruption was
+ // introduced.
+ waitForExpectedScanCount(1);
+
+ for (MockDatanode current : datanodes) {
+
doThrow(IOException.class).when(current.getHandler().getChecksumManager()).read(any());
+ List<DatanodeDetails> peers = datanodes.stream()
+ .map(MockDatanode::getDnDetails)
+ .filter(other -> !current.getDnDetails().equals(other))
+ .collect(Collectors.toList());
+ // Reconciliation should fail for each datanode, since the checksum info
cannot be retrieved.
+ assertThrows(IOException.class, () ->
current.reconcileContainer(dnClient, peers, CONTAINER_ID));
+ Mockito.reset(current.getHandler().getChecksumManager());
+ }
+ // Even failure of Reconciliation should have triggered a second on-demand
scan for each replica.
+ waitForExpectedScanCount(2);
+ }
Review Comment:
This passes in isolation for me locally, but I forgot this test re-uses
container instances across tests to make sure the data is truly repaired.
Mocking the fault injection like the current code does is probably the easier
approach here.
--
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]