Author: umamahesh Date: Mon Aug 4 09:56:57 2014 New Revision: 1615523 URL: http://svn.apache.org/r1615523 Log: HADOOP-10886. CryptoCodec#getCodecclasses throws NPE when configurations not loaded. Contributed by Uma Maheswara Rao G.
Modified: hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java Modified: hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java?rev=1615523&r1=1615522&r2=1615523&view=diff ============================================================================== --- hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java (original) +++ hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSClient.java Mon Aug 4 09:56:57 2014 @@ -598,7 +598,9 @@ public class DFSClient implements java.i DFSUtil.getRandom().nextInt() + "_" + Thread.currentThread().getId(); this.codec = CryptoCodec.getInstance(conf); this.cipherSuites = Lists.newArrayListWithCapacity(1); - cipherSuites.add(codec.getCipherSuite()); + if (codec != null) { + cipherSuites.add(codec.getCipherSuite()); + } provider = DFSUtil.createKeyProviderCryptoExtension(conf); if (provider == null) { LOG.info("No KeyProvider found."); @@ -1333,9 +1335,12 @@ public class DFSClient implements java.i if (feInfo != null) { // File is encrypted, wrap the stream in a crypto stream. KeyVersion decrypted = decryptEncryptedDataEncryptionKey(feInfo); + CryptoCodec codec = CryptoCodec + .getInstance(conf, feInfo.getCipherSuite()); + Preconditions.checkNotNull(codec == null, + "No crypto codec classes with cipher suite configured."); final CryptoInputStream cryptoIn = - new CryptoInputStream(dfsis, CryptoCodec.getInstance(conf, - feInfo.getCipherSuite()), decrypted.getMaterial(), + new CryptoInputStream(dfsis, codec, decrypted.getMaterial(), feInfo.getIV()); return new HdfsDataInputStream(cryptoIn); } else { @@ -1361,6 +1366,8 @@ public class DFSClient implements java.i FileSystem.Statistics statistics, long startPos) throws IOException { final FileEncryptionInfo feInfo = dfsos.getFileEncryptionInfo(); if (feInfo != null) { + Preconditions.checkNotNull(codec == null, + "No crypto codec classes with cipher suite configured."); // File is encrypted, wrap the stream in a crypto stream. KeyVersion decrypted = decryptEncryptedDataEncryptionKey(feInfo); final CryptoOutputStream cryptoOut = Modified: hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java?rev=1615523&r1=1615522&r2=1615523&view=diff ============================================================================== --- hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java (original) +++ hadoop/common/branches/fs-encryption/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestDistributedFileSystem.java Mon Aug 4 09:56:57 2014 @@ -38,7 +38,6 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.List; import java.util.Random; -import java.util.concurrent.CancellationException; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.logging.impl.Log4JLogger;