[ 
http://issues.apache.org/jira/browse/HADOOP-558?page=comments#action_12437681 ] 
            
Doug Cutting commented on HADOOP-558:
-------------------------------------

Part of this, I assume, will include:

1.In SequenceFile, adding to the header the version map for key and value 
classes (& all classes referenced by their non-transient fields), and passing 
this map to keys and values as they're read.

2. In RPC, Transmitting the version map for all parameter & return classes (& 
those refernced by their fields) from the client to the server as a handshake 
on connect.



> Adding versioning to Writable classes
> -------------------------------------
>
>                 Key: HADOOP-558
>                 URL: http://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: Owen O'Malley
>
> 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.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to