浏览代码

HDFS-8294. Erasure Coding: Fix Findbug warnings present in erasure coding. Contributed by Rakesh R.

Zhe Zhang 10 年之前
父节点
当前提交
7af05a3db4

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt

@@ -247,3 +247,6 @@
 
     HDFS-8186. Erasure coding: Make block placement policy for EC file configurable.
     (Walter Su via zhz)
+
+    HDFS-8294. Erasure Coding: Fix Findbug warnings present in erasure coding.
+    (Rakesh R via zhz)

+ 6 - 6
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSStripedOutputStream.java

@@ -276,11 +276,11 @@ public class DFSStripedOutputStream extends DFSOutputStream {
     return getCurrentStreamer().getIndex();
   }
 
-  StripedDataStreamer getCurrentStreamer() {
+  private synchronized StripedDataStreamer getCurrentStreamer() {
     return (StripedDataStreamer)streamer;
   }
 
-  private StripedDataStreamer setCurrentStreamer(int i) {
+  private synchronized StripedDataStreamer setCurrentStreamer(int i) {
     streamer = streamers.get(i);
     return getCurrentStreamer();
   }
@@ -344,8 +344,8 @@ public class DFSStripedOutputStream extends DFSOutputStream {
     int ckOff = 0;
     while (byteBuffer.remaining() > 0) {
       DFSPacket p = createPacket(packetSize, chunksPerPacket,
-          streamer.getBytesCurBlock(),
-          streamer.getAndIncCurrentSeqno(), false);
+          getCurrentStreamer().getBytesCurBlock(),
+          getCurrentStreamer().getAndIncCurrentSeqno(), false);
       int maxBytesToPacket = p.getMaxChunks() * bytesPerChecksum;
       int toWrite = byteBuffer.remaining() > maxBytesToPacket ?
           maxBytesToPacket: byteBuffer.remaining();
@@ -353,7 +353,7 @@ public class DFSStripedOutputStream extends DFSOutputStream {
       p.writeChecksum(checksumBuf, ckOff, ckLen);
       ckOff += ckLen;
       p.writeData(byteBuffer, toWrite);
-      streamer.incBytesCurBlock(toWrite);
+      getCurrentStreamer().incBytesCurBlock(toWrite);
       packets.add(p);
     }
     return packets;
@@ -529,7 +529,7 @@ public class DFSStripedOutputStream extends DFSOutputStream {
     if (!current.isFailed()) {
       try {
         for (DFSPacket p : generatePackets(buffer, checksumBuf)) {
-          streamer.waitAndQueuePacket(p);
+          getCurrentStreamer().waitAndQueuePacket(p);
         }
         endBlock();
       } catch(Exception e) {

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoStripedUnderConstruction.java

@@ -189,6 +189,9 @@ public class BlockInfoStripedUnderConstruction extends BlockInfoStriped
       NameNode.blockStateChangeLog.warn("BLOCK*" +
           " BlockInfoStripedUnderConstruction.initLeaseRecovery:" +
           " No blocks found, lease removed.");
+      // sets primary node index and return.
+      primaryNodeIndex = -1;
+      return;
     }
     boolean allLiveReplicasTriedAsPrimary = true;
     for (ReplicaUnderConstruction replica : replicas) {

+ 2 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/erasurecode/ErasureCodingWorker.java

@@ -251,7 +251,7 @@ public final class ErasureCodingWorker {
     private final long[] blockOffset4Targets;
     private final long[] seqNo4Targets;
 
-    private final int WRITE_PACKET_SIZE = 64 * 1024;
+    private final static int WRITE_PACKET_SIZE = 64 * 1024;
     private DataChecksum checksum;
     private int maxChunksPerPacket;
     private byte[] packetBuf;
@@ -904,7 +904,7 @@ public final class ErasureCodingWorker {
     }
   }
 
-  private class StripedReader {
+  private static class StripedReader {
     private final short index;
     private BlockReader blockReader;
     private ByteBuffer buffer;

+ 2 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ErasureCodingZoneManager.java

@@ -92,8 +92,8 @@ public class ErasureCodingZoneManager {
           String schemaName = WritableUtils.readString(dIn);
           ECSchema schema = dir.getFSNamesystem().getECSchemaManager()
               .getSchema(schemaName);
-          return new ErasureCodingZoneInfo(inode.getFullPathName(), schema,
-              cellSize);
+          return new ErasureCodingZoneInfo(dir.getInode(inode.getId())
+              .getFullPathName(), schema, cellSize);
         }
       }
     }

+ 3 - 3
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/StripedBlockUtil.java

@@ -105,7 +105,7 @@ public class StripedBlockUtil {
     final ExtendedBlock blk = constructInternalBlock(
         bg.getBlock(), cellSize, dataBlkNum, idxInBlockGroup);
 
-    final long offset = bg.getStartOffset() + idxInBlockGroup * cellSize;
+    final long offset = bg.getStartOffset() + idxInBlockGroup * (long) cellSize;
     if (idxInReturnedLocs < bg.getLocations().length) {
       return new LocatedBlock(blk,
           new DatanodeInfo[]{bg.getLocations()[idxInReturnedLocs]},
@@ -406,11 +406,11 @@ public class StripedBlockUtil {
     long earliestStart = startOffsets[firstCell.idxInStripe];
     for (int i = 1; i < dataBlkNum; i++) {
       int idx = firstCellIdxInBG + i;
-      if (idx * cellSize >= blockGroup.getBlockSize()) {
+      if (idx * (long) cellSize >= blockGroup.getBlockSize()) {
         break;
       }
       StripingCell cell = new StripingCell(ecSchema, cellSize, idx);
-      startOffsets[cell.idxInStripe] = cell.idxInInternalBlk * cellSize;
+      startOffsets[cell.idxInStripe] = cell.idxInInternalBlk * (long) cellSize;
       if (startOffsets[cell.idxInStripe] < earliestStart) {
         earliestStart = startOffsets[cell.idxInStripe];
       }