HDFS-7979. Initialize block report IDs with a random number.

(cherry picked from commit b1e059089d)
This commit is contained in:
Andrew Wang 2015-04-08 21:43:42 -07:00
parent eafee9a04e
commit 351fac25a9
3 changed files with 14 additions and 7 deletions

View File

@ -89,6 +89,8 @@ Release 2.8.0 - UNRELEASED
HDFS-8089. Move o.a.h.hdfs.web.resources.* to the client jars. (wheat9)
HDFS-7979. Initialize block report IDs with a random number. (wang)
OPTIMIZATIONS
HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than

View File

@ -118,6 +118,7 @@ static enum RunningState {
private volatile boolean shouldServiceRun = true;
private final DataNode dn;
private final DNConf dnConf;
private long prevBlockReportId;
private DatanodeRegistration bpRegistration;
final LinkedList<BPServiceActorAction> bpThreadQueue
@ -128,6 +129,7 @@ static enum RunningState {
this.dn = bpos.getDataNode();
this.nnAddr = nnAddr;
this.dnConf = dn.getDnConf();
prevBlockReportId = DFSUtil.getRandom().nextLong();
}
boolean isAlive() {
@ -434,15 +436,15 @@ boolean hasPendingIBR() {
return sendImmediateIBR;
}
private long prevBlockReportId = 0;
private long generateUniqueBlockReportId() {
long id = System.nanoTime();
if (id <= prevBlockReportId) {
id = prevBlockReportId + 1;
// Initialize the block report ID the first time through.
// Note that 0 is used on the NN to indicate "uninitialized", so we should
// not send a 0 value ourselves.
prevBlockReportId++;
while (prevBlockReportId == 0) {
prevBlockReportId = DFSUtil.getRandom().nextLong();
}
prevBlockReportId = id;
return id;
return prevBlockReportId;
}
/**

View File

@ -18,6 +18,8 @@
package org.apache.hadoop.hdfs.server.protocol;
import org.apache.hadoop.classification.InterfaceAudience;
/**
* The context of the block report.
*
@ -27,6 +29,7 @@
* of RPCs which this block report is split into, and the index into that
* total for the current RPC.
*/
@InterfaceAudience.Private
public class BlockReportContext {
private final int totalRpcs;
private final int curRpc;