HDFS-15332. Quota Space consumed was wrong in truncate with Snapshots. Contributed by hemanthboyina.
This commit is contained in:
parent
92e3ebb401
commit
130f89e068
|
@ -163,6 +163,12 @@ public class FileWithSnapshotFeature implements INode.Feature {
|
||||||
if (removed.getBlocks() != null) {
|
if (removed.getBlocks() != null) {
|
||||||
allBlocks.addAll(Arrays.asList(removed.getBlocks()));
|
allBlocks.addAll(Arrays.asList(removed.getBlocks()));
|
||||||
}
|
}
|
||||||
|
for (FileDiff diff : diffs) {
|
||||||
|
BlockInfo[] diffBlocks = diff.getBlocks();
|
||||||
|
if (diffBlocks != null) {
|
||||||
|
allBlocks.addAll(Arrays.asList(diffBlocks));
|
||||||
|
}
|
||||||
|
}
|
||||||
for (BlockInfo b: allBlocks) {
|
for (BlockInfo b: allBlocks) {
|
||||||
short replication = b.getReplication();
|
short replication = b.getReplication();
|
||||||
long blockSize = b.isComplete() ? b.getNumBytes() : file
|
long blockSize = b.isComplete() ? b.getNumBytes() : file
|
||||||
|
|
|
@ -1353,4 +1353,44 @@ public class TestFileTruncate {
|
||||||
fs.concat(trg, srcs);
|
fs.concat(trg, srcs);
|
||||||
assertEquals(1, fs.getContentSummary(new Path(dir)).getFileCount());
|
assertEquals(1, fs.getContentSummary(new Path(dir)).getFileCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test Quota space consumed with multiple snapshots.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testQuotaSpaceConsumedWithSnapshots() throws IOException {
|
||||||
|
Path root = new Path("/");
|
||||||
|
Path dir = new Path(root, "dir");
|
||||||
|
fs.mkdirs(dir);
|
||||||
|
fs.allowSnapshot(dir);
|
||||||
|
|
||||||
|
// create a file
|
||||||
|
Path file2 = new Path(dir, "file2");
|
||||||
|
DFSTestUtil.createFile(fs, file2, 30, (short) 1, 0);
|
||||||
|
|
||||||
|
// create a snapshot and truncate the file
|
||||||
|
fs.createSnapshot(dir, "s1");
|
||||||
|
boolean isReady = fs.truncate(file2, 20);
|
||||||
|
if (!isReady) {
|
||||||
|
checkBlockRecovery(file2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// create one more snapshot and truncate the file which exists in previous
|
||||||
|
// snapshot
|
||||||
|
fs.createSnapshot(dir, "s2");
|
||||||
|
isReady = fs.truncate(file2, 10);
|
||||||
|
if (!isReady) {
|
||||||
|
checkBlockRecovery(file2);
|
||||||
|
}
|
||||||
|
|
||||||
|
// delete the snapshots and check quota space consumed usage
|
||||||
|
fs.deleteSnapshot(dir, "s1");
|
||||||
|
fs.deleteSnapshot(dir, "s2");
|
||||||
|
assertEquals(fs.getContentSummary(root).getSpaceConsumed(),
|
||||||
|
fs.getQuotaUsage(root).getSpaceConsumed());
|
||||||
|
fs.delete(dir, true);
|
||||||
|
assertEquals(fs.getContentSummary(root).getSpaceConsumed(),
|
||||||
|
fs.getQuotaUsage(root).getSpaceConsumed());
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue