Github user okram commented on the issue:
https://github.com/apache/tinkerpop/pull/538
So `MultiComparator` is internal to a `Traversal`. The way in which
GraphSON serializes traversals is via their Bytecode. Thus, when the bytecode
gets recompiled on the deserializing end, the `MultiComparator` is recreated.
The reason this is needed in Gryo is because we use Gryo as the binary format
internal to Java-based systems. Giraph and Spark register the `MultiComparator`
in their Aggregator framework and Gryo is the serializer for it.
Regarding `ProjectedTraverser`. Again, a concept internal to Gremlin-Java
VM. Note that `Traverser` serialization in GraphSON is not complete regardless
(only what is required for practical communication):
```java
@Override
public void serialize(final Traverser traverserInstance, final
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
throws IOException {
jsonGenerator.writeStartObject();
jsonGenerator.writeObjectField(GraphSONTokens.BULK,
traverserInstance.bulk());
jsonGenerator.writeObjectField(GraphSONTokens.VALUE,
traverserInstance.get());
jsonGenerator.writeEndObject();
}
```
`ProjectedTraverser` is used by `CollectingBarrierSteps` in OLAP during
reductions. For Gremlin-Java VM applications, this is all Gryo serialization
stuff with aggregator frameworks.
Finally, regarding testing --- yes, I swapped out `ChainedComparator` for
`MultiComparator + ProjectedTraverser` and thus, its tested.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---