[
https://issues.apache.org/jira/browse/HIVE-26882?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17824979#comment-17824979
]
Peter Vary edited comment on HIVE-26882 at 3/10/24 6:47 AM:
------------------------------------------------------------
[~lirui]: Thanks for collecting the possibilities.
Also, I would like to highlight [~maswin]'s comment, that this is not working
for Oracle either. So it was clearly an oversight from my side :(
First, I would like to revisit the direct SQL solution:
- What do you see as an issue with that?
- The API only allows a single checked property, would it be enough to check
the change of that?
- Would READ COMMITTED serialization level enough for this solution? We check
and lock the field anyway, so at first glance, it should be enough.
- Is this a general solution which would work on all of the supported
databases?
If the solution above is not working, we might move forward with something like
this:
{code:java}
DatabaseProduct dbProduct = jdbcResource.getDatabaseProduct();
if (dbProduct.dbType.MYSQL|| ORACLE) {
connection = getConnection(Connection.TRANSACTION_SERIALIZABLE);
} else {
connection = getConnection(Connection.TRANSACTION_REPEATABLE_READ);
}
{code}
My mistake highlights the need to test this out on all of the supported
databases.
Thanks for all the work you put into this [~lirui]!
was (Author: pvary):
[~lirui]: Thanks for collecting the possibilities.
I am not comfortable with the 2nd solution. Could we move forward with
something like this:
{code}
DatabaseProduct dbProduct = jdbcResource.getDatabaseProduct();
if (dbProduct.dbType.MYSQL) {
connection = getConnection(Connection.TRANSACTION_SERIALIZABLE);
} else {
connection = getConnection(Connection.TRANSACTION_REPEATABLE_READ);
}
{code}
Even better, if we could test it out for the different supported databases, and
set the transaction insolation level correctly for all (I still kind of
remember trying to find an Oracle 11 installation, but....)
> 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)