[CARBONDATA-3235] Fix Rename-Fail & Datamap-creation-Fail
authornamanrastogi <naman.rastogi.52@gmail.com>
Thu, 13 Dec 2018 10:39:58 +0000 (16:09 +0530)
committerkumarvishal09 <kumarvishal1802@gmail.com>
Wed, 9 Jan 2019 08:46:20 +0000 (14:16 +0530)
1. Alter Table Rename Table Fail

Problem: When tabe rename is success in hive, for failed in carbon data store, it would throw exception, but would not go back and undo rename in hive.

Solution: A flag to keep check if hive rename has already executed, and of the code breaks after hive rename is done, go back and undo the hive rename.

2. Create-Preagregate-Datamap Fail

Problem: When (preaggregate) datamap schema is written, but table updation is failed call CarbonDropDataMapCommand.processMetadata()
call dropDataMapFromSystemFolder() -> this is supposed to delete the folder on disk, but doesnt as the datamap is not yet updated in table,
and throws NoSuchDataMapException

Solution: Call CarbonDropTableCommand.run() instead of CarbonDropTableCommand.processDatamap().
as CarbonDropTableCommand.processData() deletes actual folders from disk.

This closes #2996

integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/datamap/CarbonDropDataMapCommand.scala
integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/schema/CarbonAlterTableRenameCommand.scala

index 54096ca..0bafe04 100644 (file)
@@ -103,7 +103,7 @@ case class CarbonDropDataMapCommand(
             Some(childCarbonTable.get.getDatabaseName),
             childCarbonTable.get.getTableName,
             dropChildTable = true)
-          commandToRun.processMetadata(sparkSession)
+          commandToRun.run(sparkSession)
         }
         dropDataMapFromSystemFolder(sparkSession)
         return Seq.empty
index dbf665a..01698c9 100644 (file)
@@ -87,6 +87,7 @@ private[sql] case class CarbonAlterTableRenameCommand(
 
     var timeStamp = 0L
     var carbonTable: CarbonTable = null
+    var hiveRenameSuccess = false
     // lock file path to release locks after operation
     var carbonTableLockFilePath: String = null
     try {
@@ -139,6 +140,7 @@ private[sql] case class CarbonAlterTableRenameCommand(
           oldIdentifier,
           newIdentifier,
         oldTableIdentifier.getTablePath)
+      hiveRenameSuccess = true
 
       metastore.updateTableSchemaForAlter(
         newTableIdentifier,
@@ -165,6 +167,12 @@ private[sql] case class CarbonAlterTableRenameCommand(
       case e: ConcurrentOperationException =>
         throw e
       case e: Exception =>
+        if (hiveRenameSuccess) {
+          sparkSession.sessionState.catalog.asInstanceOf[CarbonSessionCatalog].alterTableRename(
+            newTableIdentifier,
+            oldTableIdentifier,
+            carbonTable.getAbsoluteTableIdentifier.getTableName)
+        }
         if (carbonTable != null) {
           AlterTableUtil.revertRenameTableChanges(
             newTableName,
@@ -173,7 +181,7 @@ private[sql] case class CarbonAlterTableRenameCommand(
             sparkSession)
         }
         throwMetadataException(oldDatabaseName, oldTableName,
-          s"Alter table rename table operation failed: ${e.getMessage}")
+          opName + " operation failed: " + e.getMessage)
     }
     Seq.empty
   }