You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "ASF GitHub Bot (Jira)" <ji...@apache.org> on 2022/06/24 00:44:00 UTC

[jira] [Commented] (TINKERPOP-2754) Javascript client hangs if the server restarts

    [ https://issues.apache.org/jira/browse/TINKERPOP-2754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17558266#comment-17558266 ] 

ASF GitHub Bot commented on TINKERPOP-2754:
-------------------------------------------

simonz-bq closed pull request #1735: TINKERPOP-2754: Fix indefinite hanging on JS client on server restart
URL: https://github.com/apache/tinkerpop/pull/1735




> 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)