[
https://issues.apache.org/jira/browse/TINKERPOP-2807?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Stephen Mallette closed TINKERPOP-2807.
---------------------------------------
Resolution: Cannot Reproduce
More recent testing is not demonstrating the same thing that I was seeing
before for some reason. For future reference it's worth pointing to the code
in aiohttp I was looking at which gave me some pause earlier (noting the
comment there especially about the approach to heartbeat being "not perfect"):
https://github.com/aio-libs/aiohttp/blob/v3.8.1/aiohttp/client_ws.py#L89-L100
I feel a bit perplexed at not being able to reproduce that situation anymore,
but it also makes me feel a bit better knowing that the heartbeat does seem to
work properly. I can see the ping being sent now and the server responding
accordingly with a pong.
That said, two things were learned. First, heartbeat is not enabled by default.
There was some thinking that it was defaulted to five seconds. I don't see
that. Second, I do think that one of the problems that folks might be having
with this functionality comes from our documentation. In the documentation we
configure the heartbeat for one second, with the thinking being that a ping
would be sent every second to keep the connection alive. If you copy/pasted
that exact configuration to use it will create a problem. One second is simply
too short a time period for the heartbeat based on how aiohttp uses that
number. aiohttp uses 1 second as interval for sending a ping but then uses half
that number to determine the response time for the pong, which in that case
would be half a second. I imagine there are scenarios where a half second might
not be enough time and would and if that response time is exceeded the
connection is closed and any pending requests will fail with the connection
closed.
I've updated the documentation a bit to try to explain this feature a bit
better:
https://github.com/apache/tinkerpop/commit/e403ad40d97ce57236022f404e53f3f16bd82a01
I would have liked to have written a test for this, but until we have the
revisions to the {{SimpleSocketServer}} in play I don't think that's possible.
Since this feature appears to be working and now that there is a better
understanding for how it works I don't think there is much more to do here.
> heartbeat setting to AiohttpTransport does not prevent the idle connections
> from being closed
> ---------------------------------------------------------------------------------------------
>
> Key: TINKERPOP-2807
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2807
> Project: TinkerPop
> Issue Type: Bug
> Components: driver
> Affects Versions: 3.5.4
> Reporter: Stephen Mallette
> Assignee: Stephen Mallette
> Priority: Blocker
>
> Setting {{heartbeat}} like this:
> {code}
> Client('ws://localhost:45940/gremlin', 'g',
> transport_factory=lambda: transport.AiohttpTransport(heartbeat=5.0))
> {code}
> should send a ping message to the server to keep the connection alive but it
> clearly does not. Manual testing shows Gremlin Server closing the connection
> as idle despite this setting.
> For more information on the setting see:
> https://docs.aiohttp.org/en/stable/client_reference.html
--
This message was sent by Atlassian Jira
(v8.20.10#820010)