linliu-code commented on code in PR #13588:
URL: https://github.com/apache/hudi/pull/13588#discussion_r2223706167


##########
hudi-client/hudi-client-common/src/main/java/org/apache/hudi/table/action/commit/BaseWriteHelper.java:
##########
@@ -85,9 +103,118 @@ public I combineOnCondition(
    * @return Collection of HoodieRecord already be deduplicated
    */
   public I deduplicateRecords(I records, HoodieTable<T, I, K, O> table, int 
parallelism) {
-    HoodieRecordMerger recordMerger = 
HoodieRecordUtils.mergerToPreCombineMode(table.getConfig().getRecordMerger());
-    return deduplicateRecords(records, table.getIndex(), parallelism, 
table.getConfig().getSchema(), table.getConfig().getProps(), recordMerger);
+    HoodieReaderContext<T> readerContext = 
table.getContext().<T>getReaderContextFactory(table.getMetaClient()).getContext();
+    Option<String> orderingFieldNameOpt = getOrderingFieldName(readerContext, 
table.getConfig().getProps(), table.getMetaClient());
+    BufferedRecordMerger<T> recordMerger = BufferedRecordMergerFactory.create(
+        readerContext,
+        table.getConfig().getRecordMergeMode(),
+        false,
+        Option.ofNullable(table.getConfig().getRecordMerger()),
+        orderingFieldNameOpt,
+        Option.ofNullable(table.getConfig().getPayloadClass()),
+        new SerializableSchema(table.getConfig().getSchema()).get(),
+        table.getConfig().getProps(),
+        table.getMetaClient().getTableConfig().getPartialUpdateMode());
+    this.shouldCheckCustomDeleteMarker = 
readerContext.getSchemaHandler().getCustomDeleteMarkerKeyValue().isPresent();
+    this.shouldCheckBuiltInDeleteMarker = 
readerContext.getSchemaHandler().hasBuiltInDelete();
+    return deduplicateRecords(
+        records,
+        table.getIndex(),
+        parallelism,
+        table.getConfig().getSchema(),
+        table.getConfig().getProps(),
+        recordMerger,
+        readerContext,
+        orderingFieldNameOpt);
+  }
+
+  public abstract I deduplicateRecords(I records,
+                                       HoodieIndex<?, ?> index,
+                                       int parallelism,
+                                       String schema,
+                                       TypedProperties props,
+                                       BufferedRecordMerger<T> merger,
+                                       HoodieReaderContext<T> readerContext,
+                                       Option<String> orderingFieldNameOpt);
+
+  public static Option<String> getOrderingFieldName(HoodieReaderContext 
readerContext,
+                                                    TypedProperties props,
+                                                    HoodieTableMetaClient 
metaClient) {
+    return readerContext.getMergeMode() == RecordMergeMode.COMMIT_TIME_ORDERING
+        ? Option.empty()
+        : Option.ofNullable(ConfigUtils.getOrderingField(props))
+        .or(() -> {
+          String preCombineField = 
metaClient.getTableConfig().getPreCombineField();
+          if (StringUtils.isNullOrEmpty(preCombineField)) {
+            return Option.empty();
+          }
+          return Option.of(preCombineField);
+        });
+  }
+
+  /**
+   * Check if the value of column "_hoodie_is_deleted" is true.
+   */
+  public static <T> boolean isBuiltInDeleteRecord(T record,

Review Comment:
   yeah, we could unify them.



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