You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by pieter gmail <pi...@gmail.com> on 2017/09/03 19:20:48 UTC

RE: io and graphson-v3

Hi,

I am getting IO tests failures on 3.3.0.

Sqlg has a SimpleModule which add serializers for its custom id.

     SqlgSimpleModule() {
         super("custom");
//        addSerializer(RecordId.class, new 
RecordId.RecordIdJacksonSerializerV2d0());
//        addDeserializer(RecordId.class, new 
RecordId.RecordIdJacksonDeserializerV2d0());
//        addSerializer(SchemaTable.class, new 
SchemaTable.SchemaTableIdJacksonSerializerV2d0());
//        addDeserializer(SchemaTable.class, new 
SchemaTable.SchemaTableIdJacksonDeserializerV2d0());

         addSerializer(RecordId.class, new 
RecordId.RecordIdJacksonSerializerV3d0());
         addDeserializer(RecordId.class, new 
RecordId.RecordIdJacksonDeserializerV3d0());
         addSerializer(SchemaTable.class, new 
SchemaTable.SchemaTableJacksonSerializerV3d0());
         addDeserializer(SchemaTable.class, new 
SchemaTable.SchemaTableJacksonDeserializerV3d0());
     }

How is it suppose to distinguish between v2 and v3?

An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'

If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
If ...V3d0.. is added to the serializers then 'graphson-v2' fails.

TinkerPop's own CustomId tests do not rely on default behavior and 
manually creates SimpleModules for each scenario.

Are they both suppose to work somehow?

Thanks
Pieter

Re: io and graphson-v3

Posted by Stephen Mallette <sp...@gmail.com>.
pieter, i updated that branch and issued this PR (and i'm running the full
test suite now):

https://github.com/apache/tinkerpop/pull/706

please review/VOTE if i got it right - let's finish off any final
discussion/tweaks on the PR itself. thanks for noting this problem.

> This v3 looks like a <3 heart where the top broke off.

hehe



On Wed, Sep 6, 2017 at 1:56 PM, Paul A. Jackson <Pa...@pb.com> wrote:

