[ 
https://issues.apache.org/jira/browse/AVRO-2868?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

enrico agnoli updated AVRO-2868:
--------------------------------
    Attachment:     (was: release-1.8.2_avroWithEncryptionSupport.diff)

> Introduce serialization finalizer hook
> --------------------------------------
>
>                 Key: AVRO-2868
>                 URL: https://issues.apache.org/jira/browse/AVRO-2868
>             Project: Apache Avro
>          Issue Type: Improvement
>          Components: java
>    Affects Versions: 1.8.2
>            Reporter: enrico agnoli
>            Priority: Major
>             Fix For: 1.8.2
>
>         Attachments: release-1.8.2_avroWithEncryptionSupport.diff
>
>
> I would like to make a proposal change to AVRO to allow services to integrate 
> some logic after serialization and before deserialization.
> We use AVRO to support the data serialization in our streaming infrastructure 
> and we decided to extend it to provide us the possibility to encrypt the data 
> with info available directly on the data itself: the owner of it.
> The change-set is pretty small and I would like to hear from you if it makes 
> sense to contribute it back to the project.
>   
> * == The problem is:*
> Multi-tenants applications have the need to encrypt data (with the keys of 
> the owner/tenant that generated that piece of data) every time it is 
> serialized to avoid commingling of different tenant data. To do so, 
> transparently to the application, the ideal place to implement the encryption 
> it is in the serialization library (AVRO).
>   
> * == Proposal:*
> We modified the AVRO code to have afterSerialization and 
> beforeDeserialization hooks that can use object defined values (the 
> tenant/owner of that data) to implement encryption.
> In the code we propose to submit we implemented a new interface: 
> `SerializeFinalizationDelegate.java`
> {noformat}
> public interface SerializeFinalizationDelegate
> {
>    void afterSerialization(ByteArrayOutputStream serializedData, Encoder 
> finalEncoder);
>    Decoder beforeDeserialization(Decoder dataToDecode); 
> }
> {noformat}
> That needs to be implemented by any AVRO serializable class that wants to 
> define a post-serialization or pre-deserialization logic.
> `GenericDatumWriter` and `GenericDatumReader` are modified to delegate to the 
> object implementation of the methods above.
>   
> More info can be found at 
> [https://www.slideshare.net/FlinkForward/multi-tenanted-streams-workday-enrico-agnoli-leire-fernandez-de-retana-roitegui-workday-185815223]
>  from slide 21



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to