<commit_before>////
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
////

TinkerPop 3.2.0
===============

image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/nine-inch-gremlins.png[width=225]

*Nine Inch Gremlins*

TinkerPop 3.2.5
---------------

*Release Date: NOT OFFICIALLY RELEASED YET*

Please see the link:https://github.com/apache/tinkerpop/blob/3.2.5/CHANGELOG.asciidoc#release-3-2-5[changelog] for a complete list of all the modifications that are part of this release.

Upgrading for Users
~~~~~~~~~~~~~~~~~~~

Authentication Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The server settings previously used `authentication.className` to set an authenticator for the the two provided
authentication handler and channelizer classes to use. This has been deprecated in favor of `authentication.authenticator`.
A class that extends `AbstractAuthenticationHandler` may also now be provided as `authentication.authenticationHandler`
to be used in either of the provided channelizer classes to handle the provided authenticator

See: https://issues.apache.org/jira/browse/TINKERPOP-1657[TINKERPOP-1657]

Default Maximum Parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^

It was learned that compilation for scripts with large numbers of parameters is more expensive than those with less
parameters. It therefore becomes possible to make some mistakes with how Gremlin Server is used. A new setting on
the `StandardOpProcessor` and `SessionOpProcessor` called `maxParameters` controls the number of parameters that can
be passed in on a request. This setting is defaulted to sixteen.

Users upgrading to this version may notice errors in their applications if they use more than sixteen parameters. To
fix this problem simply reconfigure Gremlin Server with a configuration as follows:

[source,yaml]
----
processors:
  - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { maxParameters: 64 }}
  - { className: org.apache.tinkerpop.gremlin.server.op.standard.StandardOpProcessor, config: { maxParameters: 64 }}
----

The above configuration allows sixty-four parameters to be passed on each request.

See: link:https://issues.apache.org/jira/browse/TINKERPOP-1663[TINKERPOP-1663]

GremlinScriptEngine Metrics
^^^^^^^^^^^^^^^^^^^^^^^^^^^

The `GremlinScriptEngine` has a number of new metrics about its cache size and script compilation times which should
be helpful in understanding usage problems. As `GremlinScriptEngine` instances are used in Gremlin Server these metrics
are naturally exposed as part of the standard link:http://tinkerpop.apache.org/docs/current/reference/#_metrics[metrics]
set. Note that metrics are captured for both sessionless requests as well as for each individual session that is opened.

See: https://issues.apache.org/jira/browse/TINKERPOP-1644[TINKERPOP-1644]

Gremlin Console Scripting
^^^^^^^^^^^^^^^^^^^^^^^^^

The `gremlin.sh` command has two flags, `-i` and `-e`, which are used to pass a script and arguments into the Gremlin
Console for execution. Those flags now allow for passing multiple scripts and related arguments to be supplied which
can yield greater flexibilty in automation tasks.

[source,bash]
----
$ bin/gremlin.sh -i y.groovy 1 2 3 -i x.groovy
$ bin/gremlin.sh -e y.groovy 1 2 3 -e x.groovy
----

See: link:https://issues.apache.org/jira/browse/TINKERPOP-1653[TINKERPOP-1653]

simplePath(), cyclicPath(), and path() support by()-, from()-, to()-modulation
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

It is now possible to extract analyze sub-paths using `from()` and `to()` modulations with respective, path-based steps.
Likewise, `simplePath()` and `cyclicPath()` now support, along with `from()` and `to()`, `by()`-modulation so the cyclicity
is determined by projections of the path data. This extension is fully backwards compatible.

See: link:https://issues.apache.org/jira/browse/TINKERPOP-1387[TINKERPOP-1387]

GraphManager versus DefaultGraphManager
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The Gremlin-Server previously implemented its own final `GraphManager` class. Now, the `GraphManager` has been 
updated to an interface, and users can supply their own `GraphManager` implementations in their YAML. The
previous `GraphManager` class was traditionally only to be used by internal Gremlin-Server classes; however,
if you previously used the `GraphManager`, then this changeset will be `breaking` for you. To fix the break,
you can upgrade your code to use the new `DefaultGraphManager`.

The `GraphManager` also deprecated the usage of `getGraphs()` so please use `getGraphNames()` instead.
The `GraphManager` also deprecated the usage of `getTraversalSources()` so please use `getTraversalSourceNames()` instead.

See: link:https://issues.apache.org/jira/browse/TINKERPOP-1438[TINKERPOP-1438]

Gremlin-Python Driver
^^^^^^^^^^^^^^^^^^^^^
Gremlin-Python now offers a more complete driver implementation that uses connection pooling and
the Python `concurrent.futures` module to provide asynchronous I/0 using threading. The default underlying
websocket client implementation is still provided by Tornado, but it is trivial to plug in another client by
defining the `Transport` interface.

Using the `DriverRemoteConnection` class is the exact same as in previous versions; however,
`DriverRemoteConnection` now uses the new `Client` class to submit messages to the server.
<commit_msg>Re-wording of upgrade docs. CTR<commit_after>////
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
////

TinkerPop 3.2.0
===============

image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/nine-inch-gremlins.png[width=225]

*Nine Inch Gremlins*

TinkerPop 3.2.5
---------------

*Release Date: NOT OFFICIALLY RELEASED YET*

Please see the link:https://github.com/apache/tinkerpop/blob/3.2.5/CHANGELOG.asciidoc#release-3-2-5[changelog] for a complete list of all the modifications that are part of this release.

Upgrading for Users
~~~~~~~~~~~~~~~~~~~

Authentication Configuration
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The server settings previously used `authentication.className` to set an authenticator for the the two provided
authentication handler and channelizer classes to use. This has been deprecated in favor of `authentication.authenticator`.
A class that extends `AbstractAuthenticationHandler` may also now be provided as `authentication.authenticationHandler`
to be used in either of the provided channelizer classes to handle the provided authenticator

See: https://issues.apache.org/jira/browse/TINKERPOP-1657[TINKERPOP-1657]

Default Maximum Parameters
^^^^^^^^^^^^^^^^^^^^^^^^^^

It was learned that compilation for scripts with large numbers of parameters is more expensive than those with less
parameters. It therefore becomes possible to make some mistakes with how Gremlin Server is used. A new setting on
the `StandardOpProcessor` and `SessionOpProcessor` called `maxParameters` controls the number of parameters that can
be passed in on a request. This setting is defaulted to sixteen.

Users upgrading to this version may notice errors in their applications if they use more than sixteen parameters. To
fix this problem simply reconfigure Gremlin Server with a configuration as follows:

[source,yaml]
----
processors:
  - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { maxParameters: 64 }}
  - { className: org.apache.tinkerpop.gremlin.server.op.standard.StandardOpProcessor, config: { maxParameters: 64 }}
----

The above configuration allows sixty-four parameters to be passed on each request.

See: link:https://issues.apache.org/jira/browse/TINKERPOP-1663[TINKERPOP-1663]

GremlinScriptEngine Metrics
^^^^^^^^^^^^^^^^^^^^^^^^^^^

The `GremlinScriptEngine` has a number of new metrics about its cache size and script compilation times which should
be helpful in understanding usage problems. As `GremlinScriptEngine` instances are used in Gremlin Server these metrics
are naturally exposed as part of the standard link:http://tinkerpop.apache.org/docs/current/reference/#_metrics[metrics]
set. Note that metrics are captured for both sessionless requests as well as for each individual session that is opened.

See: https://issues.apache.org/jira/browse/TINKERPOP-1644[TINKERPOP-1644]

Gremlin Console Scripting
^^^^^^^^^^^^^^^^^^^^^^^^^

The `gremlin.sh` command has two flags, `-i` and `-e`, which are used to pass a script and arguments into the Gremlin
Console for execution. Those flags now allow for passing multiple scripts and related arguments to be supplied which
can yield greater flexibilty in automation tasks.

[source,bash]
----
$ bin/gremlin.sh -i y.groovy 1 2 3 -i x.groovy
$ bin/gremlin.sh -e y.groovy 1 2 3 -e x.groovy
----

See: link:https://issues.apache.org/jira/browse/TINKERPOP-1653[TINKERPOP-1653]

simplePath(), cyclicPath(), and path() support by()-, from()-, to()-modulation
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

It is now possible to extract analyze sub-paths using `from()` and `to()` modulations with respective, path-based steps.
Likewise, `simplePath()` and `cyclicPath()` now support, along with `from()` and `to()`, `by()`-modulation so the cyclicity
is determined by projections of the path data. This extension is fully backwards compatible.

See: link:https://issues.apache.org/jira/browse/TINKERPOP-1387[TINKERPOP-1387]

GraphManager versus DefaultGraphManager
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Gremlin Server previously implemented its own final `GraphManager` class. Now, the `GraphManager` has been changed to
an interface, and users can supply their own `GraphManager` implementations in their YAML. The previous `GraphManager`
class was meant be used by classes internal to Gremlin Server, but it was public so if it was used for some reason by
usrs then then a compile error can be expected. To correct this problem, which will likely manifest as a compile error
when trying to create a `new GraphManager()` instance, simply change the code to `new DefaultGraphManager(Settings)`.

In addition to the change mentioned above, several methods on `GraphManager` were deprecated:

* `getGraphs()` should be replaced by the combination of `getGraphNames()` and then `getGraph(String)`
* `getTraversalSources()` is similarly replaced and should instead use a combinatio of `getTraversalSourceNames()` and
`getTraversalSource(String)`

See: link:https://issues.apache.org/jira/browse/TINKERPOP-1438[TINKERPOP-1438]

Gremlin-Python Driver
^^^^^^^^^^^^^^^^^^^^^
Gremlin-Python now offers a more complete driver implementation that uses connection pooling and
the Python `concurrent.futures` module to provide asynchronous I/0 using threading. The default underlying
websocket client implementation is still provided by Tornado, but it is trivial to plug in another client by
defining the `Transport` interface.

Using the `DriverRemoteConnection` class is the exact same as in previous versions; however,
`DriverRemoteConnection` now uses the new `Client` class to submit messages to the server.

{'fraction_non_alphanumeric': 0.1150901260169086, 'fraction_numerical': 0.01244217578561174, 'mean_word_length': 5.219742063492063, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 16, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '7653652', 'n_tokens_mistral': 3526, 'n_tokens_neox': 3275, 'n_words': 1441}