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/11/12 19:40:39 UTC
[tinkerpop] branch TINKERPOP-2453 created (now fc23fab)
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a change to branch TINKERPOP-2453
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git.
at fc23fab TINKERPOP-2453 Enable websocket compression for python
This branch includes the following new commits:
new fc23fab TINKERPOP-2453 Enable websocket compression for python
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[tinkerpop] 01/01: TINKERPOP-2453 Enable websocket compression for
python
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-2453
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit fc23fabef99e4da0433fbd2019c23097152c92c4
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Thu Nov 12 14:39:59 2020 -0500
TINKERPOP-2453 Enable websocket compression for python
---
CHANGELOG.asciidoc | 2 +-
docs/src/reference/gremlin-variants.asciidoc | 16 ++++++++++++----
docs/src/upgrade/release-3.4.x.asciidoc | 11 +++++++++++
.../jython/gremlin_python/driver/tornado/transport.py | 7 +++++--
4 files changed, 29 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 08e6556..03695c6 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -49,7 +49,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
* Deprecated driver `Channelizer` keep-alive related methods.
* Delegate handling of WebSocket handshake to Netty instead of custom code in Java Driver.
* Delegate detection of idle connection to Netty instead of custom keep alive logic for `WebSocketChannelizer`.
-* Added support for WebSocket frame compression extension ( [RFC7692](https://tools.ietf.org/html/rfc7692) ) for `WebSocketChannelizer` in Java driver.
+* Added support for WebSocket frame compression extension ( [RFC7692](https://tools.ietf.org/html/rfc7692) ) for `WebSocketChannelizer` in Java/Python driver.
* Added server support for WebSocket compression extension ( [RFC7692](https://tools.ietf.org/html/rfc7692) ).
* Fixed bug with Bytecode serialization when `Bytecode.toString()` is used in Javascript.
* Fixed "toString" for P and TextP to produce valid script representation from bytecode glv steps containing a string predicate in Javascript.
diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc
index b3c13cb..417abfc 100644
--- a/docs/src/reference/gremlin-variants.asciidoc
+++ b/docs/src/reference/gremlin-variants.asciidoc
@@ -770,13 +770,21 @@ can be passed to the `Client` or `DriverRemoteConnection` instance as keyword ar
|=========================================================
Note that the `transport_factory` can allow for additional configuration of the `TornadoTransport`, which exposes
-options to manage `ioloop` timeouts:
+options to manage `ioloop` timeouts and compression settings:
-```python
+[source,python]
+----
g = traversal().withRemote(
DriverRemoteConnection('ws://localhost:8182/gremlin','g',
- transport_factory=lambda: TornadoTransport(read_timeout=10, write_timeout=10)))
-```
+ transport_factory=lambda: TornadoTransport(read_timeout=10,
+ write_timeout=10,
+ compression_options={'compression_level':5,'mem_level':5})))
+----
+
+Compression configuration options are described in the
+link:https://docs.python.org/3.6/library/zlib.html#zlib.compressobj[zlib documentation]. By default, compression
+settings are configured as shown in the above example.
+
[[gremlin-python-strategies]]
=== Traversal Strategies
diff --git a/docs/src/upgrade/release-3.4.x.asciidoc b/docs/src/upgrade/release-3.4.x.asciidoc
index 19ae29e..b96071c 100644
--- a/docs/src/upgrade/release-3.4.x.asciidoc
+++ b/docs/src/upgrade/release-3.4.x.asciidoc
@@ -80,6 +80,17 @@ const sg = g.withStrategies(
See: link:https://issues.apache.org/jira/browse/TINKERPOP-2054[TINKERPOP-2054]
+==== WebSocket Compression
+
+Gremlin Server now supports standard WebSocket compression (per link:https://tools.ietf.org/html/rfc7692[RFC 7692]).
+Both the Java and Python drivers support this functionality from the client's perspective. Compression is enabled by
+default and should be backward compatible, thus allowing older versions of the driver to connect to newer versions of
+the server and vice versa. Using the compression-enabled drivers with a server that also supports that functionality
+will greatly reduce network IO requirements.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-2441[TINKERPOP-2441],
+link:https://issues.apache.org/jira/browse/TINKERPOP-2453[TINKERPOP-2453]
+
==== Per Request Options
With Java it has been possible to pass per-request settings for both scripts and bytecode. While Javascript, Python,
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/tornado/transport.py b/gremlin-python/src/main/jython/gremlin_python/driver/tornado/transport.py
index 089a51a..7bf4fe0 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/tornado/transport.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/tornado/transport.py
@@ -26,16 +26,19 @@ __author__ = 'David M. Brown (davebshow@gmail.com)'
class TornadoTransport(AbstractBaseTransport):
- def __init__(self, read_timeout=30, write_timeout=30):
+ def __init__(self, read_timeout=30, write_timeout=30,
+ compression_options={'compression_level': 5, 'mem_level': 5}):
self._loop = ioloop.IOLoop(make_current=False)
+ self._ws = None
self._read_timeout = read_timeout
self._write_timeout = write_timeout
+ self._compression_options = compression_options
def connect(self, url, headers=None):
if headers:
url = httpclient.HTTPRequest(url, headers=headers)
self._ws = self._loop.run_sync(
- lambda: websocket.websocket_connect(url))
+ lambda: websocket.websocket_connect(url, compression_options=self._compression_options))
def write(self, message):
self._loop.run_sync(