HDFS-10516. Fix bug when warming up EDEK cache of more than one encryption zone. Contributed by Xiao Chen.

(cherry picked from commit 709a814fe0)
(cherry picked from commit ff4466fe15)
This commit is contained in:
Andrew Wang 2016-06-13 11:50:19 -07:00
parent 08ff8d7482
commit 56e29d2711
3 changed files with 10 additions and 2 deletions

View File

@ -417,7 +417,7 @@ public class EncryptionZoneManager {
int index = 0; int index = 0;
for (Map.Entry<Long, EncryptionZoneInt> entry : encryptionZones for (Map.Entry<Long, EncryptionZoneInt> entry : encryptionZones
.entrySet()) { .entrySet()) {
ret[index] = entry.getValue().getKeyName(); ret[index++] = entry.getValue().getKeyName();
} }
return ret; return ret;
} }

View File

@ -370,6 +370,9 @@ final class FSDirEncryptionZoneOp {
} else { } else {
NameNode.LOG.debug("Failed to warm up EDEKs.", ioe); NameNode.LOG.debug("Failed to warm up EDEKs.", ioe);
} }
} catch (Exception e) {
NameNode.LOG.error("Cannot warm up EDEKs.", e);
throw e;
} }
try { try {
Thread.sleep(retryInterval); Thread.sleep(retryInterval);

View File

@ -100,9 +100,14 @@ public class TestEncryptionZonesWithKMS extends TestEncryptionZones {
@Test(timeout = 120000) @Test(timeout = 120000)
public void testWarmupEDEKCacheOnStartup() throws Exception { public void testWarmupEDEKCacheOnStartup() throws Exception {
final Path zonePath = new Path("/TestEncryptionZone"); Path zonePath = new Path("/TestEncryptionZone");
fsWrapper.mkdir(zonePath, FsPermission.getDirDefault(), false); fsWrapper.mkdir(zonePath, FsPermission.getDirDefault(), false);
dfsAdmin.createEncryptionZone(zonePath, TEST_KEY, NO_TRASH); 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") @SuppressWarnings("unchecked")
KMSClientProvider spy = (KMSClientProvider) Whitebox KMSClientProvider spy = (KMSClientProvider) Whitebox