Author: arp
Date: Wed Nov 13 02:59:46 2013
New Revision: 1541371

URL: http://svn.apache.org/r1541371
Log:
HDFS-5501. Fix pendingReceivedRequests tracking in BPServiceActor.

Modified:
    
hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-2832.txt
    
hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java

Modified: 
hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-2832.txt
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-2832.txt?rev=1541371&r1=1541370&r2=1541371&view=diff
==============================================================================
--- 
hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-2832.txt
 (original)
+++ 
hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-2832.txt
 Wed Nov 13 02:59:46 2013
@@ -101,3 +101,6 @@ IMPROVEMENTS:
 
     HDFS-5508. Fix compilation error after merge. (Contributed by szetszwo)
 
+    HDFS-5501. Fix pendingReceivedRequests tracking in BPServiceActor. (Arpit
+    Agarwal)
+

Modified: 
hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java?rev=1541371&r1=1541370&r2=1541371&view=diff
==============================================================================
--- 
hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java
 (original)
+++ 
hadoop/common/branches/HDFS-2832/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java
 Wed Nov 13 02:59:46 2013
@@ -280,13 +280,14 @@ class BPServiceActor implements Runnable
            pendingIncrementalBRperStorage.entrySet()) {
         final String storageUuid = entry.getKey();
         final PerStoragePendingIncrementalBR perStorageMap = entry.getValue();
-        ReceivedDeletedBlockInfo[] receivedAndDeletedBlockArray = null;
 
         if (perStorageMap.getBlockInfoCount() > 0) {
           // Send newly-received and deleted blockids to namenode
-          receivedAndDeletedBlockArray = perStorageMap.dequeueBlockInfos();
-          pendingReceivedRequests -= receivedAndDeletedBlockArray.length;
-          blockArrays.put(storageUuid, receivedAndDeletedBlockArray);
+          ReceivedDeletedBlockInfo[] rdbi = perStorageMap.dequeueBlockInfos();
+          pendingReceivedRequests =
+              (pendingReceivedRequests > rdbi.length ?
+                  (pendingReceivedRequests - rdbi.length) : 0);
+          blockArrays.put(storageUuid, rdbi);
         }
       }
     }
@@ -312,8 +313,7 @@ class BPServiceActor implements Runnable
             // didn't put something newer in the meantime.
             PerStoragePendingIncrementalBR perStorageMap =
                 pendingIncrementalBRperStorage.get(storageUuid);
-            perStorageMap.putMissingBlockInfos(rdbi);
-            pendingReceivedRequests += perStorageMap.getBlockInfoCount();
+            pendingReceivedRequests += 
perStorageMap.putMissingBlockInfos(rdbi);
           }
         }
       }
@@ -859,13 +859,17 @@ class BPServiceActor implements Runnable
      * Add blocks from blockArray to pendingIncrementalBR, unless the
      * block already exists in pendingIncrementalBR.
      * @param blockArray list of blocks to add.
+     * @return the number of missing blocks that we added.
      */
-    void putMissingBlockInfos(ReceivedDeletedBlockInfo[] blockArray) {
+    int putMissingBlockInfos(ReceivedDeletedBlockInfo[] blockArray) {
+      int blocksPut = 0;
       for (ReceivedDeletedBlockInfo rdbi : blockArray) {
         if (!pendingIncrementalBR.containsKey(rdbi.getBlock().getBlockId())) {
           pendingIncrementalBR.put(rdbi.getBlock().getBlockId(), rdbi);
+          ++blocksPut;
         }
       }
+      return blocksPut;
     }
 
     /**


Reply via email to