Janusgraph 0.3.0 Tinkerpop 3.3.3 java - Erro de serialização após a adição de Borda usando GryoMessageSerializerV3d0

votos
1

Eu recebo o seguinte erro depois de adicionar uma borda em Java:

16: 40: 44,267 [Gremlin-condutor em malha-1] AVISAR org.apache.tinkerpop.gremlin.driver.MessageSerializer - Resposta [PooledUnsafeDirectByteBuf (ridx: 98, widx: 98, tampão: 98)] não poderia ser desserializadas por org .apache.tinkerpop.gremlin.driver.ser.AbstractGryoMessageSerializerV3d0. org.apache.tinkerpop.shaded.kryo.KryoException: Encontrou não registrado classe ID: 65536 traço de serialização: id (org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceEdge) em org.apache.tinkerpop.gremlin.structure. io.gryo.AbstractGryoClassResolver.readClass (AbstractGryoClassResolver.java:148)

versão Janusgraph é 0.3.0, versão Tinkerpop é 3.3.3, a configuração de serialização Janusgraph é a seguinte:

> Serializers: - {className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry]}} - {className: org.apache.tinkerpop.gremlin .driver.ser.GryoMessageSerializerV3d0, config: {serializeResultToString: true}} - {className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry]} } # mais velhas versões de serialização para compatibilidade com versões anteriores: - {className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry]}} - {className: org .apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry]}} - {className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, configuração : {serializeResultToString: true}} - {clas sName: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry]}} - {className: org.apache.tinkerpop.gremlin.driver.ser. GraphSONMessageSerializerGremlinV1d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0]}} - {className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: {ioRegistries: [org.janusgraph.graphdb. tinkerpop.JanusGraphIoRegistryV1d0]}}

O seguinte erro é registrado no servidor ou menos ao mesmo tempo e parece estar relacionada:

> 105.869 2018/11/08 06: 10: 44.659 [gremlin-server-trabalhador-1] WARN io.netty.channel.DefaultChannelPipeline - Um evento exceptionCaught () foi demitido, e chegou na cauda do gasoduto. Isso normalmente significa o último manipulador no pipeline não tratar a exceção. java.io.IOException: Conexão redefinida por pares em sun.nio.ch.FileDispatcherImpl.read0 (Método Nativo)

Tanto quanto eu posso ver Eu tenho meus patos alinhados em termos de correspondência de versões serializador mas claramente deve ter perdido alguma coisa. Qualquer ajuda muito apreciada!

O código pode ser visto aqui: https://gist.github.com/ptclarke/45472fa5c268a6e8441e4c35615194aa

Publicado 08/11/2018 em 06:52
fonte usuário
Em outras línguas...                            


1 respostas

votos
4

Acho que você precisa o JanusGraphIoRegistryregistrado no lado do cliente:

GryoMapper.Builder builder = GryoMapper.build().
                                        addRegistry(JanusGraphIoRegistry.getInstance());

GryoMessageSerializerV3d0 serializer = new GryoMessageSerializerV3d0(builder);
Cluster cluster = Cluster.build().
                          addContactPoint(host).
                          port(port).
                          serializer(serializer).
                          create();

Como alguns conselhos adicionais em seu código. Considere evitar lotes de pequenas atualizações como esta:

public void updateVertex(Vertex v, Map<Object, Object> propertyMap){
    for(Entry<Object, Object> e : propertyMap.entrySet()) {
        g.V(v).property(e.getKey(), e.getValue()).next();
    }
}

e em vez disso fazer:

public void updateVertex(Vertex v, Map<Object, Object> propertyMap){
    GraphTraversal<Vertex,Vertex> t = g.V(v);
    for(Entry<Object, Object> e : propertyMap.entrySet()) {
        t = t.property(e.getKey(), e.getValue());
    }
    t.iterate();
}

Você também pode simplificar o seu código "adicionar margem":

public Edge addEdge(String label, Vertex from, Vertex to) {         
    return g.V(from).addE(label).to(to).next(); 
}
Respondeu 08/11/2018 em 12:06
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more