Return-Path: X-Original-To: apmail-hadoop-common-commits-archive@www.apache.org Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 3FAA21866E for ; Wed, 30 Sep 2015 15:42:13 +0000 (UTC) Received: (qmail 16370 invoked by uid 500); 30 Sep 2015 15:42:03 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 16092 invoked by uid 500); 30 Sep 2015 15:42:02 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 14657 invoked by uid 99); 30 Sep 2015 15:42:02 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Sep 2015 15:42:01 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id D4AA1E1524; Wed, 30 Sep 2015 15:42:01 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: wang@apache.org To: common-commits@hadoop.apache.org Date: Wed, 30 Sep 2015 15:42:21 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [21/50] [abbrv] hadoop git commit: HDFS-8853. Erasure Coding: Provide ECSchema validation when setting EC policy. Contributed by J.Andreina. HDFS-8853. Erasure Coding: Provide ECSchema validation when setting EC policy. Contributed by J.Andreina. Change-Id: I9211d9728480225a407d82e6c0bea1a928adfa11 Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/96d6b516 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/96d6b516 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/96d6b516 Branch: refs/heads/trunk Commit: 96d6b516b2468fce346490e0b95931d1759b3d33 Parents: f62237b Author: Zhe Zhang Authored: Thu Sep 10 16:31:37 2015 -0700 Committer: Zhe Zhang Committed: Thu Sep 10 16:31:37 2015 -0700 ---------------------------------------------------------------------- .../hadoop-hdfs/CHANGES-HDFS-EC-7285.txt | 3 +++ .../server/namenode/FSDirErasureCodingOp.java | 22 +++++++++++++++++++ .../hadoop/hdfs/TestErasureCodingPolicies.java | 23 ++++++++++++++++++++ 3 files changed, 48 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/96d6b516/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt ---------------------------------------------------------------------- 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 2f13310..f49a974 100755 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt @@ -415,3 +415,6 @@ HDFS-8833. Erasure coding: store EC schema and cell size in INodeFile and eliminate notion of EC zones. (zhz) + + HDFS-8853. Erasure Coding: Provide ECSchema validation when setting EC + policy. (andreina via zhz) http://git-wip-us.apache.org/repos/asf/hadoop/blob/96d6b516/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirErasureCodingOp.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirErasureCodingOp.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirErasureCodingOp.java index 4162760..d39da28 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirErasureCodingOp.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirErasureCodingOp.java @@ -28,6 +28,8 @@ import java.util.List; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; + +import org.apache.hadoop.HadoopIllegalArgumentException; import org.apache.hadoop.fs.XAttr; import org.apache.hadoop.fs.XAttrSetFlag; import org.apache.hadoop.fs.permission.FsAction; @@ -105,6 +107,26 @@ final class FSDirErasureCodingOp { // System default erasure coding policy will be used since no specified. if (ecPolicy == null) { ecPolicy = ErasureCodingPolicyManager.getSystemDefaultPolicy(); + } else { + // If ecPolicy is specified check if it is one among active policies. + boolean validPolicy = false; + ErasureCodingPolicy[] activePolicies = + FSDirErasureCodingOp.getErasureCodingPolicies(fsd.getFSNamesystem()); + for (ErasureCodingPolicy activePolicy : activePolicies) { + if (activePolicy.equals(ecPolicy)) { + validPolicy = true; + break; + } + } + if (!validPolicy) { + List ecPolicyNames = new ArrayList(); + for (ErasureCodingPolicy activePolicy : activePolicies) { + ecPolicyNames.add(activePolicy.getName()); + } + throw new HadoopIllegalArgumentException("Policy [ " + + ecPolicy.getName()+ " ] does not match any of the " + + "supported policies. Please select any one of " + ecPolicyNames); + } } final XAttr ecXAttr; http://git-wip-us.apache.org/repos/asf/hadoop/blob/96d6b516/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestErasureCodingPolicies.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestErasureCodingPolicies.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestErasureCodingPolicies.java index f60d77d..ed41f7a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestErasureCodingPolicies.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestErasureCodingPolicies.java @@ -26,6 +26,7 @@ import org.apache.hadoop.hdfs.server.namenode.ErasureCodingPolicyManager; import org.apache.hadoop.hdfs.server.namenode.FSNamesystem; import org.apache.hadoop.hdfs.server.namenode.INode; import org.apache.hadoop.hdfs.protocol.ErasureCodingPolicy; +import org.apache.hadoop.io.erasurecode.ECSchema; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -208,4 +209,26 @@ public class TestErasureCodingPolicies { assertEquals("Actually used ecPolicy should be equal with target ecPolicy", usingECPolicy, ecPolicy); } + + @Test + public void testCreationErasureCodingZoneWithInvalidPolicy() + throws IOException { + ECSchema rsSchema = new ECSchema("rs", 4, 2); + String policyName = "RS-4-2-128k"; + int cellSize = 128 * 1024; + ErasureCodingPolicy ecPolicy= + new ErasureCodingPolicy(policyName,rsSchema,cellSize); + String src = "/ecZone4-2"; + final Path ecDir = new Path(src); + try { + fs.mkdir(ecDir, FsPermission.getDirDefault()); + fs.getClient().setErasureCodingPolicy(src, ecPolicy); + fail("HadoopIllegalArgumentException should be thrown for" + + "setting an invalid erasure coding policy"); + } catch (Exception e) { + assertExceptionContains("Policy [ RS-4-2-128k ] does not match " + + "any of the supported policies",e); + } + } + }