nsivabalan commented on a change in pull request #3267:
URL: https://github.com/apache/hudi/pull/3267#discussion_r670539525
##########
File path:
hudi-common/src/main/java/org/apache/hudi/common/model/OverwriteWithLatestAvroPayload.java
##########
@@ -90,6 +93,14 @@ protected boolean isDeleteRecord(GenericRecord
genericRecord) {
return (deleteMarker instanceof Boolean && (boolean) deleteMarker);
}
+ /**
+ * Returns the ordering value of given record {@code record}.
+ */
+ protected static Object getOrderingVal(GenericRecord record, Properties
properties) {
+ return getNestedFieldVal(record,
+
properties.getProperty(HoodiePayloadProps.PAYLOAD_ORDERING_FIELD_PROP_KEY),
true);
Review comment:
probably the last argument value differs depending on whether we are
reading persisted record or an incoming record. So, might have to make it an
arg to this method.
##########
File path:
hudi-common/src/main/java/org/apache/hudi/common/table/log/AbstractHoodieLogRecordScanner.java
##########
@@ -113,8 +120,11 @@ protected AbstractHoodieLogRecordScanner(FileSystem fs,
String basePath, List<St
this.readerSchema = readerSchema;
this.latestInstantTime = latestInstantTime;
this.hoodieTableMetaClient =
HoodieTableMetaClient.builder().setConf(fs.getConf()).setBasePath(basePath).build();
+ this.orderingField =
this.hoodieTableMetaClient.getTableConfig().getPreCombineField();
// load class from the payload fully qualified class name
this.payloadClassFQN =
this.hoodieTableMetaClient.getTableConfig().getPayloadClass();
+ // only the OverwriteWithLatestAvroPayload needs combining by orderingVal
+ this.naturalOrder =
!OverwriteWithLatestAvroPayload.class.isAssignableFrom(ReflectionUtils.getClass(this.payloadClassFQN));
Review comment:
Couple of points to ponder
- We should try to be agnostic to payload impl's in this class. Should not
leak OverwriteWithLatestAvroPayload
- One another option is to add another constructor which takes in
orderingField (instead of ordering Val) to the payload class. Basically this
will move the line 318 to within Payload constructor itself. Basically one
constructor will be used in the direct write path from user (ordering val) and
another constructor will be used when reading a record already persisted.
##########
File path:
hudi-common/src/main/java/org/apache/hudi/common/model/OverwriteWithLatestAvroPayload.java
##########
@@ -90,6 +93,14 @@ protected boolean isDeleteRecord(GenericRecord
genericRecord) {
return (deleteMarker instanceof Boolean && (boolean) deleteMarker);
}
+ /**
+ * Returns the ordering value of given record {@code record}.
+ */
+ protected static Object getOrderingVal(GenericRecord record, Properties
properties) {
Review comment:
PAYLOAD_ORDERING_FIELD_PROP_KEY is something we introduced recently when
we added DefaultHoodieRecordPayload. We need to ensure that this value will be
set in all code paths even while using OverwriteWithLatestAvroPayload
--
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]