You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by zj...@apache.org on 2015/04/10 06:25:30 UTC

[34/47] hadoop git commit: HDFS-7979. Initialize block report IDs with a random number.

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


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/1efbe9ce
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/1efbe9ce
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/1efbe9ce

Branch: refs/heads/YARN-2928
Commit: 1efbe9ce32c9ccaaf1f303025e54e8e9209e978b
Parents: 9c4c2dd
Author: Andrew Wang <an...@cloudera.com>
Authored: Wed Apr 8 21:43:42 2015 -0700
Committer: Zhijie Shen <zj...@apache.org>
Committed: Thu Apr 9 21:21:54 2015 -0700

----------------------------------------------------------------------
 hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt         |  2 ++
 .../hadoop/hdfs/server/datanode/BPServiceActor.java | 16 +++++++++-------
 .../hdfs/server/protocol/BlockReportContext.java    |  3 +++
 3 files changed, 14 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/1efbe9ce/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index dacdb3f..19f264a 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -404,6 +404,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

http://git-wip-us.apache.org/repos/asf/hadoop/blob/1efbe9ce/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java
index dd6f9ac..ba22225 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java
@@ -118,6 +118,7 @@ class BPServiceActor implements Runnable {
   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 @@ class BPServiceActor implements Runnable {
     this.dn = bpos.getDataNode();
     this.nnAddr = nnAddr;
     this.dnConf = dn.getDnConf();
+    prevBlockReportId = DFSUtil.getRandom().nextLong();
   }
 
   boolean isAlive() {
@@ -434,15 +436,15 @@ class BPServiceActor implements Runnable {
     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;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/hadoop/blob/1efbe9ce/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/BlockReportContext.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/BlockReportContext.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/BlockReportContext.java
index a084a81..d0b0282 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/BlockReportContext.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/protocol/BlockReportContext.java
@@ -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 @@ package org.apache.hadoop.hdfs.server.protocol;
  * 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;