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());
}
}