> This v3 looks like a <3 heart where the top broke off.
>
> Sad.
>
>
> -----Original Message-----
> From: Stephen Mallette [mailto:spmallette@gmail.com]
> Sent: Wednesday, September 06, 2017 1:45 PM
> To: dev@tinkerpop.apache.org
> Subject: Re: io and graphson-v3
>
> never mind - i see what's messed up
>
> On Wed, Sep 6, 2017 at 1:43 PM, Stephen Mallette <sp...@gmail.com>
> wrote:
>
> > Which tests in particular are failing for SerializationTest? all of them?
> >
> > On Wed, Sep 6, 2017 at 1:35 PM, pieter gmail <pi...@gmail.com>
> > wrote:
> >
> >> Hi,
> >>
> >> Pulled TINKERPOP-1767 branch, changed SqlgGraph's io method and ran
> >> the tests.
> >>
> >> All the io tests are passing.
> >> Only SerializationTest fails for the same reason. It too needs the
> >> version specified. I did that locally and then all tests passes.
> >>
> >> Thanks
> >> Pieter
> >>
> >> On 06/09/2017 18:09, Stephen Mallette wrote:
> >>
> >>> Pieter, I created this issue:
> >>>
> >>> https://issues.apache.org/jira/browse/TINKERPOP-1767
> >>>
> >>> and made an effort to try to figure a way to fix it:
> >>>
> >>> https://github.com/apache/tinkerpop/tree/TINKERPOP-1767
> >>>
> >>> Note the change to TinkerGraph and its io() method. I suppose you
> >>> could do something similar to get the right registry in play? could
> >>> you have a look and see if what i did helps? if that works then i'll
> >>> issue a PR and we can get it reviewed/merged.
> >>>
> >>>
> >>> On Tue, Sep 5, 2017 at 12:10 PM, pieter gmail
> >>> <pi...@gmail.com>
> >>> wrote:
> >>>
> >>> Ok, at present there is only one SimpleModule, the default. I can
> >>> make it
> >>>> v2 or v3 but not both.
> >>>>
> >>>> Lets say I make the SimpleModule support V2.
> >>>> Then when calling IoEdgeTest for
> >>>>
> >>>>      {"graphson-v3", true, true,
> >>>>          (Function<Graph, GraphReader>) g -> g.io
> >>>> (IoCore.graphson()).reader
> >>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
> >>>> mapper().create()).create(),
> >>>>          (Function<Graph, GraphWriter>) g -> g.io
> >>>> (IoCore.graphson()).writer
> >>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
> >>>> mapper().create()).create()},
> >>>>
> >>>> then the deserializers that run are for V2,
> >>>>
> >>>>      static class SchemaTableIdJacksonDeserializerV2d0 extends
> >>>> AbstractObjectDeserializer<SchemaTable> {
> >>>>          SchemaTableIdJacksonDeserializerV2d0() {
> >>>>              super(SchemaTable.class);
> >>>>          }
> >>>>
> >>>>          @Override
> >>>>          public SchemaTable createObject(final Map data) {
> >>>>              return SchemaTable.of((String)data.get("schema"),
> >>>> (String) data.get("table"));
> >>>>          }
> >>>>      }
> >>>>
> >>>> when createObject fires the map data has V3 elements in it like
> >>>> @type and @value whilst its expecting "schema" and "table"
> >>>>
> >>>> If we make the SimpleModule support V3 then graphson-v2 will fail.
> >>>>
> >>>>     {"graphson-v2", false, false,
> >>>>         (Function<Graph, GraphReader>) g -> g.io
> >>>> (IoCore.graphson()).reader
> >>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
> >>>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create(),
> >>>>         (Function<Graph, GraphWriter>) g -> g.io
> >>>> (IoCore.graphson()).writer
> >>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
> >>>>
> >>>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create()},
> >>>>
> >>>> Now the deserializers are for V3.
> >>>>
> >>>>      static class SchemaTableJacksonDeserializerV3d0 extends
> >>>> StdDeserializer<SchemaTable> {
> >>>>          public SchemaTableJacksonDeserializerV3d0() {
> >>>>              super(RecordId.class);
> >>>>          }
> >>>>
> >>>>          @Override
> >>>>          public SchemaTable deserialize(final JsonParser
> >>>> jsonParser, final DeserializationContext deserializationContext)
> >>>> throws IOException, JsonProcessingException {
> >>>>              final Map<String, Object> data =
> >>>> deserializationContext.readValue(jsonParser,
> >>>> Map.class);
> >>>>              return SchemaTable.of((String)data.get("schema"),
> >>>> (String) data.get("table"));
> >>>>          }
> >>>>
> >>>>          @Override
> >>>>          public boolean isCachable() {
> >>>>              return true;
> >>>>          }
> >>>>      }
> >>>>
> >>>> This does not fire at all. Eventually I get a detached edge with an
> >>>> id that is a map. It never deserialized.
> >>>>
> >>>> So basically it only works if the SimpleModule version, i.e.
> >>>> serialize/deserialize code matches up with the version.
> >>>>
> >>>> Sqlg serializes RecordId to,
> >>>>
> >>>>      static class RecordIdJacksonSerializerV3d0 extends
> >>>> StdScalarSerializer<RecordId> {
> >>>>          public RecordIdJacksonSerializerV3d0() {
> >>>>              super(RecordId.class);
> >>>>          }
> >>>>          @Override
> >>>>          public void serialize(final RecordId recordId, final
> >>>> JsonGenerator jsonGenerator, final SerializerProvider
> >>>> serializerProvider)
> >>>>                  throws IOException, JsonGenerationException {
> >>>>              final Map<String, Object> m = new HashMap<>();
> >>>>              m.put("schemaTable", recordId.getSchemaTable());
> >>>>              m.put("id", recordId.getId());
> >>>>              jsonGenerator.writeObject(m);
> >>>>          }
> >>>>      }
> >>>>
> >>>> and
> >>>>
> >>>>      static class SchemaTableJacksonSerializerV3d0 extends
> >>>> StdScalarSerializer<SchemaTable> {
> >>>>          SchemaTableJacksonSerializerV3d0() {
> >>>>              super(SchemaTable.class);
> >>>>          }
> >>>>
> >>>>          @Override
> >>>>          public void serialize(final SchemaTable schemaTable, final
> >>>> JsonGenerator jsonGenerator, final SerializerProvider
> >>>> serializerProvider)
> >>>>                  throws IOException, JsonGenerationException {
> >>>>              // when types are not embedded, stringify or resort to
> >>>> JSON primitive representations of the
> >>>>              // type so that non-jvm languages can better
> >>>> interoperate with the TinkerPop stack.
> >>>>              final Map<String, Object> m = new LinkedHashMap<>();
> >>>>              m.put("schema", schemaTable.getSchema());
> >>>>              m.put("table", schemaTable.getTable());
> >>>>              jsonGenerator.writeObject(m);
> >>>>          }
> >>>>
> >>>>      }
> >>>>
> >>>> Hope it all makes some sense,
> >>>> Pieter
> >>>>
> >>>>
> >>>> On 05/09/2017 17:31, Stephen Mallette wrote:
> >>>>
> >>>> I guess I'm trying to understand why it matters for purpose of the
> test.
> >>>>> If
> >>>>> you mix/match versions I can't think of why the test would care
> >>>>> one way or the other. does sqlg serialize its id to a JSON Map?
> >>>>>
> >>>>> On Tue, Sep 5, 2017 at 11:19 AM, pieter gmail
> >>>>> <pieter.martin@gmail.com
> >>>>> >
> >>>>> wrote:
> >>>>>
> >>>>> I looked at TinkerGraph's implementation. In fact I copied it.
> >>>>> TinkerGraph
> >>>>>
> >>>>>> does not have any special id serialization. In fact both its
> >>>>>> TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses
> >>>>>> TinkerModuleV2d0.
> >>>>>>
> >>>>>>
> >>>>>> In IoCustomTest tests you call g.io(GraphSONIo.build(GraphSON
> >>>>>> Version.V2_0)).mapper().addCustomModule(moduleV2d0).
> >>>>>> I.e. the test manually registers the appropriate SimpleModule for
> >>>>>> each version.
> >>>>>>
> >>>>>> For IoEdgeTest the same needs to happen somehow. Currently I have
> >>>>>> only one default V3 SimpleModule same as TinkerGraph. I have
> >>>>>> written a V2 SimpleModule but how in IoEdgeTest will the correct
> >>>>>> IoRegistry or SimpleModule be selected? The test itself does not
> >>>>>> call
> >>>>>> addCustomModule()
> >>>>>> and between the builders, mappers, registries and modules I don't
> >>>>>> see how to add it.
> >>>>>>
> >>>>>> Thanks,
> >>>>>> Pieter
> >>>>>>
> >>>>>> On 05/09/2017 16:30, Stephen Mallette wrote:
> >>>>>>
> >>>>>> You have registries for each version as well and default to v3.
> >>>>>> Please
> >>>>>>
> >>>>>>> see
> >>>>>>> TinkerGraph:
> >>>>>>>
> >>>>>>> https://github.com/apache/tinkerpop/blob/master/tinkergraph-
> >>>>>>> gremlin/src/main/java/org/apache/tinkerpop/gremlin/
> >>>>>>> tinkergraph/structure/TinkerGraph.java#L198
> >>>>>>>
> >>>>>>> If the user wants to override that then that's their choice, but
> >>>>>>> they have to rig it all up. We probably need a better system
> >>>>>>> than this. IO is way too complicated and confusing.
> >>>>>>>
> >>>>>>> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <
> >>>>>>> pieter.martin@gmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>> Afraid I still don't quite get it. How do I register the
> >>>>>>> different
> >>>>>>>
> >>>>>>> SimpleModules depending on the version.
> >>>>>>>>
> >>>>>>>> Currently it starts in SqlgGraph,
> >>>>>>>>
> >>>>>>>> @Override
> >>>>>>>> public <I extends Io> I io(final Io.Builder<I> builder) {
> >>>>>>>>        return (I) builder.graph(this).onMapper(mapper ->
> >>>>>>>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
> >>>>>>>> }
> >>>>>>>>
> >>>>>>>> and the SqlgIoRegistry registers the SimpleModule
> >>>>>>>>
> >>>>>>>> private SqlgIoRegistry() {
> >>>>>>>>        final SqlgSimpleModule sqlgSimpleModule = new
> >>>>>>>> SqlgSimpleModule();
> >>>>>>>>        register(GraphSONIo.class, null, sqlgSimpleModule);
> >>>>>>>>        register(GryoIo.class, RecordId.class, null); }
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> Is the SqlgGraph.io(...) method suppose to interrogate the
> >>>>>>>> builder to check the version and add a corresponding IoRegistry
> >>>>>>>> and SimpleModule?
> >>>>>>>>
> >>>>>>>> Thanks
> >>>>>>>> Pieter
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On 05/09/2017 13:30, Stephen Mallette wrote:
> >>>>>>>>
> >>>>>>>> I think you should just create a new SimpleModule for each
> >>>>>>>> version -
> >>>>>>>>
> >>>>>>>> don't
> >>>>>>>>> try to put them in the same SqlgSimpleModule. It's a naming
> >>>>>>>>> convention that users will have to follow rather than
> >>>>>>>>> something explicitly enforced through code.
> >>>>>>>>>
> >>>>>>>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <
> >>>>>>>>> pieter.martin@gmail.com
> >>>>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>> Hi,
> >>>>>>>>>
> >>>>>>>>> I am getting IO tests failures on 3.3.0.
> >>>>>>>>>
> >>>>>>>>>> Sqlg has a SimpleModule which add serializers for its custom id.
> >>>>>>>>>>
> >>>>>>>>>>         SqlgSimpleModule() {
> >>>>>>>>>>             super("custom");
> >>>>>>>>>> //        addSerializer(RecordId.class, new
> >>>>>>>>>> RecordId.RecordIdJacksonSerial izerV2d0());
> >>>>>>>>>> //        addDeserializer(RecordId.class, new
> >>>>>>>>>> RecordId.RecordIdJacksonDeserializerV2d0());
> >>>>>>>>>> //        addSerializer(SchemaTable.class, new
> >>>>>>>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
> >>>>>>>>>> //        addDeserializer(SchemaTable.class, new
> >>>>>>>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
> >>>>>>>>>>
> >>>>>>>>>>             addSerializer(RecordId.class, new
> >>>>>>>>>> RecordId.RecordIdJacksonSerial izerV3d0());
> >>>>>>>>>>             addDeserializer(RecordId.class, new
> >>>>>>>>>> RecordId.RecordIdJacksonDeseri alizerV3d0());
> >>>>>>>>>>             addSerializer(SchemaTable.class, new
> >>>>>>>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
> >>>>>>>>>>             addDeserializer(SchemaTable.class, new
> >>>>>>>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
> >>>>>>>>>>         }
> >>>>>>>>>>
> >>>>>>>>>> How is it suppose to distinguish between v2 and v3?
> >>>>>>>>>>
> >>>>>>>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
> >>>>>>>>>>
> >>>>>>>>>> If ...V2d0.. is added to the serializers then 'graphson-v3'
> fails.
> >>>>>>>>>> If ...V3d0.. is added to the serializers then 'graphson-v2'
> fails.
> >>>>>>>>>>
> >>>>>>>>>> TinkerPop's own CustomId tests do not rely on default
> >>>>>>>>>> behavior and manually creates SimpleModules for each scenario.
> >>>>>>>>>>
> >>>>>>>>>> Are they both suppose to work somehow?
> >>>>>>>>>>
> >>>>>>>>>> Thanks
> >>>>>>>>>> Pieter
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>
> >
>

RE: io and graphson-v3

Posted by "Paul A. Jackson" <Pa...@pb.com>.
This v3 looks like a <3 heart where the top broke off.

Sad.


-----Original Message-----
From: Stephen Mallette [mailto:spmallette@gmail.com] 
Sent: Wednesday, September 06, 2017 1:45 PM
To: dev@tinkerpop.apache.org
Subject: Re: io and graphson-v3

never mind - i see what's messed up

On Wed, Sep 6, 2017 at 1:43 PM, Stephen Mallette <sp...@gmail.com>
wrote:

> Which tests in particular are failing for SerializationTest? all of them?
>
> On Wed, Sep 6, 2017 at 1:35 PM, pieter gmail <pi...@gmail.com>
> wrote:
>
>> Hi,
>>
>> Pulled TINKERPOP-1767 branch, changed SqlgGraph's io method and ran 
>> the tests.
>>
>> All the io tests are passing.
>> Only SerializationTest fails for the same reason. It too needs the 
>> version specified. I did that locally and then all tests passes.
>>
>> Thanks
>> Pieter
>>
>> On 06/09/2017 18:09, Stephen Mallette wrote:
>>
>>> Pieter, I created this issue:
>>>
>>> https://issues.apache.org/jira/browse/TINKERPOP-1767
>>>
>>> and made an effort to try to figure a way to fix it:
>>>
>>> https://github.com/apache/tinkerpop/tree/TINKERPOP-1767
>>>
>>> Note the change to TinkerGraph and its io() method. I suppose you 
>>> could do something similar to get the right registry in play? could 
>>> you have a look and see if what i did helps? if that works then i'll 
>>> issue a PR and we can get it reviewed/merged.
>>>
>>>
>>> On Tue, Sep 5, 2017 at 12:10 PM, pieter gmail 
>>> <pi...@gmail.com>
>>> wrote:
>>>
>>> Ok, at present there is only one SimpleModule, the default. I can 
>>> make it
>>>> v2 or v3 but not both.
>>>>
>>>> Lets say I make the SimpleModule support V2.
>>>> Then when calling IoEdgeTest for
>>>>
>>>>      {"graphson-v3", true, true,
>>>>          (Function<Graph, GraphReader>) g -> g.io 
>>>> (IoCore.graphson()).reader 
>>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>>>> mapper().create()).create(),
>>>>          (Function<Graph, GraphWriter>) g -> g.io 
>>>> (IoCore.graphson()).writer 
>>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>>>> mapper().create()).create()},
>>>>
>>>> then the deserializers that run are for V2,
>>>>
>>>>      static class SchemaTableIdJacksonDeserializerV2d0 extends 
>>>> AbstractObjectDeserializer<SchemaTable> {
>>>>          SchemaTableIdJacksonDeserializerV2d0() {
>>>>              super(SchemaTable.class);
>>>>          }
>>>>
>>>>          @Override
>>>>          public SchemaTable createObject(final Map data) {
>>>>              return SchemaTable.of((String)data.get("schema"), 
>>>> (String) data.get("table"));
>>>>          }
>>>>      }
>>>>
>>>> when createObject fires the map data has V3 elements in it like 
>>>> @type and @value whilst its expecting "schema" and "table"
>>>>
>>>> If we make the SimpleModule support V3 then graphson-v2 will fail.
>>>>
>>>>     {"graphson-v2", false, false,
>>>>         (Function<Graph, GraphReader>) g -> g.io 
>>>> (IoCore.graphson()).reader 
>>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>>>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create(),
>>>>         (Function<Graph, GraphWriter>) g -> g.io 
>>>> (IoCore.graphson()).writer 
>>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>>>>
>>>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create()},
>>>>
>>>> Now the deserializers are for V3.
>>>>
>>>>      static class SchemaTableJacksonDeserializerV3d0 extends 
>>>> StdDeserializer<SchemaTable> {
>>>>          public SchemaTableJacksonDeserializerV3d0() {
>>>>              super(RecordId.class);
>>>>          }
>>>>
>>>>          @Override
>>>>          public SchemaTable deserialize(final JsonParser 
>>>> jsonParser, final DeserializationContext deserializationContext) 
>>>> throws IOException, JsonProcessingException {
>>>>              final Map<String, Object> data = 
>>>> deserializationContext.readValue(jsonParser,
>>>> Map.class);
>>>>              return SchemaTable.of((String)data.get("schema"), 
>>>> (String) data.get("table"));
>>>>          }
>>>>
>>>>          @Override
>>>>          public boolean isCachable() {
>>>>              return true;
>>>>          }
>>>>      }
>>>>
>>>> This does not fire at all. Eventually I get a detached edge with an 
>>>> id that is a map. It never deserialized.
>>>>
>>>> So basically it only works if the SimpleModule version, i.e.
>>>> serialize/deserialize code matches up with the version.
>>>>
>>>> Sqlg serializes RecordId to,
>>>>
>>>>      static class RecordIdJacksonSerializerV3d0 extends 
>>>> StdScalarSerializer<RecordId> {
>>>>          public RecordIdJacksonSerializerV3d0() {
>>>>              super(RecordId.class);
>>>>          }
>>>>          @Override
>>>>          public void serialize(final RecordId recordId, final 
>>>> JsonGenerator jsonGenerator, final SerializerProvider 
>>>> serializerProvider)
>>>>                  throws IOException, JsonGenerationException {
>>>>              final Map<String, Object> m = new HashMap<>();
>>>>              m.put("schemaTable", recordId.getSchemaTable());
>>>>              m.put("id", recordId.getId());
>>>>              jsonGenerator.writeObject(m);
>>>>          }
>>>>      }
>>>>
>>>> and
>>>>
>>>>      static class SchemaTableJacksonSerializerV3d0 extends 
>>>> StdScalarSerializer<SchemaTable> {
>>>>          SchemaTableJacksonSerializerV3d0() {
>>>>              super(SchemaTable.class);
>>>>          }
>>>>
>>>>          @Override
>>>>          public void serialize(final SchemaTable schemaTable, final 
>>>> JsonGenerator jsonGenerator, final SerializerProvider
>>>> serializerProvider)
>>>>                  throws IOException, JsonGenerationException {
>>>>              // when types are not embedded, stringify or resort to 
>>>> JSON primitive representations of the
>>>>              // type so that non-jvm languages can better 
>>>> interoperate with the TinkerPop stack.
>>>>              final Map<String, Object> m = new LinkedHashMap<>();
>>>>              m.put("schema", schemaTable.getSchema());
>>>>              m.put("table", schemaTable.getTable());
>>>>              jsonGenerator.writeObject(m);
>>>>          }
>>>>
>>>>      }
>>>>
>>>> Hope it all makes some sense,
>>>> Pieter
>>>>
>>>>
>>>> On 05/09/2017 17:31, Stephen Mallette wrote:
>>>>
>>>> I guess I'm trying to understand why it matters for purpose of the test.
>>>>> If
>>>>> you mix/match versions I can't think of why the test would care 
>>>>> one way or the other. does sqlg serialize its id to a JSON Map?
>>>>>
>>>>> On Tue, Sep 5, 2017 at 11:19 AM, pieter gmail 
>>>>> <pieter.martin@gmail.com
>>>>> >
>>>>> wrote:
>>>>>
>>>>> I looked at TinkerGraph's implementation. In fact I copied it.
>>>>> TinkerGraph
>>>>>
>>>>>> does not have any special id serialization. In fact both its
>>>>>> TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses 
>>>>>> TinkerModuleV2d0.
>>>>>>
>>>>>>
>>>>>> In IoCustomTest tests you call g.io(GraphSONIo.build(GraphSON 
>>>>>> Version.V2_0)).mapper().addCustomModule(moduleV2d0).
>>>>>> I.e. the test manually registers the appropriate SimpleModule for 
>>>>>> each version.
>>>>>>
>>>>>> For IoEdgeTest the same needs to happen somehow. Currently I have 
>>>>>> only one default V3 SimpleModule same as TinkerGraph. I have 
>>>>>> written a V2 SimpleModule but how in IoEdgeTest will the correct 
>>>>>> IoRegistry or SimpleModule be selected? The test itself does not 
>>>>>> call
>>>>>> addCustomModule()
>>>>>> and between the builders, mappers, registries and modules I don't 
>>>>>> see how to add it.
>>>>>>
>>>>>> Thanks,
>>>>>> Pieter
>>>>>>
>>>>>> On 05/09/2017 16:30, Stephen Mallette wrote:
>>>>>>
>>>>>> You have registries for each version as well and default to v3. 
>>>>>> Please
>>>>>>
>>>>>>> see
>>>>>>> TinkerGraph:
>>>>>>>
>>>>>>> https://github.com/apache/tinkerpop/blob/master/tinkergraph-
>>>>>>> gremlin/src/main/java/org/apache/tinkerpop/gremlin/
>>>>>>> tinkergraph/structure/TinkerGraph.java#L198
>>>>>>>
>>>>>>> If the user wants to override that then that's their choice, but 
>>>>>>> they have to rig it all up. We probably need a better system 
>>>>>>> than this. IO is way too complicated and confusing.
>>>>>>>
>>>>>>> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail < 
>>>>>>> pieter.martin@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Afraid I still don't quite get it. How do I register the 
>>>>>>> different
>>>>>>>
>>>>>>> SimpleModules depending on the version.
>>>>>>>>
>>>>>>>> Currently it starts in SqlgGraph,
>>>>>>>>
>>>>>>>> @Override
>>>>>>>> public <I extends Io> I io(final Io.Builder<I> builder) {
>>>>>>>>        return (I) builder.graph(this).onMapper(mapper -> 
>>>>>>>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
>>>>>>>> }
>>>>>>>>
>>>>>>>> and the SqlgIoRegistry registers the SimpleModule
>>>>>>>>
>>>>>>>> private SqlgIoRegistry() {
>>>>>>>>        final SqlgSimpleModule sqlgSimpleModule = new 
>>>>>>>> SqlgSimpleModule();
>>>>>>>>        register(GraphSONIo.class, null, sqlgSimpleModule);
>>>>>>>>        register(GryoIo.class, RecordId.class, null); }
>>>>>>>>
>>>>>>>>
>>>>>>>> Is the SqlgGraph.io(...) method suppose to interrogate the 
>>>>>>>> builder to check the version and add a corresponding IoRegistry 
>>>>>>>> and SimpleModule?
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> Pieter
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 05/09/2017 13:30, Stephen Mallette wrote:
>>>>>>>>
>>>>>>>> I think you should just create a new SimpleModule for each 
>>>>>>>> version -
>>>>>>>>
>>>>>>>> don't
>>>>>>>>> try to put them in the same SqlgSimpleModule. It's a naming 
>>>>>>>>> convention that users will have to follow rather than 
>>>>>>>>> something explicitly enforced through code.
>>>>>>>>>
>>>>>>>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail < 
>>>>>>>>> pieter.martin@gmail.com
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I am getting IO tests failures on 3.3.0.
>>>>>>>>>
>>>>>>>>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>>>>>>>>
>>>>>>>>>>         SqlgSimpleModule() {
>>>>>>>>>>             super("custom");
>>>>>>>>>> //        addSerializer(RecordId.class, new
>>>>>>>>>> RecordId.RecordIdJacksonSerial izerV2d0());
>>>>>>>>>> //        addDeserializer(RecordId.class, new
>>>>>>>>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>>>>>>>>> //        addSerializer(SchemaTable.class, new
>>>>>>>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>>>>>>>>> //        addDeserializer(SchemaTable.class, new
>>>>>>>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>>>>>>>>
>>>>>>>>>>             addSerializer(RecordId.class, new 
>>>>>>>>>> RecordId.RecordIdJacksonSerial izerV3d0());
>>>>>>>>>>             addDeserializer(RecordId.class, new 
>>>>>>>>>> RecordId.RecordIdJacksonDeseri alizerV3d0());
>>>>>>>>>>             addSerializer(SchemaTable.class, new 
>>>>>>>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>>>>>>>>             addDeserializer(SchemaTable.class, new 
>>>>>>>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>>>>>>>>         }
>>>>>>>>>>
>>>>>>>>>> How is it suppose to distinguish between v2 and v3?
>>>>>>>>>>
>>>>>>>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>>>>>>>>
>>>>>>>>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>>>>>>>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>>>>>>>>
>>>>>>>>>> TinkerPop's own CustomId tests do not rely on default 
>>>>>>>>>> behavior and manually creates SimpleModules for each scenario.
>>>>>>>>>>
>>>>>>>>>> Are they both suppose to work somehow?
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>> Pieter
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>
>

Re: io and graphson-v3

Posted by Stephen Mallette <sp...@gmail.com>.
never mind - i see what's messed up

On Wed, Sep 6, 2017 at 1:43 PM, Stephen Mallette <sp...@gmail.com>
wrote:

> Which tests in particular are failing for SerializationTest? all of them?
>
> On Wed, Sep 6, 2017 at 1:35 PM, pieter gmail <pi...@gmail.com>
> wrote:
>
>> Hi,
>>
>> Pulled TINKERPOP-1767 branch, changed SqlgGraph's io method and ran the
>> tests.
>>
>> All the io tests are passing.
>> Only SerializationTest fails for the same reason. It too needs the
>> version specified. I did that locally and then all tests passes.
>>
>> Thanks
>> Pieter
>>
>> On 06/09/2017 18:09, Stephen Mallette wrote:
>>
>>> Pieter, I created this issue:
>>>
>>> https://issues.apache.org/jira/browse/TINKERPOP-1767
>>>
>>> and made an effort to try to figure a way to fix it:
>>>
>>> https://github.com/apache/tinkerpop/tree/TINKERPOP-1767
>>>
>>> Note the change to TinkerGraph and its io() method. I suppose you could
>>> do
>>> something similar to get the right registry in play? could you have a
>>> look
>>> and see if what i did helps? if that works then i'll issue a PR and we
>>> can
>>> get it reviewed/merged.
>>>
>>>
>>> On Tue, Sep 5, 2017 at 12:10 PM, pieter gmail <pi...@gmail.com>
>>> wrote:
>>>
>>> Ok, at present there is only one SimpleModule, the default. I can make it
>>>> v2 or v3 but not both.
>>>>
>>>> Lets say I make the SimpleModule support V2.
>>>> Then when calling IoEdgeTest for
>>>>
>>>>      {"graphson-v3", true, true,
>>>>          (Function<Graph, GraphReader>) g -> g.io
>>>> (IoCore.graphson()).reader
>>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>>>> mapper().create()).create(),
>>>>          (Function<Graph, GraphWriter>) g -> g.io
>>>> (IoCore.graphson()).writer
>>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>>>> mapper().create()).create()},
>>>>
>>>> then the deserializers that run are for V2,
>>>>
>>>>      static class SchemaTableIdJacksonDeserializerV2d0 extends
>>>> AbstractObjectDeserializer<SchemaTable> {
>>>>          SchemaTableIdJacksonDeserializerV2d0() {
>>>>              super(SchemaTable.class);
>>>>          }
>>>>
>>>>          @Override
>>>>          public SchemaTable createObject(final Map data) {
>>>>              return SchemaTable.of((String)data.get("schema"), (String)
>>>> data.get("table"));
>>>>          }
>>>>      }
>>>>
>>>> when createObject fires the map data has V3 elements in it like @type
>>>> and
>>>> @value whilst its expecting "schema" and "table"
>>>>
>>>> If we make the SimpleModule support V3 then graphson-v2 will fail.
>>>>
>>>>     {"graphson-v2", false, false,
>>>>         (Function<Graph, GraphReader>) g -> g.io
>>>> (IoCore.graphson()).reader
>>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>>>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create(),
>>>>         (Function<Graph, GraphWriter>) g -> g.io
>>>> (IoCore.graphson()).writer
>>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>>>>
>>>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create()},
>>>>
>>>> Now the deserializers are for V3.
>>>>
>>>>      static class SchemaTableJacksonDeserializerV3d0 extends
>>>> StdDeserializer<SchemaTable> {
>>>>          public SchemaTableJacksonDeserializerV3d0() {
>>>>              super(RecordId.class);
>>>>          }
>>>>
>>>>          @Override
>>>>          public SchemaTable deserialize(final JsonParser jsonParser,
>>>> final
>>>> DeserializationContext deserializationContext) throws IOException,
>>>> JsonProcessingException {
>>>>              final Map<String, Object> data =
>>>> deserializationContext.readValue(jsonParser,
>>>> Map.class);
>>>>              return SchemaTable.of((String)data.get("schema"), (String)
>>>> data.get("table"));
>>>>          }
>>>>
>>>>          @Override
>>>>          public boolean isCachable() {
>>>>              return true;
>>>>          }
>>>>      }
>>>>
>>>> This does not fire at all. Eventually I get a detached edge with an id
>>>> that is a map. It never deserialized.
>>>>
>>>> So basically it only works if the SimpleModule version, i.e.
>>>> serialize/deserialize code matches up with the version.
>>>>
>>>> Sqlg serializes RecordId to,
>>>>
>>>>      static class RecordIdJacksonSerializerV3d0 extends
>>>> StdScalarSerializer<RecordId> {
>>>>          public RecordIdJacksonSerializerV3d0() {
>>>>              super(RecordId.class);
>>>>          }
>>>>          @Override
>>>>          public void serialize(final RecordId recordId, final
>>>> JsonGenerator
>>>> jsonGenerator, final SerializerProvider serializerProvider)
>>>>                  throws IOException, JsonGenerationException {
>>>>              final Map<String, Object> m = new HashMap<>();
>>>>              m.put("schemaTable", recordId.getSchemaTable());
>>>>              m.put("id", recordId.getId());
>>>>              jsonGenerator.writeObject(m);
>>>>          }
>>>>      }
>>>>
>>>> and
>>>>
>>>>      static class SchemaTableJacksonSerializerV3d0 extends
>>>> StdScalarSerializer<SchemaTable> {
>>>>          SchemaTableJacksonSerializerV3d0() {
>>>>              super(SchemaTable.class);
>>>>          }
>>>>
>>>>          @Override
>>>>          public void serialize(final SchemaTable schemaTable, final
>>>> JsonGenerator jsonGenerator, final SerializerProvider
>>>> serializerProvider)
>>>>                  throws IOException, JsonGenerationException {
>>>>              // when types are not embedded, stringify or resort to JSON
>>>> primitive representations of the
>>>>              // type so that non-jvm languages can better interoperate
>>>> with
>>>> the TinkerPop stack.
>>>>              final Map<String, Object> m = new LinkedHashMap<>();
>>>>              m.put("schema", schemaTable.getSchema());
>>>>              m.put("table", schemaTable.getTable());
>>>>              jsonGenerator.writeObject(m);
>>>>          }
>>>>
>>>>      }
>>>>
>>>> Hope it all makes some sense,
>>>> Pieter
>>>>
>>>>
>>>> On 05/09/2017 17:31, Stephen Mallette wrote:
>>>>
>>>> I guess I'm trying to understand why it matters for purpose of the test.
>>>>> If
>>>>> you mix/match versions I can't think of why the test would care one
>>>>> way or
>>>>> the other. does sqlg serialize its id to a JSON Map?
>>>>>
>>>>> On Tue, Sep 5, 2017 at 11:19 AM, pieter gmail <pieter.martin@gmail.com
>>>>> >
>>>>> wrote:
>>>>>
>>>>> I looked at TinkerGraph's implementation. In fact I copied it.
>>>>> TinkerGraph
>>>>>
>>>>>> does not have any special id serialization. In fact both its
>>>>>> TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses
>>>>>> TinkerModuleV2d0.
>>>>>>
>>>>>>
>>>>>> In IoCustomTest tests you call g.io(GraphSONIo.build(GraphSON
>>>>>> Version.V2_0)).mapper().addCustomModule(moduleV2d0).
>>>>>> I.e. the test manually registers the appropriate SimpleModule for each
>>>>>> version.
>>>>>>
>>>>>> For IoEdgeTest the same needs to happen somehow. Currently I have only
>>>>>> one
>>>>>> default V3 SimpleModule same as TinkerGraph. I have written a V2
>>>>>> SimpleModule but how in IoEdgeTest will the correct IoRegistry or
>>>>>> SimpleModule be selected? The test itself does not call
>>>>>> addCustomModule()
>>>>>> and between the builders, mappers, registries and modules I don't see
>>>>>> how
>>>>>> to add it.
>>>>>>
>>>>>> Thanks,
>>>>>> Pieter
>>>>>>
>>>>>> On 05/09/2017 16:30, Stephen Mallette wrote:
>>>>>>
>>>>>> You have registries for each version as well and default to v3. Please
>>>>>>
>>>>>>> see
>>>>>>> TinkerGraph:
>>>>>>>
>>>>>>> https://github.com/apache/tinkerpop/blob/master/tinkergraph-
>>>>>>> gremlin/src/main/java/org/apache/tinkerpop/gremlin/
>>>>>>> tinkergraph/structure/TinkerGraph.java#L198
>>>>>>>
>>>>>>> If the user wants to override that then that's their choice, but they
>>>>>>> have
>>>>>>> to rig it all up. We probably need a better system than this. IO is
>>>>>>> way
>>>>>>> too
>>>>>>> complicated and confusing.
>>>>>>>
>>>>>>> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <
>>>>>>> pieter.martin@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Afraid I still don't quite get it. How do I register the different
>>>>>>>
>>>>>>> SimpleModules depending on the version.
>>>>>>>>
>>>>>>>> Currently it starts in SqlgGraph,
>>>>>>>>
>>>>>>>> @Override
>>>>>>>> public <I extends Io> I io(final Io.Builder<I> builder) {
>>>>>>>>        return (I) builder.graph(this).onMapper(mapper ->
>>>>>>>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
>>>>>>>> }
>>>>>>>>
>>>>>>>> and the SqlgIoRegistry registers the SimpleModule
>>>>>>>>
>>>>>>>> private SqlgIoRegistry() {
>>>>>>>>        final SqlgSimpleModule sqlgSimpleModule = new
>>>>>>>> SqlgSimpleModule();
>>>>>>>>        register(GraphSONIo.class, null, sqlgSimpleModule);
>>>>>>>>        register(GryoIo.class, RecordId.class, null);
>>>>>>>> }
>>>>>>>>
>>>>>>>>
>>>>>>>> Is the SqlgGraph.io(...) method suppose to interrogate the builder
>>>>>>>> to
>>>>>>>> check the version and add a corresponding IoRegistry and
>>>>>>>> SimpleModule?
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> Pieter
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 05/09/2017 13:30, Stephen Mallette wrote:
>>>>>>>>
>>>>>>>> I think you should just create a new SimpleModule for each version -
>>>>>>>>
>>>>>>>> don't
>>>>>>>>> try to put them in the same SqlgSimpleModule. It's a naming
>>>>>>>>> convention
>>>>>>>>> that
>>>>>>>>> users will have to follow rather than something explicitly enforced
>>>>>>>>> through
>>>>>>>>> code.
>>>>>>>>>
>>>>>>>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <
>>>>>>>>> pieter.martin@gmail.com
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> I am getting IO tests failures on 3.3.0.
>>>>>>>>>
>>>>>>>>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>>>>>>>>
>>>>>>>>>>         SqlgSimpleModule() {
>>>>>>>>>>             super("custom");
>>>>>>>>>> //        addSerializer(RecordId.class, new
>>>>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>>>>> izerV2d0());
>>>>>>>>>> //        addDeserializer(RecordId.class, new
>>>>>>>>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>>>>>>>>> //        addSerializer(SchemaTable.class, new
>>>>>>>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>>>>>>>>> //        addDeserializer(SchemaTable.class, new
>>>>>>>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>>>>>>>>
>>>>>>>>>>             addSerializer(RecordId.class, new
>>>>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>>>>> izerV3d0());
>>>>>>>>>>             addDeserializer(RecordId.class, new
>>>>>>>>>> RecordId.RecordIdJacksonDeseri
>>>>>>>>>> alizerV3d0());
>>>>>>>>>>             addSerializer(SchemaTable.class, new
>>>>>>>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>>>>>>>>             addDeserializer(SchemaTable.class, new
>>>>>>>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>>>>>>>>         }
>>>>>>>>>>
>>>>>>>>>> How is it suppose to distinguish between v2 and v3?
>>>>>>>>>>
>>>>>>>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>>>>>>>>
>>>>>>>>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>>>>>>>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>>>>>>>>
>>>>>>>>>> TinkerPop's own CustomId tests do not rely on default behavior and
>>>>>>>>>> manually creates SimpleModules for each scenario.
>>>>>>>>>>
>>>>>>>>>> Are they both suppose to work somehow?
>>>>>>>>>>
>>>>>>>>>> Thanks
>>>>>>>>>> Pieter
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>
>

Re: io and graphson-v3

Posted by Stephen Mallette <sp...@gmail.com>.
Which tests in particular are failing for SerializationTest? all of them?

On Wed, Sep 6, 2017 at 1:35 PM, pieter gmail <pi...@gmail.com>
wrote:

> Hi,
>
> Pulled TINKERPOP-1767 branch, changed SqlgGraph's io method and ran the
> tests.
>
> All the io tests are passing.
> Only SerializationTest fails for the same reason. It too needs the version
> specified. I did that locally and then all tests passes.
>
> Thanks
> Pieter
>
> On 06/09/2017 18:09, Stephen Mallette wrote:
>
>> Pieter, I created this issue:
>>
>> https://issues.apache.org/jira/browse/TINKERPOP-1767
>>
>> and made an effort to try to figure a way to fix it:
>>
>> https://github.com/apache/tinkerpop/tree/TINKERPOP-1767
>>
>> Note the change to TinkerGraph and its io() method. I suppose you could do
>> something similar to get the right registry in play? could you have a look
>> and see if what i did helps? if that works then i'll issue a PR and we can
>> get it reviewed/merged.
>>
>>
>> On Tue, Sep 5, 2017 at 12:10 PM, pieter gmail <pi...@gmail.com>
>> wrote:
>>
>> Ok, at present there is only one SimpleModule, the default. I can make it
>>> v2 or v3 but not both.
>>>
>>> Lets say I make the SimpleModule support V2.
>>> Then when calling IoEdgeTest for
>>>
>>>      {"graphson-v3", true, true,
>>>          (Function<Graph, GraphReader>) g -> g.io
>>> (IoCore.graphson()).reader
>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>>> mapper().create()).create(),
>>>          (Function<Graph, GraphWriter>) g -> g.io
>>> (IoCore.graphson()).writer
>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>>> mapper().create()).create()},
>>>
>>> then the deserializers that run are for V2,
>>>
>>>      static class SchemaTableIdJacksonDeserializerV2d0 extends
>>> AbstractObjectDeserializer<SchemaTable> {
>>>          SchemaTableIdJacksonDeserializerV2d0() {
>>>              super(SchemaTable.class);
>>>          }
>>>
>>>          @Override
>>>          public SchemaTable createObject(final Map data) {
>>>              return SchemaTable.of((String)data.get("schema"), (String)
>>> data.get("table"));
>>>          }
>>>      }
>>>
>>> when createObject fires the map data has V3 elements in it like @type and
>>> @value whilst its expecting "schema" and "table"
>>>
>>> If we make the SimpleModule support V3 then graphson-v2 will fail.
>>>
>>>     {"graphson-v2", false, false,
>>>         (Function<Graph, GraphReader>) g -> g.io
>>> (IoCore.graphson()).reader
>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create(),
>>>         (Function<Graph, GraphWriter>) g -> g.io
>>> (IoCore.graphson()).writer
>>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>>>
>>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create()},
>>>
>>> Now the deserializers are for V3.
>>>
>>>      static class SchemaTableJacksonDeserializerV3d0 extends
>>> StdDeserializer<SchemaTable> {
>>>          public SchemaTableJacksonDeserializerV3d0() {
>>>              super(RecordId.class);
>>>          }
>>>
>>>          @Override
>>>          public SchemaTable deserialize(final JsonParser jsonParser,
>>> final
>>> DeserializationContext deserializationContext) throws IOException,
>>> JsonProcessingException {
>>>              final Map<String, Object> data =
>>> deserializationContext.readValue(jsonParser,
>>> Map.class);
>>>              return SchemaTable.of((String)data.get("schema"), (String)
>>> data.get("table"));
>>>          }
>>>
>>>          @Override
>>>          public boolean isCachable() {
>>>              return true;
>>>          }
>>>      }
>>>
>>> This does not fire at all. Eventually I get a detached edge with an id
>>> that is a map. It never deserialized.
>>>
>>> So basically it only works if the SimpleModule version, i.e.
>>> serialize/deserialize code matches up with the version.
>>>
>>> Sqlg serializes RecordId to,
>>>
>>>      static class RecordIdJacksonSerializerV3d0 extends
>>> StdScalarSerializer<RecordId> {
>>>          public RecordIdJacksonSerializerV3d0() {
>>>              super(RecordId.class);
>>>          }
>>>          @Override
>>>          public void serialize(final RecordId recordId, final
>>> JsonGenerator
>>> jsonGenerator, final SerializerProvider serializerProvider)
>>>                  throws IOException, JsonGenerationException {
>>>              final Map<String, Object> m = new HashMap<>();
>>>              m.put("schemaTable", recordId.getSchemaTable());
>>>              m.put("id", recordId.getId());
>>>              jsonGenerator.writeObject(m);
>>>          }
>>>      }
>>>
>>> and
>>>
>>>      static class SchemaTableJacksonSerializerV3d0 extends
>>> StdScalarSerializer<SchemaTable> {
>>>          SchemaTableJacksonSerializerV3d0() {
>>>              super(SchemaTable.class);
>>>          }
>>>
>>>          @Override
>>>          public void serialize(final SchemaTable schemaTable, final
>>> JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
>>>                  throws IOException, JsonGenerationException {
>>>              // when types are not embedded, stringify or resort to JSON
>>> primitive representations of the
>>>              // type so that non-jvm languages can better interoperate
>>> with
>>> the TinkerPop stack.
>>>              final Map<String, Object> m = new LinkedHashMap<>();
>>>              m.put("schema", schemaTable.getSchema());
>>>              m.put("table", schemaTable.getTable());
>>>              jsonGenerator.writeObject(m);
>>>          }
>>>
>>>      }
>>>
>>> Hope it all makes some sense,
>>> Pieter
>>>
>>>
>>> On 05/09/2017 17:31, Stephen Mallette wrote:
>>>
>>> I guess I'm trying to understand why it matters for purpose of the test.
>>>> If
>>>> you mix/match versions I can't think of why the test would care one way
>>>> or
>>>> the other. does sqlg serialize its id to a JSON Map?
>>>>
>>>> On Tue, Sep 5, 2017 at 11:19 AM, pieter gmail <pi...@gmail.com>
>>>> wrote:
>>>>
>>>> I looked at TinkerGraph's implementation. In fact I copied it.
>>>> TinkerGraph
>>>>
>>>>> does not have any special id serialization. In fact both its
>>>>> TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses
>>>>> TinkerModuleV2d0.
>>>>>
>>>>>
>>>>> In IoCustomTest tests you call g.io(GraphSONIo.build(GraphSON
>>>>> Version.V2_0)).mapper().addCustomModule(moduleV2d0).
>>>>> I.e. the test manually registers the appropriate SimpleModule for each
>>>>> version.
>>>>>
>>>>> For IoEdgeTest the same needs to happen somehow. Currently I have only
>>>>> one
>>>>> default V3 SimpleModule same as TinkerGraph. I have written a V2
>>>>> SimpleModule but how in IoEdgeTest will the correct IoRegistry or
>>>>> SimpleModule be selected? The test itself does not call
>>>>> addCustomModule()
>>>>> and between the builders, mappers, registries and modules I don't see
>>>>> how
>>>>> to add it.
>>>>>
>>>>> Thanks,
>>>>> Pieter
>>>>>
>>>>> On 05/09/2017 16:30, Stephen Mallette wrote:
>>>>>
>>>>> You have registries for each version as well and default to v3. Please
>>>>>
>>>>>> see
>>>>>> TinkerGraph:
>>>>>>
>>>>>> https://github.com/apache/tinkerpop/blob/master/tinkergraph-
>>>>>> gremlin/src/main/java/org/apache/tinkerpop/gremlin/
>>>>>> tinkergraph/structure/TinkerGraph.java#L198
>>>>>>
>>>>>> If the user wants to override that then that's their choice, but they
>>>>>> have
>>>>>> to rig it all up. We probably need a better system than this. IO is
>>>>>> way
>>>>>> too
>>>>>> complicated and confusing.
>>>>>>
>>>>>> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <pieter.martin@gmail.com
>>>>>> >
>>>>>> wrote:
>>>>>>
>>>>>> Afraid I still don't quite get it. How do I register the different
>>>>>>
>>>>>> SimpleModules depending on the version.
>>>>>>>
>>>>>>> Currently it starts in SqlgGraph,
>>>>>>>
>>>>>>> @Override
>>>>>>> public <I extends Io> I io(final Io.Builder<I> builder) {
>>>>>>>        return (I) builder.graph(this).onMapper(mapper ->
>>>>>>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
>>>>>>> }
>>>>>>>
>>>>>>> and the SqlgIoRegistry registers the SimpleModule
>>>>>>>
>>>>>>> private SqlgIoRegistry() {
>>>>>>>        final SqlgSimpleModule sqlgSimpleModule = new
>>>>>>> SqlgSimpleModule();
>>>>>>>        register(GraphSONIo.class, null, sqlgSimpleModule);
>>>>>>>        register(GryoIo.class, RecordId.class, null);
>>>>>>> }
>>>>>>>
>>>>>>>
>>>>>>> Is the SqlgGraph.io(...) method suppose to interrogate the builder to
>>>>>>> check the version and add a corresponding IoRegistry and
>>>>>>> SimpleModule?
>>>>>>>
>>>>>>> Thanks
>>>>>>> Pieter
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 05/09/2017 13:30, Stephen Mallette wrote:
>>>>>>>
>>>>>>> I think you should just create a new SimpleModule for each version -
>>>>>>>
>>>>>>> don't
>>>>>>>> try to put them in the same SqlgSimpleModule. It's a naming
>>>>>>>> convention
>>>>>>>> that
>>>>>>>> users will have to follow rather than something explicitly enforced
>>>>>>>> through
>>>>>>>> code.
>>>>>>>>
>>>>>>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <
>>>>>>>> pieter.martin@gmail.com
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> I am getting IO tests failures on 3.3.0.
>>>>>>>>
>>>>>>>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>>>>>>>
>>>>>>>>>         SqlgSimpleModule() {
>>>>>>>>>             super("custom");
>>>>>>>>> //        addSerializer(RecordId.class, new
>>>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>>>> izerV2d0());
>>>>>>>>> //        addDeserializer(RecordId.class, new
>>>>>>>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>>>>>>>> //        addSerializer(SchemaTable.class, new
>>>>>>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>>>>>>>> //        addDeserializer(SchemaTable.class, new
>>>>>>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>>>>>>>
>>>>>>>>>             addSerializer(RecordId.class, new
>>>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>>>> izerV3d0());
>>>>>>>>>             addDeserializer(RecordId.class, new
>>>>>>>>> RecordId.RecordIdJacksonDeseri
>>>>>>>>> alizerV3d0());
>>>>>>>>>             addSerializer(SchemaTable.class, new
>>>>>>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>>>>>>>             addDeserializer(SchemaTable.class, new
>>>>>>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>>>>>>>         }
>>>>>>>>>
>>>>>>>>> How is it suppose to distinguish between v2 and v3?
>>>>>>>>>
>>>>>>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>>>>>>>
>>>>>>>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>>>>>>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>>>>>>>
>>>>>>>>> TinkerPop's own CustomId tests do not rely on default behavior and
>>>>>>>>> manually creates SimpleModules for each scenario.
>>>>>>>>>
>>>>>>>>> Are they both suppose to work somehow?
>>>>>>>>>
>>>>>>>>> Thanks
>>>>>>>>> Pieter
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>

Re: io and graphson-v3

Posted by pieter gmail <pi...@gmail.com>.
Hi,

Pulled TINKERPOP-1767 branch, changed SqlgGraph's io method and ran the 
tests.

All the io tests are passing.
Only SerializationTest fails for the same reason. It too needs the 
version specified. I did that locally and then all tests passes.

Thanks
Pieter

On 06/09/2017 18:09, Stephen Mallette wrote:
> Pieter, I created this issue:
>
> https://issues.apache.org/jira/browse/TINKERPOP-1767
>
> and made an effort to try to figure a way to fix it:
>
> https://github.com/apache/tinkerpop/tree/TINKERPOP-1767
>
> Note the change to TinkerGraph and its io() method. I suppose you could do
> something similar to get the right registry in play? could you have a look
> and see if what i did helps? if that works then i'll issue a PR and we can
> get it reviewed/merged.
>
>
> On Tue, Sep 5, 2017 at 12:10 PM, pieter gmail <pi...@gmail.com>
> wrote:
>
>> Ok, at present there is only one SimpleModule, the default. I can make it
>> v2 or v3 but not both.
>>
>> Lets say I make the SimpleModule support V2.
>> Then when calling IoEdgeTest for
>>
>>      {"graphson-v3", true, true,
>>          (Function<Graph, GraphReader>) g -> g.io(IoCore.graphson()).reader
>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>> mapper().create()).create(),
>>          (Function<Graph, GraphWriter>) g -> g.io(IoCore.graphson()).writer
>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>> mapper().create()).create()},
>>
>> then the deserializers that run are for V2,
>>
>>      static class SchemaTableIdJacksonDeserializerV2d0 extends
>> AbstractObjectDeserializer<SchemaTable> {
>>          SchemaTableIdJacksonDeserializerV2d0() {
>>              super(SchemaTable.class);
>>          }
>>
>>          @Override
>>          public SchemaTable createObject(final Map data) {
>>              return SchemaTable.of((String)data.get("schema"), (String)
>> data.get("table"));
>>          }
>>      }
>>
>> when createObject fires the map data has V3 elements in it like @type and
>> @value whilst its expecting "schema" and "table"
>>
>> If we make the SimpleModule support V3 then graphson-v2 will fail.
>>
>>     {"graphson-v2", false, false,
>>         (Function<Graph, GraphReader>) g -> g.io(IoCore.graphson()).reader
>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create(),
>>         (Function<Graph, GraphWriter>) g -> g.io(IoCore.graphson()).writer
>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create()},
>>
>> Now the deserializers are for V3.
>>
>>      static class SchemaTableJacksonDeserializerV3d0 extends
>> StdDeserializer<SchemaTable> {
>>          public SchemaTableJacksonDeserializerV3d0() {
>>              super(RecordId.class);
>>          }
>>
>>          @Override
>>          public SchemaTable deserialize(final JsonParser jsonParser, final
>> DeserializationContext deserializationContext) throws IOException,
>> JsonProcessingException {
>>              final Map<String, Object> data = deserializationContext.readValue(jsonParser,
>> Map.class);
>>              return SchemaTable.of((String)data.get("schema"), (String)
>> data.get("table"));
>>          }
>>
>>          @Override
>>          public boolean isCachable() {
>>              return true;
>>          }
>>      }
>>
>> This does not fire at all. Eventually I get a detached edge with an id
>> that is a map. It never deserialized.
>>
>> So basically it only works if the SimpleModule version, i.e.
>> serialize/deserialize code matches up with the version.
>>
>> Sqlg serializes RecordId to,
>>
>>      static class RecordIdJacksonSerializerV3d0 extends
>> StdScalarSerializer<RecordId> {
>>          public RecordIdJacksonSerializerV3d0() {
>>              super(RecordId.class);
>>          }
>>          @Override
>>          public void serialize(final RecordId recordId, final JsonGenerator
>> jsonGenerator, final SerializerProvider serializerProvider)
>>                  throws IOException, JsonGenerationException {
>>              final Map<String, Object> m = new HashMap<>();
>>              m.put("schemaTable", recordId.getSchemaTable());
>>              m.put("id", recordId.getId());
>>              jsonGenerator.writeObject(m);
>>          }
>>      }
>>
>> and
>>
>>      static class SchemaTableJacksonSerializerV3d0 extends
>> StdScalarSerializer<SchemaTable> {
>>          SchemaTableJacksonSerializerV3d0() {
>>              super(SchemaTable.class);
>>          }
>>
>>          @Override
>>          public void serialize(final SchemaTable schemaTable, final
>> JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
>>                  throws IOException, JsonGenerationException {
>>              // when types are not embedded, stringify or resort to JSON
>> primitive representations of the
>>              // type so that non-jvm languages can better interoperate with
>> the TinkerPop stack.
>>              final Map<String, Object> m = new LinkedHashMap<>();
>>              m.put("schema", schemaTable.getSchema());
>>              m.put("table", schemaTable.getTable());
>>              jsonGenerator.writeObject(m);
>>          }
>>
>>      }
>>
>> Hope it all makes some sense,
>> Pieter
>>
>>
>> On 05/09/2017 17:31, Stephen Mallette wrote:
>>
>>> I guess I'm trying to understand why it matters for purpose of the test.
>>> If
>>> you mix/match versions I can't think of why the test would care one way or
>>> the other. does sqlg serialize its id to a JSON Map?
>>>
>>> On Tue, Sep 5, 2017 at 11:19 AM, pieter gmail <pi...@gmail.com>
>>> wrote:
>>>
>>> I looked at TinkerGraph's implementation. In fact I copied it. TinkerGraph
>>>> does not have any special id serialization. In fact both its
>>>> TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses
>>>> TinkerModuleV2d0.
>>>>
>>>>
>>>> In IoCustomTest tests you call g.io(GraphSONIo.build(GraphSON
>>>> Version.V2_0)).mapper().addCustomModule(moduleV2d0).
>>>> I.e. the test manually registers the appropriate SimpleModule for each
>>>> version.
>>>>
>>>> For IoEdgeTest the same needs to happen somehow. Currently I have only
>>>> one
>>>> default V3 SimpleModule same as TinkerGraph. I have written a V2
>>>> SimpleModule but how in IoEdgeTest will the correct IoRegistry or
>>>> SimpleModule be selected? The test itself does not call addCustomModule()
>>>> and between the builders, mappers, registries and modules I don't see how
>>>> to add it.
>>>>
>>>> Thanks,
>>>> Pieter
>>>>
>>>> On 05/09/2017 16:30, Stephen Mallette wrote:
>>>>
>>>> You have registries for each version as well and default to v3. Please
>>>>> see
>>>>> TinkerGraph:
>>>>>
>>>>> https://github.com/apache/tinkerpop/blob/master/tinkergraph-
>>>>> gremlin/src/main/java/org/apache/tinkerpop/gremlin/
>>>>> tinkergraph/structure/TinkerGraph.java#L198
>>>>>
>>>>> If the user wants to override that then that's their choice, but they
>>>>> have
>>>>> to rig it all up. We probably need a better system than this. IO is way
>>>>> too
>>>>> complicated and confusing.
>>>>>
>>>>> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <pi...@gmail.com>
>>>>> wrote:
>>>>>
>>>>> Afraid I still don't quite get it. How do I register the different
>>>>>
>>>>>> SimpleModules depending on the version.
>>>>>>
>>>>>> Currently it starts in SqlgGraph,
>>>>>>
>>>>>> @Override
>>>>>> public <I extends Io> I io(final Io.Builder<I> builder) {
>>>>>>        return (I) builder.graph(this).onMapper(mapper ->
>>>>>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
>>>>>> }
>>>>>>
>>>>>> and the SqlgIoRegistry registers the SimpleModule
>>>>>>
>>>>>> private SqlgIoRegistry() {
>>>>>>        final SqlgSimpleModule sqlgSimpleModule = new SqlgSimpleModule();
>>>>>>        register(GraphSONIo.class, null, sqlgSimpleModule);
>>>>>>        register(GryoIo.class, RecordId.class, null);
>>>>>> }
>>>>>>
>>>>>>
>>>>>> Is the SqlgGraph.io(...) method suppose to interrogate the builder to
>>>>>> check the version and add a corresponding IoRegistry and SimpleModule?
>>>>>>
>>>>>> Thanks
>>>>>> Pieter
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 05/09/2017 13:30, Stephen Mallette wrote:
>>>>>>
>>>>>> I think you should just create a new SimpleModule for each version -
>>>>>>
>>>>>>> don't
>>>>>>> try to put them in the same SqlgSimpleModule. It's a naming convention
>>>>>>> that
>>>>>>> users will have to follow rather than something explicitly enforced
>>>>>>> through
>>>>>>> code.
>>>>>>>
>>>>>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <pieter.martin@gmail.com
>>>>>>> wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I am getting IO tests failures on 3.3.0.
>>>>>>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>>>>>>
>>>>>>>>         SqlgSimpleModule() {
>>>>>>>>             super("custom");
>>>>>>>> //        addSerializer(RecordId.class, new
>>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>>> izerV2d0());
>>>>>>>> //        addDeserializer(RecordId.class, new
>>>>>>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>>>>>>> //        addSerializer(SchemaTable.class, new
>>>>>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>>>>>>> //        addDeserializer(SchemaTable.class, new
>>>>>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>>>>>>
>>>>>>>>             addSerializer(RecordId.class, new
>>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>>> izerV3d0());
>>>>>>>>             addDeserializer(RecordId.class, new
>>>>>>>> RecordId.RecordIdJacksonDeseri
>>>>>>>> alizerV3d0());
>>>>>>>>             addSerializer(SchemaTable.class, new
>>>>>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>>>>>>             addDeserializer(SchemaTable.class, new
>>>>>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>>>>>>         }
>>>>>>>>
>>>>>>>> How is it suppose to distinguish between v2 and v3?
>>>>>>>>
>>>>>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>>>>>>
>>>>>>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>>>>>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>>>>>>
>>>>>>>> TinkerPop's own CustomId tests do not rely on default behavior and
>>>>>>>> manually creates SimpleModules for each scenario.
>>>>>>>>
>>>>>>>> Are they both suppose to work somehow?
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> Pieter
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>


Re: io and graphson-v3

Posted by pieter gmail <pi...@gmail.com>.
Thanks, I'll have a look.
For now on 3.3.0 I'll OptOut of some io tests. I'll let you know the 
OptOut list.

Thanks
Pieter

On 06/09/2017 18:09, Stephen Mallette wrote:
> Pieter, I created this issue:
>
> https://issues.apache.org/jira/browse/TINKERPOP-1767
>
> and made an effort to try to figure a way to fix it:
>
> https://github.com/apache/tinkerpop/tree/TINKERPOP-1767
>
> Note the change to TinkerGraph and its io() method. I suppose you could do
> something similar to get the right registry in play? could you have a look
> and see if what i did helps? if that works then i'll issue a PR and we can
> get it reviewed/merged.
>
>
> On Tue, Sep 5, 2017 at 12:10 PM, pieter gmail <pi...@gmail.com>
> wrote:
>
>> Ok, at present there is only one SimpleModule, the default. I can make it
>> v2 or v3 but not both.
>>
>> Lets say I make the SimpleModule support V2.
>> Then when calling IoEdgeTest for
>>
>>      {"graphson-v3", true, true,
>>          (Function<Graph, GraphReader>) g -> g.io(IoCore.graphson()).reader
>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>> mapper().create()).create(),
>>          (Function<Graph, GraphWriter>) g -> g.io(IoCore.graphson()).writer
>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
>> mapper().create()).create()},
>>
>> then the deserializers that run are for V2,
>>
>>      static class SchemaTableIdJacksonDeserializerV2d0 extends
>> AbstractObjectDeserializer<SchemaTable> {
>>          SchemaTableIdJacksonDeserializerV2d0() {
>>              super(SchemaTable.class);
>>          }
>>
>>          @Override
>>          public SchemaTable createObject(final Map data) {
>>              return SchemaTable.of((String)data.get("schema"), (String)
>> data.get("table"));
>>          }
>>      }
>>
>> when createObject fires the map data has V3 elements in it like @type and
>> @value whilst its expecting "schema" and "table"
>>
>> If we make the SimpleModule support V3 then graphson-v2 will fail.
>>
>>     {"graphson-v2", false, false,
>>         (Function<Graph, GraphReader>) g -> g.io(IoCore.graphson()).reader
>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create(),
>>         (Function<Graph, GraphWriter>) g -> g.io(IoCore.graphson()).writer
>> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
>> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create()},
>>
>> Now the deserializers are for V3.
>>
>>      static class SchemaTableJacksonDeserializerV3d0 extends
>> StdDeserializer<SchemaTable> {
>>          public SchemaTableJacksonDeserializerV3d0() {
>>              super(RecordId.class);
>>          }
>>
>>          @Override
>>          public SchemaTable deserialize(final JsonParser jsonParser, final
>> DeserializationContext deserializationContext) throws IOException,
>> JsonProcessingException {
>>              final Map<String, Object> data = deserializationContext.readValue(jsonParser,
>> Map.class);
>>              return SchemaTable.of((String)data.get("schema"), (String)
>> data.get("table"));
>>          }
>>
>>          @Override
>>          public boolean isCachable() {
>>              return true;
>>          }
>>      }
>>
>> This does not fire at all. Eventually I get a detached edge with an id
>> that is a map. It never deserialized.
>>
>> So basically it only works if the SimpleModule version, i.e.
>> serialize/deserialize code matches up with the version.
>>
>> Sqlg serializes RecordId to,
>>
>>      static class RecordIdJacksonSerializerV3d0 extends
>> StdScalarSerializer<RecordId> {
>>          public RecordIdJacksonSerializerV3d0() {
>>              super(RecordId.class);
>>          }
>>          @Override
>>          public void serialize(final RecordId recordId, final JsonGenerator
>> jsonGenerator, final SerializerProvider serializerProvider)
>>                  throws IOException, JsonGenerationException {
>>              final Map<String, Object> m = new HashMap<>();
>>              m.put("schemaTable", recordId.getSchemaTable());
>>              m.put("id", recordId.getId());
>>              jsonGenerator.writeObject(m);
>>          }
>>      }
>>
>> and
>>
>>      static class SchemaTableJacksonSerializerV3d0 extends
>> StdScalarSerializer<SchemaTable> {
>>          SchemaTableJacksonSerializerV3d0() {
>>              super(SchemaTable.class);
>>          }
>>
>>          @Override
>>          public void serialize(final SchemaTable schemaTable, final
>> JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
>>                  throws IOException, JsonGenerationException {
>>              // when types are not embedded, stringify or resort to JSON
>> primitive representations of the
>>              // type so that non-jvm languages can better interoperate with
>> the TinkerPop stack.
>>              final Map<String, Object> m = new LinkedHashMap<>();
>>              m.put("schema", schemaTable.getSchema());
>>              m.put("table", schemaTable.getTable());
>>              jsonGenerator.writeObject(m);
>>          }
>>
>>      }
>>
>> Hope it all makes some sense,
>> Pieter
>>
>>
>> On 05/09/2017 17:31, Stephen Mallette wrote:
>>
>>> I guess I'm trying to understand why it matters for purpose of the test.
>>> If
>>> you mix/match versions I can't think of why the test would care one way or
>>> the other. does sqlg serialize its id to a JSON Map?
>>>
>>> On Tue, Sep 5, 2017 at 11:19 AM, pieter gmail <pi...@gmail.com>
>>> wrote:
>>>
>>> I looked at TinkerGraph's implementation. In fact I copied it. TinkerGraph
>>>> does not have any special id serialization. In fact both its
>>>> TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses
>>>> TinkerModuleV2d0.
>>>>
>>>>
>>>> In IoCustomTest tests you call g.io(GraphSONIo.build(GraphSON
>>>> Version.V2_0)).mapper().addCustomModule(moduleV2d0).
>>>> I.e. the test manually registers the appropriate SimpleModule for each
>>>> version.
>>>>
>>>> For IoEdgeTest the same needs to happen somehow. Currently I have only
>>>> one
>>>> default V3 SimpleModule same as TinkerGraph. I have written a V2
>>>> SimpleModule but how in IoEdgeTest will the correct IoRegistry or
>>>> SimpleModule be selected? The test itself does not call addCustomModule()
>>>> and between the builders, mappers, registries and modules I don't see how
>>>> to add it.
>>>>
>>>> Thanks,
>>>> Pieter
>>>>
>>>> On 05/09/2017 16:30, Stephen Mallette wrote:
>>>>
>>>> You have registries for each version as well and default to v3. Please
>>>>> see
>>>>> TinkerGraph:
>>>>>
>>>>> https://github.com/apache/tinkerpop/blob/master/tinkergraph-
>>>>> gremlin/src/main/java/org/apache/tinkerpop/gremlin/
>>>>> tinkergraph/structure/TinkerGraph.java#L198
>>>>>
>>>>> If the user wants to override that then that's their choice, but they
>>>>> have
>>>>> to rig it all up. We probably need a better system than this. IO is way
>>>>> too
>>>>> complicated and confusing.
>>>>>
>>>>> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <pi...@gmail.com>
>>>>> wrote:
>>>>>
>>>>> Afraid I still don't quite get it. How do I register the different
>>>>>
>>>>>> SimpleModules depending on the version.
>>>>>>
>>>>>> Currently it starts in SqlgGraph,
>>>>>>
>>>>>> @Override
>>>>>> public <I extends Io> I io(final Io.Builder<I> builder) {
>>>>>>        return (I) builder.graph(this).onMapper(mapper ->
>>>>>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
>>>>>> }
>>>>>>
>>>>>> and the SqlgIoRegistry registers the SimpleModule
>>>>>>
>>>>>> private SqlgIoRegistry() {
>>>>>>        final SqlgSimpleModule sqlgSimpleModule = new SqlgSimpleModule();
>>>>>>        register(GraphSONIo.class, null, sqlgSimpleModule);
>>>>>>        register(GryoIo.class, RecordId.class, null);
>>>>>> }
>>>>>>
>>>>>>
>>>>>> Is the SqlgGraph.io(...) method suppose to interrogate the builder to
>>>>>> check the version and add a corresponding IoRegistry and SimpleModule?
>>>>>>
>>>>>> Thanks
>>>>>> Pieter
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On 05/09/2017 13:30, Stephen Mallette wrote:
>>>>>>
>>>>>> I think you should just create a new SimpleModule for each version -
>>>>>>
>>>>>>> don't
>>>>>>> try to put them in the same SqlgSimpleModule. It's a naming convention
>>>>>>> that
>>>>>>> users will have to follow rather than something explicitly enforced
>>>>>>> through
>>>>>>> code.
>>>>>>>
>>>>>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <pieter.martin@gmail.com
>>>>>>> wrote:
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I am getting IO tests failures on 3.3.0.
>>>>>>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>>>>>>
>>>>>>>>         SqlgSimpleModule() {
>>>>>>>>             super("custom");
>>>>>>>> //        addSerializer(RecordId.class, new
>>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>>> izerV2d0());
>>>>>>>> //        addDeserializer(RecordId.class, new
>>>>>>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>>>>>>> //        addSerializer(SchemaTable.class, new
>>>>>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>>>>>>> //        addDeserializer(SchemaTable.class, new
>>>>>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>>>>>>
>>>>>>>>             addSerializer(RecordId.class, new
>>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>>> izerV3d0());
>>>>>>>>             addDeserializer(RecordId.class, new
>>>>>>>> RecordId.RecordIdJacksonDeseri
>>>>>>>> alizerV3d0());
>>>>>>>>             addSerializer(SchemaTable.class, new
>>>>>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>>>>>>             addDeserializer(SchemaTable.class, new
>>>>>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>>>>>>         }
>>>>>>>>
>>>>>>>> How is it suppose to distinguish between v2 and v3?
>>>>>>>>
>>>>>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>>>>>>
>>>>>>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>>>>>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>>>>>>
>>>>>>>> TinkerPop's own CustomId tests do not rely on default behavior and
>>>>>>>> manually creates SimpleModules for each scenario.
>>>>>>>>
>>>>>>>> Are they both suppose to work somehow?
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>> Pieter
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>


Re: io and graphson-v3

Posted by Stephen Mallette <sp...@gmail.com>.
Pieter, I created this issue:

https://issues.apache.org/jira/browse/TINKERPOP-1767

and made an effort to try to figure a way to fix it:

https://github.com/apache/tinkerpop/tree/TINKERPOP-1767

Note the change to TinkerGraph and its io() method. I suppose you could do
something similar to get the right registry in play? could you have a look
and see if what i did helps? if that works then i'll issue a PR and we can
get it reviewed/merged.


On Tue, Sep 5, 2017 at 12:10 PM, pieter gmail <pi...@gmail.com>
wrote:

> Ok, at present there is only one SimpleModule, the default. I can make it
> v2 or v3 but not both.
>
> Lets say I make the SimpleModule support V2.
> Then when calling IoEdgeTest for
>
>     {"graphson-v3", true, true,
>         (Function<Graph, GraphReader>) g -> g.io(IoCore.graphson()).reader
> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
> mapper().create()).create(),
>         (Function<Graph, GraphWriter>) g -> g.io(IoCore.graphson()).writer
> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).
> mapper().create()).create()},
>
> then the deserializers that run are for V2,
>
>     static class SchemaTableIdJacksonDeserializerV2d0 extends
> AbstractObjectDeserializer<SchemaTable> {
>         SchemaTableIdJacksonDeserializerV2d0() {
>             super(SchemaTable.class);
>         }
>
>         @Override
>         public SchemaTable createObject(final Map data) {
>             return SchemaTable.of((String)data.get("schema"), (String)
> data.get("table"));
>         }
>     }
>
> when createObject fires the map data has V3 elements in it like @type and
> @value whilst its expecting "schema" and "table"
>
> If we make the SimpleModule support V3 then graphson-v2 will fail.
>
>    {"graphson-v2", false, false,
>        (Function<Graph, GraphReader>) g -> g.io(IoCore.graphson()).reader
> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create(),
>        (Function<Graph, GraphWriter>) g -> g.io(IoCore.graphson()).writer
> ().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).
> mapper().typeInfo(TypeInfo.NO_TYPES).create()).create()},
>
> Now the deserializers are for V3.
>
>     static class SchemaTableJacksonDeserializerV3d0 extends
> StdDeserializer<SchemaTable> {
>         public SchemaTableJacksonDeserializerV3d0() {
>             super(RecordId.class);
>         }
>
>         @Override
>         public SchemaTable deserialize(final JsonParser jsonParser, final
> DeserializationContext deserializationContext) throws IOException,
> JsonProcessingException {
>             final Map<String, Object> data = deserializationContext.readValue(jsonParser,
> Map.class);
>             return SchemaTable.of((String)data.get("schema"), (String)
> data.get("table"));
>         }
>
>         @Override
>         public boolean isCachable() {
>             return true;
>         }
>     }
>
> This does not fire at all. Eventually I get a detached edge with an id
> that is a map. It never deserialized.
>
> So basically it only works if the SimpleModule version, i.e.
> serialize/deserialize code matches up with the version.
>
> Sqlg serializes RecordId to,
>
>     static class RecordIdJacksonSerializerV3d0 extends
> StdScalarSerializer<RecordId> {
>         public RecordIdJacksonSerializerV3d0() {
>             super(RecordId.class);
>         }
>         @Override
>         public void serialize(final RecordId recordId, final JsonGenerator
> jsonGenerator, final SerializerProvider serializerProvider)
>                 throws IOException, JsonGenerationException {
>             final Map<String, Object> m = new HashMap<>();
>             m.put("schemaTable", recordId.getSchemaTable());
>             m.put("id", recordId.getId());
>             jsonGenerator.writeObject(m);
>         }
>     }
>
> and
>
>     static class SchemaTableJacksonSerializerV3d0 extends
> StdScalarSerializer<SchemaTable> {
>         SchemaTableJacksonSerializerV3d0() {
>             super(SchemaTable.class);
>         }
>
>         @Override
>         public void serialize(final SchemaTable schemaTable, final
> JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
>                 throws IOException, JsonGenerationException {
>             // when types are not embedded, stringify or resort to JSON
> primitive representations of the
>             // type so that non-jvm languages can better interoperate with
> the TinkerPop stack.
>             final Map<String, Object> m = new LinkedHashMap<>();
>             m.put("schema", schemaTable.getSchema());
>             m.put("table", schemaTable.getTable());
>             jsonGenerator.writeObject(m);
>         }
>
>     }
>
> Hope it all makes some sense,
> Pieter
>
>
> On 05/09/2017 17:31, Stephen Mallette wrote:
>
>> I guess I'm trying to understand why it matters for purpose of the test.
>> If
>> you mix/match versions I can't think of why the test would care one way or
>> the other. does sqlg serialize its id to a JSON Map?
>>
>> On Tue, Sep 5, 2017 at 11:19 AM, pieter gmail <pi...@gmail.com>
>> wrote:
>>
>> I looked at TinkerGraph's implementation. In fact I copied it. TinkerGraph
>>> does not have any special id serialization. In fact both its
>>> TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses
>>> TinkerModuleV2d0.
>>>
>>>
>>> In IoCustomTest tests you call g.io(GraphSONIo.build(GraphSON
>>> Version.V2_0)).mapper().addCustomModule(moduleV2d0).
>>> I.e. the test manually registers the appropriate SimpleModule for each
>>> version.
>>>
>>> For IoEdgeTest the same needs to happen somehow. Currently I have only
>>> one
>>> default V3 SimpleModule same as TinkerGraph. I have written a V2
>>> SimpleModule but how in IoEdgeTest will the correct IoRegistry or
>>> SimpleModule be selected? The test itself does not call addCustomModule()
>>> and between the builders, mappers, registries and modules I don't see how
>>> to add it.
>>>
>>> Thanks,
>>> Pieter
>>>
>>> On 05/09/2017 16:30, Stephen Mallette wrote:
>>>
>>> You have registries for each version as well and default to v3. Please
>>>> see
>>>> TinkerGraph:
>>>>
>>>> https://github.com/apache/tinkerpop/blob/master/tinkergraph-
>>>> gremlin/src/main/java/org/apache/tinkerpop/gremlin/
>>>> tinkergraph/structure/TinkerGraph.java#L198
>>>>
>>>> If the user wants to override that then that's their choice, but they
>>>> have
>>>> to rig it all up. We probably need a better system than this. IO is way
>>>> too
>>>> complicated and confusing.
>>>>
>>>> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <pi...@gmail.com>
>>>> wrote:
>>>>
>>>> Afraid I still don't quite get it. How do I register the different
>>>>
>>>>> SimpleModules depending on the version.
>>>>>
>>>>> Currently it starts in SqlgGraph,
>>>>>
>>>>> @Override
>>>>> public <I extends Io> I io(final Io.Builder<I> builder) {
>>>>>       return (I) builder.graph(this).onMapper(mapper ->
>>>>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
>>>>> }
>>>>>
>>>>> and the SqlgIoRegistry registers the SimpleModule
>>>>>
>>>>> private SqlgIoRegistry() {
>>>>>       final SqlgSimpleModule sqlgSimpleModule = new SqlgSimpleModule();
>>>>>       register(GraphSONIo.class, null, sqlgSimpleModule);
>>>>>       register(GryoIo.class, RecordId.class, null);
>>>>> }
>>>>>
>>>>>
>>>>> Is the SqlgGraph.io(...) method suppose to interrogate the builder to
>>>>> check the version and add a corresponding IoRegistry and SimpleModule?
>>>>>
>>>>> Thanks
>>>>> Pieter
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On 05/09/2017 13:30, Stephen Mallette wrote:
>>>>>
>>>>> I think you should just create a new SimpleModule for each version -
>>>>>
>>>>>> don't
>>>>>> try to put them in the same SqlgSimpleModule. It's a naming convention
>>>>>> that
>>>>>> users will have to follow rather than something explicitly enforced
>>>>>> through
>>>>>> code.
>>>>>>
>>>>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <pieter.martin@gmail.com
>>>>>> >
>>>>>> wrote:
>>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I am getting IO tests failures on 3.3.0.
>>>>>>>
>>>>>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>>>>>
>>>>>>>        SqlgSimpleModule() {
>>>>>>>            super("custom");
>>>>>>> //        addSerializer(RecordId.class, new
>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>> izerV2d0());
>>>>>>> //        addDeserializer(RecordId.class, new
>>>>>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>>>>>> //        addSerializer(SchemaTable.class, new
>>>>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>>>>>> //        addDeserializer(SchemaTable.class, new
>>>>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>>>>>
>>>>>>>            addSerializer(RecordId.class, new
>>>>>>> RecordId.RecordIdJacksonSerial
>>>>>>> izerV3d0());
>>>>>>>            addDeserializer(RecordId.class, new
>>>>>>> RecordId.RecordIdJacksonDeseri
>>>>>>> alizerV3d0());
>>>>>>>            addSerializer(SchemaTable.class, new
>>>>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>>>>>            addDeserializer(SchemaTable.class, new
>>>>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>>>>>        }
>>>>>>>
>>>>>>> How is it suppose to distinguish between v2 and v3?
>>>>>>>
>>>>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>>>>>
>>>>>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>>>>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>>>>>
>>>>>>> TinkerPop's own CustomId tests do not rely on default behavior and
>>>>>>> manually creates SimpleModules for each scenario.
>>>>>>>
>>>>>>> Are they both suppose to work somehow?
>>>>>>>
>>>>>>> Thanks
>>>>>>> Pieter
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>

Re: io and graphson-v3

Posted by pieter gmail <pi...@gmail.com>.
Ok, at present there is only one SimpleModule, the default. I can make 
it v2 or v3 but not both.

Lets say I make the SimpleModule support V2.
Then when calling IoEdgeTest for

     {"graphson-v3", true, true,
         (Function<Graph, GraphReader>) g -> 
g.io(IoCore.graphson()).reader().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().create()).create(),
         (Function<Graph, GraphWriter>) g -> 
g.io(IoCore.graphson()).writer().mapper(g.io(GraphSONIo.build(GraphSONVersion.V3_0)).mapper().create()).create()},

then the deserializers that run are for V2,

     static class SchemaTableIdJacksonDeserializerV2d0 extends 
AbstractObjectDeserializer<SchemaTable> {
         SchemaTableIdJacksonDeserializerV2d0() {
             super(SchemaTable.class);
         }

         @Override
         public SchemaTable createObject(final Map data) {
             return SchemaTable.of((String)data.get("schema"), (String) 
data.get("table"));
         }
     }

when createObject fires the map data has V3 elements in it like @type 
and @value whilst its expecting "schema" and "table"

If we make the SimpleModule support V3 then graphson-v2 will fail.

    {"graphson-v2", false, false,
        (Function<Graph, GraphReader>) g -> 
g.io(IoCore.graphson()).reader().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().typeInfo(TypeInfo.NO_TYPES).create()).create(),
        (Function<Graph, GraphWriter>) g -> 
g.io(IoCore.graphson()).writer().mapper(g.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().typeInfo(TypeInfo.NO_TYPES).create()).create()},

Now the deserializers are for V3.

     static class SchemaTableJacksonDeserializerV3d0 extends 
StdDeserializer<SchemaTable> {
         public SchemaTableJacksonDeserializerV3d0() {
             super(RecordId.class);
         }

         @Override
         public SchemaTable deserialize(final JsonParser jsonParser, 
final DeserializationContext deserializationContext) throws IOException, 
JsonProcessingException {
             final Map<String, Object> data = 
deserializationContext.readValue(jsonParser, Map.class);
             return SchemaTable.of((String)data.get("schema"), (String) 
data.get("table"));
         }

         @Override
         public boolean isCachable() {
             return true;
         }
     }

This does not fire at all. Eventually I get a detached edge with an id  
that is a map. It never deserialized.

So basically it only works if the SimpleModule version, i.e. 
serialize/deserialize code matches up with the version.

Sqlg serializes RecordId to,

     static class RecordIdJacksonSerializerV3d0 extends 
StdScalarSerializer<RecordId> {
         public RecordIdJacksonSerializerV3d0() {
             super(RecordId.class);
         }
         @Override
         public void serialize(final RecordId recordId, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException, JsonGenerationException {
             final Map<String, Object> m = new HashMap<>();
             m.put("schemaTable", recordId.getSchemaTable());
             m.put("id", recordId.getId());
             jsonGenerator.writeObject(m);
         }
     }

and

     static class SchemaTableJacksonSerializerV3d0 extends 
StdScalarSerializer<SchemaTable> {
         SchemaTableJacksonSerializerV3d0() {
             super(SchemaTable.class);
         }

         @Override
         public void serialize(final SchemaTable schemaTable, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
                 throws IOException, JsonGenerationException {
             // when types are not embedded, stringify or resort to JSON 
primitive representations of the
             // type so that non-jvm languages can better interoperate 
with the TinkerPop stack.
             final Map<String, Object> m = new LinkedHashMap<>();
             m.put("schema", schemaTable.getSchema());
             m.put("table", schemaTable.getTable());
             jsonGenerator.writeObject(m);
         }

     }

Hope it all makes some sense,
Pieter


On 05/09/2017 17:31, Stephen Mallette wrote:
> I guess I'm trying to understand why it matters for purpose of the test. If
> you mix/match versions I can't think of why the test would care one way or
> the other. does sqlg serialize its id to a JSON Map?
>
> On Tue, Sep 5, 2017 at 11:19 AM, pieter gmail <pi...@gmail.com>
> wrote:
>
>> I looked at TinkerGraph's implementation. In fact I copied it. TinkerGraph
>> does not have any special id serialization. In fact both its
>> TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses TinkerModuleV2d0.
>>
>>
>> In IoCustomTest tests you call g.io(GraphSONIo.build(GraphSON
>> Version.V2_0)).mapper().addCustomModule(moduleV2d0).
>> I.e. the test manually registers the appropriate SimpleModule for each
>> version.
>>
>> For IoEdgeTest the same needs to happen somehow. Currently I have only one
>> default V3 SimpleModule same as TinkerGraph. I have written a V2
>> SimpleModule but how in IoEdgeTest will the correct IoRegistry or
>> SimpleModule be selected? The test itself does not call addCustomModule()
>> and between the builders, mappers, registries and modules I don't see how
>> to add it.
>>
>> Thanks,
>> Pieter
>>
>> On 05/09/2017 16:30, Stephen Mallette wrote:
>>
>>> You have registries for each version as well and default to v3. Please see
>>> TinkerGraph:
>>>
>>> https://github.com/apache/tinkerpop/blob/master/tinkergraph-
>>> gremlin/src/main/java/org/apache/tinkerpop/gremlin/
>>> tinkergraph/structure/TinkerGraph.java#L198
>>>
>>> If the user wants to override that then that's their choice, but they have
>>> to rig it all up. We probably need a better system than this. IO is way
>>> too
>>> complicated and confusing.
>>>
>>> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <pi...@gmail.com>
>>> wrote:
>>>
>>> Afraid I still don't quite get it. How do I register the different
>>>> SimpleModules depending on the version.
>>>>
>>>> Currently it starts in SqlgGraph,
>>>>
>>>> @Override
>>>> public <I extends Io> I io(final Io.Builder<I> builder) {
>>>>       return (I) builder.graph(this).onMapper(mapper ->
>>>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
>>>> }
>>>>
>>>> and the SqlgIoRegistry registers the SimpleModule
>>>>
>>>> private SqlgIoRegistry() {
>>>>       final SqlgSimpleModule sqlgSimpleModule = new SqlgSimpleModule();
>>>>       register(GraphSONIo.class, null, sqlgSimpleModule);
>>>>       register(GryoIo.class, RecordId.class, null);
>>>> }
>>>>
>>>>
>>>> Is the SqlgGraph.io(...) method suppose to interrogate the builder to
>>>> check the version and add a corresponding IoRegistry and SimpleModule?
>>>>
>>>> Thanks
>>>> Pieter
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 05/09/2017 13:30, Stephen Mallette wrote:
>>>>
>>>> I think you should just create a new SimpleModule for each version -
>>>>> don't
>>>>> try to put them in the same SqlgSimpleModule. It's a naming convention
>>>>> that
>>>>> users will have to follow rather than something explicitly enforced
>>>>> through
>>>>> code.
>>>>>
>>>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <pi...@gmail.com>
>>>>> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>>> I am getting IO tests failures on 3.3.0.
>>>>>>
>>>>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>>>>
>>>>>>        SqlgSimpleModule() {
>>>>>>            super("custom");
>>>>>> //        addSerializer(RecordId.class, new
>>>>>> RecordId.RecordIdJacksonSerial
>>>>>> izerV2d0());
>>>>>> //        addDeserializer(RecordId.class, new
>>>>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>>>>> //        addSerializer(SchemaTable.class, new
>>>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>>>>> //        addDeserializer(SchemaTable.class, new
>>>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>>>>
>>>>>>            addSerializer(RecordId.class, new
>>>>>> RecordId.RecordIdJacksonSerial
>>>>>> izerV3d0());
>>>>>>            addDeserializer(RecordId.class, new
>>>>>> RecordId.RecordIdJacksonDeseri
>>>>>> alizerV3d0());
>>>>>>            addSerializer(SchemaTable.class, new
>>>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>>>>            addDeserializer(SchemaTable.class, new
>>>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>>>>        }
>>>>>>
>>>>>> How is it suppose to distinguish between v2 and v3?
>>>>>>
>>>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>>>>
>>>>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>>>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>>>>
>>>>>> TinkerPop's own CustomId tests do not rely on default behavior and
>>>>>> manually creates SimpleModules for each scenario.
>>>>>>
>>>>>> Are they both suppose to work somehow?
>>>>>>
>>>>>> Thanks
>>>>>> Pieter
>>>>>>
>>>>>>
>>>>>>


Re: io and graphson-v3

Posted by Stephen Mallette <sp...@gmail.com>.
I guess I'm trying to understand why it matters for purpose of the test. If
you mix/match versions I can't think of why the test would care one way or
the other. does sqlg serialize its id to a JSON Map?

On Tue, Sep 5, 2017 at 11:19 AM, pieter gmail <pi...@gmail.com>
wrote:

> I looked at TinkerGraph's implementation. In fact I copied it. TinkerGraph
> does not have any special id serialization. In fact both its
> TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses TinkerModuleV2d0.
>
>
> In IoCustomTest tests you call g.io(GraphSONIo.build(GraphSON
> Version.V2_0)).mapper().addCustomModule(moduleV2d0).
> I.e. the test manually registers the appropriate SimpleModule for each
> version.
>
> For IoEdgeTest the same needs to happen somehow. Currently I have only one
> default V3 SimpleModule same as TinkerGraph. I have written a V2
> SimpleModule but how in IoEdgeTest will the correct IoRegistry or
> SimpleModule be selected? The test itself does not call addCustomModule()
> and between the builders, mappers, registries and modules I don't see how
> to add it.
>
> Thanks,
> Pieter
>
> On 05/09/2017 16:30, Stephen Mallette wrote:
>
>> You have registries for each version as well and default to v3. Please see
>> TinkerGraph:
>>
>> https://github.com/apache/tinkerpop/blob/master/tinkergraph-
>> gremlin/src/main/java/org/apache/tinkerpop/gremlin/
>> tinkergraph/structure/TinkerGraph.java#L198
>>
>> If the user wants to override that then that's their choice, but they have
>> to rig it all up. We probably need a better system than this. IO is way
>> too
>> complicated and confusing.
>>
>> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <pi...@gmail.com>
>> wrote:
>>
>> Afraid I still don't quite get it. How do I register the different
>>> SimpleModules depending on the version.
>>>
>>> Currently it starts in SqlgGraph,
>>>
>>> @Override
>>> public <I extends Io> I io(final Io.Builder<I> builder) {
>>>      return (I) builder.graph(this).onMapper(mapper ->
>>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
>>> }
>>>
>>> and the SqlgIoRegistry registers the SimpleModule
>>>
>>> private SqlgIoRegistry() {
>>>      final SqlgSimpleModule sqlgSimpleModule = new SqlgSimpleModule();
>>>      register(GraphSONIo.class, null, sqlgSimpleModule);
>>>      register(GryoIo.class, RecordId.class, null);
>>> }
>>>
>>>
>>> Is the SqlgGraph.io(...) method suppose to interrogate the builder to
>>> check the version and add a corresponding IoRegistry and SimpleModule?
>>>
>>> Thanks
>>> Pieter
>>>
>>>
>>>
>>>
>>>
>>>
>>> On 05/09/2017 13:30, Stephen Mallette wrote:
>>>
>>> I think you should just create a new SimpleModule for each version -
>>>> don't
>>>> try to put them in the same SqlgSimpleModule. It's a naming convention
>>>> that
>>>> users will have to follow rather than something explicitly enforced
>>>> through
>>>> code.
>>>>
>>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <pi...@gmail.com>
>>>> wrote:
>>>>
>>>> Hi,
>>>>
>>>>> I am getting IO tests failures on 3.3.0.
>>>>>
>>>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>>>
>>>>>       SqlgSimpleModule() {
>>>>>           super("custom");
>>>>> //        addSerializer(RecordId.class, new
>>>>> RecordId.RecordIdJacksonSerial
>>>>> izerV2d0());
>>>>> //        addDeserializer(RecordId.class, new
>>>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>>>> //        addSerializer(SchemaTable.class, new
>>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>>>> //        addDeserializer(SchemaTable.class, new
>>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>>>
>>>>>           addSerializer(RecordId.class, new
>>>>> RecordId.RecordIdJacksonSerial
>>>>> izerV3d0());
>>>>>           addDeserializer(RecordId.class, new
>>>>> RecordId.RecordIdJacksonDeseri
>>>>> alizerV3d0());
>>>>>           addSerializer(SchemaTable.class, new
>>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>>>           addDeserializer(SchemaTable.class, new
>>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>>>       }
>>>>>
>>>>> How is it suppose to distinguish between v2 and v3?
>>>>>
>>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>>>
>>>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>>>
>>>>> TinkerPop's own CustomId tests do not rely on default behavior and
>>>>> manually creates SimpleModules for each scenario.
>>>>>
>>>>> Are they both suppose to work somehow?
>>>>>
>>>>> Thanks
>>>>> Pieter
>>>>>
>>>>>
>>>>>
>

Re: io and graphson-v3

Posted by pieter gmail <pi...@gmail.com>.
I looked at TinkerGraph's implementation. In fact I copied it. 
TinkerGraph does not have any special id serialization. In fact both its 
TinkerIoRegistryV3d0 andTinkerIoRegistryV2d0 registry uses TinkerModuleV2d0.


In IoCustomTest tests you call 
g.io(GraphSONIo.build(GraphSONVersion.V2_0)).mapper().addCustomModule(moduleV2d0).
I.e. the test manually registers the appropriate SimpleModule for each 
version.

For IoEdgeTest the same needs to happen somehow. Currently I have only 
one default V3 SimpleModule same as TinkerGraph. I have written a V2 
SimpleModule but how in IoEdgeTest will the correct IoRegistry or 
SimpleModule be selected? The test itself does not call 
addCustomModule() and between the builders, mappers, registries and 
modules I don't see how to add it.

Thanks,
Pieter

On 05/09/2017 16:30, Stephen Mallette wrote:
> You have registries for each version as well and default to v3. Please see
> TinkerGraph:
>
> https://github.com/apache/tinkerpop/blob/master/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java#L198
>
> If the user wants to override that then that's their choice, but they have
> to rig it all up. We probably need a better system than this. IO is way too
> complicated and confusing.
>
> On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <pi...@gmail.com>
> wrote:
>
>> Afraid I still don't quite get it. How do I register the different
>> SimpleModules depending on the version.
>>
>> Currently it starts in SqlgGraph,
>>
>> @Override
>> public <I extends Io> I io(final Io.Builder<I> builder) {
>>      return (I) builder.graph(this).onMapper(mapper ->
>> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
>> }
>>
>> and the SqlgIoRegistry registers the SimpleModule
>>
>> private SqlgIoRegistry() {
>>      final SqlgSimpleModule sqlgSimpleModule = new SqlgSimpleModule();
>>      register(GraphSONIo.class, null, sqlgSimpleModule);
>>      register(GryoIo.class, RecordId.class, null);
>> }
>>
>>
>> Is the SqlgGraph.io(...) method suppose to interrogate the builder to
>> check the version and add a corresponding IoRegistry and SimpleModule?
>>
>> Thanks
>> Pieter
>>
>>
>>
>>
>>
>>
>> On 05/09/2017 13:30, Stephen Mallette wrote:
>>
>>> I think you should just create a new SimpleModule for each version - don't
>>> try to put them in the same SqlgSimpleModule. It's a naming convention
>>> that
>>> users will have to follow rather than something explicitly enforced
>>> through
>>> code.
>>>
>>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <pi...@gmail.com>
>>> wrote:
>>>
>>> Hi,
>>>> I am getting IO tests failures on 3.3.0.
>>>>
>>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>>
>>>>       SqlgSimpleModule() {
>>>>           super("custom");
>>>> //        addSerializer(RecordId.class, new
>>>> RecordId.RecordIdJacksonSerial
>>>> izerV2d0());
>>>> //        addDeserializer(RecordId.class, new
>>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>>> //        addSerializer(SchemaTable.class, new
>>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>>> //        addDeserializer(SchemaTable.class, new
>>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>>
>>>>           addSerializer(RecordId.class, new RecordId.RecordIdJacksonSerial
>>>> izerV3d0());
>>>>           addDeserializer(RecordId.class, new
>>>> RecordId.RecordIdJacksonDeseri
>>>> alizerV3d0());
>>>>           addSerializer(SchemaTable.class, new
>>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>>           addDeserializer(SchemaTable.class, new
>>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>>       }
>>>>
>>>> How is it suppose to distinguish between v2 and v3?
>>>>
>>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>>
>>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>>
>>>> TinkerPop's own CustomId tests do not rely on default behavior and
>>>> manually creates SimpleModules for each scenario.
>>>>
>>>> Are they both suppose to work somehow?
>>>>
>>>> Thanks
>>>> Pieter
>>>>
>>>>


Re: io and graphson-v3

Posted by Stephen Mallette <sp...@gmail.com>.
You have registries for each version as well and default to v3. Please see
TinkerGraph:

https://github.com/apache/tinkerpop/blob/master/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraph.java#L198

If the user wants to override that then that's their choice, but they have
to rig it all up. We probably need a better system than this. IO is way too
complicated and confusing.

On Tue, Sep 5, 2017 at 9:52 AM, pieter gmail <pi...@gmail.com>
wrote:

> Afraid I still don't quite get it. How do I register the different
> SimpleModules depending on the version.
>
> Currently it starts in SqlgGraph,
>
> @Override
> public <I extends Io> I io(final Io.Builder<I> builder) {
>     return (I) builder.graph(this).onMapper(mapper ->
> mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
> }
>
> and the SqlgIoRegistry registers the SimpleModule
>
> private SqlgIoRegistry() {
>     final SqlgSimpleModule sqlgSimpleModule = new SqlgSimpleModule();
>     register(GraphSONIo.class, null, sqlgSimpleModule);
>     register(GryoIo.class, RecordId.class, null);
> }
>
>
> Is the SqlgGraph.io(...) method suppose to interrogate the builder to
> check the version and add a corresponding IoRegistry and SimpleModule?
>
> Thanks
> Pieter
>
>
>
>
>
>
> On 05/09/2017 13:30, Stephen Mallette wrote:
>
>> I think you should just create a new SimpleModule for each version - don't
>> try to put them in the same SqlgSimpleModule. It's a naming convention
>> that
>> users will have to follow rather than something explicitly enforced
>> through
>> code.
>>
>> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <pi...@gmail.com>
>> wrote:
>>
>> Hi,
>>>
>>> I am getting IO tests failures on 3.3.0.
>>>
>>> Sqlg has a SimpleModule which add serializers for its custom id.
>>>
>>>      SqlgSimpleModule() {
>>>          super("custom");
>>> //        addSerializer(RecordId.class, new
>>> RecordId.RecordIdJacksonSerial
>>> izerV2d0());
>>> //        addDeserializer(RecordId.class, new
>>> RecordId.RecordIdJacksonDeserializerV2d0());
>>> //        addSerializer(SchemaTable.class, new
>>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>>> //        addDeserializer(SchemaTable.class, new
>>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>>
>>>          addSerializer(RecordId.class, new RecordId.RecordIdJacksonSerial
>>> izerV3d0());
>>>          addDeserializer(RecordId.class, new
>>> RecordId.RecordIdJacksonDeseri
>>> alizerV3d0());
>>>          addSerializer(SchemaTable.class, new
>>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>>          addDeserializer(SchemaTable.class, new
>>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>>      }
>>>
>>> How is it suppose to distinguish between v2 and v3?
>>>
>>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>>
>>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>>
>>> TinkerPop's own CustomId tests do not rely on default behavior and
>>> manually creates SimpleModules for each scenario.
>>>
>>> Are they both suppose to work somehow?
>>>
>>> Thanks
>>> Pieter
>>>
>>>
>

Re: io and graphson-v3

Posted by pieter gmail <pi...@gmail.com>.
Afraid I still don't quite get it. How do I register the different 
SimpleModules depending on the version.

Currently it starts in SqlgGraph,

@Override
public <I extends Io> I io(final Io.Builder<I> builder) {
     return (I) builder.graph(this).onMapper(mapper -> 
mapper.addRegistry(SqlgIoRegistry.getInstance())).create();
}

and the SqlgIoRegistry registers the SimpleModule

private SqlgIoRegistry() {
     final SqlgSimpleModule sqlgSimpleModule = new SqlgSimpleModule();
     register(GraphSONIo.class, null, sqlgSimpleModule);
     register(GryoIo.class, RecordId.class, null);
}


Is the SqlgGraph.io(...) method suppose to interrogate the builder to 
check the version and add a corresponding IoRegistry and SimpleModule?

Thanks
Pieter






On 05/09/2017 13:30, Stephen Mallette wrote:
> I think you should just create a new SimpleModule for each version - don't
> try to put them in the same SqlgSimpleModule. It's a naming convention that
> users will have to follow rather than something explicitly enforced through
> code.
>
> On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <pi...@gmail.com>
> wrote:
>
>> Hi,
>>
>> I am getting IO tests failures on 3.3.0.
>>
>> Sqlg has a SimpleModule which add serializers for its custom id.
>>
>>      SqlgSimpleModule() {
>>          super("custom");
>> //        addSerializer(RecordId.class, new RecordId.RecordIdJacksonSerial
>> izerV2d0());
>> //        addDeserializer(RecordId.class, new
>> RecordId.RecordIdJacksonDeserializerV2d0());
>> //        addSerializer(SchemaTable.class, new
>> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
>> //        addDeserializer(SchemaTable.class, new
>> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>>
>>          addSerializer(RecordId.class, new RecordId.RecordIdJacksonSerial
>> izerV3d0());
>>          addDeserializer(RecordId.class, new RecordId.RecordIdJacksonDeseri
>> alizerV3d0());
>>          addSerializer(SchemaTable.class, new
>> SchemaTable.SchemaTableJacksonSerializerV3d0());
>>          addDeserializer(SchemaTable.class, new
>> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>>      }
>>
>> How is it suppose to distinguish between v2 and v3?
>>
>> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>>
>> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
>> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>>
>> TinkerPop's own CustomId tests do not rely on default behavior and
>> manually creates SimpleModules for each scenario.
>>
>> Are they both suppose to work somehow?
>>
>> Thanks
>> Pieter
>>


Re: io and graphson-v3

Posted by Stephen Mallette <sp...@gmail.com>.
I think you should just create a new SimpleModule for each version - don't
try to put them in the same SqlgSimpleModule. It's a naming convention that
users will have to follow rather than something explicitly enforced through
code.

On Sun, Sep 3, 2017 at 3:20 PM, pieter gmail <pi...@gmail.com>
wrote:

> Hi,
>
> I am getting IO tests failures on 3.3.0.
>
> Sqlg has a SimpleModule which add serializers for its custom id.
>
>     SqlgSimpleModule() {
>         super("custom");
> //        addSerializer(RecordId.class, new RecordId.RecordIdJacksonSerial
> izerV2d0());
> //        addDeserializer(RecordId.class, new
> RecordId.RecordIdJacksonDeserializerV2d0());
> //        addSerializer(SchemaTable.class, new
> SchemaTable.SchemaTableIdJacksonSerializerV2d0());
> //        addDeserializer(SchemaTable.class, new
> SchemaTable.SchemaTableIdJacksonDeserializerV2d0());
>
>         addSerializer(RecordId.class, new RecordId.RecordIdJacksonSerial
> izerV3d0());
>         addDeserializer(RecordId.class, new RecordId.RecordIdJacksonDeseri
> alizerV3d0());
>         addSerializer(SchemaTable.class, new
> SchemaTable.SchemaTableJacksonSerializerV3d0());
>         addDeserializer(SchemaTable.class, new
> SchemaTable.SchemaTableJacksonDeserializerV3d0());
>     }
>
> How is it suppose to distinguish between v2 and v3?
>
> An example of a failure is 'IoEdgeTest.shouldReadWriteEdge'
>
> If ...V2d0.. is added to the serializers then 'graphson-v3' fails.
> If ...V3d0.. is added to the serializers then 'graphson-v2' fails.
>
> TinkerPop's own CustomId tests do not rely on default behavior and
> manually creates SimpleModules for each scenario.
>
> Are they both suppose to work somehow?
>
> Thanks
> Pieter
>