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)