From 1c7043b1ff89ba9c995cbf546a99bbbcccbe56b1 Mon Sep 17 00:00:00 2001 From: Akira Ajisaka Date: Wed, 4 Nov 2020 04:20:23 +0900 Subject: [PATCH] HADOOP-17255. JavaKeyStoreProvider fails to create a new key if the keystore is HDFS. (#2291) Reviewed-by: Steve Loughran Reviewed-by: Wei-Chiu Chuang (cherry picked from commit 7f5caca04cb8e5dab8410ef64daa0fe799e389fd) (cherry picked from commit dd1634ec3b676d6c3da18af7da46734584ddd9f6) --- .../apache/hadoop/crypto/key/JavaKeyStoreProvider.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/JavaKeyStoreProvider.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/JavaKeyStoreProvider.java index 5beda0d2d2e..a41e36a2023 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/JavaKeyStoreProvider.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/crypto/key/JavaKeyStoreProvider.java @@ -23,6 +23,7 @@ import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; +import org.apache.hadoop.fs.FileContext; import org.apache.hadoop.fs.FileStatus; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; @@ -103,6 +104,7 @@ public class JavaKeyStoreProvider extends KeyProvider { private final Path path; private final FileSystem fs; private FsPermission permissions; + private FileContext context; private KeyStore keyStore; private char[] password; private boolean changed = false; @@ -130,6 +132,7 @@ public class JavaKeyStoreProvider extends KeyProvider { this.uri = uri; path = ProviderUtils.unnestUri(uri); fs = path.getFileSystem(conf); + context = FileContext.getFileContext(conf); locateKeystore(); ReadWriteLock lock = new ReentrantReadWriteLock(true); readLock = lock.readLock(); @@ -638,10 +641,7 @@ public class JavaKeyStoreProvider extends KeyProvider { private void renameOrFail(Path src, Path dest) throws IOException { - if (!fs.rename(src, dest)) { - throw new IOException("Rename unsuccessful : " - + String.format("'%s' to '%s'", src, dest)); - } + context.rename(src, dest, org.apache.hadoop.fs.Options.Rename.NONE); } @Override