HADOOP-11054. Add a KeyProvider instantiation based on a URI. (tucu)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/41f1662d Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/41f1662d Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/41f1662d Branch: refs/heads/HDFS-6584 Commit: 41f1662d467ec0b295b742bb80c87482504fbf25 Parents: 8f1a668 Author: Alejandro Abdelnur <[email protected]> Authored: Thu Sep 4 09:08:31 2014 -0700 Committer: Alejandro Abdelnur <[email protected]> Committed: Thu Sep 4 09:09:39 2014 -0700 ---------------------------------------------------------------------- hadoop-common-project/hadoop-common/CHANGES.txt | 2 ++ .../hadoop/crypto/key/KeyProviderFactory.java | 36 ++++++++++++++------ .../crypto/key/TestKeyProviderFactory.java | 13 +++++++ 3 files changed, 41 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/41f1662d/hadoop-common-project/hadoop-common/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index e8d0f52..2e04917 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -496,6 +496,8 @@ Release 2.6.0 - UNRELEASED HADOOP-10863. KMS should have a blacklist for decrypting EEKs. (asuresh via tucu) + HADOOP-11054. Add a KeyProvider instantiation based on a URI. (tucu) + OPTIMIZATIONS HADOOP-10838. Byte array native checksumming. (James Thomas via todd) http://git-wip-us.apache.org/repos/asf/hadoop/blob/41f1662d/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/KeyProviderFactory.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/KeyProviderFactory.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/KeyProviderFactory.java index 9855bc8..6ca0425 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/KeyProviderFactory.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/KeyProviderFactory.java @@ -63,16 +63,10 @@ public abstract class KeyProviderFactory { for(String path: conf.getStringCollection(KEY_PROVIDER_PATH)) { try { URI uri = new URI(path); - boolean found = false; - for(KeyProviderFactory factory: serviceLoader) { - KeyProvider kp = factory.createProvider(uri, conf); - if (kp != null) { - result.add(kp); - found = true; - break; - } - } - if (!found) { + KeyProvider kp = get(uri, conf); + if (kp != null) { + result.add(kp); + } else { throw new IOException("No KeyProviderFactory for " + uri + " in " + KEY_PROVIDER_PATH); } @@ -83,4 +77,26 @@ public abstract class KeyProviderFactory { } return result; } + + /** + * Create a KeyProvider based on a provided URI. + * + * @param uri key provider URI + * @param conf configuration to initialize the key provider + * @return the key provider for the specified URI, or <code>NULL</code> if + * a provider for the specified URI scheme could not be found. + * @throws IOException thrown if the provider failed to initialize. + */ + public static KeyProvider get(URI uri, Configuration conf) + throws IOException { + KeyProvider kp = null; + for (KeyProviderFactory factory : serviceLoader) { + kp = factory.createProvider(uri, conf); + if (kp != null) { + break; + } + } + return kp; + } + } http://git-wip-us.apache.org/repos/asf/hadoop/blob/41f1662d/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/key/TestKeyProviderFactory.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/key/TestKeyProviderFactory.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/key/TestKeyProviderFactory.java index d72ac51..8c4c7b3 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/key/TestKeyProviderFactory.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/crypto/key/TestKeyProviderFactory.java @@ -357,4 +357,17 @@ public class TestKeyProviderFactory { } } + @Test + public void testGetProviderViaURI() throws Exception { + Configuration conf = new Configuration(false); + URI uri = new URI(JavaKeyStoreProvider.SCHEME_NAME + "://file" + tmpDir + + "/test.jks"); + KeyProvider kp = KeyProviderFactory.get(uri, conf); + Assert.assertNotNull(kp); + Assert.assertEquals(JavaKeyStoreProvider.class, kp.getClass()); + uri = new URI("foo://bar"); + kp = KeyProviderFactory.get(uri, conf); + Assert.assertNull(kp); + + } }
