You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by jh...@apache.org on 2017/04/20 21:53:22 UTC
[04/50] hadoop git commit: HDFS-11163. Mover should move the file
blocks to default storage once policy is unset. Contributed by Surendra Singh
Lilhore.
HDFS-11163. Mover should move the file blocks to default storage once policy is unset. Contributed by Surendra Singh Lilhore.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/23b1a7bd
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/23b1a7bd
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/23b1a7bd
Branch: refs/heads/YARN-5734
Commit: 23b1a7bdf1b546c1e29d7010cf139b6d700461fc
Parents: 62e4573
Author: Chris Nauroth <cn...@apache.org>
Authored: Tue Apr 11 15:01:49 2017 -0700
Committer: Chris Nauroth <cn...@apache.org>
Committed: Tue Apr 11 22:03:09 2017 -0700
----------------------------------------------------------------------
.../org/apache/hadoop/fs/FsServerDefaults.java | 19 ++++++++-
.../hadoop/hdfs/protocolPB/PBHelperClient.java | 4 +-
.../src/main/proto/hdfs.proto | 1 +
.../apache/hadoop/hdfs/server/mover/Mover.java | 11 +++--
.../hdfs/server/namenode/FSNamesystem.java | 5 ++-
.../apache/hadoop/hdfs/TestFileCreation.java | 2 +
.../hadoop/hdfs/server/mover/TestMover.java | 42 ++++++++++++++++++++
7 files changed, 77 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/23b1a7bd/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FsServerDefaults.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FsServerDefaults.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FsServerDefaults.java
index 469243c..84a40d2 100644
--- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FsServerDefaults.java
+++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FsServerDefaults.java
@@ -55,6 +55,7 @@ public class FsServerDefaults implements Writable {
private long trashInterval;
private DataChecksum.Type checksumType;
private String keyProviderUri;
+ private byte storagepolicyId;
public FsServerDefaults() {
}
@@ -62,8 +63,17 @@ public class FsServerDefaults implements Writable {
public FsServerDefaults(long blockSize, int bytesPerChecksum,
int writePacketSize, short replication, int fileBufferSize,
boolean encryptDataTransfer, long trashInterval,
+ DataChecksum.Type checksumType, String keyProviderUri) {
+ this(blockSize, bytesPerChecksum, writePacketSize, replication,
+ fileBufferSize, encryptDataTransfer, trashInterval, checksumType,
+ keyProviderUri, (byte) 0);
+ }
+
+ public FsServerDefaults(long blockSize, int bytesPerChecksum,
+ int writePacketSize, short replication, int fileBufferSize,
+ boolean encryptDataTransfer, long trashInterval,
DataChecksum.Type checksumType,
- String keyProviderUri) {
+ String keyProviderUri, byte storagepolicy) {
this.blockSize = blockSize;
this.bytesPerChecksum = bytesPerChecksum;
this.writePacketSize = writePacketSize;
@@ -73,6 +83,7 @@ public class FsServerDefaults implements Writable {
this.trashInterval = trashInterval;
this.checksumType = checksumType;
this.keyProviderUri = keyProviderUri;
+ this.storagepolicyId = storagepolicy;
}
public long getBlockSize() {
@@ -115,6 +126,10 @@ public class FsServerDefaults implements Writable {
return keyProviderUri;
}
+ public byte getDefaultStoragePolicyId() {
+ return storagepolicyId;
+ }
+
// /////////////////////////////////////////
// Writable
// /////////////////////////////////////////
@@ -127,6 +142,7 @@ public class FsServerDefaults implements Writable {
out.writeShort(replication);
out.writeInt(fileBufferSize);
WritableUtils.writeEnum(out, checksumType);
+ out.writeByte(storagepolicyId);
}
@Override
@@ -138,5 +154,6 @@ public class FsServerDefaults implements Writable {
replication = in.readShort();
fileBufferSize = in.readInt();
checksumType = WritableUtils.readEnum(in, DataChecksum.Type.class);
+ storagepolicyId = in.readByte();
}
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/23b1a7bd/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java
index 125b53f..98d7ef9 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/protocolPB/PBHelperClient.java
@@ -1759,7 +1759,8 @@ public class PBHelperClient {
fs.getEncryptDataTransfer(),
fs.getTrashInterval(),
convert(fs.getChecksumType()),
- fs.hasKeyProviderUri() ? fs.getKeyProviderUri() : null);
+ fs.hasKeyProviderUri() ? fs.getKeyProviderUri() : null,
+ (byte) fs.getPolicyId());
}
public static List<CryptoProtocolVersionProto> convert(
@@ -1934,6 +1935,7 @@ public class PBHelperClient {
.setTrashInterval(fs.getTrashInterval())
.setChecksumType(convert(fs.getChecksumType()))
.setKeyProviderUri(fs.getKeyProviderUri())
+ .setPolicyId(fs.getDefaultStoragePolicyId())
.build();
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/23b1a7bd/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto
index 9e03b29..99a9e68 100644
--- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto
+++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/proto/hdfs.proto
@@ -421,6 +421,7 @@ message FsServerDefaultsProto {
optional uint64 trashInterval = 7 [default = 0];
optional ChecksumTypeProto checksumType = 8 [default = CHECKSUM_CRC32];
optional string keyProviderUri = 9;
+ optional uint32 policyId = 10 [default = 0];
}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/23b1a7bd/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/mover/Mover.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/mover/Mover.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/mover/Mover.java
index bc75f0f..7eac87d 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/mover/Mover.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/mover/Mover.java
@@ -375,10 +375,15 @@ public class Mover {
/** @return true if it is necessary to run another round of migration */
private void processFile(String fullPath, HdfsLocatedFileStatus status,
Result result) {
- final byte policyId = status.getStoragePolicy();
- // currently we ignore files with unspecified storage policy
+ byte policyId = status.getStoragePolicy();
if (policyId == HdfsConstants.BLOCK_STORAGE_POLICY_ID_UNSPECIFIED) {
- return;
+ try {
+ // get default policy from namenode
+ policyId = dfs.getServerDefaults().getDefaultStoragePolicyId();
+ } catch (IOException e) {
+ LOG.warn("Failed to get default policy for " + fullPath, e);
+ return;
+ }
}
final BlockStoragePolicy policy = blockStoragePolicies[policyId];
if (policy == null) {
http://git-wip-us.apache.org/repos/asf/hadoop/blob/23b1a7bd/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
index 2a7c75b..e004b3f 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
@@ -781,8 +781,9 @@ public class FSNamesystem implements Namesystem, FSNamesystemMBean,
conf.getLong(FS_TRASH_INTERVAL_KEY, FS_TRASH_INTERVAL_DEFAULT),
checksumType,
conf.getTrimmed(
- CommonConfigurationKeysPublic.HADOOP_SECURITY_KEY_PROVIDER_PATH,
- ""));
+ CommonConfigurationKeysPublic.HADOOP_SECURITY_KEY_PROVIDER_PATH,
+ ""),
+ blockManager.getStoragePolicySuite().getDefaultPolicy().getId());
this.maxFsObjects = conf.getLong(DFS_NAMENODE_MAX_OBJECTS_KEY,
DFS_NAMENODE_MAX_OBJECTS_DEFAULT);
http://git-wip-us.apache.org/repos/asf/hadoop/blob/23b1a7bd/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileCreation.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileCreation.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileCreation.java
index e47c8b1..c04b7be 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileCreation.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestFileCreation.java
@@ -16,6 +16,7 @@
* limitations under the License.
*/
package org.apache.hadoop.hdfs;
+
import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.IO_FILE_BUFFER_SIZE_DEFAULT;
import static org.apache.hadoop.fs.CommonConfigurationKeysPublic.IO_FILE_BUFFER_SIZE_KEY;
import static org.apache.hadoop.hdfs.DFSConfigKeys.DFS_BLOCK_SIZE_DEFAULT;
@@ -171,6 +172,7 @@ public class TestFileCreation {
assertEquals(DFS_CLIENT_WRITE_PACKET_SIZE_DEFAULT, serverDefaults.getWritePacketSize());
assertEquals(DFS_REPLICATION_DEFAULT + 1, serverDefaults.getReplication());
assertEquals(IO_FILE_BUFFER_SIZE_DEFAULT, serverDefaults.getFileBufferSize());
+ assertEquals(7, serverDefaults.getDefaultStoragePolicyId());
} finally {
fs.close();
cluster.shutdown();
http://git-wip-us.apache.org/repos/asf/hadoop/blob/23b1a7bd/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/mover/TestMover.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/mover/TestMover.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/mover/TestMover.java
index 9af61ae..707d46f 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/mover/TestMover.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/mover/TestMover.java
@@ -822,6 +822,48 @@ public class TestMover {
}
}
+ @Test(timeout = 300000)
+ public void testMoverWhenStoragePolicyUnset() throws Exception {
+ final Configuration conf = new HdfsConfiguration();
+ initConf(conf);
+ final MiniDFSCluster cluster = new MiniDFSCluster.Builder(conf)
+ .numDataNodes(1)
+ .storageTypes(
+ new StorageType[][] {{StorageType.DISK, StorageType.ARCHIVE}})
+ .build();
+ try {
+ cluster.waitActive();
+ final DistributedFileSystem dfs = cluster.getFileSystem();
+ final String file = "/testMoverWhenStoragePolicyUnset";
+ // write to DISK
+ DFSTestUtil.createFile(dfs, new Path(file), 1L, (short) 1, 0L);
+
+ // move to ARCHIVE
+ dfs.setStoragePolicy(new Path(file), "COLD");
+ int rc = ToolRunner.run(conf, new Mover.Cli(),
+ new String[] {"-p", file.toString()});
+ Assert.assertEquals("Movement to ARCHIVE should be successful", 0, rc);
+
+ // Wait till namenode notified about the block location details
+ waitForLocatedBlockWithArchiveStorageType(dfs, file, 1);
+
+ // verify before unset policy
+ LocatedBlock lb = dfs.getClient().getLocatedBlocks(file, 0).get(0);
+ Assert.assertTrue(StorageType.ARCHIVE == (lb.getStorageTypes())[0]);
+
+ // unset storage policy
+ dfs.unsetStoragePolicy(new Path(file));
+ rc = ToolRunner.run(conf, new Mover.Cli(),
+ new String[] {"-p", file.toString()});
+ Assert.assertEquals("Movement to DISK should be successful", 0, rc);
+
+ lb = dfs.getClient().getLocatedBlocks(file, 0).get(0);
+ Assert.assertTrue(StorageType.DISK == (lb.getStorageTypes())[0]);
+ } finally {
+ cluster.shutdown();
+ }
+ }
+
private void createFileWithFavoredDatanodes(final Configuration conf,
final MiniDFSCluster cluster, final DistributedFileSystem dfs)
throws IOException {
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org