From 7f5caca04cb8e5dab8410ef64daa0fe799e389fd 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 --- .../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 3c3099e113..ede614d018 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.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; @@ -104,6 +105,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; @@ -131,6 +133,7 @@ private JavaKeyStoreProvider(URI uri, Configuration conf) throws IOException { this.uri = uri; path = ProviderUtils.unnestUri(uri); fs = path.getFileSystem(conf); + context = FileContext.getFileContext(conf); locateKeystore(); ReadWriteLock lock = new ReentrantReadWriteLock(true); readLock = lock.readLock(); @@ -639,10 +642,7 @@ private void revertFromOld(Path oldPath, boolean fileExisted) 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