danny0405 commented on code in PR #3774:
URL: https://github.com/apache/hudi/pull/3774#discussion_r950993078


##########
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/metadata/HoodieBackedTableMetadataWriter.java:
##########
@@ -533,4 +534,42 @@ public void close() throws Exception {
    * @param instantTime The timestamp to use for the deltacommit.
    */
   protected abstract void commit(List<HoodieRecord> records, String 
partitionName, String instantTime);
+
+  /**
+   *  Perform a compaction on the Metadata Table.
+   *
+   * Cases to be handled:
+   *   1. We cannot perform compaction if there are previous inflight 
operations on the dataset. This is because
+   *      a compacted metadata base file at time Tx should represent all the 
actions on the dataset till time Tx.
+   *
+   *   2. In multi-writer scenario, a parallel operation with a greater 
instantTime may have completed creating a
+   *      deltacommit.
+   */
+  protected void compactIfNecessary(AbstractHoodieWriteClient writeClient, 
String instantTime) {
+    String latestDeltacommitTime = 
metadataMetaClient.getActiveTimeline().getDeltaCommitTimeline().filterCompletedInstants().lastInstant()
+        .get().getTimestamp();
+    List<HoodieInstant> pendingInstants = 
dataMetaClient.reloadActiveTimeline().filterInflightsAndRequested()
+        
.findInstantsBefore(latestDeltacommitTime).getInstants().collect(Collectors.toList());
+
+    if (!pendingInstants.isEmpty()) {
+      LOG.info(String.format("Cannot compact metadata table as there are %d 
inflight instants before latest deltacommit %s: %s",
+          pendingInstants.size(), latestDeltacommitTime, 
Arrays.toString(pendingInstants.toArray())));
+      return;
+    }
+
+    // Trigger compaction with suffixes based on the same instant time. This 
ensures that any future
+    // delta commits synced over will not have an instant time lesser than the 
last completed instant on the
+    // metadata table.
+    final String compactionInstantTime = latestDeltacommitTime + "001";

Review Comment:
   I'm afraid this is a bug, can you fire a fix here ? Say, disable/skip the 
metrics sending when we the instant time stats with `00000000000000`.



-- 
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.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to