DSF ID Loader
To be Reviewed By:
Authors: Jens Deppe
Status: Draft | Discussion | Active | Dropped | Superseded
Superseded by: N/A
Related: N/A
Problem
To facilitate backwards compatibility, Geode has a concept known as Data Serializable Fixed ID (DSFID) which allows serializable objects to evolve over time using an API that allows newer versions of the classes to still be deserialized by older versions of Geode. This is a core capability of Geode that is primarily intended for internal classes but is also utilized by various modules, notably WAN, Lucene and Redis.
To use DSFIDs, a class needs to register itself so that it is known by the serialization framework. Many core classes register in DSFIDFactory
. The modules, mentioned before, register during their service loader discovery and initialization phase. Under some situations, however, Geode will require knowledge of the DSFID very early on during member startup. If a member receives a message with an unknown DSFID it will throw a DSFIDNotFoundException
. Without introducing module circular dependencies, there is no way for a module to register its required DSFIDs early enough to avoid this issue.
Anti-Goals
None identified.
Solution
The proposed solution includes introducing a Service Loader interface - DSFIDLoader
- which will allow DSFIDs to be automatically discovered and will be initialized as part of the static class initialization already existing in InternalDataSerializer
.
public interface DSFIDLoader { void registerDSFIDs(DSFIDSerializer serializer); }
This interface will be added to the geode-serialization
module.
Changes and Additions to Public Interfaces
No changes to public interfaces.
Performance Impact
No anticipated performance impacts.
Backwards Compatibility and Upgrade Path
No backwards compatibility impact.
Prior Art
N/A
FAQ
None yet.
Errata
None yet.