[
https://issues.apache.org/jira/browse/HADOOP-558?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Owen O'Malley reassigned HADOOP-558:
------------------------------------
Assignee: David Bowen (was: Owen O'Malley)
> Adding versioning to Writable classes
> -------------------------------------
>
> Key: HADOOP-558
> URL: https://issues.apache.org/jira/browse/HADOOP-558
> Project: Hadoop
> Issue Type: Improvement
> Components: io
> Affects Versions: 0.6.2
> Reporter: Owen O'Malley
> Assigned To: David Bowen
>
> We currently don't have a way to support versioned Writables, which among
> other problems means that it is very difficult to change the serialization of
> any types. (A recent example is that we can't change any of the Writables
> that currently use UTF8.writeString to use Text.writeString with out breaking
> everything.) Just changing the file version doesn't work because you can't
> read the old versions.
> Therefore, I propose adding a new interface:
> public interface VersionMapWritable extends Writable {
> /**
> * Destructively read into this object from in based on the version map.
> * @param versionMap a map from each class to its version in the DataInput
> (version 0 classes are omitted)
> */
> public void readFields(DataInput in, Map<Class<VersionMapWritable>, int>
> versionMap) throws IOException;
> /**
> * Classes with non-zero versions should register themselves in static
> blocks.
> */
> public static void registerCurrentVersion(Class<VersionMapWritable> class,
> int version) {...}
> /**
> * If a version map includes the parent type, always include the child type
> as well.
> */
> public static void addDependence(Class<VersionMapWritable> parent,
> Class<VersionMapWritable> child) { ... }
> /**
> * Build a version map for a given list of classes, including any dependent
> types.
> */
> public static Map<Class<VersionMapWritable>, int>
> buildVersionMap(Set<Class<VersionMapWritable>> classes) {...}
> /**
> * Add the types in the parameter/result types to the list of classes.
> * Recursively adds the field types for any new types that are added to the
> set.
> */
> public static void addMethodTypes(Set<Class<VersionMapWritable>> result,
> Class<VersionedProtocol> protocol) {...}
> /**
> * Add the non-transient fields to the list of classes.
> */
> public static void addFieldTypes(Set<Class<VersionMapWritable>> result,
> Class<Writable> writable) {...}
> public static Map<Class<VersionMapWritable>, int> readVersionMap(DataInput
> in) throws IOException { ... }
> public static void writeVersionMap(DataOutput out,
> Map<Class<VersionMapWritable> versionMap) throws
> IOException {...}
> }
> VersionedWritable, which stored a version byte within each object, will be
> depriciated.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.