Uploaded image for project: 'TinkerPop'
  1. TinkerPop
  2. TINKERPOP-2819

Refactor SimpleSocketServer to be accessible to all GLV's

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Implemented
    • None
    • None
    • driver
    • None

    Description

      Currently there is a large gap in the testing capabilities of the java driver compared to the other GLV's. Part of this gap is the java driver has SimpleSocketServer which provides a useful platform to write tests which require specific response behaviour from the server. Having such a tool for all of the GLV's would allow for testing of many more potential failure cases as well as taking a step towards standardizing the testing approach for all GLV's.

      This work can be divided into 2 main parts.

      Part One: Decoupling SimpleSocketServer from the java driver. This is the most disruptive part of the proposed changes. This has already been discussed here on the dev list but I will summarize. To avoid having all the GLV's depending on the java driver, SimpleSocketServer and it's related classes should be extracted to a new module gremlin-tools/gremlin-socket-server. Unfortunately the socket server still relies on the following classes in gremlin driver:
      tinkerpop.gremlin.driver.message.*
      tinkerpop.gremlin.driver.ser.*
      tinkerpop.gremlin.driver.MessageSerializer
      tinkerpop.gremlin.driver.Tokens
      To avoid a cyclic dependency between gremlin-driver and gremlin-socket-server. these classes should be moved to another new module gremlin-util which will house any classes which are to be shared between the driver and server. Moving these classes to a new module and package will break import lines and will need to be left until 3.7.

      The full list of classes moved into gremlin-util is as follows:

       

      Old Name/Location New Name/Location
      org.apache.tinkerpop.gremlin.driver.MessageSerializer org.apache.tinkerpop.gremlin.util.MessageSerializer
      org.apache.tinkerpop.gremlin.driver.Tokens org.apache.tinkerpop.gremlin.util.Tokens
      org.apache.tinkerpop.gremlin.driver.message.RequestMessage org.apache.tinkerpop.gremlin.util.message.RequestMessage
      org.apache.tinkerpop.gremlin.driver.message.ResponseMessage org.apache.tinkerpop.gremlin.util.message.ResponseMessage
      org.apache.tinkerpop.gremlin.driver.message.ResponseResult org.apache.tinkerpop.gremlin.util.message.ResponseResult
      org.apache.tinkerpop.gremlin.driver.message.ResponseStatus org.apache.tinkerpop.gremlin.util.message.ResponseStatus
      org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode org.apache.tinkerpop.gremlin.util.message.ResponseStatusCode
      org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV1d0 org.apache.tinkerpop.gremlin.util.ser.AbstractGraphSONMessageSerializerV1d0
      org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV2d0 org.apache.tinkerpop.gremlin.util.ser.AbstractGraphSONMessageSerializerV2d0
      org.apache.tinkerpop.gremlin.driver.ser.AbstractMessageSerializer org.apache.tinkerpop.gremlin.util.ser.AbstractMessageSerializer
      org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1 org.apache.tinkerpop.gremlin.util.ser.GraphBinaryMessageSerializerV1
      org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0 org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerGremlinV1d0
      org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0 org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerGremlinV2d0
      org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0 org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV1d0
      org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0 org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV2d0
      org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0 org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV3d0
      org.apache.tinkerpop.gremlin.driver.ser.MessageTextSerializer org.apache.tinkerpop.gremlin.util.ser.MessageTextSerializer
      org.apache.tinkerpop.gremlin.driver.ser.NettyBuffer org.apache.tinkerpop.gremlin.util.ser.NettyBuffer
      org.apache.tinkerpop.gremlin.driver.ser.NettyBufferFactory org.apache.tinkerpop.gremlin.util.ser.NettyBufferFactory
      org.apache.tinkerpop.gremlin.driver.ser.RequestMessageGryoSerializer org.apache.tinkerpop.gremlin.util.ser.RequestMessageGryoSerializer
      org.apache.tinkerpop.gremlin.driver.ser.ResponseMessageGryoSerializer org.apache.tinkerpop.gremlin.util.ser.ResponseMessageGryoSerializer
      org.apache.tinkerpop.gremlin.driver.ser.SerTokens org.apache.tinkerpop.gremlin.util.ser.SerTokens
      org.apache.tinkerpop.gremlin.driver.ser.SerializationException org.apache.tinkerpop.gremlin.util.ser.SerializationException
      org.apache.tinkerpop.gremlin.driver.ser.Serializers org.apache.tinkerpop.gremlin.util.ser.Serializers
      org.apache.tinkerpop.gremlin.driver.ser.binary.RequestMessageSerializer org.apache.tinkerpop.gremlin.util.ser.binary.RequestMessageSerializer
      org.apache.tinkerpop.gremlin.driver.ser.binary.ResponseMessageSerializer org.apache.tinkerpop.gremlin.util.ser.binary.ResponseMessageSerializer

       

       

      The second part of this refactor is to reconfigure the newly extracted gremlin-socket-server to be usable by all of the GLV's. This will be done by dockerizing the socket server and have the container run during the testing phase of the GLV's. There is still some consideration to be done as to how the GLV's should best interact with this server. Currently Junit will start and stop the server for each individual test, each test has direct access to the server object and can control it as needed. The GLV's will not have the same direct control over the server. Any control options or behaviour needed will either need to be encoded in the server itself as custom behaviour triggered by specific request ID's or control through some external wrapper or interface around the server. There is still consideration needed as to how this should be done. Any comments on desired functionality or behaviour would be greatly appreciated.

      If at some point in time it is deemed desirable to bring gremlin-socket-server to all GLV's in 3.5.x/3.6.x, a good starting point would be to backport this commit which creates the new modules and moves all of the classes without changing package names.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              colebq Cole Greer
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: