sodonnel commented on code in PR #5460:
URL: https://github.com/apache/hadoop/pull/5460#discussion_r1129184134
##########
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java:
##########
@@ -791,6 +792,9 @@ private void offerService() throws Exception {
shouldServiceRun = false;
return;
}
+ if (InvalidBlockReportLeaseException.class.getName().equals(reClass)) {
+ fullBlockReportLeaseId = 0;
Review Comment:
At line 717, we can see where it attempts to get a lease from the heartbeat
if the lease in the DN == 0:
```
boolean requestBlockReportLease = (fullBlockReportLeaseId == 0) &&
scheduler.isBlockReportDue(startTime);
```
So its the isBlockReportDue that controls this. Then later, if we have a non
zero lease, it will try to create the block report:
```
boolean forceFullBr =
scheduler.forceFullBlockReport.getAndSet(false);
if (forceFullBr) {
LOG.info("Forcing a full block report to " + nnAddr);
}
if ((fullBlockReportLeaseId != 0) || forceFullBr) {
cmds = blockReport(fullBlockReportLeaseId);
fullBlockReportLeaseId = 0;
}
```
Its really the `isBlockReportDue()` method that controls whether a new one
should be sent of not, and that is based on time since the last one. The the
`blockReport()`, it updates the time after a successful block report, but if it
gets an exception, like this change causes, it will not update the time and so
it will try again on the next heartbeat if it gets a new lease.
I think `forceFullBlockReport` is only for tests, or the command to force a
DN block from the CLI.
--
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]