Uploaded image for project: 'Hadoop Common'
  1. Hadoop Common
  2. HADOOP-11969

ThreadLocal initialization in several classes is not thread safe

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.8.0, 3.0.0-alpha1
    • Component/s: io
    • Labels:
    • Target Version/s:

      Description

      Right now, the initialization of hte thread local factories for encoder / decoder in Text are not marked final. This means they end up with a static initializer that is not guaranteed to be finished running before the members are visible.

      Under heavy contention, this means during initialization some users will get an NPE:

      (2015-05-05 08:58:03.974 : solr_server_log.log) 
       org.apache.solr.common.SolrException; null:java.lang.NullPointerException
      	at org.apache.hadoop.io.Text.decode(Text.java:406)
      	at org.apache.hadoop.io.Text.decode(Text.java:389)
      	at org.apache.hadoop.io.Text.toString(Text.java:280)
      	at org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:764)
      	at org.apache.hadoop.hdfs.protocol.datatransfer.DataTransferProtoUtil.buildBaseHeader(DataTransferProtoUtil.java:81)
      	at org.apache.hadoop.hdfs.protocol.datatransfer.DataTransferProtoUtil.buildClientHeader(DataTransferProtoUtil.java:71)
      	at org.apache.hadoop.hdfs.protocol.datatransfer.Sender.readBlock(Sender.java:101)
      	at org.apache.hadoop.hdfs.RemoteBlockReader2.newBlockReader(RemoteBlockReader2.java:400)
      	at org.apache.hadoop.hdfs.BlockReaderFactory.getRemoteBlockReader(BlockReaderFactory.java:785)
      	at org.apache.hadoop.hdfs.BlockReaderFactory.getRemoteBlockReaderFromTcp(BlockReaderFactory.java:663)
      	at org.apache.hadoop.hdfs.BlockReaderFactory.build(BlockReaderFactory.java:327)
      	at org.apache.hadoop.hdfs.DFSInputStream.actualGetFromOneDataNode(DFSInputStream.java:1027)
      	at org.apache.hadoop.hdfs.DFSInputStream.fetchBlockByteRange(DFSInputStream.java:974)
      	at org.apache.hadoop.hdfs.DFSInputStream.read(DFSInputStream.java:1305)
      	at org.apache.hadoop.fs.FSInputStream.readFully(FSInputStream.java:78)
      	at org.apache.hadoop.fs.FSDataInputStream.readFully(FSDataInputStream.java:107)
      ... SNIP...
      

        Attachments

        1. HADOOP-11969.5.patch
          24 kB
          Sean Busbey
        2. HADOOP-11969.4.patch
          25 kB
          Sean Busbey
        3. HADOOP-11969.3.patch
          25 kB
          Sean Busbey
        4. HADOOP-11969.2.patch
          25 kB
          Sean Busbey
        5. HADOOP-11969.1.patch
          19 kB
          Sean Busbey

          Activity

            People

            • Assignee:
              busbey Sean Busbey
              Reporter:
              busbey Sean Busbey
            • Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: