You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2020/04/15 11:44:00 UTC
[tinkerpop] 01/03: gremlin-javascript: remove session close method
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit a9c02e4259e01847e56a24fe4a9ff93da8ab3fe5
Author: Liu Jianping <he...@foxmail.com>
AuthorDate: Thu Apr 2 17:23:34 2020 +0800
gremlin-javascript: remove session close method
Attach session mode check in 'client', remove addition logic for session
gremlin-javascript: update session docs
Revert "gremlin-javascript: remove session close method"
This reverts commit 6e20698fbb9c60cc8672b7ab613ab855f8748e06.
gremlin-javascript: make session close request as specification
session is one mode of client, attach 'session' logic to client
test case: fixup gremlin server port
---
docs/src/reference/gremlin-variants.asciidoc | 2 +-
docs/src/upgrade/release-3.3.x.asciidoc | 2 +-
.../gremlin-javascript/lib/driver/client.js | 20 +++++++++++++++++++-
.../gremlin-javascript/lib/driver/connection.js | 22 ----------------------
.../javascript/gremlin-javascript/test/helper.js | 4 ++--
5 files changed, 23 insertions(+), 27 deletions(-)
diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc
index 780d69e..0aea657 100644
--- a/docs/src/reference/gremlin-variants.asciidoc
+++ b/docs/src/reference/gremlin-variants.asciidoc
@@ -644,7 +644,7 @@ It is also possible to initialize the `Client` to use <<sessions,sessions>>:
[source,javascript]
----
-const client = new gremlin.driver.Client('ws://localhost:8182/gremlin', { traversalSource: 'g', 'processor': 'session' });
+const client = new gremlin.driver.Client('ws://localhost:8182/gremlin', { traversalSource: 'g', 'session': 'unique-string-id' });
----
With this configuration, the state of variables within scripts are preserved between requests.
diff --git a/docs/src/upgrade/release-3.3.x.asciidoc b/docs/src/upgrade/release-3.3.x.asciidoc
index 2861177..0e9549c 100644
--- a/docs/src/upgrade/release-3.3.x.asciidoc
+++ b/docs/src/upgrade/release-3.3.x.asciidoc
@@ -43,7 +43,7 @@ and exposed on the server. As such, providing support in all Gremlin Language Va
ensuring a consistent implementation for all programming languages.
[source,javascript]
-const client = new gremlin.driver.Client('ws://localhost:8182/gremlin', { traversalSource: 'g', 'processor': 'session' });
+const client = new gremlin.driver.Client('ws://localhost:8182/gremlin', { traversalSource: 'g', 'session': 'unique-string-id' });
==== Deprecate maxWaitForSessionClose
The `maxWaitForSessionClose` setting for the Java driver has been deprecated and in some sense replaced by the
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/client.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/client.js
index 91abf47..519ccb4 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/client.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/client.js
@@ -18,6 +18,7 @@
*/
'use strict';
+const utils = require('../utils');
const Connection = require('./connection');
const Bytecode = require('../process/bytecode');
@@ -39,11 +40,20 @@ class Client {
* @param {String} [options.traversalSource] The traversal source. Defaults to: 'g'.
* @param {GraphSONWriter} [options.writer] The writer to use.
* @param {Authenticator} [options.authenticator] The authentication handler to use.
- * @param {String} [options.processor] The name of the opProcessor to use
+ * @param {String} [options.processor] The name of the opProcessor to use, leave it undefined or set 'session' when session mode.
+ * @param {String} [options.session] The sessionId of Client in session mode. Defaults to null means session-less Client.
* @constructor
*/
constructor(url, options) {
this._options = options;
+ if (this._options.processor === 'session') {
+ // compatibility with old 'session' processor setting
+ this._options.session = options.session || utils.getUuid()
+ }
+ if (this._options.session) {
+ // re-assign processor to 'session' when in session mode
+ this._options.processor = options.processor || 'session';
+ }
this._connection = new Connection(url, options);
}
@@ -70,6 +80,9 @@ class Client {
'accept': this._connection.mimeType,
'aliases': { 'g': this._options.traversalSource || 'g' }
};
+ if (this._options.session && this._options.processor === 'session') {
+ args['session'] = this._options.session;
+ }
return this._connection.submit(null, 'eval', args, null, this._options.processor || '');
}
@@ -81,9 +94,14 @@ class Client {
/**
* Closes the underlying connection
+ * send session close request before connection close if session mode
* @returns {Promise}
*/
close() {
+ if (this._options.session && this._options.processor === 'session') {
+ const args = {'session': this._options.session};
+ return this._connection.submit(null, 'close', args, null, this._options.processor).then(() => this._connection.close());
+ }
return this._connection.close();
}
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/connection.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/connection.js
index 01cf16a..29be5dc 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/connection.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/connection.js
@@ -100,10 +100,6 @@ class Connection extends EventEmitter {
this._pingIntervalDelay = this.options.pingInterval || pingIntervalDelay;
this._pongTimeoutDelay = this.options.pongTimeout || pongTimeoutDelay;
- if (options.processor === 'session') {
- this._session = true;
- this._sessionId = utils.getUuid();
- }
if (this.options.connectOnStartup !== false) {
this.open();
}
@@ -169,13 +165,6 @@ class Connection extends EventEmitter {
};
}
- if (this._session === true) {
- if (bytecode !== null || args === null) {
- reject(new Error('only script enabled in session mode'));
- return;
- }
- }
-
const message = Buffer.from(this._header + JSON.stringify(this._getRequest(requestId, bytecode, op, args, processor)));
this._ws.send(message);
}));
@@ -198,10 +187,6 @@ class Connection extends EventEmitter {
args = this._adaptArgs(args, true);
}
- if (this._session === true && op !== 'authentication') {
- args['session'] = this._sessionId;
- }
-
return ({
'requestId': { '@type': 'g:UUID', '@value': id },
'op': op || 'bytecode',
@@ -380,13 +365,6 @@ class Connection extends EventEmitter {
}
if (!this._closePromise) {
this._closePromise = new Promise(resolve => {
- if (this._session === true) {
- // session close request, dsl in args as tips and not be executed actually
- const args = {'gremlin': 'session.close()'};
- const message = Buffer.from(this._header + JSON.stringify(this._getRequest(utils.getUuid(), null, 'close', args, 'session')));
- this._ws.send(message);
- }
-
this._closeCallback = resolve;
this._ws.close();
});
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/helper.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/helper.js
index 1c837cf..72708c0 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/helper.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/helper.js
@@ -48,5 +48,5 @@ exports.getClient = function getClient(traversalSource) {
};
exports.getSessionClient = function getSessionClient(traversalSource) {
- return new Client(serverUrl, { 'traversalSource': traversalSource, 'processor': 'session'});
-};
\ No newline at end of file
+ return new Client(serverUrl, { 'traversalSource': traversalSource, 'session': 'unique-string-id'});
+};