This is an automated email from the ASF dual-hosted git repository.

sivabalan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/master by this push:
     new 21eb05e75dd1 fix: Use TableSchemaResolver in setWriteSchemaForDeletes 
for better schema resolution (#18030)
21eb05e75dd1 is described below

commit 21eb05e75dd140f44075f388722957bff1852c6b
Author: Prashant Wason <[email protected]>
AuthorDate: Fri Jan 30 14:03:09 2026 -0800

    fix: Use TableSchemaResolver in setWriteSchemaForDeletes for better schema 
resolution (#18030)
    
    
    Co-authored-by: Balajee Nagasubramaniam <[email protected]>
---
 .../apache/hudi/client/BaseHoodieWriteClient.java  | 29 ++++++++--------------
 1 file changed, 11 insertions(+), 18 deletions(-)

diff --git 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java
 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java
index 6b355703e244..0af926ee886c 100644
--- 
a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java
+++ 
b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java
@@ -1443,25 +1443,18 @@ public abstract class BaseHoodieWriteClient<T, I, K, O> 
extends BaseHoodieClient
    * Sets write schema from last instant since deletes may not have schema set 
in the config.
    */
   protected void setWriteSchemaForDeletes(HoodieTableMetaClient metaClient) {
-    try {
-      HoodieActiveTimeline activeTimeline = metaClient.getActiveTimeline();
-      Option<HoodieInstant> lastInstant =
-          activeTimeline.filterCompletedInstants().filter(s -> 
s.getAction().equals(metaClient.getCommitActionType())
-                  || 
s.getAction().equals(HoodieActiveTimeline.REPLACE_COMMIT_ACTION))
-              .lastInstant();
-      if (lastInstant.isPresent()) {
-        HoodieCommitMetadata commitMetadata = 
activeTimeline.readCommitMetadata(lastInstant.get());
-        String extraSchema = commitMetadata.getExtraMetadata().get(SCHEMA_KEY);
-        if (!StringUtils.isNullOrEmpty(extraSchema)) {
-          config.setSchema(commitMetadata.getExtraMetadata().get(SCHEMA_KEY));
-        } else {
-          throw new HoodieIOException("Latest commit does not have any schema 
in commit metadata");
-        }
-      } else {
-        log.debug("No rows are deleted because the table is empty");
+    HoodieTimeline timeline = 
metaClient.getActiveTimeline().getCommitsTimeline();
+    if (timeline.empty()) {
+      throw new HoodieIOException("Deletes issued without any prior commits");
+    }
+    if (StringUtils.isNullOrEmpty(config.getSchema())) {
+      // get schema from lastInstant (replacecommit or commit).
+      TableSchemaResolver tableSchemaResolver = new 
TableSchemaResolver(metaClient);
+      Option<HoodieSchema> schema = 
tableSchemaResolver.getTableSchemaIfPresent(false);
+      if (!schema.isPresent() || 
StringUtils.isNullOrEmpty(schema.get().toString())) {
+        throw new HoodieIOException("Latest commit/replacecommit does not have 
any schema in commit metadata");
       }
-    } catch (IOException e) {
-      throw new HoodieIOException("IOException thrown while reading last 
commit metadata", e);
+      config.setSchema(schema.get().toString());
     }
   }
 

Reply via email to