From 56e29d2711f3d5a674810fbbc712cc401355c21b Mon Sep 17 00:00:00 2001 From: Andrew Wang Date: Mon, 13 Jun 2016 11:50:19 -0700 Subject: [PATCH] HDFS-10516. Fix bug when warming up EDEK cache of more than one encryption zone. Contributed by Xiao Chen. (cherry picked from commit 709a814fe0153e86a37806796ea27c8252d9c6d1) (cherry picked from commit ff4466fe15c338e56bab2e4afd61c46b634843b3) --- .../hadoop/hdfs/server/namenode/EncryptionZoneManager.java | 2 +- .../hadoop/hdfs/server/namenode/FSDirEncryptionZoneOp.java | 3 +++ .../org/apache/hadoop/hdfs/TestEncryptionZonesWithKMS.java | 7 ++++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/EncryptionZoneManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/EncryptionZoneManager.java index e29d4206c50..ad5869b1526 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/EncryptionZoneManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/EncryptionZoneManager.java @@ -417,7 +417,7 @@ String[] getKeyNames() { int index = 0; for (Map.Entry entry : encryptionZones .entrySet()) { - ret[index] = entry.getValue().getKeyName(); + ret[index++] = entry.getValue().getKeyName(); } return ret; } diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirEncryptionZoneOp.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirEncryptionZoneOp.java index 2997179e810..2319741c2e3 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirEncryptionZoneOp.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSDirEncryptionZoneOp.java @@ -370,6 +370,9 @@ public void run() { } else { NameNode.LOG.debug("Failed to warm up EDEKs.", ioe); } + } catch (Exception e) { + NameNode.LOG.error("Cannot warm up EDEKs.", e); + throw e; } try { Thread.sleep(retryInterval); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZonesWithKMS.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZonesWithKMS.java index b29a108e9fc..959e724b58f 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZonesWithKMS.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZonesWithKMS.java @@ -100,9 +100,14 @@ public void testDelegationToken() throws Exception { @Test(timeout = 120000) public void testWarmupEDEKCacheOnStartup() throws Exception { - final Path zonePath = new Path("/TestEncryptionZone"); + Path zonePath = new Path("/TestEncryptionZone"); fsWrapper.mkdir(zonePath, FsPermission.getDirDefault(), false); dfsAdmin.createEncryptionZone(zonePath, TEST_KEY, NO_TRASH); + final String anotherKey = "k2"; + zonePath = new Path("/TestEncryptionZone2"); + DFSTestUtil.createKey(anotherKey, cluster, conf); + fsWrapper.mkdir(zonePath, FsPermission.getDirDefault(), false); + dfsAdmin.createEncryptionZone(zonePath, anotherKey, NO_TRASH); @SuppressWarnings("unchecked") KMSClientProvider spy = (KMSClientProvider) Whitebox