You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Michal Klempa (JIRA)" <ji...@apache.org> on 2017/01/18 17:01:26 UTC

[jira] [Created] (HIVE-15658) hive.ql.session.SessionState start() is not atomic, SessionState thread local variable can get into inconsistent state

Michal Klempa created HIVE-15658:
------------------------------------

             Summary: hive.ql.session.SessionState start() is not atomic, SessionState thread local variable can get into inconsistent state
                 Key: HIVE-15658
                 URL: https://issues.apache.org/jira/browse/HIVE-15658
             Project: Hive
          Issue Type: Bug
          Components: API, HCatalog
    Affects Versions: 2.0.1, 2.0.0, 1.2.1, 1.1.0
         Environment: CDH5.8.0, Flume 1.6.0, Hive 1.1.0
            Reporter: Michal Klempa


Method start() in hive.ql.session.SessionState is supposed to setup needed preconditions, like HDFS scratch directories for session.
This happens to be not an atomic operation with setting thread local variable, which can later be obtained by calling SessionState.get().
Therefore, even is the start() method itself fails, the SessionState.get() does not return null and further re-use of the thread which previously invoked start() may lead to obtaining SessionState object in inconsistent state.

I have observed this using Flume Hive Sink, which uses Hive Streaming interface. When the directory /tmp/hive is not writable by session user, the start() method fails (throwing RuntimeException). If the thread is re-used (like it is in Flume), further executions work with wrongly initialized SessionState object (HDFS dirs are non-existent).

Steps to reproduce:
1. hdfs dfs -chmod 600 /tmp/hive
2. create Flume
First 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)