HDFS-10764. Fix INodeFile#getBlocks to not return null. Contributed by Arpit Agarwal.
This commit is contained in:
parent
99603e9022
commit
0faee62a0c
@ -200,8 +200,8 @@ static long toLong(long preferredBlockSize, short replication,
|
|||||||
public INodeFile(INodeFile that) {
|
public INodeFile(INodeFile that) {
|
||||||
super(that);
|
super(that);
|
||||||
this.header = that.header;
|
this.header = that.header;
|
||||||
this.blocks = that.blocks;
|
|
||||||
this.features = that.features;
|
this.features = that.features;
|
||||||
|
setBlocks(that.blocks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public INodeFile(INodeFile that, FileDiffList diffs) {
|
public INodeFile(INodeFile that, FileDiffList diffs) {
|
||||||
@ -271,9 +271,6 @@ void toCompleteFile(long mtime, int numCommittedAllowed, short minReplication) {
|
|||||||
/** Assert all blocks are complete. */
|
/** Assert all blocks are complete. */
|
||||||
private void assertAllBlocksComplete(int numCommittedAllowed,
|
private void assertAllBlocksComplete(int numCommittedAllowed,
|
||||||
short minReplication) {
|
short minReplication) {
|
||||||
if (blocks == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (int i = 0; i < blocks.length; i++) {
|
for (int i = 0; i < blocks.length; i++) {
|
||||||
final String err = checkBlockComplete(blocks, i, numCommittedAllowed,
|
final String err = checkBlockComplete(blocks, i, numCommittedAllowed,
|
||||||
minReplication);
|
minReplication);
|
||||||
@ -342,7 +339,7 @@ void setLastBlock(BlockInfo blk) {
|
|||||||
BlockInfo removeLastBlock(Block oldblock) {
|
BlockInfo removeLastBlock(Block oldblock) {
|
||||||
Preconditions.checkState(isUnderConstruction(),
|
Preconditions.checkState(isUnderConstruction(),
|
||||||
"file is no longer under construction");
|
"file is no longer under construction");
|
||||||
if (blocks == null || blocks.length == 0) {
|
if (blocks.length == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
int size_1 = blocks.length - 1;
|
int size_1 = blocks.length - 1;
|
||||||
@ -618,7 +615,7 @@ void concatBlocks(INodeFile[] inodes, BlockManager bm) {
|
|||||||
*/
|
*/
|
||||||
void addBlock(BlockInfo newblock) {
|
void addBlock(BlockInfo newblock) {
|
||||||
Preconditions.checkArgument(newblock.isStriped() == this.isStriped());
|
Preconditions.checkArgument(newblock.isStriped() == this.isStriped());
|
||||||
if (this.blocks == null) {
|
if (this.blocks.length == 0) {
|
||||||
this.setBlocks(new BlockInfo[]{newblock});
|
this.setBlocks(new BlockInfo[]{newblock});
|
||||||
} else {
|
} else {
|
||||||
int size = this.blocks.length;
|
int size = this.blocks.length;
|
||||||
@ -631,12 +628,12 @@ void addBlock(BlockInfo newblock) {
|
|||||||
|
|
||||||
/** Set the blocks. */
|
/** Set the blocks. */
|
||||||
private void setBlocks(BlockInfo[] blocks) {
|
private void setBlocks(BlockInfo[] blocks) {
|
||||||
this.blocks = blocks;
|
this.blocks = (blocks != null ? blocks : BlockInfo.EMPTY_ARRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Clear all blocks of the file. */
|
/** Clear all blocks of the file. */
|
||||||
public void clearBlocks() {
|
public void clearBlocks() {
|
||||||
setBlocks(BlockInfo.EMPTY_ARRAY);
|
this.blocks = BlockInfo.EMPTY_ARRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -836,7 +833,7 @@ public final long computeFileSizeNotIncludingLastUcBlock() {
|
|||||||
*/
|
*/
|
||||||
public final long computeFileSize(boolean includesLastUcBlock,
|
public final long computeFileSize(boolean includesLastUcBlock,
|
||||||
boolean usePreferredBlockSize4LastUcBlock) {
|
boolean usePreferredBlockSize4LastUcBlock) {
|
||||||
if (blocks == null || blocks.length == 0) {
|
if (blocks.length == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
final int last = blocks.length - 1;
|
final int last = blocks.length - 1;
|
||||||
@ -876,10 +873,6 @@ public final QuotaCounts storagespaceConsumed(BlockStoragePolicy bsp) {
|
|||||||
// TODO: support EC with heterogeneous storage
|
// TODO: support EC with heterogeneous storage
|
||||||
public final QuotaCounts storagespaceConsumedStriped() {
|
public final QuotaCounts storagespaceConsumedStriped() {
|
||||||
QuotaCounts counts = new QuotaCounts.Builder().build();
|
QuotaCounts counts = new QuotaCounts.Builder().build();
|
||||||
if (blocks == null || blocks.length == 0) {
|
|
||||||
return counts;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (BlockInfo b : blocks) {
|
for (BlockInfo b : blocks) {
|
||||||
Preconditions.checkState(b.isStriped());
|
Preconditions.checkState(b.isStriped());
|
||||||
long blockSize = b.isComplete() ?
|
long blockSize = b.isComplete() ?
|
||||||
@ -931,7 +924,7 @@ public final QuotaCounts storagespaceConsumedContiguous(
|
|||||||
* Return the penultimate allocated block for this file.
|
* Return the penultimate allocated block for this file.
|
||||||
*/
|
*/
|
||||||
BlockInfo getPenultimateBlock() {
|
BlockInfo getPenultimateBlock() {
|
||||||
if (blocks == null || blocks.length <= 1) {
|
if (blocks.length <= 1) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return blocks[blocks.length - 2];
|
return blocks[blocks.length - 2];
|
||||||
@ -939,12 +932,12 @@ BlockInfo getPenultimateBlock() {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BlockInfo getLastBlock() {
|
public BlockInfo getLastBlock() {
|
||||||
return blocks == null || blocks.length == 0? null: blocks[blocks.length-1];
|
return blocks.length == 0 ? null: blocks[blocks.length-1];
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int numBlocks() {
|
public int numBlocks() {
|
||||||
return blocks == null ? 0 : blocks.length;
|
return blocks.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@ -955,7 +948,7 @@ public void dumpTreeRecursively(PrintWriter out, StringBuilder prefix,
|
|||||||
out.print(", fileSize=" + computeFileSize(snapshotId));
|
out.print(", fileSize=" + computeFileSize(snapshotId));
|
||||||
// only compare the first block
|
// only compare the first block
|
||||||
out.print(", blocks=");
|
out.print(", blocks=");
|
||||||
out.print(blocks == null || blocks.length == 0? null: blocks[0]);
|
out.print(blocks.length == 0 ? null: blocks[0]);
|
||||||
out.println();
|
out.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1004,7 +997,7 @@ void computeQuotaDeltaForTruncate(
|
|||||||
long newLength, BlockStoragePolicy bsps,
|
long newLength, BlockStoragePolicy bsps,
|
||||||
QuotaCounts delta) {
|
QuotaCounts delta) {
|
||||||
final BlockInfo[] blocks = getBlocks();
|
final BlockInfo[] blocks = getBlocks();
|
||||||
if (blocks == null || blocks.length == 0) {
|
if (blocks.length == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user