[
https://issues.apache.org/jira/browse/HIVE-28578?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17901761#comment-17901761
]
Zsolt Miskolczi commented on HIVE-28578:
----------------------------------------
Steps to reproduce and test:
* create a cluster with multiple HMS instances.
* bombard the HMS instances with concurrent calls when the tables have
statistics both for Hive and Impala
Script to do the testing (Repro.java is attached):
{code:java}
export JAVA_HOME=/usr/java/jdk1.8.0_232-cloudera
export JAVA_OPTS="-Xmx1g"
export PATH="$JAVA_HOME/bin:$PATH"
export CONF_DIR=/var/run/cloudera-scm-agent/process/104-hive_on_tez-HIVESERVER2/
export CDH_HCAT_HOME=/opt/cloudera/parcels/CDH/lib/hive-hcatalog/
export CDH_HIVE_HOME=/opt/cloudera/parcels/CDH/lib/hive
CLASSPATH=":$CONF_DIR"
CLASSPATH="$CLASSPATH:$CONF_DIR/hadoop-conf"
CLASSPATH="$CLASSPATH:$CONF_DIR/hive-conf"
CLASSPATH="$CLASSPATH:$(hadoop classpath)"
CLASSPATH="$CLASSPATH:$CDH_HIVE_HOME/*"
CLASSPATH="$CLASSPATH:$CDH_HIVE_HOME/lib/*"
CLASSPATH="$CLASSPATH:${CDH_HCAT_HOME}/share/webhcat/java-client/hive-webhcat-java-client.jar"
CLASSPATH="$CLASSPATH:${CDH_HCAT_HOME}/share/hcatalog/hive-hcatalog-core.jar"
kinit -kt /cdep/keytabs/hive.keytab hive
hive -e 'create database test;'
javac -cp $CLASSPATH Repro.java
java -cp $CLASSPATH Repro 100 {code}
> Concurrency issue in updateTableColumnStatistics
> ------------------------------------------------
>
> Key: HIVE-28578
> URL: https://issues.apache.org/jira/browse/HIVE-28578
> Project: Hive
> Issue Type: Bug
> Security Level: Public(Viewable by anyone)
> Components: Standalone Metastore
> Reporter: Zsolt Miskolczi
> Assignee: Zsolt Miskolczi
> Priority: Major
> Attachments: Repro.java
>
>
> Summary:
> updateTableColumnStatistics can throw
> SQLIntegrityConstraintViolationException during replication if HA is on and
> two different HMS instance gets the same call but with different engine.
>
> Workaround:
> Update table column statistics in single threaded.
>
> Details:
> updateTableColumnStatistics has a relative long running transaction. In that
> transaction, it validates the actual parameters, queries the metastore db
> against the TABLE_PARAMS that are already stored and makes a decision based
> on that. After this, it uses data nucleus to persist the new statistics.
> From the two HMS instances, one can save the column statistics. And the other
> cannot as the first instance already saved them.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)