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.
---

Reply via email to