Revert "HDFS-14633. The StorageType quota and consume in QuotaFeature is not handled for rename. Contributed by Jinglun."

This reverts commit 29e6a97faa.
This commit is contained in:
Xiaoyu Yao 2019-09-05 15:47:16 -07:00
parent 619bd1e876
commit fbdfb36fdf
No known key found for this signature in database
GPG Key ID: 2A33E32176F50EF3
3 changed files with 2 additions and 72 deletions

View File

@ -76,12 +76,7 @@ class FSDirRenameOp {
while(src.getINode(i) == dst.getINode(i)) { i++; } while(src.getINode(i) == dst.getINode(i)) { i++; }
// src[i - 1] is the last common ancestor. // src[i - 1] is the last common ancestor.
BlockStoragePolicySuite bsps = fsd.getBlockStoragePolicySuite(); BlockStoragePolicySuite bsps = fsd.getBlockStoragePolicySuite();
// Assume dstParent existence check done by callers. final QuotaCounts delta = src.getLastINode().computeQuotaUsage(bsps);
INode dstParent = dst.getINode(-2);
// Use the destination parent's storage policy for quota delta verify.
final QuotaCounts delta = src.getLastINode()
.computeQuotaUsage(bsps, dstParent.getStoragePolicyID(), false,
Snapshot.CURRENT_STATE_ID);
// Reduce the required quota by dst that is being removed // Reduce the required quota by dst that is being removed
final INode dstINode = dst.getLastINode(); final INode dstINode = dst.getLastINode();

View File

@ -17,7 +17,6 @@
*/ */
package org.apache.hadoop.hdfs.server.namenode; package org.apache.hadoop.hdfs.server.namenode;
import org.apache.hadoop.hdfs.server.namenode.snapshot.Snapshot;
import org.apache.hadoop.util.StringUtils; import org.apache.hadoop.util.StringUtils;
import com.google.common.annotations.VisibleForTesting; import com.google.common.annotations.VisibleForTesting;
@ -1292,9 +1291,7 @@ public class FSDirectory implements Closeable {
// always verify inode name // always verify inode name
verifyINodeName(inode.getLocalNameBytes()); verifyINodeName(inode.getLocalNameBytes());
final QuotaCounts counts = inode final QuotaCounts counts = inode.computeQuotaUsage(getBlockStoragePolicySuite());
.computeQuotaUsage(getBlockStoragePolicySuite(),
parent.getStoragePolicyID(), false, Snapshot.CURRENT_STATE_ID);
updateCount(existing, pos, counts, checkQuota); updateCount(existing, pos, counts, checkQuota);
boolean isRename = (inode.getParent() != null); boolean isRename = (inode.getParent() != null);

View File

@ -1565,57 +1565,6 @@ public class TestQuota {
assertEquals(0, cluster.getNamesystem().getNumFilesUnderConstruction()); assertEquals(0, cluster.getNamesystem().getNumFilesUnderConstruction());
} }
@Test
public void testClrQuotaOnRoot() throws Exception {
long orignalQuota = dfs.getQuotaUsage(new Path("/")).getQuota();
DFSAdmin admin = new DFSAdmin(conf);
String[] args;
args = new String[] {"-setQuota", "3K", "/"};
runCommand(admin, args, false);
assertEquals(3 * 1024, dfs.getQuotaUsage(new Path("/")).getQuota());
args = new String[] {"-clrQuota", "/"};
runCommand(admin, args, false);
assertEquals(orignalQuota, dfs.getQuotaUsage(new Path("/")).getQuota());
}
@Test
public void testRename() throws Exception {
int fileLen = 1024;
short replication = 3;
final Path parent = new Path(PathUtils.getTestDir(getClass()).getPath(),
GenericTestUtils.getMethodName());
assertTrue(dfs.mkdirs(parent));
final Path srcDir = new Path(parent, "src-dir");
Path file = new Path(srcDir, "file1");
DFSTestUtil.createFile(dfs, file, fileLen, replication, 0);
dfs.setStoragePolicy(srcDir, HdfsConstants.HOT_STORAGE_POLICY_NAME);
final Path dstDir = new Path(parent, "dst-dir");
assertTrue(dfs.mkdirs(dstDir));
dfs.setStoragePolicy(dstDir, HdfsConstants.ALLSSD_STORAGE_POLICY_NAME);
dfs.setQuota(srcDir, 100000, 100000);
dfs.setQuota(dstDir, 100000, 100000);
Path dstFile = new Path(dstDir, "file1");
// Test quota check of rename. Expect a QuotaExceedException.
dfs.setQuotaByStorageType(dstDir, StorageType.SSD, 10);
try {
dfs.rename(file, dstFile);
fail("Expect QuotaExceedException.");
} catch (QuotaExceededException qe) {
}
// Set enough quota, expect a successful rename.
dfs.setQuotaByStorageType(dstDir, StorageType.SSD, fileLen * replication);
dfs.rename(file, dstFile);
// Verify the storage type usage is properly updated on source and dst.
checkQuotaAndCount(dfs, srcDir);
checkQuotaAndCount(dfs, dstDir);
}
@Test @Test
public void testSpaceQuotaExceptionOnAppend() throws Exception { public void testSpaceQuotaExceptionOnAppend() throws Exception {
GenericTestUtils.setLogLevel(DFSOutputStream.LOG, Level.TRACE); GenericTestUtils.setLogLevel(DFSOutputStream.LOG, Level.TRACE);
@ -1686,15 +1635,4 @@ public class TestQuota {
} }
scanner.close(); scanner.close();
} }
// quota and count should match.
private void checkQuotaAndCount(DistributedFileSystem fs, Path path)
throws IOException {
QuotaUsage qu = fs.getQuotaUsage(path);
ContentSummary cs = fs.getContentSummary(path);
for (StorageType st : StorageType.values()) {
// it will fail here, because the quota and consume is not handled right.
assertEquals(qu.getTypeConsumed(st), cs.getTypeConsumed(st));
}
}
} }