You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2023/01/03 13:48:00 UTC

[jira] [Work logged] (HIVE-26882) Allow transactional check of Table parameter before altering the Table

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

ASF GitHub Bot logged work on HIVE-26882:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 03/Jan/23 13:47
            Start Date: 03/Jan/23 13:47
    Worklog Time Spent: 10m 
      Work Description: pvary commented on code in PR #3888:
URL: https://github.com/apache/hive/pull/3888#discussion_r1060600376


##########
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java:
##########
@@ -187,6 +187,16 @@ public void alterTable(RawStore msdb, Warehouse wh, String catName, String dbnam
             TableName.getQualified(catName, dbname, name) + " doesn't exist");
       }
 
+      String expectedKey = environmentContext != null && environmentContext.getProperties() != null ?
+              environmentContext.getProperties().get(hive_metastoreConstants.EXPECTED_PARAMETER_KEY) : null;
+      String expectedValue = environmentContext != null && environmentContext.getProperties() != null ?
+              environmentContext.getProperties().get(hive_metastoreConstants.EXPECTED_PARAMETER_VALUE) : null;
+      if (expectedKey != null && expectedValue != null
+              && !expectedValue.equals(oldt.getParameters().get(expectedKey))) {
+        throw new MetaException("The table has been modified. The parameter value for key '" + expectedKey + "' is '"

Review Comment:
   It turns out, that you have been right. We use `READ_COMMITTED` isolation level for our commits.
   Because of this, we could commit concurrently, and lose data.
   
   I had to set the isolation level for these transactions to `REPEATABLE_READ` explicitly.
   
   @szehon-ho and @prasanthj could you please check it if you are back from holidays?
   
   Thanks,
   Peter





Issue Time Tracking
-------------------

    Worklog Id:     (was: 836617)
    Time Spent: 1h 20m  (was: 1h 10m)

> 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
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 1h 20m
>  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)