I'd really like to get our IO situation really solid in 3.3.0 and while we
talk about GraphSON a lot I think Gryo still has an important place in our
serialization story. Gryo covers an extended set of classes that goes
beyond what we cover in GraphSON. I don't know if all those registered
classes matter though - one would think that we just need parity with
GraphSON defined classes.

https://github.com/apache/tinkerpop/blob/9f13e69853c03a2fde77efd40c6526b91a4b346a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java#L192

I think that the reason this area of code has grown so much is from the
basis of another issue with gryo which is that we don't always have a nice
separation between implementations and serialized classes. In other words,
if we have some complex class like DefaultTraversalMetrics, we just
register all the classes that DefaultTraversalMetrics has as fields (and
all the classes those classes use) until the serialization works. While
this is really easy and, in a sense, convenient, it creates some problems:

1. We get this big long registration list which includes types we don't
support in GraphSON (which typically aren't tested)
2. We have now bound the serialization of the complex class to its
structure. If there is a problem with DefaultTraversalMetrics in the future
and we have to change a field we essentially break all compatibility within
gryo. (i'm facing this issue now actually).

I would really like Gryo 3.0 to do a better job in this area, allowing for
better forward and backward compatibility with a more limited class
registration list that is more in line with the types defined for  GraphSON
support. I think we can get better forward/backward compatibility if (1)
there is better separation between the object being serialized and the
object used in application logic (think of the "detached" classes) and (2)
gryo serializers for 3.0 have greater intelligence around internal
compatibility handling.

Anyway, I was mostly writing this as notes to myself in preparation for
3.3.0, but I'd be happy to hear any thoughts anyone might have on this.

Reply via email to