[
https://issues.apache.org/jira/browse/TINKERPOP-2754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17559099#comment-17559099
]
ASF GitHub Bot commented on TINKERPOP-2754:
-------------------------------------------
divijvaidya commented on PR #1736:
URL: https://github.com/apache/tinkerpop/pull/1736#issuecomment-1167153506
Thank you for the PR. Could we add a unit test which tests the driver
behaviour on abrupt close of server and validates that the traversals have been
correct closed? It would help us catch regressions related to close behaviour
in the future.
> Javascript client hangs if the server restarts
> ----------------------------------------------
>
> Key: TINKERPOP-2754
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2754
> Project: TinkerPop
> Issue Type: Bug
> Components: javascript
> Affects Versions: 3.5.2
> Reporter: Yang Xia
> Priority: Major
>
> Reported by [~avner.levy] under
> https://issues.apache.org/jira/browse/TINKERPOP-2708:
> I have a problem with the javascript client where if the server restarts the
> client hangs forever (originally happens with AWS Neptune, but easy to
> reproduce with Tinkerpop as well).
> I've written this small program to demonstrate the issue:
> import gremlin from 'gremlin';
> const holdMainloop = setInterval(()=>console.log('holding mainloop'), 60000);
> const main = async () => {
> try {
> console.log('hello gremlin');
> const traversal = gremlin.process.AnonymousTraversalSource.traversal;
> const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
> const ID = gremlin.process.t.id;
> const _ = gremlin.process.statics;
> const __ = gremlin.process.P;
> const driver = new DriverRemoteConnection('ws://localhost:8182/gremlin', {});
> const log = (header)=>\{return (...args)=>console.log(new Date(),
> header,JSON.stringify(args))};
> const LABEL = 'Test';
> driver.addListener('log', log('log:'));
> driver.addListener('close', log('close:'));
> driver.addListener('socketError', log('sockerError:'));
> const g = traversal().withRemote(driver);
> await g.V().hasLabel(LABEL).drop().next();
> await g.addV(LABEL).property(ID,'1').next();
> await g.addV(LABEL).property(ID,'2').next();
> await g.addE(LABEL).from_({_}.V('1')).to({_}.V('2')).property(ID,'e1').next();
> await g.addE(LABEL).from_({_}.V('2')).to({_}.V('1')).property(ID,'e2').next();
> while (true) {
> try {
> const start = Date.now();
> console.log(new Date(), 'before query');
> await g.with_('evaluationTimeout',
> 1000).V('1').repeat(_.out()).times(1500).next();
> console.log(new Date(), `after query, took ${Date.now() - start} ms`);
> } catch (e)
> { console.log('Failed query: ', e); }
> }
> await driver.close();
> } catch (e)
> { console.log('uncaught exception (exit):', e); }
> };
> try
> { await main(); }
> catch (e)
> { console.log('exception in main: ', e); clearInterval(holdMainloop); }
> I run the tinkerpop server in a container and kill it after the above program
> is running for a few seconds.
> 2022-06-17T15:10:25.602Z before query
> 2022-06-17T15:10:26.247Z after query, took 645 ms
> 2022-06-17T15:10:26.247Z before query
> 2022-06-17T15:10:26.804Z after query, took 557 ms
> 2022-06-17T15:10:26.804Z before query
> 2022-06-17T15:10:27.458Z log: ["ws close code=1006 message="]
> 2022-06-17T15:10:27.459Z close: [1006,""]
> 2022-06-17T15:11:23.411Z holding mainloop
> 2022-06-17T15:12:23.414Z holding mainloop
> ...
> I'm using 3.5.2.
> Package,json:
> {
> "name": "playground",
> "version": "1.0.0",
> "description": "",
> "main": "index.js",
> "type": "module",
> "keywords": [],
> "author": "",
> "license": "ISC",
> "dependencies":
> { "gremlin": "^3.5.2" }
> }
--
This message was sent by Atlassian Jira
(v8.20.7#820007)