ravipesala commented on a change in pull request #3179: [CARBONDATA-3338] 
Support Incremental DataLoad for MV Datamap[with single parent table]
URL: https://github.com/apache/carbondata/pull/3179#discussion_r278130624
 
 

 ##########
 File path: 
core/src/main/java/org/apache/carbondata/core/datamap/status/DataMapStatusManager.java
 ##########
 @@ -127,4 +150,115 @@ private static DataMapSchema getDataMapSchema(String 
dataMapName)
     return DataMapStoreManager.getInstance().getDataMapSchema(dataMapName);
   }
 
+  /**
+   * Returns valid segment list for a given RelationIdentifier
+   *
+   * @param relationIdentifier
+   * @return
+   * @throws IOException
+   */
+  public static List<String> getSegmentList(RelationIdentifier 
relationIdentifier)
+      throws IOException {
+    List<String> segmentList = new ArrayList<>();
+    AbsoluteTableIdentifier absoluteTableIdentifier =
+        AbsoluteTableIdentifier.from(relationIdentifier.getTablePath());
+    List<Segment> validSegments =
+        new 
SegmentStatusManager(absoluteTableIdentifier).getValidAndInvalidSegments()
+            .getValidSegments();
+    for (Segment segment : validSegments) {
+      segmentList.add(segment.getSegmentNo());
+    }
+    return segmentList;
+  }
+
+  /**
+   * This method will delete segment folders of the mv datamap table and 
update the
+   * datamapSegmentStatus map in case of Insert-Overwrite/Update operation on 
main table
+   */
+  public static void cleanMVdatamap(CarbonTable carbonTable) throws 
IOException {
+    List<DataMapSchema> allDataMapSchemas =
+        
DataMapStoreManager.getInstance().getDataMapSchemasOfTable(carbonTable);
+    for (DataMapSchema datamapschema : allDataMapSchemas) {
+      if (datamapschema.getProviderName()
+          .equalsIgnoreCase(DataMapClassProvider.MV.getShortName())) {
+        CarbonTable datamapTable = CarbonTable
+            
.buildFromTablePath(datamapschema.getRelationIdentifier().getTableName(),
+                datamapschema.getRelationIdentifier().getDatabaseName(),
+                datamapschema.getRelationIdentifier().getTablePath(),
+                datamapschema.getRelationIdentifier().getTableId());
+        SegmentStatusManager segmentStatusManager =
+            new 
SegmentStatusManager(datamapTable.getAbsoluteTableIdentifier());
+        ICarbonLock carbonLock = segmentStatusManager.getTableStatusLock();
+        try {
+          if (carbonLock.lockWithRetries()) {
+            LOGGER.info(
+                "Acquired lock for table" + datamapTable.getDatabaseName() + 
"." + datamapTable
+                    .getTableName() + " for table status updation");
+            LoadMetadataDetails[] loadMetadataDetails =
+                
SegmentStatusManager.readLoadMetadata(datamapTable.getMetadataPath());
+            List<CarbonFile> staleFolders = new ArrayList<>();
+            for (LoadMetadataDetails entry : loadMetadataDetails) {
+              entry.setSegmentStatus(SegmentStatus.MARKED_FOR_DELETE);
+              // For insert overwrite, we will delete the old segment folder 
immediately
+              // So collect the old segments here
+              String segmentPath = CarbonTablePath
+                  
.getSegmentPath(datamapschema.getRelationIdentifier().getTablePath(),
+                      entry.getLoadName());
+              if (FileFactory.isFileExist(segmentPath, 
FileFactory.getFileType(segmentPath))) {
+                staleFolders.add(FileFactory.getCarbonFile(segmentPath));
+              }
+            }
+            SegmentStatusManager.writeLoadDetailsIntoFile(CarbonTablePath
+                    
.getTableStatusFilePath(datamapschema.getRelationIdentifier().getTablePath()),
+                loadMetadataDetails);
+            // Update datamapSegmentStatus map for mv
+            storageProvider.clearSegmentMapping(datamapschema);
+            // Delete all old stale segment folders
+            for (CarbonFile staleFolder : staleFolders) {
+              try {
+                CarbonUtil.deleteFoldersAndFiles(staleFolder);
+              } catch (IOException | InterruptedException e) {
+                LOGGER.error("Failed to delete stale folder: " + 
e.getMessage(), e);
+              }
+            }
+          }
+        } finally {
+          if (carbonLock.unlock()) {
+            LOGGER.info("Table unlocked successfully after table status 
updation" + datamapTable
+                .getDatabaseName() + "." + datamapTable.getTableName());
+          } else {
+            LOGGER.error(
+                "Unable to unlock Table lock for table" + 
datamapTable.getDatabaseName() + "."
+                    + datamapTable.getTableName() + " during table status 
updation");
+          }
+        }
+      }
+    }
+  }
+
+  public static void updateDataMapSegmentStatusAfterCompaction(CarbonTable 
carbonTable)
+      throws IOException, NoSuchDataMapException {
+    DataMapSchema dataMapSchema = getDataMapSchema(carbonTable.getTableName()
+        .substring(0, 
carbonTable.getTableName().lastIndexOf(CarbonCommonConstants.UNDERSCORE)));
+    LoadMetadataDetails[] loadMetadataDetails =
+        SegmentStatusManager.readLoadMetadata(carbonTable.getMetadataPath());
+    storageProvider.updateMappingAfterCompaction(dataMapSchema, 
loadMetadataDetails);
 
 Review comment:
   Please move the logic to here

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to