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

Rui Li commented on HIVE-26882:
-------------------------------

I run our test again, with MariaDB at SERIALIZABLE level and the results are 
correct this time. So there must be something wrong with our previous test, 
sorry about that :(

Also enabled audit log in MariaDB and verified the alter table process is 
similar to the test in my last comment, and the underlying error for commit 
conflict is:
{noformat}
Caused by: org.datanucleus.store.rdbms.exceptions.MappedDatastoreException: 
UPDATE `TABLE_PARAMS` SET `PARAM_VALUE` = ? WHERE `TBL_ID`=? AND `PARAM_KEY`=?
    at 
org.datanucleus.store.rdbms.scostore.JoinMapStore.internalUpdate(JoinMapStore.java:1020)
    at 
org.datanucleus.store.rdbms.scostore.JoinMapStore.put(JoinMapStore.java:304)
    ... 39 more
Caused by: com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: 
Deadlock found when trying to get lock; try restarting transaction
    at 
com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:123)
{noformat}

IMO {{REPEATABLE_READ}} cannot guarantee the semantics we need here. [~pvary] 
do you think we can change the level to SERIALIZABLE? Or do you think MariaDB 
doesn't implement {{REPEATABLE_READ}} correctly, in which case we might want to 
use different levels for different DBMS vendor?

> Allow transactional check of Table parameter before altering the Table
> ----------------------------------------------------------------------
>
>                 Key: HIVE-26882
>                 URL: https://issues.apache.org/jira/browse/HIVE-26882
>             Project: Hive
>          Issue Type: Improvement
>          Components: Standalone Metastore
>            Reporter: Peter Vary
>            Assignee: Peter Vary
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 2.3.10, 4.0.0-beta-1
>
>          Time Spent: 4h 40m
>  Remaining Estimate: 0h
>
> We should add the possibility to transactionally check if a Table parameter 
> is changed before altering the table in the HMS.
> This would provide an alternative, less error-prone and faster way to commit 
> an Iceberg table, as the Iceberg table currently needs to:
> - Create an exclusive lock
> - Get the table metadata to check if the current snapshot is not changed
> - Update the table metadata
> - Release the lock
> After the change these 4 HMS calls could be substituted with a single alter 
> table call.
> Also we could avoid cases where the locks are left hanging by failed processes



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to