[
https://issues.apache.org/jira/browse/HIVE-26149?focusedWorklogId=761654&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-761654
]
ASF GitHub Bot logged work on HIVE-26149:
-----------------------------------------
Author: ASF GitHub Bot
Created on: 25/Apr/22 08:42
Start Date: 25/Apr/22 08:42
Worklog Time Spent: 10m
Work Description: pvary commented on code in PR #3220:
URL: https://github.com/apache/hive/pull/3220#discussion_r857390546
##########
standalone-metastore/metastore-common/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java:
##########
@@ -1534,43 +1538,50 @@ public void dropDatabase(String catalogName, String
dbName, boolean deleteData,
* @param maxBatchSize
* @throws TException
*/
- private void dropDatabaseCascadePerTable(String catName, String dbName,
List<String> tableList,
- boolean deleteData, int
maxBatchSize) throws TException {
- String dbNameWithCatalog = prependCatalogToDbName(catName, dbName, conf);
- for (Table table : new TableIterable(this, catName, dbName, tableList,
maxBatchSize)) {
+ private void dropDatabaseCascadePerTable(DropDatabaseRequest req,
List<String> tableList, int maxBatchSize)
+ throws TException {
+ String dbNameWithCatalog = prependCatalogToDbName(req.getCatalogName(),
req.getName(), conf);
+ for (Table table : new TableIterable(
+ this, req.getCatalogName(), req.getName(), tableList, maxBatchSize)) {
boolean success = false;
HiveMetaHook hook = getHook(table);
- if (hook == null) {
- continue;
- }
try {
- hook.preDropTable(table);
- client.drop_table_with_environment_context(dbNameWithCatalog,
table.getTableName(), deleteData, null);
- hook.commitDropTable(table, deleteData);
+ if (hook != null) {
+ hook.preDropTable(table);
+ }
+ boolean isSoftDelete = req.isSoftDelete() && Boolean.parseBoolean(
+ table.getParameters().getOrDefault(SOFT_DELETE_TABLE, "false"));
+ EnvironmentContext context = null;
+ if (req.isSetTxnId()) {
+ context = new EnvironmentContext();
+ context.putToProperties("txnId", String.valueOf(req.getTxnId()));
+ req.setDeleteManagedDir(false);
+ }
+ client.drop_table_with_environment_context(dbNameWithCatalog,
table.getTableName(),
+ req.isDeleteData() && !isSoftDelete, context);
+ if (hook != null) {
+ hook.commitDropTable(table, req.isDeleteData());
+ }
success = true;
} finally {
- if (!success) {
+ if (!success && hook != null) {
hook.rollbackDropTable(table);
}
}
}
- client.drop_database(dbNameWithCatalog, deleteData, true);
+ client.drop_database_req(req);
}
/**
* Handles dropDatabase by invoking drop_database in HMS.
* Useful when table list in DB can fit in memory, it will retrieve all
tables at once and
* call drop_database once. Also handles drop_table hooks.
- * @param catName
- * @param dbName
+ * @param req
* @param tableList
- * @param deleteData
* @throws TException
*/
- private void dropDatabaseCascadePerDb(String catName, String dbName,
List<String> tableList,
- boolean deleteData) throws TException {
- String dbNameWithCatalog = prependCatalogToDbName(catName, dbName, conf);
- List<Table> tables = getTableObjectsByName(catName, dbName, tableList);
+ private void dropDatabaseCascadePerDb(DropDatabaseRequest req, List<String>
tableList) throws TException {
Review Comment:
How does this work together with:
```
// We want no lock here, as the database lock will cover the
tables,
// and putting a lock will actually cause us to deadlock on
ourselves.
```
Wouldn't it cause issues with the locks?
Issue Time Tracking
-------------------
Worklog Id: (was: 761654)
Time Spent: 1.5h (was: 1h 20m)
> Non blocking DROP DATABASE implementation
> -----------------------------------------
>
> Key: HIVE-26149
> URL: https://issues.apache.org/jira/browse/HIVE-26149
> Project: Hive
> Issue Type: Task
> Reporter: Denys Kuzmenko
> Priority: Major
> Labels: pull-request-available
> Time Spent: 1.5h
> Remaining Estimate: 0h
>
--
This message was sent by Atlassian Jira
(v8.20.7#820007)