Skip to content

Unable to specify value for JANUSGRAPH_RELATION_DELIMITER when creating JanusGraphGraphSONMessageSerializer #216

Description

@matthall88

JanusGraph server allows users to specify an environment variable (JANUSGRAPH_RELATION_DELIMITER) to override the default relation delimiter char.
If this is used then the JanusGraphGraphSONMessageSerializer throws an exception when (de)serializing a response that contains relationships.

  System.ArgumentException: Not a valid relation identifier: odxce:Sfoo-entity-1:mxh:Sfoo-entity-2                                                                                                         
    at JanusGraph.Net.RelationIdentifier..ctor(String stringRepresentation)                                                                                                                                                     
    at JanusGraph.Net.IO.GraphSON.RelationIdentifierDeserializer.Objectify(JsonElement graphsonObject, GraphSONReader reader)                                                                                                   
    at Gremlin.Net.Structure.IO.GraphSON.GraphSONReader.ReadValueOfType(JsonElement typedValue, String graphSONType)                                                                                                            
    at Gremlin.Net.Structure.IO.GraphSON.GraphSONReader.ToObject(JsonElement graphSon)                                                                                                                                          
    at Gremlin.Net.Structure.IO.GraphSON.MapSerializer.Objectify(JsonElement graphsonObject, GraphSONReader reader)                                                                                                             
    at Gremlin.Net.Structure.IO.GraphSON.GraphSONReader.ReadValueOfType(JsonElement typedValue, String graphSONType)                                                                                                            
    at Gremlin.Net.Structure.IO.GraphSON.GraphSONReader.ToObject(JsonElement graphSon)                                                                                                                                          
    at Gremlin.Net.Structure.IO.GraphSON.ListSerializer.Objectify(JsonElement graphsonObject, GraphSONReader reader)                                                                                                            
    at Gremlin.Net.Structure.IO.GraphSON.GraphSONReader.ReadValueOfType(JsonElement typedValue, String graphSONType)                                                                                                            
    at Gremlin.Net.Structure.IO.GraphSON.GraphSONReader.ToObject(JsonElement graphSon)                                                                                                                                          
    at Gremlin.Net.Structure.IO.GraphSON.GraphSONMessageSerializer.DeserializeMessageAsync(Byte[] message, CancellationToken cancellationToken)                                                                                 │
    at JanusGraph.Net.IO.GraphSON.JanusGraphGraphSONMessageSerializer.DeserializeMessageAsync(Byte[] message, CancellationToken cancellationToken)                                                                              │
    at Gremlin.Net.Driver.Connection.HandleReceivedAsync(Byte[] received)                                                                                                                                                       
    at Gremlin.Net.Driver.Connection.ReceiveMessagesAsync()                                                                                                                                                                     
    at Gremlin.Net.Driver.ProxyConnection.SubmitAsync[T](RequestMessage requestMessage, CancellationToken cancellationToken)                                                                                                    
    at Gremlin.Net.Driver.GremlinClient.SubmitAsync[T](RequestMessage requestMessage, CancellationToken cancellationToken)

This can be seen to be caused by the RelationIdentifier class code:

        private const char ToStringDelimiter = '-';

        /// <summary>
        ///     Initializes a new instance of the <see cref="RelationIdentifier" /> class.
        /// </summary>
        /// <param name="stringRepresentation">The underlying relation id.</param>
        public RelationIdentifier(string stringRepresentation)
        {
            StringRepresentation = stringRepresentation;

            var elements = stringRepresentation.Split(ToStringDelimiter);
            if (elements.Length != 3 && elements.Length != 4)
                throw new ArgumentException($"Not a valid relation identifier: {stringRepresentation}");

            if (elements[1][0] == LongEncoding.StringEncodingMarker)
            {
                OutVertexId = elements[1].Substring(1);
            }
            else
            {
                OutVertexId = LongEncoding.Decode(elements[1]);
            }
            TypeId = LongEncoding.Decode(elements[2]);
            RelationId = LongEncoding.Decode(elements[0]);
            if (elements.Length == 4)
            {
                if (elements[3][0] == LongEncoding.StringEncodingMarker)
                {
                    InVertexId = elements[3].Substring(1);
                }
                else
                {
                    InVertexId = LongEncoding.Decode(elements[3]);
                }
            }
        }

where the relation delimiter is hard coded to "-"

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions