chandrasekhar-188k commented on PR #6374:
URL: https://github.com/apache/hbase/pull/6374#issuecomment-2506429559

   > > After commiting this (a little late), I realized that I have more 
questions:
   > > I see this annotation on ScannerModel:
   > > > @JsonInclude(JsonInclude.Include.NON_NULL)
   > > 
   > > 
   > > and
   > > > private boolean includeStartRow = true;
   > > > private boolean includeStopRow = false;
   > > 
   > > 
   > > Doesn't that mean that the new attributes will get serialized regardless 
of their values to JSON, and cause the deserialization in the old server to 
fail ?
   > > You matrix shows this as passing, but I can't see how that can happen. 
Does JSON skip serializing the default values ?
   > 
   > you are correct, when we serialize the ScannerModel the new attributes are 
also included and causing the deserilization to fail at old server. when I 
tested for JSON I have construcuted the JSON message manually with the required 
fields, instead of Converting the ScannerModel to JSON, that's why my test was 
ok. For XML and protobuff I had tested with Conversion of ScannerModel object 
to the required mime type, so no problem here.
   > 
   > For solving the issue wrt JSON, I think we can have two approaches
   > 
   > 1. change the class level JSON include annotation to 
@JsonInclude(JsonInclude.Include.NON_DEFAULT), so that it doesn't serialize the 
default values.  This can work with out any functional impact only if the 
default values of ScannerModel and Scan Class are in sync always.. but 
currently I could see the default values for some fields are different between 
ScannerModel and Scan.
   > 2. For the newly introduced attributes add a custom JSON include 
annotation with a filter class that skips serialization of a field if the field 
has default value set to it.
   >    ex:
   > 
   > ```
   > @JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = 
MaskingFilter.class)
   > private boolean includeStartRow = true;
   > 
   > static class MaskingFilter {
   >    public boolean equals(Object value){
   >      return Boolean.TRUE.equals(value);
   > }
   > 
   > }
   > ```
   > 
   > I think the 2nd approach is better for this. I will raise an addendum PR 
for this..Let me know if you have any other suggestions..
   
   addendum PR raised for this fix, Please review
   https://github.com/apache/hbase/pull/6499


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