brachi-wernick opened a new pull request #15699:
URL: https://github.com/apache/beam/pull/15699


   This PR is a continuous work for https://github.com/apache/beam/pull/15510.
   
   Currently there are 2 Coders for Metadata: default one: 
`org.apache.beam.sdk.io.fs.MetadataCoder` and enhanced one 
`org.apache.beam.sdk.io.fs.MetadataCoderV2`, the last can also decode-encode 
`lastModifiedMillis` and it is done in a new coder in order to support backward 
compatibility.
   
   This will be hard to maintain, we will need to create a new coder for any 
new field that will be added to `Metadata`.
   
   So, as suggested in this comment: 
https://github.com/apache/beam/pull/15510#issuecomment-928390587, I came up 
with new generic coder : `MetadataDynamicCoder`.
   
   `MetadataDynamicCoder` can decode/encode any new fields added to `Metadata` 
by sending getter, setter and coder.
   
   For example creating coder for `lastModifiedMillis`:
   
   ``` java
    new MetadataDynamicCoder()
           .withCoderForField(
               VarLongCoder.of(),
               Metadata::lastModifiedMillis,
               Metadata.Builder::setLastModifiedMillis);
   ```
   
   I chose to get explicit getter/setter to avoid reflection which has bad 
impact on performance.
   


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