[hibernate-issues] [Hibernate-JIRA] Commented: (HSEARCH-880) Discussion on how to support backward / forward compatible serialization layer

Emmanuel Bernard (JIRA) noreply at atlassian.com
Mon Aug 29 04:34:07 EDT 2011


    [ http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-880?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=43371#comment-43371 ] 

Emmanuel Bernard commented on HSEARCH-880:
------------------------------------------

h2. General principles - protocol version
{quote}Should the protocol version be a global number across serialization providers? Should it be mandatory for each serialization provider?
I guess that each provider should be free to handle it as it thinks best. I'd of course support the idea that our reference providers should have versioning, but I wouldn't impose this to other implementors.
{quote}
The version should not be a global number across all providers but specific to each provider. That's one of the reason for the serialization provider id.
However, you cannot make the version number opaque if you want to implement a handshake in the two way communication case. That is unless you want each protocol to implement the handshake  but I don't think that would be a good idea.

> Discussion on how to support backward / forward compatible serialization layer
> ------------------------------------------------------------------------------
>
>                 Key: HSEARCH-880
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HSEARCH-880
>             Project: Hibernate Search
>          Issue Type: New Feature
>          Components: serialization
>            Reporter: Emmanuel Bernard
>             Fix For: 4.0
>
>
> h1. General principles
> The serialized message needs the following elements:
> * index name: to redirect the flux to the appropriate backend
> * serialization provider id: if not present, a cluster must make sure to use the same SerializationProvider for a given IndexManager
> * protocol version: today the version is major.minor where the major increase means incompatibility at the stream level, whereas minor means compatibility but with missing features
> * stream: this is the SerializationProvider specific byte[]
> bq. Do we need a serialization provider id? In other words, do we need to be able to hot-upgrade the SerializationProvider in a cluster?
> h1. Exchanging messages in an heterogeneous cluster
> h2. Cluster with one way communication (JMS)
> In this case the master receives a message and must try and process it.
> Receives an index name + serial provider id.
> Use the serial provider id to deserialize the message.
> If message_major > node_major, the serialization provider fails
> If message_minor > node_minor, the serialization provider proceeds but some features might not be supported and the deserialization might fail.
> bq. this requires to send the Avro schema with each message which would be a huge loss to support message_minor > node_minor
> In the minor bump case:
> * some feature might not be deserialized and simply ignored. A user is aware of the list of features differences between each node.
> * the stream might not be readable by an old version after all due to the use of some new features => Exception
> If message_major or message_minor < node_major or node_minor, we use the older protocol deserializer. 
> bq. could there ever be a problem where a new HSearch Engine cannot deal with an old HSearch engine's message?
> h2. Cluster with two way communication (JGroups)
> Each time a node A needs to send a message to a node B for the first time. It sends the list of supported SerializationProvider id and for each the list of Versions supported. The first SerializationProvider id is preferred and the latest versions are preferred. 
> A version is more recent if majorA > majorB and with majorA = majorB if minorA > minorB.
> Node B receives the handshake message and returns the appropriate serialization provider id and version. Subsequent messages are exchanged with this accepted version between A and B
> bq. Is the JGroups clustering using multicast to send change messages ie does it know which node it sends the message to to do the handshake?
> bq. What happens if B goes down and back up? Does it have a "new" name that uniquely identify it?
> h1. API changes
> SerializationProvider will need the following adjustments:
> * a getSupportedVersions()
> * a getSerializer(Version)
> * a getDeserializer(Version)
> bq. could it be that Serializer / Deserializer / LuceneWorksBuilder lead to the inability to support a version n-1 (by adding of new methods or stuff like that?
>  

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list