Github user manishgupta88 commented on a diff in the pull request: https://github.com/apache/carbondata/pull/2109#discussion_r178767625 --- Diff: integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/preaaggregate/PreAggregateListeners.scala --- @@ -39,6 +41,212 @@ import org.apache.carbondata.core.util.path.CarbonTablePath import org.apache.carbondata.events._ import org.apache.carbondata.processing.loading.events.LoadEvents.{LoadMetadataEvent, LoadTablePostExecutionEvent, LoadTablePostStatusUpdateEvent, LoadTablePreExecutionEvent, LoadTablePreStatusUpdateEvent} +object AlterTableDropPartitionPreStatusListener extends OperationEventListener { + /** + * Called on a specified event occurrence + * + * @param event + * @param operationContext + */ + override protected def onEvent(event: Event, + operationContext: OperationContext) = { + val preStatusListener = event.asInstanceOf[AlterTableDropPartitionPreStatusEvent] + val carbonTable = preStatusListener.carbonTable + val childDropPartitionCommands = operationContext.getProperty("dropPartitionCommands") + if (childDropPartitionCommands != null && carbonTable.hasAggregationDataMap) { + val childCommands = + childDropPartitionCommands.asInstanceOf[Seq[CarbonAlterTableDropHivePartitionCommand]] + childCommands.foreach(_.processData(SparkSession.getActiveSession.get)) + } + } +} + +trait CommitHelper { + + val LOGGER: LogService = LogServiceFactory.getLogService(this.getClass.getName) + + protected def markInProgressSegmentAsDeleted(tableStatusFile: String, + operationContext: OperationContext, + carbonTable: CarbonTable): Unit = { + val loadMetaDataDetails = SegmentStatusManager.readTableStatusFile(tableStatusFile) + val segmentBeingLoaded = + operationContext.getProperty(carbonTable.getTableUniqueName + "_Segment").toString + val newDetails = loadMetaDataDetails.collect { + case detail if detail.getLoadName.equalsIgnoreCase(segmentBeingLoaded) => + detail.setSegmentStatus(SegmentStatus.MARKED_FOR_DELETE) + detail + case others => others + } + SegmentStatusManager.writeLoadDetailsIntoFile(tableStatusFile, newDetails) + } + + /** + * Used to rename table status files for commit operation. + */ + protected def renameDataMapTableStatusFiles(sourceFileName: String, + destinationFileName: String, uuid: String): Boolean = { + val oldCarbonFile = FileFactory.getCarbonFile(sourceFileName) + val newCarbonFile = FileFactory.getCarbonFile(destinationFileName) + if (oldCarbonFile.exists() && newCarbonFile.exists()) { + val backUpPostFix = if (uuid.nonEmpty) { + "_backup_" + uuid + } else { --- End diff -- Write a comment to explain when uuid will be empty and when it will be non empty
---