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

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

Yang Xia created TINKERPOP-2754:
-----------------------------------

             Summary: 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


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)