Return-Path: X-Original-To: apmail-hbase-issues-archive@www.apache.org Delivered-To: apmail-hbase-issues-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 69C219881 for ; Wed, 22 Feb 2012 22:12:13 +0000 (UTC) Received: (qmail 79562 invoked by uid 500); 22 Feb 2012 22:12:13 -0000 Delivered-To: apmail-hbase-issues-archive@hbase.apache.org Received: (qmail 79526 invoked by uid 500); 22 Feb 2012 22:12:13 -0000 Mailing-List: contact issues-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list issues@hbase.apache.org Received: (qmail 79513 invoked by uid 99); 22 Feb 2012 22:12:13 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 22 Feb 2012 22:12:13 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED,T_RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.116] (HELO hel.zones.apache.org) (140.211.11.116) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 22 Feb 2012 22:12:10 +0000 Received: from hel.zones.apache.org (hel.zones.apache.org [140.211.11.116]) by hel.zones.apache.org (Postfix) with ESMTP id 138AE335F50 for ; Wed, 22 Feb 2012 22:11:49 +0000 (UTC) Date: Wed, 22 Feb 2012 22:11:49 +0000 (UTC) From: "David McIntosh (Created) (JIRA)" To: issues@hbase.apache.org Message-ID: <962049361.6477.1329948709081.JavaMail.tomcat@hel.zones.apache.org> Subject: [jira] [Created] (HBASE-5458) Thread safety issues with Compression.Algorithm.GZ and CompressionTest MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org Thread safety issues with Compression.Algorithm.GZ and CompressionTest ---------------------------------------------------------------------- Key: HBASE-5458 URL: https://issues.apache.org/jira/browse/HBASE-5458 Project: HBase Issue Type: Bug Components: io Affects Versions: 0.90.5 Reporter: David McIntosh Priority: Minor I've seen some occasional NullPointerExceptions in ZlibFactory.isNativeZlibLoaded(conf) during region server startups and the completebulkload process. This is being caused by a null configuration getting passed to the isNativeZlibLoaded method. I think this happens when 2 or more threads call the CompressionTest.testCompression method at once. If the GZ algorithm has not been tested yet both threads could continue on and attempt to load the compressor. For GZ the getCodec method is not thread safe which could lead to one thread getting a reference to a GzipCodec that has a null configuration. current: DefaultCodec getCodec(Configuration conf) { if (codec == null) { codec = new GzipCodec(); codec.setConf(new Configuration(conf)); } return codec; } one possible fix would be something like this: DefaultCodec getCodec(Configuration conf) { if (codec == null) { GzipCodec gzip = new GzipCodec(); gzip.setConf(new Configuration(conf)); codec = gzip; } return codec; } But that may not be totally safe without some synchronization. An upstream fix in CompressionTest could also prevent multi thread access to GZ.getCodec(conf) exceptions: 12/02/21 16:11:56 ERROR handler.OpenRegionHandler: Failed open of region=all-monthly,,1326263896983.bf574519a95263ec23a2bad9f5b8cbf4. java.io.IOException: java.lang.NullPointerException at org.apache.hadoop.hbase.util.CompressionTest.testCompression(CompressionTest.java:89) at org.apache.hadoop.hbase.regionserver.HRegion.checkCompressionCodecs(HRegion.java:2670) at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:2659) at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:2647) at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.openRegion(OpenRegionHandler.java:312) at org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.process(OpenRegionHandler.java:99) at org.apache.hadoop.hbase.executor.EventHandler.run(EventHandler.java:158) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.NullPointerException at org.apache.hadoop.io.compress.zlib.ZlibFactory.isNativeZlibLoaded(ZlibFactory.java:63) at org.apache.hadoop.io.compress.GzipCodec.getCompressorType(GzipCodec.java:166) at org.apache.hadoop.io.compress.CodecPool.getCompressor(CodecPool.java:100) at org.apache.hadoop.io.compress.CodecPool.getCompressor(CodecPool.java:112) at org.apache.hadoop.hbase.io.hfile.Compression$Algorithm.getCompressor(Compression.java:236) at org.apache.hadoop.hbase.util.CompressionTest.testCompression(CompressionTest.java:84) ... 9 more Caused by: java.io.IOException: java.lang.NullPointerException at org.apache.hadoop.hbase.util.CompressionTest.testCompression(CompressionTest.java:89) at org.apache.hadoop.hbase.io.hfile.HFile$Reader.readTrailer(HFile.java:890) at org.apache.hadoop.hbase.io.hfile.HFile$Reader.loadFileInfo(HFile.java:819) at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.groupOrSplit(LoadIncrementalHFiles.java:405) at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles$2.call(LoadIncrementalHFiles.java:323) at org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles$2.call(LoadIncrementalHFiles.java:321) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.NullPointerException at org.apache.hadoop.io.compress.zlib.ZlibFactory.isNativeZlibLoaded(ZlibFactory.java:63) at org.apache.hadoop.io.compress.GzipCodec.getCompressorType(GzipCodec.java:166) at org.apache.hadoop.io.compress.CodecPool.getCompressor(CodecPool.java:100) at org.apache.hadoop.io.compress.CodecPool.getCompressor(CodecPool.java:112) at org.apache.hadoop.hbase.io.hfile.Compression$Algorithm.getCompressor(Compression.java:236) at org.apache.hadoop.hbase.util.CompressionTest.testCompression(CompressionTest.java:84) ... 10 more -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira