hive-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hive QA (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HIVE-21469) Review of ZooKeeperHiveLockManager
Date Thu, 21 Mar 2019 23:54:00 GMT

    [ https://issues.apache.org/jira/browse/HIVE-21469?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16798559#comment-16798559
] 

Hive QA commented on HIVE-21469:
--------------------------------



Here are the results of testing the latest attachment:
https://issues.apache.org/jira/secure/attachment/12963319/HIVE-21469.3.patch

{color:red}ERROR:{color} -1 due to build exiting with an error

Test results: https://builds.apache.org/job/PreCommit-HIVE-Build/16622/testReport
Console output: https://builds.apache.org/job/PreCommit-HIVE-Build/16622/console
Test logs: http://104.198.109.242/logs/PreCommit-HIVE-Build-16622/

Messages:
{noformat}
Executing org.apache.hive.ptest.execution.TestCheckPhase
Executing org.apache.hive.ptest.execution.PrepPhase
Tests exited with: NonZeroExitCodeException
Command 'bash /data/hiveptest/working/scratch/source-prep.sh' failed with exit status 1 and
output '+ date '+%Y-%m-%d %T.%3N'
2019-03-21 23:49:30.153
+ [[ -n /usr/lib/jvm/java-8-openjdk-amd64 ]]
+ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
+ JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
+ export PATH=/usr/lib/jvm/java-8-openjdk-amd64/bin/:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
+ PATH=/usr/lib/jvm/java-8-openjdk-amd64/bin/:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
+ export 'ANT_OPTS=-Xmx1g -XX:MaxPermSize=256m '
+ ANT_OPTS='-Xmx1g -XX:MaxPermSize=256m '
+ export 'MAVEN_OPTS=-Xmx1g '
+ MAVEN_OPTS='-Xmx1g '
+ cd /data/hiveptest/working/
+ tee /data/hiveptest/logs/PreCommit-HIVE-Build-16622/source-prep.txt
+ [[ false == \t\r\u\e ]]
+ mkdir -p maven ivy
+ [[ git = \s\v\n ]]
+ [[ git = \g\i\t ]]
+ [[ -z master ]]
+ [[ -d apache-github-source-source ]]
+ [[ ! -d apache-github-source-source/.git ]]
+ [[ ! -d apache-github-source-source ]]
+ date '+%Y-%m-%d %T.%3N'
2019-03-21 23:49:30.155
+ cd apache-github-source-source
+ git fetch origin
+ git reset --hard HEAD
HEAD is now at 38682a4 HIVE-21446 : Hive Server going OOM during hive external table replications.
(Mahesh Kumar Behera, reviewed by Sankar Hariappan)
+ git clean -f -d
+ git checkout master
Already on 'master'
Your branch is up-to-date with 'origin/master'.
+ git reset --hard origin/master
HEAD is now at 38682a4 HIVE-21446 : Hive Server going OOM during hive external table replications.
(Mahesh Kumar Behera, reviewed by Sankar Hariappan)
+ git merge --ff-only origin/master
Already up-to-date.
+ date '+%Y-%m-%d %T.%3N'
2019-03-21 23:49:31.217
+ rm -rf ../yetus_PreCommit-HIVE-Build-16622
+ mkdir ../yetus_PreCommit-HIVE-Build-16622
+ git gc
+ cp -R . ../yetus_PreCommit-HIVE-Build-16622
+ mkdir /data/hiveptest/logs/PreCommit-HIVE-Build-16622/yetus
+ patchCommandPath=/data/hiveptest/working/scratch/smart-apply-patch.sh
+ patchFilePath=/data/hiveptest/working/scratch/build.patch
+ [[ -f /data/hiveptest/working/scratch/build.patch ]]
+ chmod +x /data/hiveptest/working/scratch/smart-apply-patch.sh
+ /data/hiveptest/working/scratch/smart-apply-patch.sh /data/hiveptest/working/scratch/build.patch
error: a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java: does not exist in index
error: a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/DummyTxnManager.java: does not exist
in index
error: a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockMode.java: does not exist in
index
error: a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockObj.java: does not exist in
index
error: a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/HiveLockObject.java: does not exist
in index
error: a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/zookeeper/ZooKeeperHiveLock.java: does
not exist in index
error: a/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/zookeeper/ZooKeeperHiveLockManager.java:
does not exist in index
Going to apply patch with: git apply -p1
+ [[ maven == \m\a\v\e\n ]]
+ rm -rf /data/hiveptest/working/maven/org/apache/hive
+ mvn -B clean install -DskipTests -T 4 -q -Dmaven.repo.local=/data/hiveptest/working/maven
protoc-jar: executing: [/tmp/protoc2085600430980394434.exe, --version]
libprotoc 2.5.0
protoc-jar: executing: [/tmp/protoc2085600430980394434.exe, -I/data/hiveptest/working/apache-github-source-source/standalone-metastore/metastore-common/src/main/protobuf/org/apache/hadoop/hive/metastore,
--java_out=/data/hiveptest/working/apache-github-source-source/standalone-metastore/metastore-common/target/generated-sources,
/data/hiveptest/working/apache-github-source-source/standalone-metastore/metastore-common/src/main/protobuf/org/apache/hadoop/hive/metastore/metastore.proto]
ANTLR Parser Generator  Version 3.5.2
protoc-jar: executing: [/tmp/protoc5705060335407942899.exe, --version]
libprotoc 2.5.0
ANTLR Parser Generator  Version 3.5.2
Output file /data/hiveptest/working/apache-github-source-source/standalone-metastore/metastore-server/target/generated-sources/org/apache/hadoop/hive/metastore/parser/FilterParser.java
does not exist: must build /data/hiveptest/working/apache-github-source-source/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/parser/Filter.g
org/apache/hadoop/hive/metastore/parser/Filter.g
log4j:WARN No appenders could be found for logger (DataNucleus.Persistence).
log4j:WARN Please initialize the log4j system properly.
DataNucleus Enhancer (version 4.1.17) for API "JDO"
DataNucleus Enhancer completed with success for 41 classes.
ANTLR Parser Generator  Version 3.5.2
Output file /data/hiveptest/working/apache-github-source-source/ql/target/generated-sources/antlr3/org/apache/hadoop/hive/ql/parse/HiveLexer.java
does not exist: must build /data/hiveptest/working/apache-github-source-source/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveLexer.g
org/apache/hadoop/hive/ql/parse/HiveLexer.g
Output file /data/hiveptest/working/apache-github-source-source/ql/target/generated-sources/antlr3/org/apache/hadoop/hive/ql/parse/HiveParser.java
does not exist: must build /data/hiveptest/working/apache-github-source-source/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
org/apache/hadoop/hive/ql/parse/HiveParser.g
Output file /data/hiveptest/working/apache-github-source-source/ql/target/generated-sources/antlr3/org/apache/hadoop/hive/ql/parse/HintParser.java
does not exist: must build /data/hiveptest/working/apache-github-source-source/ql/src/java/org/apache/hadoop/hive/ql/parse/HintParser.g
org/apache/hadoop/hive/ql/parse/HintParser.g
Generating vector expression code
Generating vector expression test code
Processing annotations
Annotations processed
Processing annotations
No elements to process
[ERROR] COMPILATION ERROR : 
[ERROR] /data/hiveptest/working/apache-github-source-source/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/EmbeddedLockManager.java:[108,59]
cannot find symbol
  symbol:   variable HIVE_UNLOCK_NUMRETRIES
  location: class org.apache.hadoop.hive.conf.HiveConf.ConfVars
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile
(default-compile) on project hive-exec: Compilation failure
[ERROR] /data/hiveptest/working/apache-github-source-source/ql/src/java/org/apache/hadoop/hive/ql/lockmgr/EmbeddedLockManager.java:[108,59]
cannot find symbol
[ERROR] symbol:   variable HIVE_UNLOCK_NUMRETRIES
[ERROR] location: class org.apache.hadoop.hive.conf.HiveConf.ConfVars
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following
articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :hive-exec
+ result=1
+ '[' 1 -ne 0 ']'
+ rm -rf yetus_PreCommit-HIVE-Build-16622
+ exit 1
'
{noformat}

This message is automatically generated.

ATTACHMENT ID: 12963319 - PreCommit-HIVE-Build

> Review of ZooKeeperHiveLockManager
> ----------------------------------
>
>                 Key: HIVE-21469
>                 URL: https://issues.apache.org/jira/browse/HIVE-21469
>             Project: Hive
>          Issue Type: Improvement
>          Components: Locking
>    Affects Versions: 4.0.0, 3.2.0
>            Reporter: David Mollitor
>            Assignee: David Mollitor
>            Priority: Major
>         Attachments: HIVE-21469.1.patch, HIVE-21469.2.patch, HIVE-21469.3.patch
>
>
> A lot of sins in this class to resolve:
> {code:java}
>   @Override
>   public void setContext(HiveLockManagerCtx ctx) throws LockException {
>  try {
>       curatorFramework = CuratorFrameworkSingleton.getInstance(conf);
>       parent = conf.getVar(HiveConf.ConfVars.HIVE_ZOOKEEPER_NAMESPACE);
>       try{
>         curatorFramework.create().withMode(CreateMode.PERSISTENT).forPath("/" +  parent,
new byte[0]);
>       } catch (Exception e) {
>         // ignore if the parent already exists
>         if (!(e instanceof KeeperException) || ((KeeperException)e).code() != KeeperException.Code.NODEEXISTS)
{
>           LOG.warn("Unexpected ZK exception when creating parent node /" + parent, e);
>         }
>       }
> {code}
> Every time a new session is created and this {{setContext}} method is called, it attempts
to create the root node.  I have seen that, even though the root node exists, an create node
action is written to the ZK logs.  Check first if the node exists before trying to create
it.
> {code:java}
>       try {
>         curatorFramework.delete().forPath(zLock.getPath());
>       } catch (InterruptedException ie) {
>         curatorFramework.delete().forPath(zLock.getPath());
>       }
> {code}
> There has historically been a quite a few bugs regarding leaked locks.  The Driver will
signal the session {{Thread}} by performing an interrupt.  That interrupt can happen any time
and it can kill a create/delete action within the ZK framework.  We can see one example of
workaround for this.  If the ZK action is interrupted, simply do it again.  Well, what if
it's interrupted yet again?  The lock will be leaked.  Also, when the {{InterruptedException}}
is caught in the try block, the thread's interrupted flag is cleared.  The flag is not reset
in this code and therefore we lose the fact that this thread has been interrupted.  This flag
should be preserved so that other code paths will know that it's time to exit.
> {code:java}
>         if (tryNum > 1) {
>           Thread.sleep(sleepTime);
>         }
>         unlockPrimitive(hiveLock, parent, curatorFramework);
>         break;
>       } catch (Exception e) {
>         if (tryNum >= numRetriesForUnLock) {
>           String name = ((ZooKeeperHiveLock)hiveLock).getPath();
>           throw new LockException("Node " + name + " can not be deleted after " + numRetriesForUnLock
+ " attempts.",
>               e);
>         }
>       }
> {code}
> ... related... the sleep here may be interrupted, but we still need to delete the lock
(again, for fear of leaking it).  This sleep should be uninterruptible.  If we need to get
the lock deleted, and there's a problem, interrupting the sleep will cause the code to eventually
exit and locks will be leaked.
> It also requires a bunch more TLC.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Mime
View raw message