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

Gremlin-Python connection not returned back to the pool on exception from gremlin server

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 3.3.4
    • Fix Version/s: 3.4.0, 3.3.5
    • Component/s: driver, python
    • Labels:
      None

      Description

      The is an issue with the gremlin-python driver where for requests that return an exception from the gremlin server result in the connection not being returned to the pool. I have a reproducer and have attached the code to this issue as issue.py. 

      The root cause seems to be in the error handling logic in connection.py refer to https://github.com/apache/tinkerpop/blob/master/gremlin-python/src/main/jython/gremlin_python/driver/connection.py#L75-L81. In exception scenarios an exception is thrown on line 77 which cause line 81 to be not executed.

      The result of this is if we use a singleton connection (as in the attached reproducer) on the client side with default pool size of 4 then the client becomes unresponsive after 4 requests that result in server throwing an exception.

      This issue is reproducible with tinkergraph reference implementation as well.

       

      I tried a workaround by changing connection.py locally which did work for me but not sure if that would be the ideal fix. Basically in the _receive() function in connection.py I added a try finally and call the self._pool.put_nowait(self) in the finally block

       

        Attachments

          Activity

            People

            • Assignee:
              spmallette stephen mallette
              Reporter:
              Sengupta Kunal
            • Votes:
              3 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: