hudi-agent commented on code in PR #20341:
URL: https://github.com/apache/hudi/pull/20341#discussion_r4280730722


##########
hudi-client/hudi-spark-client/src/main/scala/org/apache/hudi/BaseSparkInternalRecordContext.java:
##########
@@ -124,7 +124,7 @@ public String getMetaFieldValue(InternalRow record, int 
pos) {
   @Override
   public HoodieRecord<InternalRow> 
constructHoodieRecord(BufferedRecord<InternalRow> bufferedRecord, String 
partitionPath) {
     HoodieKey hoodieKey = new HoodieKey(bufferedRecord.getRecordKey(), 
partitionPath);
-    if (bufferedRecord.isDelete()) {
+    if (bufferedRecord.isDelete() && bufferedRecord.isEmpty()) {

Review Comment:
   🤖 Payload-bearing deletes now reach 
`HoodieInlineLogAppendHandle.writeDelete()` during log compaction as a 
`HoodieSparkRecord` whose row includes meta fields. That method calls 
`getOrderingValueAsJava(writeSchema, ...)` without meta fields, and the lookup 
is positional, so `ts` would be read from a meta column such as 
`_hoodie_commit_seqno`. This also affects int/long ordering, which worked 
before through `HoodieEmptyRecord`, and the result is a wrong ordering value 
written into the compacted delete block rather than an error. Could you have 
`writeDelete` use its `schema` argument, which is `writeSchemaWithMetaFields` 
when `useWriterSchema` is set, and add a log-compaction case to the test?
   ```java
   final Comparable<?> orderingVal = 
hoodieRecord.getOrderingValueAsJava(schema, recordProperties, orderingFields);
   ```
   
   <sub><i>⚠️ AI-generated; verify before applying. React 👍/👎 to flag 
quality.</i></sub>



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