From 7af05a3db4c731eca5e674b3d9e3b7abbf82ccd5 Mon Sep 17 00:00:00 2001 From: Zhe Zhang Date: Thu, 21 May 2015 14:40:14 -0700 Subject: [PATCH] HDFS-8294. Erasure Coding: Fix Findbug warnings present in erasure coding. Contributed by Rakesh R. --- .../hadoop-hdfs/CHANGES-HDFS-EC-7285.txt | 3 +++ .../apache/hadoop/hdfs/DFSStripedOutputStream.java | 12 ++++++------ .../BlockInfoStripedUnderConstruction.java | 3 +++ .../datanode/erasurecode/ErasureCodingWorker.java | 4 ++-- .../server/namenode/ErasureCodingZoneManager.java | 4 ++-- .../apache/hadoop/hdfs/util/StripedBlockUtil.java | 6 +++--- 6 files changed, 19 insertions(+), 13 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt index 3bdff6febe..c986f190c4 100755 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt +++ b/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) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSStripedOutputStream.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSStripedOutputStream.java index 8eed6ada47..515ce0cdf7 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSStripedOutputStream.java +++ b/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) { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoStripedUnderConstruction.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoStripedUnderConstruction.java index 40f880f9d5..76d79201b5 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoStripedUnderConstruction.java +++ b/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) { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/erasurecode/ErasureCodingWorker.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/erasurecode/ErasureCodingWorker.java index d227de85cf..ded51eb585 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/erasurecode/ErasureCodingWorker.java +++ b/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; diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ErasureCodingZoneManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ErasureCodingZoneManager.java index 371b8acf55..89fecc612c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ErasureCodingZoneManager.java +++ b/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); } } } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/StripedBlockUtil.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/StripedBlockUtil.java index 0b09f3776c..38dc61aa33 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/StripedBlockUtil.java +++ b/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]; }