[20/26] tinkerpop git commit: JavaScript GLV: handle responses without identifier and clear handler
JavaScript GLV: handle responses without identifier and clear handler Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1e38023c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1e38023c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1e38023c Branch: refs/heads/tp32 Commit: 1e38023c7ebfb3ae83578625d9d99f60798abdcc Parents: 10f29cb Author: Jorge Bay GondraAuthored: Wed Feb 14 16:11:13 2018 +0100 Committer: Stephen Mallette Committed: Wed Feb 14 15:34:10 2018 -0500 -- .../lib/driver/driver-remote-connection.js | 35 1 file changed, 35 insertions(+) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1e38023c/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js -- diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js index 5587fd6..d9e6000 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js @@ -126,7 +126,31 @@ class DriverRemoteConnection extends RemoteConnection { _handleMessage(data) { const response = this._reader.read(JSON.parse(data.toString())); +if (response.requestId === null || response.requestId === undefined) { +// There was a serialization issue on the server that prevented the parsing of the request id +// We invoke any of the pending handlers with an error +Object.keys(this._responseHandlers).forEach(requestId => { + const handler = this._responseHandlers[requestId]; + this._clearHandler(requestId); + if (response.status !== undefined && response.status.message) { +return handler.callback( + new Error(util.format( +'Server error (no request information): %s (%d)', response.status.message, response.status.code))); + } else { +return handler.callback(new Error(util.format('Server error (no request information): %j', response))); + } +}); +return; +} + const handler = this._responseHandlers[response.requestId]; + +if (!handler) { + // The handler for a given request id was not found + // It was probably invoked earlier due to a serialization issue. + return; +} + if (response.status.code >= 400) { // callback in error return handler.callback( @@ -134,6 +158,7 @@ class DriverRemoteConnection extends RemoteConnection { } switch (response.status.code) { case responseStatusCode.noContent: +this._clearHandler(response.requestId); return handler.callback(null, { traversers: []}); case responseStatusCode.partialContent: handler.result = handler.result || []; @@ -146,11 +171,21 @@ class DriverRemoteConnection extends RemoteConnection { else { handler.result = response.result.data; } +this._clearHandler(response.requestId); return handler.callback(null, { traversers: handler.result }); } } /** + * Clears the internal state containing the callback and result buffer of a given request. + * @param requestId + * @private + */ + _clearHandler(requestId) { +delete this._responseHandlers[requestId]; + } + + /** * Closes the Connection. * @return {Promise} */
[17/27] tinkerpop git commit: JavaScript GLV: handle responses without identifier and clear handler
JavaScript GLV: handle responses without identifier and clear handler Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1e38023c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1e38023c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1e38023c Branch: refs/heads/master Commit: 1e38023c7ebfb3ae83578625d9d99f60798abdcc Parents: 10f29cb Author: Jorge Bay GondraAuthored: Wed Feb 14 16:11:13 2018 +0100 Committer: Stephen Mallette Committed: Wed Feb 14 15:34:10 2018 -0500 -- .../lib/driver/driver-remote-connection.js | 35 1 file changed, 35 insertions(+) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1e38023c/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js -- diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js index 5587fd6..d9e6000 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js @@ -126,7 +126,31 @@ class DriverRemoteConnection extends RemoteConnection { _handleMessage(data) { const response = this._reader.read(JSON.parse(data.toString())); +if (response.requestId === null || response.requestId === undefined) { +// There was a serialization issue on the server that prevented the parsing of the request id +// We invoke any of the pending handlers with an error +Object.keys(this._responseHandlers).forEach(requestId => { + const handler = this._responseHandlers[requestId]; + this._clearHandler(requestId); + if (response.status !== undefined && response.status.message) { +return handler.callback( + new Error(util.format( +'Server error (no request information): %s (%d)', response.status.message, response.status.code))); + } else { +return handler.callback(new Error(util.format('Server error (no request information): %j', response))); + } +}); +return; +} + const handler = this._responseHandlers[response.requestId]; + +if (!handler) { + // The handler for a given request id was not found + // It was probably invoked earlier due to a serialization issue. + return; +} + if (response.status.code >= 400) { // callback in error return handler.callback( @@ -134,6 +158,7 @@ class DriverRemoteConnection extends RemoteConnection { } switch (response.status.code) { case responseStatusCode.noContent: +this._clearHandler(response.requestId); return handler.callback(null, { traversers: []}); case responseStatusCode.partialContent: handler.result = handler.result || []; @@ -146,11 +171,21 @@ class DriverRemoteConnection extends RemoteConnection { else { handler.result = response.result.data; } +this._clearHandler(response.requestId); return handler.callback(null, { traversers: handler.result }); } } /** + * Clears the internal state containing the callback and result buffer of a given request. + * @param requestId + * @private + */ + _clearHandler(requestId) { +delete this._responseHandlers[requestId]; + } + + /** * Closes the Connection. * @return {Promise} */
[30/31] tinkerpop git commit: JavaScript GLV: handle responses without identifier and clear handler
JavaScript GLV: handle responses without identifier and clear handler Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1e38023c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1e38023c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1e38023c Branch: refs/heads/TINKERPOP-1857 Commit: 1e38023c7ebfb3ae83578625d9d99f60798abdcc Parents: 10f29cb Author: Jorge Bay GondraAuthored: Wed Feb 14 16:11:13 2018 +0100 Committer: Stephen Mallette Committed: Wed Feb 14 15:34:10 2018 -0500 -- .../lib/driver/driver-remote-connection.js | 35 1 file changed, 35 insertions(+) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1e38023c/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js -- diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js index 5587fd6..d9e6000 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js @@ -126,7 +126,31 @@ class DriverRemoteConnection extends RemoteConnection { _handleMessage(data) { const response = this._reader.read(JSON.parse(data.toString())); +if (response.requestId === null || response.requestId === undefined) { +// There was a serialization issue on the server that prevented the parsing of the request id +// We invoke any of the pending handlers with an error +Object.keys(this._responseHandlers).forEach(requestId => { + const handler = this._responseHandlers[requestId]; + this._clearHandler(requestId); + if (response.status !== undefined && response.status.message) { +return handler.callback( + new Error(util.format( +'Server error (no request information): %s (%d)', response.status.message, response.status.code))); + } else { +return handler.callback(new Error(util.format('Server error (no request information): %j', response))); + } +}); +return; +} + const handler = this._responseHandlers[response.requestId]; + +if (!handler) { + // The handler for a given request id was not found + // It was probably invoked earlier due to a serialization issue. + return; +} + if (response.status.code >= 400) { // callback in error return handler.callback( @@ -134,6 +158,7 @@ class DriverRemoteConnection extends RemoteConnection { } switch (response.status.code) { case responseStatusCode.noContent: +this._clearHandler(response.requestId); return handler.callback(null, { traversers: []}); case responseStatusCode.partialContent: handler.result = handler.result || []; @@ -146,11 +171,21 @@ class DriverRemoteConnection extends RemoteConnection { else { handler.result = response.result.data; } +this._clearHandler(response.requestId); return handler.callback(null, { traversers: handler.result }); } } /** + * Clears the internal state containing the callback and result buffer of a given request. + * @param requestId + * @private + */ + _clearHandler(requestId) { +delete this._responseHandlers[requestId]; + } + + /** * Closes the Connection. * @return {Promise} */
tinkerpop git commit: JavaScript GLV: handle responses without identifier and clear handler
Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1857 9addf862d -> e2b09dfee JavaScript GLV: handle responses without identifier and clear handler Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e2b09dfe Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e2b09dfe Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e2b09dfe Branch: refs/heads/TINKERPOP-1857 Commit: e2b09dfeeb0cf29db68e6dfa0ecb41ba044819ba Parents: 9addf86 Author: Jorge Bay GondraAuthored: Wed Feb 14 16:11:13 2018 +0100 Committer: Jorge Bay Gondra Committed: Wed Feb 14 16:11:13 2018 +0100 -- .../lib/driver/driver-remote-connection.js | 35 1 file changed, 35 insertions(+) -- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e2b09dfe/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js -- diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js index 5587fd6..d9e6000 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js @@ -126,7 +126,31 @@ class DriverRemoteConnection extends RemoteConnection { _handleMessage(data) { const response = this._reader.read(JSON.parse(data.toString())); +if (response.requestId === null || response.requestId === undefined) { +// There was a serialization issue on the server that prevented the parsing of the request id +// We invoke any of the pending handlers with an error +Object.keys(this._responseHandlers).forEach(requestId => { + const handler = this._responseHandlers[requestId]; + this._clearHandler(requestId); + if (response.status !== undefined && response.status.message) { +return handler.callback( + new Error(util.format( +'Server error (no request information): %s (%d)', response.status.message, response.status.code))); + } else { +return handler.callback(new Error(util.format('Server error (no request information): %j', response))); + } +}); +return; +} + const handler = this._responseHandlers[response.requestId]; + +if (!handler) { + // The handler for a given request id was not found + // It was probably invoked earlier due to a serialization issue. + return; +} + if (response.status.code >= 400) { // callback in error return handler.callback( @@ -134,6 +158,7 @@ class DriverRemoteConnection extends RemoteConnection { } switch (response.status.code) { case responseStatusCode.noContent: +this._clearHandler(response.requestId); return handler.callback(null, { traversers: []}); case responseStatusCode.partialContent: handler.result = handler.result || []; @@ -146,11 +171,21 @@ class DriverRemoteConnection extends RemoteConnection { else { handler.result = response.result.data; } +this._clearHandler(response.requestId); return handler.callback(null, { traversers: handler.result }); } } /** + * Clears the internal state containing the callback and result buffer of a given request. + * @param requestId + * @private + */ + _clearHandler(requestId) { +delete this._responseHandlers[requestId]; + } + + /** * Closes the Connection. * @return {Promise} */