It is in the SqlGraph.io(...)
@Override public <I extends Io> I io(final Io.Builder<I>
builder) { if (builder.requiresVersion(GryoVersion.V1_0) ||
builder.requiresVersion(GraphSONVersion.V1_0)) return (I)
builder.graph(this).onMapper(mapper ->
mapper.addRegistry(SqlgIoRegistryV1.instance())).create(); else
if (builder.requiresVersion(GraphSONVersion.V2_0)) // there is no
gryo v2 return (I) builder.graph(this).onMapper(mapper ->
mapper.addRegistry(SqlgIoRegistryV2.instance())).create(); else
return (I) builder.graph(this).onMapper(mapper ->
mapper.addRegistry(SqlgIoRegistryV3.instance())).create(); }
private SqlgIoRegistryV3() { final SqlgSimpleModuleV3
sqlgSimpleModule = new
SqlgSimpleModuleV3(); register(GraphSONIo.class, null,
sqlgSimpleModule); register(GryoIo.class, RecordId.class,
null); }
I checked it is being invoked.
The test I am currently running is,
loadModern(); final String fileToWrite =
TestHelper.generateTempFile(WriteTest.class, "tinkerpop-modern-v3d0",
".kryo").getAbsolutePath().replace('\\', '/'); final File f =
new File(fileToWrite); assertThat(f.length() == 0,
is(true)); final Traversal<Object,Object> traversal
= this.sqlgGraph.traversal().io(fileToWrite).with(IO.writer,
IO.gryo).write();
And it breaks on kryo.getRegistration(type) where type = class
org.umlg.sqlg.structure.RecordId
public class GryoClassResolverV3d0 {...
public Registration writeClass(final Output output, final Class type)
{ ... final Registration registration =
kryo.getRegistration(type); ...}
I only realized now that Graph.io() has been deprecated. Do you think
that that is the reason?
ThanksPieter
On Mon, 2019-08-12 at 08:52 -0400, Stephen Mallette wrote:
> How are you supplying that SqlgIoRegistryV3 to gryo for usage?
> On Mon, Aug 12, 2019 at 8:31 AM pieter martin <
> [email protected]> wrote:
> > Hi,
> >
> >
> >
> > I am upgrading Sqlg, to 3.4.1 and soon after that to 3.4.3.
> >
> >
> >
> > The process serialization tests are failing with,
> >
> >
> >
> > java.lang.IllegalArgumentException: Class is not registered:
> > org.umlg.sqlg.structure.RecordId
> >
> > Note: To register this class use:
> > kryo.register(org.umlg.sqlg.structure.RecordId.class);
> >
> >
> >
> > However RecordId is registered in SqlgIoRegistryV3 with
> >
> >
> >
> > register(GryoIo.class, RecordId.class, null);
> >
> >
> >
> > I notice in the provider documentation that a serializer should be
> >
> > provided.
> >
> > However RecordId implements KryoSerializable which I understood
> > takes
> >
> > care of serializing the RecordId.
> >
> >
> >
> > I checked the CustomId class in TinkerPop's code base but it
> > neither
> >
> > registers a serializer nor implements KryoSerializable.
> >
> >
> >
> > I get a bit lost in reading the serialization code, can you please
> >
> > point me in the right direction?
> >
> >
> >
> > Thanks
> >
> > Pieter
> >
> >
> >
> >
> >
> >
> >