////
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.
////
= TinkerPop3 CHANGELOG

== TinkerPop 3.6.0 (Tinkerheart)

image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/gremlin-victorian.png[width=185]

[[release-3-6-3]]
=== TinkerPop 3.6.3 (Release Date: May 1, 2023)

This release also includes changes from <<release-3-5-6, 3.5.6>>.

* Fixed bug in `element()` when traversing from edges where bulking was enabled.
* Refactored `PropertyMapStep` to improve extensibility by providers. Removed `final` class declaration for `ProjectStep` and `CoalesceStep`.
* Fixed bug in grammar that prevented declaration of a `Map` key named `new` without quotes.
* Fixed bug in grammar that prevented parsing of `Map` key surrounded by parenthesis which is allowable in Groovy.
* Fixed bug in `GroovyTranslator` that surrounded `String` keys with parenthesis for `Map` when not necessary.
* Added support to the grammar allowing `List` and `Map` key declarations for `Map` entries.
* Fixed `Direction` enum bug in `gremlin-javascript` where `Direction.from_` and `Direction.to` was not properly aliased to `Direction.OUT` and `Direction.IN`
* Fixed `Direction` enum in `gremlin-python` where `Direction.from_` and `Direction.to` were not added, and they can now be used instead of defining `from_=Direction.OUT` and `to=Direction.IN`
* Improved performance of comparison (equals) between not compatible types and nulls.
* Fixed MergeV/MergeE steps to work when onCreate is immutable map.
* Introduced `Writing` and `Deleting` marker interfaces to identify whether a step can perform write or delete or both on Graph.
* For mergeV/mergeE, added checks for illegal hidden keys and refactored searchVertices to allow subclasses to override search criteria.
* Added static map capturing possible Traversal steps that shall be added to traversal for a given operator
* Fixed bug which caused some traversals to throw `GremlinTypeErrorException` to users.

==== Bugs

* TINKERPOP-2526 Gremlin Console performance with incomplete multi-line scripts
* TINKERPOP-2767 Repeat Out Times traversal hangs indefinitely on first execution
* TINKERPOP-2820 gremlin-python _close_session race condition/FD leak
* TINKERPOP-2855 Performance degradation in TinkerGraph 3.5.4 and 3.5.5
* TINKERPOP-2856 math() step fails if variable name contains a keyword
* TINKERPOP-2861 Fix incorrect symlinks in source release zip
* TINKERPOP-2863 HasId Step generates incorrect results when given a list of IDs mid-traversal
* TINKERPOP-2870 mergeV requires key of 'new' to be quoted
* TINKERPOP-2878 Incorrect handling of local operations when there are duplicate elements
* TINKERPOP-2888 DefaultTraversal's applyStrategies performance decrease
* TINKERPOP-2891 Inconsistent behavior when comparing a counted value with a negative value
* TINKERPOP-2893 Incorrectly comparing a counted value with multiple predicates
* TINKERPOP-2901 Incorrect result caused by has(key, predicate)
* TINKERPOP-2902 Critical security vulnerability in snakeyaml
* TINKERPOP-2905 gremlin-go gorillaTransporter.logHandler is not initialized correctly and leads to panic
* TINKERPOP-2911 CountStrategy converts count().is(0) wrongly under ConnectiveStrategy
* TINKERPOP-2918 Utils.GenerateUserAgent assumes Gremlin.Net.dll to be present when, in some environments, it is not.
* TINKERPOP-2922 GroovyTranslator produces a Map not parseable by the grammar
* TINKERPOP-2925 mergeE() in javascript producing an error
* TINKERPOP-2926 Gremlin-Java > An UnsupportedOperationException occurs on calling next() after a merge step with the option step modulator if the element does not exist
* TINKERPOP-2928 element() not working in conjunction with edge properties

==== Improvements

* TINKERPOP-2841 Test and Fix Per Request Settings in Go
* TINKERPOP-2852 Update Maven plugin for docker-images building for M1 compatibility
* TINKERPOP-2857 GraphSONRecordReader does not allow configure a GraphFilter during deserialization
* TINKERPOP-2865 Add has steps injected by PartitionStrategy at the end of the filter
* TINKERPOP-2890 Avoid exceptions on local scope based steps where possible
* TINKERPOP-2899 SampleGlobalStep samples inefficiently with TraverserSet running into hash collisions
* TINKERPOP-2912 Improve error message for addE() when traverser is incorrect
* TINKERPOP-2919 Improve performance of FilterRankingStrategy for deeply nested traversals
* TINKERPOP-2924 Refactor PropertyMapStep to be able to overwrite map method
* TINKERPOP-2929 Introduce new marker interfaces to identify whether a step can perform write or delete or both
* TINKERPOP-2931 Fix a few minor mergeV/E issues
* TINKERPOP-2934 Optimize ObjectWritable for displaying content of Java Collection or Map to reduce OOM

[[release-3-6-2]]
=== TinkerPop 3.6.2 (Release Date: January 16, 2023)

This release also includes changes from <<release-3-5-5, 3.5.5>>.

* Fixed bug in the Gremlin grammar for parsing of empty queries.
* Provided mechanism for provider plugins to get notified on script/query processing via `GraphManager`.
* Fixed bug in `select()` when using multiple labels.
* Moved Gherkin feature tests to `gremlin-test` resources so that they are more easily referenced by providers.
* Made quality of life changes to semantics for `mergeV/E` based on initial feedback.

==== Bugs

* TINKERPOP-2765 Race condition during script creation when using UnifiedChannelizer
* TINKERPOP-2769 gremlin-server does not reply with a timeout response to all timed out requests
* TINKERPOP-2771 Critical severity security vulnerabilty in commons-configuration 2.7
* TINKERPOP-2796 High severity security vulnerability found in snakeyaml
* TINKERPOP-2801 Incorrect deprecation notice on gremlin-python
* TINKERPOP-2803 Incorrect count() with sample() in TinkerGraph
* TINKERPOP-2805 No results returned for multiple labels to select()
* TINKERPOP-2809 High severity security vulnerability found in jackson databind
* TINKERPOP-2815 Critical security vulnerability for apache commons-text
* TINKERPOP-2816 Gherkin test issues for implementers
* TINKERPOP-2817  "Could not find a type identifier for the class : class java.lang.Byte" occurs when dumping graph to graphson format
* TINKERPOP-2826 Critical security vulnerability in ivy
* TINKERPOP-2836 Github actions do not run java driver integration tests
* TINKERPOP-2840 Test Failures on NonDex
* TINKERPOP-2843 Security vulnerabilities found in netty version 4.1.77
* TINKERPOP-2849 Incorrect implementation for GraphTraversalSource.With in gremlin-go

==== Improvements

* TINKERPOP-2471 Add logging to Gremlin.Net driver
* TINKERPOP-2480 User agent for Gremlin drivers
* TINKERPOP-2622 Enforce ordering semantics in feature tests
* TINKERPOP-2696 Refactor Gherkin test framework to better handle bindings
* TINKERPOP-2737 Dockerized Build and Test Environments
* TINKERPOP-2772 Add Spark utility to load vertices as RDD
* TINKERPOP-2779 Floating ConnectedComponent Feature Failures for GitHub Actions on windows
* TINKERPOP-2785 Inability to Mock Returned Result Types in Gremlin-Go Driver
* TINKERPOP-2792 Better exception when JavaTranslator finds a method but not the overload
* TINKERPOP-2794 Allow cancellation of Gremlin.Net async methods
* TINKERPOP-2804 gherkin feature files should be on the classpath
* TINKERPOP-2806 Provide method for provider plugins to get notified on script/query processing
* TINKERPOP-2808 Improve Compatibility on ARM machines
* TINKERPOP-2813 Improve driver usability for cases where NoHostAvailableException is currently thrown
* TINKERPOP-2814 Add a SSL handshake timeout configuration to the driver
* TINKERPOP-2818 exclude mockito-core in gremlin-core [compile scope] (import by jcabi-manifests)
* TINKERPOP-2833 TestSupport loads files too slow
* TINKERPOP-2834 CloneVertexProgram optimization on SparkGraphComputer
* TINKERPOP-2842 Expand GremlinScriptChecker to include request id overrides
* TINKERPOP-2850 Modifications to mergeV/E semantics

[[release-3-6-1]]
=== TinkerPop 3.6.1 (Release Date: July 18, 2022)

This release also includes changes from <<release-3-5-4, 3.5.4>>.

* Made GraphBinary the default serialization format for .NET and Python.
* Added missing `ResponseStatusCodeEnum` entry for 595 for .NET.
* Fix a javadoc comment in `Cluster.Builder` regarding maxInProcessPerConnection.

==== Bugs

* TINKERPOP-2734 NullPointerException when calling Client chooseConnection()
* TINKERPOP-2736 PluginAcceptor interface no more available in 3.5.3+ but referred in documentation
* TINKERPOP-2741 GraphMLWriter error message is not properly formatted
* TINKERPOP-2746 Medium security vulnerabilities on logback-core
* TINKERPOP-2751 Transaction: tx.commit() hangs up in javascript client-lib
* TINKERPOP-2754 Javascript client hangs if the server restarts
* TINKERPOP-2768 BranchStep pickToken should be integrated when added as a child option

==== Improvements

* TINKERPOP-2229 JavaScript GLV: Add GraphBinary Support
* TINKERPOP-2631 GraphSON float serialization when ujson is used is imprecise
* TINKERPOP-2693 Complete GraphBinary support in Python
* TINKERPOP-2715 remove log4jv1 dependency
* TINKERPOP-2723 Make GraphBinary the default serialization format for .NET and Python *(breaking)*
* TINKERPOP-2740 first request suspend more than 9s when using gremlin-java-driver
* TINKERPOP-2748 Medium security vulnerability on netty-all and netty-codec
* TINKERPOP-2762 getScopeKeys should respect the order of keys passed in Step
* TINKERPOP-2764 AWS Neptune returns an inaccessible structured error response

[[release-3-6-0]]
=== TinkerPop 3.6.0 (Release Date: April 4, 2022)

This release also includes changes from <<release-3-5-3, 3.5.3>>.

* Added parser support for `NaN` and `Infinity`.
* Implemented comparability/orderability semantics defined in the Graph Provider documentation.
* Added `TextP.regex` and `TextP.notRegex`.
* Changed TinkerGraph to allow identifiers to be heterogeneous when filtering.
* Prevented values of `T` to `property()` from being `null`.
* Added `element()` step.
* Added `call()` step.
* Added `fail()` step.
* Added `mergeV()` and `mergeE()` steps.
* Added `Direction` aliases of `from` and `to`.
* Moved `TraversalOptionParent.Pick` to its own class as `Pick`.
* Introduced Pythonic Gremlin step names using snake case and deprecated camel case naming.
* Improved Gherkin test framework to allow for asserting traversal exceptions as a behavior.
* Fixed query indentation for profile metrics where indent levels were not being respected.
* `TraversalOpProcessor` no longer accepts a `String` representation of `Bytecode` for the "gremlin" argument which was left to support older versions of the drivers.
* Removed requirement that "ids" used to filter vertices and edges need to be all of a single type.
* Created `gremlin-annotations` module where the `@GremlinDsl` annotation and related code has been moved.
* Moved `GremlinScriptChecker` to `gremlin-core` from `gremlin-groovy` since it is not Groovy dependent.
* Removed `groovy` and `groovy-json` dependencies from `gremlin-driver` as well as related `JsonBuilder` serialization support.
* Replaced log4j usage with logback where builds rely on and packaged distributions now contain the latter.
* Improved behavior of `V()` and `E()` when `null` is an argument producing a filtering behavior rather than an exception.
* Prevented metrics computation unless the traversal is in a locked state.
* Added syntax to Gremlin grammar to explicitly define `byte`, `short` and `BigInteger`.
* Added syntax to Gremlin grammar to allow construction of a reference `Vertex`.
* Changed Gremlin grammar to allow for Groovy-like syntax when parsing a `Map` literal.
* Created a way to produce a corpus of Gremlin traversals via `FeatureReader` and `DocumentationReader` in `gremlin-language`.
* Changed mechanism for determining if `id` equality with `toString()` is used by validating that elements of the predicate collection are all `String` rather than enforcing homogenous collections in the process.
* Exposed Gherkin tests as part of the provider test suite.
* Packaged Gherkin tests and data as standalone package as a convenience distribution.
* Removed `ProductiveByStrategy` as a strategy that is applied by default.
* Changed `by()` modulator semantics to consistently filter.
* Removed previously deprecated Gryo `MessageSerializer` implementations.
* Removed previously deprecated `AuthenticationSettings.enableAuditLog`.
* Removed previously deprecated `GroovyTranslator` from `gremlin-groovy` module.
* Removed previously deprecated Gremlin steps that conflicted with Python keywords.
* Removed the dependency on `six` from `gremlin-python`.
* Bumped to Apache Hadoop 3.3.1.
* Bumped to Apache Spark 3.2.0.
* Bumped node.js in `gremlin-javascript` to v16.13.0.
* Changed `NumberHelper` to properly cast to `byte` and `short` rather than default coercing to `Integer`.
* Modified some driver defaults (maximum content length, pool size, maximum in process) to be more consistent with one another.
* Fixed a potential connection load balancing issue due to a race condition not updating the usage count.
* Extended `property()` to allow for setting a `Map` of property values.

==== Bugs

* TINKERPOP-2358 Potential connection leak on client disposing
* TINKERPOP-2486 Client does not load balance requests across available connections
* TINKERPOP-2507 Remove requirement that Graph implementations must filter on homogeneous identifiers *(breaking)*
* TINKERPOP-2522 DefaultTraversalMetrics::toString does not indent annotations correctly
* TINKERPOP-2554 Extracting step metrics from ProfileStep throws NPE if the step was not triggered
* TINKERPOP-2565 GraphMLWriter does not check vertexLabelKey conflict
* TINKERPOP-2566 Incomplete error message in bytecode step generation
* TINKERPOP-2568 Graph instance not set for child traversals
* TINKERPOP-2569 Reconnect to server if Java driver fails to initialize
* TINKERPOP-2578 Set arguments to P within/without are wrapped in List
* TINKERPOP-2579 EventStrategy doesn't work with anonymous traversal
* TINKERPOP-2580 Update the custom DSL documentation
* TINKERPOP-2585 Traversal failed for different strategies order
* TINKERPOP-2589 XML External Entity (XXE) vulnerability
* TINKERPOP-2597 NullPointerException while initializing connection pool
* TINKERPOP-2598 within(null) NPE
* TINKERPOP-2603 TinkerGraph sometimes could not query float values.
* TINKERPOP-2604 TinkerGraph could not order vertex/edge without specified property.
* TINKERPOP-2606 Neo4j-Gremlin could not order vertex/edge without specified property
* TINKERPOP-2609 HTTP returns serialization exceptions for the GraphTraversalSource
* TINKERPOP-2610 NumberHelper can return values in the form of their original type smaller than int *(breaking)*
* TINKERPOP-2621 toString for traversals such as within with empty array returns empty string as argument instead of brackets
* TINKERPOP-2626 RangeGlobalStep closes traversal prematurely
* TINKERPOP-2649 Unable to translate gremlin query to java
* TINKERPOP-2658 Translator in gremlin-javascript has trouble with array arguments
* TINKERPOP-2661 GremlinGroovyScriptEngine handling of null arguments
* TINKERPOP-2662 Unclosed client session and stacktrace pops up when cleanup is missed
* TINKERPOP-2670 JavaDocs do not build when using JDK 11
* TINKERPOP-2694 Bug of TinkerGraph gremlin api "has()"
* TINKERPOP-2702 property(null) throws NPE
* TINKERPOP-2706 Traversal clone() not resetting the close state
* TINKERPOP-2712 PropertyChangedEvent is triggered before Property is actually changed
* TINKERPOP-2717 Gremlin.NET : WebSocketConnection does not check for MessageType.Close, causing error InvalidOperationException: "Received data deserialized into null object message. Cannot operate on it."
* TINKERPOP-2719 hasNext is called on TraverserIterator after transaction is committed
* TINKERPOP-2726 Python's GroovyTranslator translates boolean wrong

==== Improvements

* TINKERPOP-2367 Gremlin Translators for .NET
* TINKERPOP-2379 Consistent defaults and initialization APIs for drivers
* TINKERPOP-2411 Move GremlinDslProcessor to its own artifact *(breaking)*
* TINKERPOP-2467 Follow python naming conventions for Gremlin syntax
* TINKERPOP-2504 Intermittently failing server/driver integration tests
* TINKERPOP-2518 Enhance .NET gherkin framework to deal with more advanced assertions
* TINKERPOP-2524 Expand support for number types in grammar
* TINKERPOP-2525 Extend Gherkin tests to cover strategies
* TINKERPOP-2534 Log4j flagged as critical security violation
* TINKERPOP-2548 Add getter for indexer used in IndexStep
* TINKERPOP-2551 Setup scripts to publish Gremint to npm
* TINKERPOP-2555 Support for remote transactions in Python
* TINKERPOP-2556 Support remote transactions in .NET
* TINKERPOP-2557 Support remote transactions in Javascript
* TINKERPOP-2559 Stop sending the close message for .NET
* TINKERPOP-2560 Stop sending close message for Python
* TINKERPOP-2561 Stop sending close message in Javascript
* TINKERPOP-2562 Remove GraphSON 2 option in TraversalOpProcessor *(breaking)*
* TINKERPOP-2570 Support custom type in GraphBinary for .NET
* TINKERPOP-2576 Setup automatic updates via Dependabot for Gremlin.NET
* TINKERPOP-2577 Remove unused test coverage dependencies from Gremlin.NET
* TINKERPOP-2582 Construct traversals from gremlin-language
* TINKERPOP-2583 Make gremlin-groovy processing optional in Gremlin Server
* TINKERPOP-2591 Administrative adjustments to gremlint site
* TINKERPOP-2592 Align the style guides
* TINKERPOP-2593 Remove Groovy as a dependency from gremlin-driver *(breaking)*
* TINKERPOP-2596 datetime function
* TINKERPOP-2601 Unify Gremlin testing behind Gherkin
* TINKERPOP-2605 Further enforce and refine null semantics
* TINKERPOP-2608 Enhance sample().by() semantics when by produces a null *(breaking)*
* TINKERPOP-2611 Prevent property(id,null) and addV(null) *(breaking)*
* TINKERPOP-2613 Improve behavior of V/E(null)
* TINKERPOP-2615 Expand testing of path() with null values
* TINKERPOP-2616 Provide better exceptions with SSL related failures *(breaking)*
* TINKERPOP-2620 Clean up NullPointerExceptions related to null arguments on property related steps
* TINKERPOP-2630 Clarify that a server cannot support Graphson1.0 over HTTP
* TINKERPOP-2632 Netty 4.1.61 flagged with two high severity security violations
* TINKERPOP-2635 Consistent by() behavior *(breaking)*
* TINKERPOP-2636 Remove ProductiveByStrategy as a default *(breaking)*
* TINKERPOP-2637 Enhance logging in the Python
* TINKERPOP-2639 Remove previously deprecated GryoMessageSerializer infrastructure *(breaking)*
* TINKERPOP-2640 Remove previously deprecated AuthenticationSettings.enableAuditLog setting *(breaking)*
* TINKERPOP-2641 Allow orderability on any type
* TINKERPOP-2645 Improve behavior of hasId(null)
* TINKERPOP-2646 Make .NET StreamExtensions public for GraphBinary
* TINKERPOP-2650 Remove deprecated Gremlin step overloads of python keywords *(breaking)*
* TINKERPOP-2651 Update to .NET 6
* TINKERPOP-2652 Add TextP.regex to the text predicate set
* TINKERPOP-2656 Provide a no syntax sugar translator for python
* TINKERPOP-2657 Remove GroovyTranslator from gremlin-groovy *(breaking)*
* TINKERPOP-2659 Bump javascript runtimes to node v16
* TINKERPOP-2660 Bring back close message for drivers
* TINKERPOP-2663 Support Vertex references in grammar
* TINKERPOP-2665 Add the ability for property() to take a map
* TINKERPOP-2666 Create an anonymizing Translator for logging traversals without user data
* TINKERPOP-2667 Allow fold() with addAll to work on Map
* TINKERPOP-2668 Updating aiohttp requirements at germin-python due to vulnerability
* TINKERPOP-2669 Netty 4.1.61 flagged with medium severity security violations
* TINKERPOP-2671 Add tx() support to grammar
* TINKERPOP-2676 Refactor GremlinScript checker out of groovy package *(breaking)*
* TINKERPOP-2678 jackson-databind medium security issue identified
* TINKERPOP-2679 Update JavaScript driver to support processing messages as a stream
* TINKERPOP-2680 Create call() step to allow for calling procedures
* TINKERPOP-2681 Create merge() step to codify best practice for upsert pattern
* TINKERPOP-2682 Enable WebSocket compression in .NET by default
* TINKERPOP-2687 Gremlin Boolean Value Expressions 2.0 with Ternary Boolean Logics
* TINKERPOP-2688 Investigate two .NET test failures
* TINKERPOP-2689 VertexProperty Gherkin support for .NET
* TINKERPOP-2690 VertexProperty Gherkin support for Javascript
* TINKERPOP-2691 VertexProperty Gherkin support for Python
* TINKERPOP-2695 Support NaN/Inf in Parser and Gherkin
* TINKERPOP-2705 Support null as an argument where it makes sense in Gremlin.NET
* TINKERPOP-2707 Closing parent connection in python should close tx() connections
* TINKERPOP-2711 Make gremlin-language optional as it brings in CDDL/GPL dependencies
* TINKERPOP-2713 Create an element() step that maps a Property to its Element.
* TINKERPOP-2716 Enable eslint for gremlin-javascript project
* TINKERPOP-2725 Traversal Strategy Mix Up In Gremlin-Python
* TINKERPOP-2727 HasContainer should allow a null key
* TINKERPOP-2728 jackson-databind high security issue identified

== TinkerPop 3.5.0 (The Sleeping Gremlin: No. 18 Entr'acte Symphonique)

image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/gremlin-sleeping-beauty.png[width=185]

[[release-3-5-6]]
=== TinkerPop 3.5.6 (Release Date: May 1, 2023)

* Added `GraphFilter` support to `GraphSONRecordReader`.
* gremlin-python aiohttp dependency requirement upper bound relaxed to <4.0.0.
* Fixed network connection closing for sessions and transactions in `gremlin-python`.
* Fixed memory cleanup for sessions and transactions in `gremlin-python` and `gremlin-go`.
* Fixed bug in `CountStrategy` where `or()` and `and()` filters were not being rewritten properly for some patterns.
* Changed `PartitionStrategy` to force its filters to the end of the chain for `Vertex` and `Edge` read steps, thus preserving order of the `has()`.
* Added `RequestOptions` and `RequestOptionsBuilder` types to Go GLV to encapsulate per-request settings and bindings.
* Improved `addE()` error messaging when traverser is not a `Vertex`.
* Added `SubmitWithOptions()` methods to `Client` and `DriverRemoteConnection` in Go GLV to pass `RequestOptions` to the server.
* Fixed bug in which `gremlin-server` would not respond to clients if an `Error` was thrown during bytecode traversals.
* Added ability to deploy multi-arch Docker images for server and console. Server image now supports AMD64 and ARM64.
* Changed `with()` configuration for `ARGS_BATCH_SIZE` and `ARGS_EVAL_TIMEOUT` to be more forgiving on the type of `Number` used for the value.
* Changed `gremlin-console` to add imports via an ImportCustomizer to reduce time spent resolving imports.
* Bumped to Groovy 2.5.22.
* Fixed `generateUserAgent()` in `gremlin-javascript` and `gremlin-dotnet` to handle null and undefined properly, and updated Java UserAgent error handling
* Fixed bug in parsing of `math()` expressions where variables were not being identified if they contained a text associated with a function.
* Refactored `FilterRankingStrategy` to improve performance for deeply nested traversals.
* Refactored strategy application to improve performance by avoiding some excessive recursion.
* Added `Traversal.lock()` to provide an explicit way to finalize a traversal object.
* Changed `Traversal.getGraph()` to get its `Graph` object from itself or, if not available, its parent.
* Added `AuthInfoProvider` interface and `NewDynamicAuth()` to gremlin-go for dynamic authentication support.
* Fixed bug where `hasId()` unrolls ids in Java arrays to put into `P.within` but not ids in lists, this also aligned behavior of start-step and mid-traversal hasId().
* Bumped to `snakeyaml` 2.0 to fix security vulnerability.
* Bumped to Apache `commons-configuration` 2.9.0 to fix security vulnerability.
* Fixed `CountStrategy` bug for cases where predicates contain negative numbers by disabling the optimization.
* Improved `count` step optimization for negative values in input for 'eq' comparison.
* Fixed performance issue when using `SampleGlobalStep` with a traverser that has either a `LABELED_PATH` or `PATH` requirement.
* Reduce the toString() of ObjectWritable to avoid OOM for running OLAP queries on Spark.

==== Bugs

* TINKERPOP-2526 Gremlin Console performance with incomplete multi-line scripts
* TINKERPOP-2767 Repeat Out Times traversal hangs indefinitely on first execution
* TINKERPOP-2820 gremlin-python _close_session race condition/FD leak
* TINKERPOP-2855 Performance degradation in TinkerGraph 3.5.4 and 3.5.5
* TINKERPOP-2856 math() step fails if variable name contains a keyword
* TINKERPOP-2861 Fix incorrect symlinks in source release zip
* TINKERPOP-2863 HasId Step generates incorrect results when given a list of IDs mid-traversal
* TINKERPOP-2878 Incorrect handling of local operations when there are duplicate elements
* TINKERPOP-2888 DefaultTraversal's applyStrategies performance decrease
* TINKERPOP-2891 Inconsistent behavior when comparing a counted value with a negative value
* TINKERPOP-2893 Incorrectly comparing a counted value with multiple predicates
* TINKERPOP-2902 Critical security vulnerability in snakeyaml
* TINKERPOP-2905 gremlin-go gorillaTransporter.logHandler is not initialized correctly and leads to panic
* TINKERPOP-2911 CountStrategy converts count().is(0) wrongly under ConnectiveStrategy
* TINKERPOP-2918 Utils.GenerateUserAgent assumes Gremlin.Net.dll to be present when, in some environments, it is not.

==== Improvements

* TINKERPOP-2841 Test and Fix Per Request Settings in Go
* TINKERPOP-2852 Update Maven plugin for docker-images building for M1 compatibility
* TINKERPOP-2857 GraphSONRecordReader does not allow configure a GraphFilter during deserialization
* TINKERPOP-2865 Add has steps injected by PartitionStrategy at the end of the filter
* TINKERPOP-2890 Avoid exceptions on local scope based steps where possible
* TINKERPOP-2899 SampleGlobalStep samples inefficiently with TraverserSet running into hash collisions
* TINKERPOP-2912 Improve error message for addE() when traverser is incorrect
* TINKERPOP-2919 Improve performance of FilterRankingStrategy for deeply nested traversals
* TINKERPOP-2934 Optimize ObjectWritable for displaying content of Java Collection or Map to reduce OOM

[[release-3-5-5]]
=== TinkerPop 3.5.5 (Release Date: January 16, 2023)

* Changed the `Result` struct in gremlin-go to make it more suitable for mocking in tests.
* Changed label generation in `PathProcessorStrategy` to be more deterministic.
* Bumped to Apache `commons-configuration` 2.8.0 to fix security vulnerability.
* Fixed issue where the `GremlinGroovyScriptEngine` reused the same translator concurrently which lead to incorrect translations.
* Fixed bug where tasks that haven't started running yet time out due to `evaluationTimeout` and never send a response back to the client.
* Set the exact exception in `initializationFailure` on the Java driver instead of the root cause.
* Improved error message for when `from()` and `to()` are unproductive for `addE()`.
* Added `SparkIOUtil` utility to load graph into Spark RDD.
* Improved performance of `CloneVertexProgram` by bypassing the shuffle state of `SparkGraphComputer`.
* Changed `JavaTranslator` exception handling so that an `IllegalArgumentException` is used for cases where the method exists but the signature can't be discerned given the arguments supplied.
* Dockerized all test environment for .NET, JavaScript, Python, Go, and Python-based tests for Console, and added Docker as a build requirement.
* Async operations in .NET can now be cancelled. This however does not cancel work that is already happening on the server.
* Bumped to `snakeyaml` 1.32 to fix security vulnerability.
* Update docker/build.sh to work with docker-compose dockerized tests changes.
* Fix permission issues with Docker generated files by setting permission to current user, so sudo isn't needed for maven operations.
* Updated base images for gremlin-server and gremlin-console docker images to support arm64.
* Use Go embed for error/logger resources for `gremlin-go` to avoid missing resource files when using binaries.
* Added user agent to web socket handshake in java driver. Can be controlled by a new enableUserAgentOnConnect configuration. It is enabled by default.
* Added user agent to web socket handshake in Gremlin.Net driver. Can be controlled by `EnableUserAgentOnConnect` in `ConnectionPoolSettings`. It is enabled by default.
* Added user agent to web socket handshake in go driver. Can be controlled by a new `EnableUserAgentOnConnect` setting. It is enabled by default.
* Added user agent to web socket handshake in python driver. Can be controlled by a new `enable_user_agent_on_connect` setting. It is enabled by default.
* Added user agent to web socket handshake in javascript driver. Can be controlled by a new `enableUserAgentOnConnect` option. It is enabled by default.
* Added logging in .NET.
* Added `addDefaultXModule` to `GraphSONMapper` as a shortcut for including a version matched GraphSON extension module.
* Modified `GraphSONRecordReader` and `GraphSONRecordWriter` to include the GraphSON extension module by default.
* Bumped `jackson-databind` to 2.14.0 to fix security vulnerability.
* Bumped to Groovy 2.5.15.
* Bumped to Netty 4.1.86.
* Bumped `ivy` to 2.5.1 to fix security vulnerability
* Removed default SSL handshake timeout. The SSL handshake timeout will instead be capped by setting `connectionSetupTimeoutMillis`.
* Improved logging for `gremlin-driver`.
* Modified `Connection` and `Host` job scheduling in `gremlin-driver` by dividing their work to two different thread pools and sparing work from the primary pool responsible for submitting requests and reading results.
* Prevented usage of the fork-join pool for `gremlin-driver` job scheduling.
* Modified `GremlinScriptChecker` to extract the `Tokens.REQUEST_ID` from Gremlin scripts.
* Changed `Host` initialization within a `Client` to be parallel again in `gremlin-driver`.
* Changed mechanism for determining `Host` health which should make the driver more resilient to intermittent network failures.
* Removed the delay for reconnecting to a potentially unhealthy `Host` only marking it as unavailable after that initial retry fails.
* Prevented fast `NoHostAvailableException` in favor of more direct exceptions when borrowing connections from the `ConnectionPool`.
* Improved Gherkin tests for more consistent results.
* Provides users with potentially more information to driver TimeoutExceptions.
* Fixed an issue in Go and Python GLVs where modifying per request settings to override request_id's was not working correctly.
* Fixed incorrect implementation for `GraphTraversalSource.With` in `gremlin-go`.
* Changed Gremlin.version() to return `"VersionNotFound"` if the version is missing from the manifest.
* Fixed local steps to avoid throwing an exception for non-iterable input.
* Fixed a case sensitivity issue when comparing request UUIDs in `gremlin-javascript`.

==== Bugs

* TINKERPOP-2765 Race condition during script creation when using UnifiedChannelizer
* TINKERPOP-2769 gremlin-server does not reply with a timeout response to all timed out requests
* TINKERPOP-2771 Critical severity security vulnerabilty in commons-configuration 2.7
* TINKERPOP-2796 High severity security vulnerability found in snakeyaml
* TINKERPOP-2803 Incorrect count() with sample() in TinkerGraph
* TINKERPOP-2809 High severity security vulnerability found in jackson databind
* TINKERPOP-2815 Critical security vulnerability for apache commons-text
* TINKERPOP-2816 Gherkin test issues for implementers
* TINKERPOP-2817 Support java.lang.Byte in hadoop GraphSONRecordWriter/GraphSONRecordReader
* TINKERPOP-2826 Critical security vulnerability in ivy
* TINKERPOP-2836 Github actions do not run java driver integration tests
* TINKERPOP-2840 Test Failures on NonDex
* TINKERPOP-2843 Security vulnerabilities found in netty version 4.1.77
* TINKERPOP-2849 Incorrect implementation for GraphTraversalSource.With in gremlin-go

==== Improvements

* TINKERPOP-2471 Add logging to Gremlin.Net driver
* TINKERPOP-2480 User agent for Gremlin drivers
* TINKERPOP-2737 Dockerized Build and Test Environments
* TINKERPOP-2772 Add Spark utility to load vertices as RDD
* TINKERPOP-2779 Floating ConnectedComponent Feature Failures for GitHub Actions on windows
* TINKERPOP-2785 Inability to Mock Returned Result Types in Gremlin-Go Driver
* TINKERPOP-2792 Better exception when JavaTranslator finds a method but not the overload
* TINKERPOP-2794 Allow cancellation of Gremlin.Net async methods
* TINKERPOP-2808 Improve Compatibility on ARM machines
* TINKERPOP-2813 Improve driver usability for cases where NoHostAvailableException is currently thrown
* TINKERPOP-2814 Add a SSL handshake timeout configuration to the driver
* TINKERPOP-2833 TestSupport loads files too slow
* TINKERPOP-2834 CloneVertexProgram optimization on SparkGraphComputer
* TINKERPOP-2842 Expand GremlinScriptChecker to include request id overrides

[[release-3-5-4]]
=== TinkerPop 3.5.4 (Release Date: July 18, 2022)

* Added exception to Gremlin Server that is thrown when using a transaction on a non-transaction graph.
* Exposed error message sent by the server as a property on `GremlinServerError` for gremlin-python
* Allowed `datetime()` syntax to accept zone offset with colon separators and seconds.
* Fixed a minor problem in the Gremlin parser where a `GraphTraversalSource` may not have been initialized.
* Added getters to high and low properties in `RangeLocalStep`.
* Added `Pick` traversal to the return from `getGlobalChildren()` for `BranchStep`.
* Ensured `Pick` traversal was an integrated child.
* Added GraphBinary serialization support to gremlin-javascript.
* Improved startup time by removing unnecessary DNS lookup.
* Bumped to logback 1.2.9.
* Bumped to netty 4.1.77.
* Fixed bug in `submitAsync()` in gremlin-python where the deprecated version was not returning its result.
* Added missing `ResponseStatusCodeEnum` entries for 403, 429, 497, and 596 for .NET.
* Added GraphBinary support in gremlin-python for short, bigdecimal and biginteger.
* Fixed bug in `PartitionStrategy` where the use of `AbstractLambdaTraversal` caused an unexpected exception.
* Fixed bug where close requests for sessions were improperly validating the request in the `UnifiedChannelizer`.
* Deprecated and removed functionality of the `connectOnStartup` option in `gremlin-javascript` to resolve potential `unhandledRejection` and race conditions.
* Ensured `Graph` instance was set between `TraversalStrategy` executions.
* Fixed potential `NullPointerException` in `gremlin-driver` where initialization of a `ConnectionPool` would fail but not throw an exception due to centralized error check being satisfied by a different process.
* Fixed a bug where the JavaScript client would hang indefinitely on traversals if the connection to the server was terminated.
* Fix a javadoc comment in Cluster.Builder regarding maxInProcessPerConnection.
* Added a getter for selectKeys in SelectStep

==== Bugs

* TINKERPOP-2734 NullPointerException when calling Client chooseConnection()
* TINKERPOP-2735 IllegalStateException: Unrecognized content of the 'gremlin' argument... on connection close
* TINKERPOP-2736 PluginAcceptror interface no more available in 3.5.3+ but referred in documentation
* TINKERPOP-2741 GraphMLWriter error message is not properly formatted
* TINKERPOP-2751 Transaction: tx.commit() hangs up in javascript client-lib
* TINKERPOP-2754 Javascript client hangs if the server restarts
* TINKERPOP-2763 client.submitAsync returns None value
* TINKERPOP-2768 BranchStep pickToken should be integrated when added as a child option

==== Improvements

* TINKERPOP-2229 JavaScript GLV: Add GraphBinary Support
* TINKERPOP-2631 GraphSON float serialization when ujson is used is imprecise
* TINKERPOP-2693 Complete GraphBinary support in Python
* TINKERPOP-2740 first request suspend more than 9s when using gremlin-java-driver
* TINKERPOP-2748 Medium security vulnerability on netty-all and netty-codec
* TINKERPOP-2762 getScopeKeys should respect the order of keys passed in Step
* TINKERPOP-2764 AWS Neptune returns an inaccessible structured error response

[[release-3-5-3]]
=== TinkerPop 3.5.3 (Release Date: April 4, 2022)

* Added support for using a readable stream when submitting scripts through the JavaScript driver which allows processing each batch of result sets as they come in, rather than waiting for the entire result set to complete before allowing processing.
* Fixed issue with implicit conversion of `Infinity` number instances into `BigDecimal`.
* Ensured that new properties are added before triggering the associated event.
* Added support for WebSocket compression in the .NET driver. (Only available on .NET 6.)
* Added Groovy `Translator` for .NET.
* Bumped to `jackson-databind` 2.13.2.2.
* Fixed bug in `DefaultTraversal.clone()` where the resulting `Traversal` copy could not be re-iterated.
* Fixed bug in `JavaTranslator` that did not handle `has()` well where `null` was the first argument.
* Renamed `GremlinBaseVisitor` to `DefaultGremlinBaseVisitor` in `gremlin-core` to prevent conflict with the generated `GremlinBaseVisitor` in `gremlin-language`.
* Tracked transaction spawned connections and closed them when the parent connection was closed for `gremlin-python`.
* Prevented unintentionally opening another transaction in `TraversalOpProcessor`` and `SessionOpProcessor` of Gremlin Server.
* Fixed bug in `Translator` of `gremlin-python` around translation of Booleans.

==== Bugs

* TINKERPOP-2694 Bug of TinkerGraph gremlin api "has()"
* TINKERPOP-2706 Traversal clone() not resetting the close state
* TINKERPOP-2712 PropertyChangedEvent is triggered before Property is actually changed
* TINKERPOP-2717 Gremlin.NET : WebSocketConnection does not check for MessageType.Close, causing error InvalidOperationException: "Received data deserialized into null object message. Cannot operate on it."
* TINKERPOP-2719 hasNext is called on TraverserIterator after transaction is committed
* TINKERPOP-2726 Python's GroovyTranslator translates boolean wrong

==== Improvements

* TINKERPOP-2367 Gremlin Translators for .NET
* TINKERPOP-2518 Enhance .NET gherkin framework to deal with more advanced assertions
* TINKERPOP-2651 Update to .NET 6
* TINKERPOP-2679 Update JavaScript driver to support processing messages as a stream
* TINKERPOP-2682 Enable WebSocket compression in .NET by default
* TINKERPOP-2707 Closing parent connection in python should close tx() connections
* TINKERPOP-2711 Make gremlin-language optional as it brings in CDDL/GPL dependencies
* TINKERPOP-2716 Enable eslint for gremlin-javascript project
* TINKERPOP-2725 Traversal Strategy Mix Up In Gremlin-Python
* TINKERPOP-2727 HasContainer should allow a null key
* TINKERPOP-2728 jackson-databind high security issue identified

[[release-3-5-2]]
=== TinkerPop 3.5.2 (Release Date: January 10, 2022)

This release also includes changes from <<release-3-4-13, 3.4.13>>.

* Added an `AnonymizingTypeTranslator` for use with `GroovyTranslator` which strips PII (anonymizes any String, Numeric, Date, Timestamp, or UUID data)
* Added support for `g.tx()` in Python.
* Added logging in in Python.
* Added `tx()` syntax to `gremlin-language`.
* Fixed shutdown cleanup issue in Python aiohttp transport layer.
* Added a `NoSugarTranslator` translator to `PythonTranslator` which translates Gremlin queries to Python without syntactic sugar (ex `g.V().limit(1)` instead of `g.V()[0:1]`)
* Added support for `g.Tx()` in .NET.
* Added support for `with()` constant options to `io()`.
* Changed `GroovyTranslator` to generate code more compatible to Java with `Date` and `Timestamp`.
* Fixed bug in the processing of the `io()` step when constructing a `Traversal` from the grammar.
* Added the `ConnectedComponent` tokens required to properly process the `with()` of the `connectedComponent()` step.
* Fixed `DotNetTranslator` bugs where translations produced Gremlin that failed due to ambiguous step calls to `has()`.
* Fixed bug where `RepeatUnrollStrategy`, `InlineFilterStrategy` and `MessagePassingReductionStrategy` were all being applied more than necessary.
* Modified grammar to accept the `datetime()` function so that Gremlin scripts have a way to natively construct a `Date`.
* Ensured `PathRetractionStrategy` is applied after `InlineFilterStrategy` which prevents an error in traverser mapping in certain conditions.
* Deprecated `JsonBuilder` serialization for GraphSON and Gryo.
* Added `ProductiveByStrategy` to ensure consistency of `by()` modulator behaviors when child traversal arguments contained no elements.
* Changed drivers to once again send the previously deprecated and removed "close" message for sessions.
* Modified `fold()` to merge `Map` instances with `addAll`.
* Allowed `null` string values in the Gremlin grammar.
* Fixed support for `SeedStrategy` in the Gremlin Grammar.
* Fixed bug in `Translator` of `gremlin-javascript` around array translation.
* Fixed bugs in `PythonTranslator`, `JavascriptTranslator` and `DotNetTranslator` when translating `TraversalStrategy` objects to Javascript.
* Prevented exception with `hasLabel(null)` and `hasKey(null)` and instead filter away traversers as these structural components can't ever be null.
* Improved handling of `null` when passed to `P` predicates.
* Handled `null` for mathematical reducing operations of `sum()`, `mean()`, `max()` and `min()`.
* Allowed `null` values in `Memory` for `GraphComputer`.
* Allowed `null` assignment in `withSideEffect()`.
* Allowed labelling of steps that emit a traverser carrying `null`.
* Fixed bug in filtering for `null` property key arguments to `valueMap()`, `elementMap()`, `properties()` and `values()`.
* Modified grammar to allow a call to `within()` and `without()` with no arguments.
* Fixed problems with `inject(null)` variations where `null` was the only value being submitted.
* Fixed problem with `GroovyTranslator` and `inject(null,null)` which could be interpreted as the Groovy JDK extension `inject(Object,Closure)`.
* Fixed error where certain variants of `inject()` with `null` might not properly construct a traversal in .NET.
* Prevented exception with  `hasValue(null)` and allowed filtering as expected.
* Refined `DotNetTranslator` to be more explicit with `null` arguments to ensure that the right overloads are called.
* Created `GremlinParser` to construct `Traversal` objects from `gremlin-language`.
* Added `GremlinLangScriptEngine` as a `GremlinScriptEngine` implementation that users the grammar and `JavaTranslator` to evaluate Gremlin.
* Added getter method for `bypassTraversal` in `AbstractLambdaTraversal`.
* Added support for custom GraphBinary types in .NET.
* Removed some unnecessary exception wrapping around `gremlin-driver` errors now producing a more immediate view of the actual error cause.

==== Bugs

* TINKERPOP-2569 Reconnect to server if Java driver fails to initialize
* TINKERPOP-2585 Traversal failed for different strategies order
* TINKERPOP-2589 XML External Entity (XXE) vulnerability
* TINKERPOP-2597 NullPointerException while initializing connection pool
* TINKERPOP-2598 within(null) NPE
* TINKERPOP-2603 TinkerGraph sometimes could not query float values.
* TINKERPOP-2609 HTTP returns serialization exceptions for the GraphTraversalSource
* TINKERPOP-2621 toString for traversals such as within with empty array returns empty string as argument instead of brackets
* TINKERPOP-2626 RangeGlobalStep closes traversal prematurely
* TINKERPOP-2649 Unable to translate gremlin query to java
* TINKERPOP-2658 Translator in gremlin-javascript has trouble with array arguments
* TINKERPOP-2662 Unclosed client session and stacktrace pops up when cleanup is missed
* TINKERPOP-2670 JavaDocs do not build when using JDK 11

==== Improvements

* TINKERPOP-2504 Intermittently failing server/driver integration tests
* TINKERPOP-2555 Support for remote transactions in Python
* TINKERPOP-2556 Support remote transactions in .NET
* TINKERPOP-2570 Support custom type in GraphBinary for .NET
* TINKERPOP-2582 Construct traversals from gremlin-language
* TINKERPOP-2583 Make gremlin-groovy processing optional in Gremlin Server
* TINKERPOP-2591 Administrative adjustments to gremlint site
* TINKERPOP-2592 Align the style guides
* TINKERPOP-2596 datetime function
* TINKERPOP-2605 Further enforce and refine null semantics
* TINKERPOP-2615 Expand testing of path() with null values
* TINKERPOP-2616 Provide better exceptions with SSL related failures *(breaking)*
* TINKERPOP-2620 Clean up NullPointerExceptions related to null arguments on property related steps
* TINKERPOP-2630 Clarify that a server cannot support Graphson1.0 over HTTP
* TINKERPOP-2632 Netty 4.1.61 flagged with two high severity security violations
* TINKERPOP-2637 Enhance logging in the Python
* TINKERPOP-2646 Make .NET StreamExtensions public for GraphBinary
* TINKERPOP-2656 Provide a no syntax sugar translator for python
* TINKERPOP-2660 Bring back close message for drivers
* TINKERPOP-2666 Create an anonymizing Translator for logging traversals without user data
* TINKERPOP-2667 Allow fold() with addAll to work on Map
* TINKERPOP-2668 Updating aiohttp requirements at germin-python due to vulnerability
* TINKERPOP-2669 Netty 4.1.61 flagged with medium severity security violations
* TINKERPOP-2671 Add tx() support to grammar

[[release-3-5-1]]
=== TinkerPop 3.5.1 (Release Date: July 19, 2021)

This release also includes changes from <<release-3-4-12, 3.4.12>>.

* Added support for `g.tx()` in Javascript.
* Fixed bug in Javascript error message related to validating anonymous traversal spawns.
* Changed close of Python and Javascript connections to no longer send a "close message" as the server no longer acknowledges it as of 3.5.0.
* Fixed bug where the `Graph` instance was not being assigned to child traversals.
* Removed sending of deprecated session close message from Gremlin.Net driver.

==== Bugs

* TINKERPOP-2358 Potential connection leak on client disposing
* TINKERPOP-2554 Extracting step metrics from ProfileStep throws NPE if the step was not triggered
* TINKERPOP-2565 GraphMLWriter does not check vertexLabelKey conflict
* TINKERPOP-2566 Incomplete error message in bytecode step generation
* TINKERPOP-2568 Graph instance not set for child traversals
* TINKERPOP-2578 Set arguments to P within/without are wrapped in List
* TINKERPOP-2579 EventStrategy doesn't work with anonymous traversal
* TINKERPOP-2580 Update the custom DSL documentation

==== Improvements

* TINKERPOP-2548 Add getter for indexer used in IndexStep
* TINKERPOP-2551 Setup scripts to publish Gremint to npm
* TINKERPOP-2557 Support remote transactions in Javascript
* TINKERPOP-2559 Stop sending the close message for .NET
* TINKERPOP-2560 Stop sending close message for Python
* TINKERPOP-2561 Stop sending close message in Javascript
* TINKERPOP-2576 Setup automatic updates via Dependabot for Gremlin.NET
* TINKERPOP-2577 Remove unused test coverage dependencies from Gremlin.NET

[[release-3-5-0]]
=== TinkerPop 3.5.0 (Release Date: May 3, 2021)

This release also includes changes from <<release-3-4-11, 3.4.11>>.

* Changed transport implementation to use AIOHTTP instead of Tornado for gremlin-python.
* Added max_content_length and unit test for it in gremlin-python.
* Removed compression_option support for transport in gremlin-python.
* Fixed event loop issues and added unit test for it in gremlin-python.
* Fixed DriverRemoteConnection multithreading issues and added unit test for it in gremlin-python.
* Fixed heartbeat timeout issues and tested with local server manually for gremlin-python.
* Fixed build errors emitted for gremlin-python (asyncio task destroyed but is pending error).
* Added `gremlin-language` module.
* Allowed the possibility for the propagation of `null` as a `Traverser` in Gremlin.
* Added a fully shaded version of `gremlin-driver`.
* Exposed websocket connection status in JavaScript driver.
* Fixed a bug where spark-gremlin was not re-attaching properties when using `dedup()`.
* Fixed a bug in `WsAndHttpChannelizer` pipeline configuration where failed object aggregation could not write back HTTP responses.
* Ensured better consistency of the use of `null` as arguments to mutation steps.
* Added a `ResponseStatusCode` to indicate that a client should retry its request.
* Added `TemporaryException` interface to indicate that a transaction can be retried.
* Prevented `TraversalStrategy` instances from being added more than once, where the new instance replaces the old.
* Improved error message for `addE()` when the `from()` or `to()` does not resolve to a `Vertex`.
* Improved error message for `addE()` when cardinality is specified on `property()` assignments.
* Allowed `property(T.label,Object)` to be used if no value was supplied to `addV(String)`.
* Dropped support for .NET Standard 1.3 in Gremlin.Net. Only .NET Standard 2.0 is supported starting with this version.
* Added GraphBinary support for .NET.
* Added `UnifiedChannelizer` which exposes HTTP and Websockets connections and processes both sessionless and in-session requests with the same `gremlinPool`.
* Bounded the `gremlinPool` in Gremlin Server to enforce rate limiting which will then produce a `TOO_MANY_REQUESTS` response status code.
* Switched from `Newtonsoft.Json` to `System.Text.Json` as the JSON library for Gremlin.Net.
* Allowed additional arguments to `Client.submit()` in Javascript driver to enable setting of parameters like `scriptEvaluationTimeout`.
* Gremlin.Net driver no longer supports skipping deserialization by default. Users can however create their own `IMessageSerializer` if they need this functionality.
* Supported deserialization of `dict` and `list` as a key in a `dict` for Python.
* Changed the aliased `Client` to proxy `close()` methods to its underlying client.
* Added support for remote `g.tx()` usage.
* Added support for bytecode-based sessions.
* Added a `Graph.Feature` for `supportsNullPropertyValues`.
* Modified `TokenTraversal` to support `Property` thus `by(key)` and `by(value)` can now apply to `Edge` and meta-properties.
* Added `SeedStrategy` to allow deterministic behavior for `coin()`, `sample()` and `Order.shuffle`.
* Added `Grouping` step interface.
* Added `TraversalParent.replaceTraversal()` which can replace a direct child traversal.
* Added `ByModulatorOptimizationStrategy` which replaces certain standard traversals w/ optimized traversals (e.g. `TokenTraversal`).
* Improved `IdentityRemovalStrategy` by accounting for `EndStep` situations.
* Added `IdentityRemovalStrategy` to the standard list of `TraversalStrategies`.
* Modified `PathRetractionStrategy` to leave labels more often with `match()` cases to return more consistent results.
* Refactored `MapStep` to move its logic to `ScalarMapStep` so that the old behavior could be preserved while allow other implementations to have more flexibility.
* Modified TinkerGraph to support `null` property values and can be configured to disable that feature.
* Modified `null` handling in mutations to be consistent for a new `Vertex` as well as update to an existing one.
* Enforced use of anonymous child traversals.
* Removed support for Python 2.x in gremlinpython.
* Upgraded to Apache Commons Configuration2.
* Renamed `StoreStep` to `AggregateLocalStep`.
* Renamed `AggregateStep` to `AggregateGlobalStep`.
* Renamed `SERVER_ERROR_SCRIPT_EVALUATION` to `SERVER_ERROR_EVALUATION` given that this response code applies to remote traversals as well as scripts.
* Refactored `TraversalStrategies` to implement `Iterable`.
* Refactored `Traversal` semantics to always expect `EmptyStep` as a parent if it is meant to be the root `Traversal`.
* Configured GraphBinary as the default binary serialization format for the Java Driver.
* Configured GraphSON 3.0 as the default text serialization format when no serializer can be determined.
* Configured GraphSON 3.0 as the default setting for the `GraphSONMapper`.
* Added `JavascriptTranslator` for Java.
* Added `DotNetTranslator` for Java.
* Added Groovy `Translator` for Python.
* Fixed bug in `PythonTranslator` for processing `TraversalStrategy` instances in GraphBinary.
* Fixed bug in bytecode `Bindings` where calling `of()` prior to calling a child traversal in the same parent would cause the initial binding to be lost.
* Migrated from Tornado to AIOHTTP for gremlinpython.
* Bumped to Neo4j 3.4.11.
* Bumped to Spark 3.0.0.
* Bumped to Jackson 2.11.x.
* Supported build for Java 11.
* Added `MessageSerializer.getMapper()` to return the underlying object that handles serialization for a particular implementation.
* Added a parameterized `TypeTranslator` for use with `GroovyTranslator` that should produce more cache hits.
* Added support for `TextP` in Neo4j using its string search functions.
* Added a kerberos KDC to the docker container for testing GLV's.
* Added kerberos authentication to Gremlin-Python.
* Added audit logging to bytecode-based traversals.
* Changed `TraversalStrategy` application methodology to apply each strategy in turn to each level of the traversal hierarchy starting from root down to children.
* Added a VertexProgramRestrictionStrategy.
* Prevented more than one `Client` from connecting to the same Gremlin Server session.
* Changed the Groovy to an optional dependency in `gremlin-driver`.
* Added support for configuring an `Authorizer` implementation to Gremlin Server, allowing for authorization of individual gremlin requests.
* Added `gremlint` module to house the Gremlin query formatting JavaScript library powering gremlint.com.
* Removed internal functionality for the session close message in Gremlin Server - the message is accepted but ignored if sent.
* Removed `Property.Exceptions.propertyValueCanNotBeNull` exception type as `null` now has meaning in Gremlin.
* Removed the "experimental" support for multi/meta-properties in Neo4j.
* Removed Gryo serialization configurations from Gremlin Server sample configurations and default configurations.
* Removed previously deprecated custom keep-alive functionality in the Java driver.
* Removed previously deprecated `BytecodeUtil`.
* Removed previously deprecated `Cluster.maxWaitForSessionClose` configuration option.
* Removed previously deprecated `TraversalStrategies.applyStrategies()`.
* Removed previously deprecated `scriptEvaluationTimeout`.
* Removed previously deprecated `NioChannelizer` and related classes.
* Removed previously deprecated remote traversal side-effects and related infrastructure.
* Removed previously deprecated `Serializers.DEFAULT_RESULT_SERIALIZER` and `Serializers.DEFAULT_REQUEST_SERIALIZER`.
* Removed previously deprecated `decr` and `incr` from `Order`.
* Removed previously deprecated `TraversalSource.withRemote()`.
* Removed previously deprecated `ResponseHandlerContext` infrastructure.
* Removed previously deprecated `VertexProgram` related infrastructure.
* Removed previously deprecated SSL settings: `keyCertChainFile`, `keyFile`, `keyPassword` and `trustCertChainFile` and related infrastructure.
* Removed previously deprecated `PropertyMapStep` constructor and `isIncludeTokens`.
* Removed previously deprecated `StarGraph.builder()` and `StarGraph.Builder.create()`.
* Removed previously deprecated `AbstractOpProcessor.generateMetaData(ChannelHandlerContext, RequestMessage, ResponseStatusCode, Iterator)`
* Removed previously deprecated `BulkDumperVertexProgram` and `BulkLoaderVertexProgram`.

==== Bugs

* TINKERPOP-1619 TinkerGraphComputer worker count affects OptionalStep query results
* TINKERPOP-2107 Spark fails to reattach properties
* TINKERPOP-2157 SparkStarBarrierInterceptor injects (Byte) 0
* TINKERPOP-2159 EventStrategy doesn't handle multi-valued properties
* TINKERPOP-2175 Executor thread is not returned on channel close
* TINKERPOP-2185 Use commons-configuration2 instead of commons-configuration *(breaking)*
* TINKERPOP-2192 Gremlin.Net.Driver.Connection.Parse throws a NullReferenceException
* TINKERPOP-2224 Detect and fix resource leak
* TINKERPOP-2230 match() step unexpected behaviours
* TINKERPOP-2232 RemoteStrategy does not call parent class TraversalStrategy __init__
* TINKERPOP-2238 Fix remaining iterator leaks marked by @IgnoreIteratorLeak
* TINKERPOP-2241 Client exception don't match Server exception when server  throw StackOverflowError
* TINKERPOP-2248 Instability of driver for blocked requests
* TINKERPOP-2257 transaction itty  may still be visited after commit
* TINKERPOP-2264 Gremlin Python should deserialize g:Date to UTC
* TINKERPOP-2266 Keep alive not started at connection creation
* TINKERPOP-2274 Test of TinkerGraph Gremlin fail on Windows and non EN locale
* TINKERPOP-2276 No constructor for remote connection in DSL generated traversal source
* TINKERPOP-2283 GraphStep's ids null exception
* TINKERPOP-2285 Error object is unreachable
* TINKERPOP-2288 Get ConnectionPoolBusyException and then ServerUnavailableExceptions
* TINKERPOP-2289 Use address instead of hostname for connection
* TINKERPOP-2290 Javascript GLV connection refused error handling
* TINKERPOP-2291 TraversalExplanation deserialization in GraphSON
* TINKERPOP-2298 Bytecode.java  flattenArguments throw exception when null
* TINKERPOP-2303 GremlinDsl generate addV instead of addE
* TINKERPOP-2318 Edge properties dedup() not work with spark-gremlin *(breaking)*
* TINKERPOP-2337 In upgrade guide for 3.4.2, the option RemoteConnection.PER_REQUEST_TIMEOUT does not exist
* TINKERPOP-2338 drop() not removing all edge/meta properties
* TINKERPOP-2341 GremlinClientExtensions.SubmitAsync hangs as it tries to dispose connection
* TINKERPOP-2345 NullPointerException when Map key is not found for math()
* TINKERPOP-2347 Remove invalid service descriptors from gremlin-shaded
* TINKERPOP-2350 clone() is not deep copying Traversal internals
* TINKERPOP-2351 Local Map ordering of keys can generate cast errors
* TINKERPOP-2352 Gremlin Python driver default pool size makes Gremlin keep-alive difficult
* TINKERPOP-2353 Error while Shutting Down Gremlin Server
* TINKERPOP-2360 failed to deserializer int32 when gremlin-python submit bytecode with a big int value
* TINKERPOP-2364 Injected ProfileStep should not be displayed in child traversals
* TINKERPOP-2365 LazyBarrierStrategy adds a NoOpBarrierStep when profile() is present
* TINKERPOP-2368 JAVA_OPTIONS are not properly expanded in gremlin-console
* TINKERPOP-2369 Connections in ConnectionPool are not replaced in background when underlying channel is closed
* TINKERPOP-2374 SaslAndHttpBasicAuthenticationHandler can't extract authorization
* TINKERPOP-2383 has(T,Traversal) does not return results
* TINKERPOP-2384 Inject and withSideEffect causing different outcomes in order step
* TINKERPOP-2388 gremlinpython: Can't close DriverRemoteConnection
* TINKERPOP-2403 Gremlin javascript Translator does not handle child traversals
* TINKERPOP-2405 gremlinpython: traversal hangs when the connection is established but the servers stops responding later
* TINKERPOP-2408 Iterator leak in HasContainer
* TINKERPOP-2409 js: DriverRemoteConnection never times out if server uri not available.
* TINKERPOP-2410 Free up server threads when client is closed
* TINKERPOP-2425 Server closes HTTP connection for keepAlive as true
* TINKERPOP-2432 Generate correct toString() representation of bytecode in Javascript
* TINKERPOP-2433 typo in javadocs match() Type Parameters
* TINKERPOP-2435 Gremlin Python sugar syntax for values() can lead to unexpected problems
* TINKERPOP-2437 gremlin-driver hangs if ResultSet.statusAttributes().get() is called when the request throws
* TINKERPOP-2439 P and TextP toString() is broken
* TINKERPOP-2458 Bytecode Bindings lost when followed by a child traversal
* TINKERPOP-2465 TestHelper.generateTempFileFromResource file handling is invalid on windows
* TINKERPOP-2475 Barrier step touches one more element of next loop
* TINKERPOP-2478 Console byte code translator has issues with "new Date()"
* TINKERPOP-2496 GremlinDslProcessor fails when SocialTraversalSourceDsl overrides close
* TINKERPOP-2505 Gremlin Python Client Query Times out at 30 seconds instead of the server timeout
* TINKERPOP-2512 Duplicate jars in classpath when running gremlin-server.sh
* TINKERPOP-2513 Generics insufficiently strict on property()
* TINKERPOP-2514 Java client driver requests with same request ids hang
* TINKERPOP-2516 Property folding has trouble with coalesce
* TINKERPOP-2529 Global dedup() in reducing by() of group() detaches elements for OLTP
* TINKERPOP-2531 Gremlin .NET driver ConnectionPool can remain without connections if server is down for 1-2 minutes

==== Improvements

* TINKERPOP-709 Consider Bounding Gremlin Pool Queue Size
* TINKERPOP-1084 Branch option tokens should be allowed to be traversals.
* TINKERPOP-1553 Deprecate store() in favor of aggregate(Scope)
* TINKERPOP-1568 Change strategy application order *(breaking)*
* TINKERPOP-1641 Kerberos authentication for gremlin-python
* TINKERPOP-1682 by-modulator optimization strategy
* TINKERPOP-1733 hasKey, hasValues should work on Element and Property
* TINKERPOP-1810 Add Lambda.binaryOperator and Lambda.unaryOperator
* TINKERPOP-1838 Python sample script
* TINKERPOP-1886 Gremlin Python driver to periodically issue ping / heartbeat to gremlin server
* TINKERPOP-1921 Support hasNext terminal step in GLVs
* TINKERPOP-1994 LazyBarrierStrategy fully responsible for barrier() additions
* TINKERPOP-2001 Support lambdas in Javascript
* TINKERPOP-2014 Allow an ability to specify seeding for random methods such as coin, sample and Order.shuffle
* TINKERPOP-2020 Support withComputer() for javascript
* TINKERPOP-2046 Gremlin-Python: Support custom request headers in WebSocket request
* TINKERPOP-2054 Support TraversalStrategy specification in gremlin-javascript
* TINKERPOP-2076 Build with Java 11
* TINKERPOP-2080 Remove deprecated TraversalSource.withRemote() *(breaking)*
* TINKERPOP-2099 Property setting with null has different behavior between add and update *(breaking)*
* TINKERPOP-2133 Use neo4j index lookup in Neo4jGraphStep with HasContainers containing TextP predicates
* TINKERPOP-2168 GraphSON: P deserialization should be optimized
* TINKERPOP-2213 Replace scriptEvaluationTimeout in favor of something more suitable to bytecode
* TINKERPOP-2215 Better exception message for connection problems
* TINKERPOP-2223 Update jackson databind to 2.9.9
* TINKERPOP-2231 Remove deprecated bulk dumping/loading VertexPrograms *(breaking)*
* TINKERPOP-2233 Remove deprecated Order decr/incr *(breaking)*
* TINKERPOP-2235 Better handle the concept of null in traversals *(breaking)*
* TINKERPOP-2236 Improve error messaging for TinkerGraph IdManagers that fail on conversions
* TINKERPOP-2237 Prevent error when closing sessions that don't exist *(breaking)*
* TINKERPOP-2239 Remove previously deprecated SSL configuration options *(breaking)*
* TINKERPOP-2242 Bump to netty 4.1.36
* TINKERPOP-2243 Add user-agent to RequestOptions
* TINKERPOP-2245 Consolidate the executor for bytecode & string based client
* TINKERPOP-2246 Consolidate the error propagation to the client
* TINKERPOP-2250 Support toString serialization in GraphBinary
* TINKERPOP-2251 Remove deprecated VertexProgram-related methods *(breaking)*
* TINKERPOP-2252 A meaningful way to support session based byteCode interaction through gremlin-driver
* TINKERPOP-2254 Rename AggregateStep and StoreStep given aggregate(Scope,String) *(breaking)*
* TINKERPOP-2256 processAllStarts of AggregateStep should only be called when barrier is empty
* TINKERPOP-2259 Default Java based driver and server operations to GraphBinary and remove Gryo *(breaking)*
* TINKERPOP-2260 Update jackson databind 2.9.9.1
* TINKERPOP-2262 Improve Netty protocol handling
* TINKERPOP-2265 Deprecate Traversal.getSideEffects() functionality for remoting purposes
* TINKERPOP-2269 Remove remote side-effect related infrastructure *(breaking)*
* TINKERPOP-2270 Deprecate multi/metaproperty support in Neo4j
* TINKERPOP-2271 Add console preference to control server-originated warning display
* TINKERPOP-2272 Rename steps and tokens that conflict with standard python functions
* TINKERPOP-2273 Remove deprecated ResponseHandlerContext infrastructure *(breaking)*
* TINKERPOP-2277 Python sdk postpone the timing to create transport
* TINKERPOP-2279 GraphBinary support in Python
* TINKERPOP-2280 Prevent use of T values as property key overloads
* TINKERPOP-2284 Make it easier to return more structure of graph elements
* TINKERPOP-2295 Remove deprecated scriptEvaluationTimeout *(breaking)*
* TINKERPOP-2296 Per query timeout not working from Python
* TINKERPOP-2302 Add isOnGraphComputer() field accessor to ElementMapStep
* TINKERPOP-2307 Add better error message for badly configured Channelizer
* TINKERPOP-2310 Reduce Traversal.isRoot() to a check of EmptyStep *(breaking)*
* TINKERPOP-2311 TraversalStrategies implementing Iterable *(breaking)*
* TINKERPOP-2312 Empty keys to group() should group to null
* TINKERPOP-2314 Employ by(String) for Map when possible and improve errors around incorrect types
* TINKERPOP-2315 Implement some form of clone() or reset() for Traversal in GLVs
* TINKERPOP-2317 Remove Python 2 support *(breaking)*
* TINKERPOP-2320 [SECURITY] XMLInputFactory initialization in GraphMLReader introduces
* TINKERPOP-2325 Generate traversals that will better yield index lookups with SPARQL
* TINKERPOP-2327 Remove deprecated NIO protocol support *(breaking)*
* TINKERPOP-2328 Do not close all connections if just one has became closed
* TINKERPOP-2335 Drop support for older GLV runtimes
* TINKERPOP-2336 Allow close of channel without having to wait for server
* TINKERPOP-2349 Switch from Newtonsoft.Json to System.Text.Json *(breaking)*
* TINKERPOP-2354 Document recommendation to reuse graph traversal source
* TINKERPOP-2356 Bump to Jackson 2.10.x
* TINKERPOP-2357 Add a command to clear the Gremlin Console screen
* TINKERPOP-2361 Prevent using GraphTraversalSource spawned traversals as children *(breaking)*
* TINKERPOP-2371 Add possibility to import constants with ImportGremlinPlugin
* TINKERPOP-2376 Probability distribution controlled by weight when using sample step
* TINKERPOP-2377 Investigate intermittent .NET GLV test failures
* TINKERPOP-2389 Authorization support in TinkerPop
* TINKERPOP-2391 Drop GLV Templating System
* TINKERPOP-2392 Improve module level documentation for GLVs
* TINKERPOP-2394 Unable to use __ class of a custom DSL when passing a script even if this class is imported *(breaking)*
* TINKERPOP-2395 Gremlin Python doesn't support list as keys in groupCount
* TINKERPOP-2396 TraverserSet should be extendable for GraphDB provider
* TINKERPOP-2397 Don't create the default Gyro serializer if the caller specifies a different one
* TINKERPOP-2401 Upgrade Jackson-databind to 2.11.x
* TINKERPOP-2406 Delegate processing from event loop to worker threads
* TINKERPOP-2407 Support deserialization of a dict that has a dict as a key
* TINKERPOP-2412 Add missing query tests
* TINKERPOP-2413 Prefer withEmbedded() to withGraph() on AnonymousTraversalSource
* TINKERPOP-2415 Avoid unnecessary detached objects if not required
* TINKERPOP-2416 MultiIterator should implement AutoCloseable
* TINKERPOP-2418 Store authenticated user on server pipeline
* TINKERPOP-2420 Support per query request options in .NET
* TINKERPOP-2421 Support per query options in javascript
* TINKERPOP-2426 Use Netty's WebSocketClientProtocolHandler
* TINKERPOP-2427 Simplify Netty reference counting
* TINKERPOP-2430 Looping Recipies
* TINKERPOP-2431 Operating on Dropped Elements Recipes
* TINKERPOP-2436 The gremlin server starts even if all graphs instantiation has failed
* TINKERPOP-2438 Provide a way for scripts to respect with() specification of timeout
* TINKERPOP-2440 Simplify driver by delegating keepAlive logic to Netty
* TINKERPOP-2441 Add compression to WebSocket frames sent from client
* TINKERPOP-2442 Make Translators that work in Java part of gremlin-core
* TINKERPOP-2443 Improve testing of Translator instances for non-JVM languages with focus on Python as a model
* TINKERPOP-2445 Speed up client initialization *(breaking)*
* TINKERPOP-2446 Add Recipe for Optional Looping
* TINKERPOP-2447 Improve handling of StackOverflowError for long traversals
* TINKERPOP-2451 JavascriptTranslator for Java
* TINKERPOP-2452 DotNetTranslator for Java
* TINKERPOP-2453 Add WebSocket compression to gremlin-python
* TINKERPOP-2455 Remove deprecated custom keep-alive functionality in the Java driver Channelizer *(breaking)*
* TINKERPOP-2457 Add a max_content_length parameter to DriverRemoteConnection in the Python client
* TINKERPOP-2460 Change groovy to provided scope in gremlin-driver *(breaking)*
* TINKERPOP-2461 Align CoreImports with GroovyTranslator
* TINKERPOP-2462 Duplicated BytecodeUtil and BytecodeHelper classes
* TINKERPOP-2466 Improve syntax for Groovy scripts that use withStrategies()
* TINKERPOP-2468 Stabilize shouldProcessSessionRequestsInOrder() test
* TINKERPOP-2469 KrbException - Principal does not exist in test
* TINKERPOP-2470 Bump gremlinpython to tornado 6.x
* TINKERPOP-2472 GraphBinary support in .NET
* TINKERPOP-2473 Prevent TraversalStrategy instances of the same type to be added to a TraversalSource
* TINKERPOP-2474 withSack() Groovy translation output could be simplified
* TINKERPOP-2476 Provide fully shaded version of Java driver
* TINKERPOP-2479 Provide a way to set a custom GraphSONMapper for :bytecode command
* TINKERPOP-2481 IdentityRemovalStrategy not installed *(breaking)*
* TINKERPOP-2482 Rename wsConnectionTimeout to connectionSetupTimeout
* TINKERPOP-2484 Python  IOLoop close errors
* TINKERPOP-2485 Invalid http tests with ?gremlin=1-1
* TINKERPOP-2494 Document Translator parameter extraction functionality
* TINKERPOP-2499 PathRetractionStrategy returns inconsistent results when match() is not detected as the final step *(breaking)*
* TINKERPOP-2500 Add none() step for all GLVs
* TINKERPOP-2506 Expose client WebSocket connection status
* TINKERPOP-2517 Introduce a retry status code to the server protocol
* TINKERPOP-2527 Add a GroovyTranslator equivalent method to the Python client
* TINKERPOP-2530 Transfer OyvindSabo/gremlint and OyvindSabo/gremlint.com to apache/tinkerpop/gremlint
* TINKERPOP-2532 MaxBarrierSize of NoOpBarrierStep should be accessible
* TINKERPOP-2533 Develop a grammar for Gremlin
* TINKERPOP-2535 Netty 4.1.52 flagged as medium security violation
* TINKERPOP-2537 Support bytecode based requests in sessions and remote tx()
* TINKERPOP-2544 Modify site publishing scripts to include gremlint
* TINKERPOP-2546 Change transport layer to use AIOHTTP instead of Tornado
* TINKERPOP-2547 Provide an option to supply a callback before handshake submission
* TINKERPOP-2550 Deadlock on Client initialization

== TinkerPop 3.4.0 (Avant-Gremlin Construction #3 for Theremin and Flowers)

image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/avant-gremlin.png[width=185]

[[release-3-4-13]]
=== TinkerPop 3.4.13 (Release Date: January 10, 2022)

* Fixed `RangeGlobalStep` which was prematurely closing the iterator.
* Added explicit state to `DefaultTraversal` to track whether or not it was fully iterated and closed to ensure it released resources properly.
* Prevented XML External Entity (XXE) style attacks via `GraphMLReader` by disabling DTD and external entities by default.
* Improved error message for failed serialization for HTTP-based requests.
* Fixed a `NullPointerException` that could occur during a failed `Connection` initialization due to uninstantiated `AtomicInteger`.
* Minor changes to the initialization of Java driver `Cluster` and `Client` such that hosts are marked as available only after successfully initializing connection pools.
* `NoHostAvailableException` now contains a cause for the failure.
* Bumped to Netty 4.1.72.
* Added user-friendly message in Gremlin console for unavailable hosts upon initiation and fixed possible leak in `RemoteCommand.groovy` upon `RemoteException`.

==== Bugs

* TINKERPOP-2569 Reconnect to server if Java driver fails to initialize
* TINKERPOP-2589 XML External Entity (XXE) vulnerability
* TINKERPOP-2597 NullPointerException while initializing connection pool
* TINKERPOP-2603 TinkerGraph sometimes could not query float values.
* TINKERPOP-2609 HTTP returns serialization exceptions for the GraphTraversalSource
* TINKERPOP-2626 RangeGlobalStep closes traversal prematurely

==== Improvements

* TINKERPOP-2504 Intermittently failing server/driver integration tests
* TINKERPOP-2616 Provide better exceptions with SSL related failures *(breaking)*
* TINKERPOP-2630 Clarify that a server cannot support Graphson1.0 over HTTP
* TINKERPOP-2632 Netty 4.1.61 flagged with two high severity security violations
* TINKERPOP-2669 Netty 4.1.61 flagged with medium severity security violations

[[release-3-4-12]]
=== TinkerPop 3.4.12 (Release Date: July 19, 2021)

* Coerced single `set` arguments to `P.within` and `P.without` to `list` in Python which serializes to a more expected form for `P` instances.
* Fixed bug in the `vertexLabelKey` validation for `GraphMLWriter` which was inadvertently validating the `edgeLabelKey`.
* Changed `IndexStep` to make it easier for providers to determine the type of indexer being used.
* Allowed Javascript `Translator` to take `Bytecode` or a `Traversal`.
* Addressed CVE-2021-32640 for gremlin-javascript.
* Allowed construction of `DriverRemoteConnection` in .NET to use host and port specification similar to Java syntax.
* Defaulted `DriverRemoteConnection` to "g" if it the `TraversalSource` binding isn't supplied in Python.
* Initialized metrics in `ProfileStep` even if the step hasn't iterated.

==== Bugs

* TINKERPOP-2358 Potential connection leak on client disposing
* TINKERPOP-2554 Extracting step metrics from ProfileStep throws NPE if the step was not triggered
* TINKERPOP-2565 GraphMLWriter does not check vertexLabelKey conflict
* TINKERPOP-2578 Set arguments to P within/without are wrapped in List
* TINKERPOP-2580 Update the custom DSL documentation

==== Improvements

* TINKERPOP-2548 Add getter for indexer used in IndexStep
* TINKERPOP-2577 Remove unused test coverage dependencies from Gremlin.NET

[[release-3-4-11]]
=== TinkerPop 3.4.11 (Release Date: May 3, 2021)

* Prevented Java driver from sending multiple request messages with the same identifier.
* Improved error message for `property(T,Object)` when mutating graph elements.
* Added method caching for GraphSON 3.0 deserialization of `P` and `TextP` instances.
* Allowed setting `ssl_options` for gremlin-python.
* Fixed bug with global `dedup()` when used in reducing `by()` of `group()`.
* Fixed bug with Javascript Groovy `Translator` when generating Gremlin with multiple embedded traversals.
* Modified Gremlin Server `Settings` to be more extensible allowing for custom options with the YAML parser.
* Fixed `toString()` representation of `P` when string values are present in Javascript.
* Exposed barrier size with getter for `NoOpBarrierStep`.
* Bumped to Netty 4.1.61.
* Added `max_content_length` as a Python driver setting.
* Fixed bug in Java `Client` initialization, reconnect and shutdown where certain thread pool configurations might produce a deadlock.
* Ensured that `barrier()` additions by strategies were controlled solely by `LazyBarrierStrategy`.
* Fixed `NullPointerException` in `ResponseMessage` deserialization for GraphSON.
* Enabled the Gremlin.Net driver to repair its connection pool after the server was temporarily unavailable.
* Added the ability to supply a `HandshakeInterceptor` to a `Cluster` which will provide access to the initial HTTP request that establishes the websocket.
* Fixed a possible leakage of connections in the Gremlin.NET driver that could happen if `Dispose()` was called while the pool was creating connections.

==== Bugs

* TINKERPOP-2512 Duplicate jars in classpath when running gremlin-server.sh
* TINKERPOP-2514 Java client driver requests with same request ids hang
* TINKERPOP-2516 Property folding has trouble with coalesce
* TINKERPOP-2529 Global dedup() in reducing by() of group() detaches elements for OLTP
* TINKERPOP-2531 Gremlin .NET driver ConnectionPool can remain without connections if server is down for 1-2 minutes

==== Improvements

* TINKERPOP-1994 LazyBarrierStrategy fully responsible for barrier() additions
* TINKERPOP-2168 GraphSON: P deserialization should be optimized
* TINKERPOP-2457 Add a max_content_length parameter to DriverRemoteConnection in the Python client
* TINKERPOP-2532 MaxBarrierSize of NoOpBarrierStep should be accessible
* TINKERPOP-2535 Netty 4.1.52 flagged as medium security violation
* TINKERPOP-2547 Provide an option to supply a callback before handshake submission
* TINKERPOP-2550 Deadlock on Client initialization

[[release-3-4-10]]
=== TinkerPop 3.4.10 (Release Date: January 18, 2021)

* Added `GremlinScriptChecker` to provide a way to extract properties of scripts before doing an actual `eval()`.
* Added `none()` step for all language variants.
* Fixed bug in `PythonTranslator` which was improperly translating `Lambda` scripts.
* Fixed bug in `GremlinDslProcessor` where certain return types in `TraversalSource` definitions were not generating code that would compile.
* Changed the default read and write timeout values for the `TornadoTransport` to `None` to disable it.
* Bumped to Groovy 2.5.14.

==== Bugs

* TINKERPOP-2496 GremlinDslProcessor fails when SocialTraversalSourceDsl overrides close
* TINKERPOP-2505 Gremlin Python Client Query Times out at 30 seconds instead of the server timeout

==== Improvements

* TINKERPOP-2447 Improve handling of StackOverflowError for long traversals
* TINKERPOP-2485 Invalid http tests with ?gremlin=1-1
* TINKERPOP-2500 Add none() step for all GLVs

[[release-3-4-9]]
=== TinkerPop 3.4.9 (Release Date: December 7, 2020)

* Modified the text of `profile()` output to hide step instances injected for purpose of collecting metrics.
* Bumped to Jackson 2.11.x.
* Bumped Netty 4.1.52.
* Added lambda support for `gremlin-javascript`.
* Provided a more concise syntax for constructing strategies in Groovy.
* Aligned `CoreImports` with `GroovyTranslator` to generate more succinct syntax.
* Improved `gremlin-groovy` understanding of `withSack()` overloads to avoid forced casts.
* Moved `Translator` instances to `gremlin-core`.
* Prevented barriers from over-reaching their limits by one.
* Added `CheckedGraphManager` to prevent Gremlin Server from starting if there are no graphs configured.
* Fixed bug in bytecode `Bindings` where calling `of()` prior to calling a child traversal in the same parent would cause the initial binding to be lost.
* Established a default read and write timeout for the `TornadoTransport` in Python, allowing it to be configurable.
* Delegated handling of erroneous response to the worker thread pool instead of event loop thread pool in Java Driver.
* Removed `Connection` from `Connection Pool` when server closes a connection with no pending requests in Java Driver.
* Improved initialization time of Java Driver if the default serializer is replaced.
* Deprecated `withGraph()` in favor of `withEmbedded()` on `AnonymousTraversalSource`.
* Added support for per-request level configurations, like timeouts, in .NET, Python and Javascript.
* Fixed bug in Javascript `Translator` that wasn't handling child traversals well.
* Prevented Gremlin Python sugar from being confused by Python magic methods.
* Allowed Gremlin Python sugar calls from anonymous context.
* Implemented `AutoCloseable` on `MultiIterator`.
* Fixed an iterator leak in `HasContainer`.
* Fixed bug in `:bytecode` command preventing translations with whitespace from working properly.
* Added `reset` and `config` options to the `:bytecode` command to allow for greater customization options.
* Added GraphSON extension module and the `TinkerIoRegistry` to the default `GraphSONMapper` configuration used by the `:bytecode` command.
* Added `GremlinASTChecker` to provide a way to extract properties of scripts before doing an actual `eval()`.
* Avoided creating unnecessary detached objects in JVM.
* Added support for `TraversalStrategy` usage in Javascript.
* Added `Traversal.getTraverserSetSupplier()` to allow providers to supply their own `TraverserSet` instances.
* Release server threads waiting on connection if the connection is dead.
* Fixed bug where server closes HTTP connection on request error even if keep alive is set to true.
* 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/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.
* Fixed a bug which could cause Java driver to hang when using `ResultSet.statusAttributes()`
* Added a listener to javascript's `DriverRemoteConnection` to find note errors from websocket connection setup.
* Fixed bug with `ReservedVerificationStrategy.getConfiguration()` which was omitting the reserved `keys` value.
* Changed all configuration keys on `AbstractWarningVerificationStrategy` implementations to `public`.
* Deprecated `BytecodeUtil` and merged its functionality to the existing `BytecodeHelper`.
* Added configuring implementation in HasStep
* Remove static initialization for `GraphSONMessageSerializerV1d0` and `GraphSONMessageSerializerV1d0` in Java driver.
* Connections to the server in a connection pool are created in parallel instead of serially in Java Driver.
* Connection pools for multiple endpoints are created in parallel instead of serially in Java Driver.
* Introduced new HostNotAvailable exception to represent cases when no server with active connection is available.
* Don't wait for new requests during shutdown of event loop group in Java Driver.

==== Bugs

* TINKERPOP-2364 Injected ProfileStep should not be displayed in child traversals
* TINKERPOP-2369 Connections in ConnectionPool are not replaced in background when underlying channel is closed
* TINKERPOP-2403 Gremlin javascript Translator does not handle child traversals
* TINKERPOP-2405 gremlinpython: traversal hangs when the connection is established but the servers stops responding later
* TINKERPOP-2408 Iterator leak in HasContainer
* TINKERPOP-2409 js: DriverRemoteConnection never times out if server uri not available.
* TINKERPOP-2410 Free up server threads when client is closed
* TINKERPOP-2425 Server closes HTTP connection for keepAlive as true
* TINKERPOP-2432 Generate correct toString() representation of bytecode in Javascript
* TINKERPOP-2433 typo in javadocs match() Type Parameters
* TINKERPOP-2435 Gremlin Python sugar syntax for values() can lead to unexpected problems
* TINKERPOP-2437 gremlin-driver hangs if ResultSet.statusAttributes().get() is called when the request throws
* TINKERPOP-2439 P and TextP toString() is broken
* TINKERPOP-2458 Bytecode Bindings lost when followed by a child traversal
* TINKERPOP-2465 TestHelper.generateTempFileFromResource file handling is invalid on windows
* TINKERPOP-2475 Barrier step touches one more element of next loop
* TINKERPOP-2478 Console byte code translator has issues with "new Date()"

==== Improvements

* TINKERPOP-2001 Support lambdas in Javascript
* TINKERPOP-2054 Support TraversalStrategy specification in gremlin-javascript
* TINKERPOP-2296 Per query timeout not working from Python
* TINKERPOP-2392 Improve module level documentation for GLVs
* TINKERPOP-2396 TraverserSet should be extendable for GraphDB provider
* TINKERPOP-2397 Don't create the default Gyro serializer if the caller specifies a different one
* TINKERPOP-2401 Upgrade Jackson-databind to 2.11.x
* TINKERPOP-2406 Delegate processing from event loop to worker threads
* TINKERPOP-2412 Add missing query tests
* TINKERPOP-2413 Prefer withEmbedded() to withGraph() on AnonymousTraversalSource
* TINKERPOP-2415 Avoid unnecessary detached objects if not required
* TINKERPOP-2416 MultiIterator should implement AutoCloseable
* TINKERPOP-2420 Support per query request options in .NET
* TINKERPOP-2421 Support per query options in javascript
* TINKERPOP-2426 Use Netty's WebSocketClientProtocolHandler
* TINKERPOP-2427 Simplify Netty reference counting
* TINKERPOP-2430 Looping Recipies
* TINKERPOP-2431 Operating on Dropped Elements Recipes
* TINKERPOP-2436 The gremlin server starts even if all graphs instantiation has failed
* TINKERPOP-2438 Provide a way for scripts to respect with() specification of timeout
* TINKERPOP-2440 Simplify driver by delegating keepAlive logic to Netty
* TINKERPOP-2441 Add compression to WebSocket frames sent from client
* TINKERPOP-2442 Make Translators that work in Java part of gremlin-core
* TINKERPOP-2445 Speed up client initialization *(breaking)*
* TINKERPOP-2446 Add Recipe for Optional Looping
* TINKERPOP-2453 Add WebSocket compression to gremlin-python
* TINKERPOP-2461 Align CoreImports with GroovyTranslator
* TINKERPOP-2462 Duplicated BytecodeUtil and BytecodeHelper classes
* TINKERPOP-2466 Improve syntax for Groovy scripts that use withStrategies()
* TINKERPOP-2468 Stabilize shouldProcessSessionRequestsInOrder() test
* TINKERPOP-2469 KrbException - Principal does not exist in test
* TINKERPOP-2474 withSack() Groovy translation output could be simplified
* TINKERPOP-2479 Provide a way to set a custom GraphSONMapper for :bytecode command
* TINKERPOP-2482 Rename wsConnectionTimeout to connectionSetupTimeout

[[release-3-4-8]]
=== TinkerPop 3.4.8 (Release Date: August 3, 2020)

* Fixed bug in `has(T,Traversal)` where results were not being returned.
* Fixed bug in `select(Traversal)` where side-effects were getting lost if accessed from the child traversal.
* Fixed authorization bug when using `WsAndHttpChannelizerHandler` with keep-alive enabled.
* Fixed bug in option-less construction of `DriverRemoteConnection` in Javascript.
* Bumped Jackson to 2.9.10.5.
* Improved sampling distribution for global scope `sample()` operations.

==== Bugs

* TINKERPOP-2288 Get ConnectionPoolBusyException and then ServerUnavailableExceptions
* TINKERPOP-2352 Gremlin Python driver default pool size makes Gremlin keep-alive difficult
* TINKERPOP-2374 SaslAndHttpBasicAuthenticationHandler can't extract authorization
* TINKERPOP-2383 has(T,Traversal) does not return results
* TINKERPOP-2384 Inject and withSideEffect causing different outcomes in order step

==== Improvements

* TINKERPOP-2328 Do not close all connections if just one has became closed
* TINKERPOP-2376 Probability distribution controlled by weight when using sample step

[[release-3-4-7]]
=== TinkerPop 3.4.7 (Release Date: June 1, 2020)

This release also includes changes from <<release-3-3-11, 3.3.11>>.

* Gremlin.NET driver: Fixed a `NullReferenceException` and throw clear exception if received message is empty.
* Bumped to Groovy 2.5.11.
* Modified `ImportGremlinPlugin` to allow for field imports.
* Improved error message for `math()` when the selected key in a `Map` is `null` or not a `Number`.
* Added `:cls` command to Gremlin Console to clear the screen.
* Bumped Netty 4.1.49.

==== Bugs

* TINKERPOP-2192 Gremlin.Net.Driver.Connection.Parse throws a NullReferenceException
* TINKERPOP-2345 NullPointerException when Map key is not found for math()
* TINKERPOP-2347 Remove invalid service descriptors from gremlin-shaded
* TINKERPOP-2350 clone() is not deep copying Traversal internals
* TINKERPOP-2351 Local Map ordering of keys can generate cast errors
* TINKERPOP-2353 Error while Shutting Down Gremlin Server
* TINKERPOP-2355 Jackson-databind version in Gremlin shaded dependency needs to be increased  - introduces vulnerability issues
* TINKERPOP-2360 failed to deserializer int32 when gremlin-python submit bytecode with a big int value
* TINKERPOP-2365 LazyBarrierStrategy adds a NoOpBarrierStep when profile() is present
* TINKERPOP-2368 JAVA_OPTIONS are not properly expanded in gremlin-console

==== Improvements

* TINKERPOP-2215 Better exception message for connection problems
* TINKERPOP-2336 Allow close of channel without having to wait for server
* TINKERPOP-2339 Gremlin.Net: Update System.Net.WebSockets.Client dependency
* TINKERPOP-2354 Document recommendation to reuse graph traversal source
* TINKERPOP-2357 Add a command to clear the Gremlin Console screen
* TINKERPOP-2371 Add possibility to import constants with ImportGremlinPlugin

[[release-3-4-6]]
=== TinkerPop 3.4.6 (Release Date: February 20, 2020)

* Fixed bug in `drop()` of properties which was introduced in 3.4.5.

==== Bugs

* TINKERPOP-2338 drop() not removing all edge/meta properties

[[release-3-4-5]]
=== TinkerPop 3.4.5 (Release Date: February 3, 2020)

This release also includes changes from <<release-3-3-10, 3.3.10>>.

* Expanded the use of `by(String)` modulator so that it can work on `Map` as well as `Element`.
* Improved error messaging for `by(String)` so that it is more clear as to what the problem is
* Bumped to Netty 4.1.42
* Improved SPARQL query translation to better allow for index optimizations during execution.
* Improved Gremlin Server websocket handling preventing automatic server close of the channel for protocol errors.
* Introduced internal `Buffer` API as a way to wrap Netty's Buffer API and moved `GraphBinaryReader`, `GraphBinaryWriter` and `TypeSerializer<T>` to `gremlin-core`.
* Unified the behavior of property comparison: only compare key&value.
* Supported `hasKey()` and `hasValue()` step for edge property and meta property, like `g.E().properties().hasKey('xx')`.
* Modified driver to send `overrideRequestId` and `userAgent` to server when they are present in `RequestOptions` for bytecode requests.

==== Bugs

* TINKERPOP-2175 Executor thread is not returned on channel close
* TINKERPOP-2266 Keep alive not started at connection creation
* TINKERPOP-2274 Test of TinkerGraph Gremlin fail on Windows and non EN locale
* TINKERPOP-2318 Edge properties dedup() not work with spark-gremlin *(breaking)*
* TINKERPOP-2332 JavaScript GLV: structure element toString() should internally call toString()
* TINKERPOP-2333 JavaScript GLV: GraphSON2/3 Edge deserialization is invalid

==== Improvements

* TINKERPOP-1733 hasKey, hasValues should work on Element and Property
* TINKERPOP-2262 Improve Netty protocol handling
* TINKERPOP-2305 GraphBinary: Wrap Buffer API
* TINKERPOP-2307 Add better error message for badly configured Channelizer
* TINKERPOP-2309 Bump gremlinpython to Tornado 5.x
* TINKERPOP-2314 Employ by(String) for Map when possible and improve errors around incorrect types
* TINKERPOP-2315 Implement some form of clone() or reset() for Traversal in GLVs
* TINKERPOP-2320 [SECURITY] XMLInputFactory initialization in GraphMLReader introduces
* TINKERPOP-2322 Deprecate Jython support
* TINKERPOP-2324 Deprecate the raw NIO support in the Java driver
* TINKERPOP-2325 Generate traversals that will better yield index lookups with SPARQL
* TINKERPOP-2329 JavaScript GLV: Update websocket library dependency
* TINKERPOP-2330 JavaScript GLV should expose GraphSON2Writer and GraphSONReader

[[release-3-4-4]]
=== TinkerPop 3.4.4 (Release Date: October 14, 2019)

This release also includes changes from <<release-3-3-9, 3.3.9>>.

* Provided support for DSLs by way of remote connections through `AnonymousTraversalSource`.
* Added `elementMap()` step.
* Added GraphBinary support for Python.
* Allowed for embedded map assertions in GLV tests.
* Added `Direction` deserialization support in GLVs.

==== Bugs

* TINKERPOP-2159 EventStrategy doesn't handle multi-valued properties
* TINKERPOP-2276 No constructor for remote connection in DSL generated traversal source
* TINKERPOP-2283 GraphStep's ids null exception
* TINKERPOP-2285 Error object is unreachable
* TINKERPOP-2289 Use address instead of hostname for connection
* TINKERPOP-2290 Javascript GLV connection refused error handling
* TINKERPOP-2291 TraversalExplanation deserialization in GraphSON
* TINKERPOP-2298 Bytecode.java  flattenArguments throw exception when null
* TINKERPOP-2303 GremlinDsl generate addV instead of addE

==== Improvements

* TINKERPOP-1810 Add Lambda.binaryOperator and Lambda.unaryOperator
* TINKERPOP-1838 Python sample script
* TINKERPOP-2046 Gremlin-Python: Support custom request headers in WebSocket request
* TINKERPOP-2213 Replace scriptEvaluationTimeout in favor of something more suitable to bytecode
* TINKERPOP-2275 Update jackson databind 2.9.9.3+
* TINKERPOP-2277 Python sdk postpone the timing to create transport
* TINKERPOP-2279 GraphBinary support in Python
* TINKERPOP-2280 Prevent use of T values as property key overloads
* TINKERPOP-2284 Make it easier to return more structure of graph elements
* TINKERPOP-2302 Add isOnGraphComputer() field accessor to ElementMapStep

[[release-3-4-3]]
=== TinkerPop 3.4.3 (Release Date: August 5, 2019)

This release also includes changes from <<release-3-3-8, 3.3.8>>.

* Improved error messaging on timeouts returned to the console from `:>`.
* Added a `toString()` serializer for GraphBinary.
* Configured the Gremlin Console to use GraphBinary by default.
* Fixed transaction management for empty iterators in Gremlin Server.
* Deprecated `MessageSerializer` implementations for Gryo in Gremlin Server.
* Deprecated `Serializers` enum values of `GRYO_V1D0` and `GRYO_V3D0`.
* Deprecated `SerTokens` values of `MIME_GRYO_V1D0` and `MIME_GRYO_V3D0`.
* Added a Docker command to start Gremlin Server with the standard GLV test configurations.
* Added `aggregate(Scope,String)` and deprecated `store()` in favor of `aggregate(local)`.
* Modified `NumberHelper` to better ignore `Double.NaN` in `min()` and `max()` comparisons.
* Bumped to Netty 4.1.36.
* Bumped to Groovy 2.5.7.
* Added `userAgent` to RequestOptions. Gremlin Console sends `Gremlin Console/<version>` as the `userAgent`.
* Fixed DriverRemoteConnection ignoring `with` `Token` options when multiple were set.
* Added `:set warnings <true|false>` to Gremlin Console.

==== Bugs

* TINKERPOP-1619 TinkerGraphComputer worker count affects OptionalStep query results
* TINKERPOP-2157 SparkStarBarrierInterceptor injects (Byte) 0
* TINKERPOP-2224 Detect and fix resource leak
* TINKERPOP-2230 match() step unexpected behaviours
* TINKERPOP-2232 RemoteStrategy does not call parent class TraversalStrategy __init__
* TINKERPOP-2238 Fix remaining iterator leaks marked by @IgnoreIteratorLeak
* TINKERPOP-2241 Client exception don't match Server exception when server  throw StackOverflowError
* TINKERPOP-2248 Instability of driver for blocked requests
* TINKERPOP-2257 transaction itty  may still be visited after commit
* TINKERPOP-2264 Gremlin Python should deserialize g:Date to UTC

==== Improvements

* TINKERPOP-1084 Branch option tokens should be allowed to be traversals.
* TINKERPOP-1553 Deprecate store() in favor of aggregate(Scope)
* TINKERPOP-1921 Support hasNext terminal step in GLVs
* TINKERPOP-2020 Support withComputer() for javascript
* TINKERPOP-2223 Update jackson databind to 2.9.9
* TINKERPOP-2236 Improve error messaging for TinkerGraph IdManagers that fail on conversions
* TINKERPOP-2237 Prevent error when closing sessions that don't exist *(breaking)*
* TINKERPOP-2242 Bump to netty 4.1.36
* TINKERPOP-2243 Add user-agent to RequestOptions
* TINKERPOP-2246 Consolidate the error propagation to the client
* TINKERPOP-2250 Support toString serialization in GraphBinary
* TINKERPOP-2256 processAllStarts of AggregateStep should only be called when barrier is empty
* TINKERPOP-2260 Update jackson databind 2.9.9.1
* TINKERPOP-2265 Deprecate Traversal.getSideEffects() functionality for remoting purposes
* TINKERPOP-2270 Deprecate multi/metaproperty support in Neo4j
* TINKERPOP-2271 Add console preference to control server-originated warning display
* TINKERPOP-2272 Rename steps and tokens that conflict with standard python functions

[[release-3-4-2]]
=== TinkerPop 3.4.2 (Release Date: May 28, 2019)

This release also includes changes from <<release-3-3-7, 3.3.7>>.

* Allow a `Traversal` to know what `TraversalSource` it spawned from.
* Fixed problem with connection pool sizing and retry.
* Added status attribute for warnings to be returned to the client.
* Modified Gremlin Console to report warning status attributes.
* Changed `:>` in Gremlin Console to submit the client-side timeout on each request.
* Provided method to override the request identifier with `RequestOptions`.
* Added option to set per-request settings on a `Traversal` submitted via `Bytecode`.
* Fixed the Gryo registration for `OptionsStrategy` as it was not serializing state properly.

==== Bugs

* TINKERPOP-2090 After running backend for a day or so System.IO.IOException keep throwing
* TINKERPOP-2112 Folding in property() step is not being optimally performed
* TINKERPOP-2180 gremlin.sh doesn't work when directories contain spaces
* TINKERPOP-2183 InterpreterModeASTTransformation needs to be more specific about what it transforms
* TINKERPOP-2189 ConnectedComponent test assumes fixed order of vertices
* TINKERPOP-2194 Enforcing an order on properties in one test method of ChooseTest
* TINKERPOP-2196 PartitionStrategy with includeMetaProperties(true) can't add labeled vertex
* TINKERPOP-2198 Documentation for Store contradicts itself
* TINKERPOP-2199 within step does not work with more than two parameters with python
* TINKERPOP-2200 AddEdgeStartStep used DetachedFactory.detach instead of EventStrategy.detach
* TINKERPOP-2204 Client receives no response on failed request
* TINKERPOP-2206 Certain types in javascript don't appear to serialize with a GraphSON type
* TINKERPOP-2212 Path is not detaching properly under certain conditions
* TINKERPOP-2217 Race condition in Gremlin.net driver connection

==== Improvements

* TINKERPOP-2089 Javascript DSL support
* TINKERPOP-2179 Have o.a.t.g.driver.ser.SerializationException extend IOException
* TINKERPOP-2181 Allow ctrl+c to break out of a long running process in Gremlin Console
* TINKERPOP-2182 Remove gperfutils from Gremlin Console *(breaking)*
* TINKERPOP-2190 Document Gremlin sanitization best practices
* TINKERPOP-2191 Implement EdgeLabelVerificationStrategy
* TINKERPOP-2193 Allow a Traversal to know what TraversalSource it spawned from
* TINKERPOP-2203 Bind the console timeout to the request timeout
* TINKERPOP-2208 Include inject() in DSLs generated with Java annotation processor
* TINKERPOP-2211 Provide API to add per request option for a bytecode
* TINKERPOP-2216 Consider adding conventional status attribute key for warnings
* TINKERPOP-2219 Upgrade Netty version

[[release-3-4-1]]
=== TinkerPop 3.4.1 (Release Date: March 18, 2019)

This release also includes changes from <<release-3-3-6, 3.3.6>>.

* Gremlin.NET driver: Fixed removal of closed connections and added round-robin scheduling.
* Added GraphBinary serializer for TraversalMetrics
* Added registration for `SparqlStrategy` for GraphSON.
* Fixed up `SparqlStrategy` so that it could be used properly with `RemoteStrategy`.
* Fixed `ByteBuffer` serialization for GraphBinary.
* Fixed `Path.toString()` in `gremlin-javascript` which was referencing an invalid object.
* Fixed potential for an infinite loop in connection creation for `gremlin-dotnet`.
* Added fallback resolver to `TypeSerializerRegistry` for GraphBinary.
* Added easier to understand exceptions for connection problems in the Gremlin.Net driver.
* Support configuring the type registry builder for GraphBinary.
* Bumped to Groovy 2.5.6.
* Release working buffers in case of failure for GraphBinary.
* GraphBinary: Use the same `ByteBuf` instance to write during serialization. Changed signature of write methods in type serializers.
* Remove unused parameter in GraphBinary's `ResponseMessageSerializer`.
* Changed `SparqlTraversalSource` so as to enable Gremlin steps to be used to process results from the `sparql()` step.
* GraphBinary: Cache expression to obtain the method in `PSerializer`.

==== Bugs

* TINKERPOP-1992 count has negative time in profile
* TINKERPOP-2126 toString() methods not thread-safe
* TINKERPOP-2135 Gremlin.Net ConnectionPool doesn't handle closed idle connections properly
* TINKERPOP-2139 Errors during request serialization in WebSocketGremlinRequestEncoder/NioGremlinRequestEncoder are not reported to the client
* TINKERPOP-2141 ByteBufferSerializer modifies buffer's position
* TINKERPOP-2148 "no connection available!" is being thrown despite lots of free connections
* TINKERPOP-2152 Path toString fails in Gremlin JavaScript
* TINKERPOP-2153 Remove unused parameter from ResponseMessageSerializer *(breaking)*
* TINKERPOP-2154 GraphBinary: Serializers should release resources in case of failures
* TINKERPOP-2155 Situation can occur that causes infinite amount of connection to be opened, causing System.Net.WebSockets.WebSocketException
* TINKERPOP-2161 GraphBinary: Write serialization performance issue
* TINKERPOP-2169 Responses exceeding maxContentLength cause subsequent queries to hang
* TINKERPOP-2172 PartitionStrategy doesn't apply to AddEdgeStartStep
* TINKERPOP-2173 Incorrect reset of log level in integration test
* TINKERPOP-2177 Streaming response immediately after authentication stops after first partial response

==== Improvements

* TINKERPOP-1435 Support for extended GraphSON in gremlin-python
* TINKERPOP-1882 Apply range and limit steps as early as possible
* TINKERPOP-1998 IoGraphTest use different schemas for standard and readGraph configurations
* TINKERPOP-2088 Enable SourceLink for Gremlin.Net
* TINKERPOP-2098 Improve gremlin-server.sh help output
* TINKERPOP-2122 Expose status codes from server errors
* TINKERPOP-2124 InlineFilterStrategy produces wrong result
* TINKERPOP-2125 Extend release validation script
* TINKERPOP-2127 Add g:TraversalMetrics and g:Metrics deserializers for gremlinpython
* TINKERPOP-2129 Mask security secret or password in logs
* TINKERPOP-2130 Cannot instantiate DriverRemoteConnection without passing an options object
* TINKERPOP-2131 NoConnectionAvailableException doesn't reveal the reason
* TINKERPOP-2134 Bump to Groovy 2.5.6
* TINKERPOP-2136 Inside lower bound inclusion (documentation)
* TINKERPOP-2138 Provide a configuration to disable the global closure cache
* TINKERPOP-2140 Test build with Docker automatically
* TINKERPOP-2144 Better handle Authenticator instance failures
* TINKERPOP-2147 Add GraphBinary serializer for TraversalMetrics
* TINKERPOP-2149 GraphBinary: Make type serializer resolution pluggable
* TINKERPOP-2150 GraphBinary: Support configuring the TypeSerializerRegistry builder class in config
* TINKERPOP-2163 JavaTranslator performance enhancements
* TINKERPOP-2164 Bytecode's hashCode impl (and its inner classes) can produce hash collisions
* TINKERPOP-2165 Prefer commons-lang3 to commons-lang
* TINKERPOP-2166 GraphBinary: P deserialization should be optimized
* TINKERPOP-2167 Gremlin Javascript Traversal as async iterable
* TINKERPOP-2171 Allow SPARQL to be extended with Gremlin steps
* TINKERPOP-2174 Improve Docker Image Security

[[release-3-4-0]]
=== TinkerPop 3.4.0 (Release Date: January 2, 2019)

This release also includes changes from <<release-3-3-4, 3.3.4>> and <<release-3-3-5, 3.3.5>>.

* Changed Python "bindings" to use an actual `Bindings` object rather than a 2-tuple.
* Improved the Gremlin.NET driver: It now uses request pipelining and its `ConnectionPool` has a fixed size.
* Implemented `IndexStep` which allows to transform local collections into indexed collections or maps.
* Made `valueMap()` aware of `by` and `with` modulators and deprecated `valueMap(boolean)` overloads.
* Use `Compare.eq` in `Contains` predicates to ensure the same filter behavior for numeric values.
* Added `OptionsStrategy` to allow traversals to take arbitrary traversal-wide configurations.
* Added text predicates.
* Added `BulkSet` as a GraphSON type with support in all language variants.
* Added `ReferenceElementStrategy` to auto-detach elements to "reference" from a traversal.
* Added initial release of the GraphBinary serialization format with Java support.
* Allowed `ImportCustomizer` to accept fields.
* Removed groovy-sql dependency.
* Modified `Mutating` steps so that they are no longer marked as `final`.
* Rewrote `ConnectiveStrategy` to support an arbitrary number of infix notations in a single traversal.
* GraphSON `MessageSerializer` s will automatically register the GremlinServerModule to a provided GraphSONMapper.
* Removed support for `-i` option in Gremlin Server which was previously deprecated.
* Implemented `ShortestPathVertexProgram` and the `shortestPath()` step.
* `AbstractGraphProvider` uses `g.io()` for loading test data.
* Added the `io()` start step and `read()` and `write()` termination steps to the Gremlin language.
* Added `GraphFeatures.supportsIoRead()` and `GraphFeatures.supportsIoWrite()`.
* Deprecated `Graph.io()` and related infrastructure.
* `GraphMLReader` better handles edge and vertex properties with the same name.
* Maintained order of annotations in metrics returned from `profile()`-step.
* Refactored `TypeTranslator` to be directly extensible for `ScriptTranslator` functions.
* Bumped to Netty 4.1.25.
* Bumped to Spark 2.4.0.
* Bumped to Groovy 2.5.4.
* Modified Gremlin Server to return a "host" status attribute on responses.
* Added ability to the Java, .NET, Python and JavaScript drivers to retrieve status attributes returned from the server.
* Modified Java and Gremlin.Net `ResponseException` to include status code and status attributes.
* Modified Python `GremlinServerError` to include status attributes.
* Modified the return type for `IGremlinClient.SubmitAsync()` to be a `ResultSet` rather than an `IReadOnlyCollection`.
* Deprecated two `submit()`-related methods on the Java driver `Client` class.
* Added `Client.submit()` overloads that accept per-request `RequestOptions`.
* Added sparql-gremlin.
* Fixed a bug in dynamic Gryo registration where registrations that did not have serializers would fail.
* Moved `Parameterizing` interface to the `org.apache.tinkerpop.gremlin.process.traversal.step` package with other marker interfaces of its type.
* Replaced `Parameterizing.addPropertyMutations()` with `Configuring.configure()`.
* Changed interface hierarchy for `Parameterizing` and `Mutating` interfaces as they are tightly related.
* Introduced the `with(k,v)` and `with(k)` step modulators which can supply configuration options to `Configuring` steps.
* Added `OptionsStrategy` to allow traversals to take arbitrary traversal-wide configurations.
* Introduced the `with(k,v)` and `with(k)` traveral source configuration options which can supply configuration options to the traversal.
* Added `connectedComponent()` step and related `VertexProgram`.
* Added `supportsUpsert()` option to `VertexFeatures` and `EdgeFeatures`.
* `min()` and `max()` now support all types implementing `Comparable`.
* Change the `toString()` of `Path` to be standardized as other graph elements are.
* `hadoop-gremlin` no longer generates a test artifact.
* Allowed `GraphProvider` to expose a cached `Graph.Feature` object so that the test suite could re-use them to speed test runs.
* Fixed a bug in `ReducingBarrierStep`, that returned the provided seed value despite no elements being available.
* Changed the order of `select()` scopes. The order is now: maps, side-effects, paths.
* Moved `TraversalEngine` to `gremlin-test` as it has long been only used in testing infrastructure.
* Nested loop support added allowing `repeat()` steps to be nested.
* Events from `EventStrategy` raised from "new" mutations will now return a `KeyedVertexProperty` or `KeyedProperty` as is appropriate.
* `MutationListener#vertexPropertyChanged(Vertex, VertexProperty, Object, Object...)` no longer has a default implementation.
* Deprecated `GraphSONMessageSerializerV2d0` as it is now analogous to `GraphSONMessageSerializerGremlinV2d0`.
* Moved previously deprecated `RemoteGraph` to `gremlin-test` as it is now just a testing component.
* Removed previously deprecated `RemoteStrategy.instance()` and the strategy no longer has any connection to `RemoteGraph`.
* Removed previously deprecated methods in `SubgraphStrategy` and `PartitionStrategy` builders.
* Removed previously deprecated Credentials DSL infrastructure.
* Removed previously deprecated `RemoteConnection#submit(Traversal)` and `RemoteConnection#submit(Bytecode)` methods.
* Removed previously deprecated `MutationListener#vertexPropertyChanged(Vertex, Property, Object, Object...)`.
* Removed previously deprecated `OpSelectorHandler` constructor.
* Removed previously deprecated `close()` from `GremlinGroovyScriptEngine` which no longer implements `AutoCloseable`.
* Removed previously deprecated `getGraphInputFormat()` and `getGraphOutputFormat()` from `HadoopConfiguration`.
* Removed previously deprecated `AbstractOpProcessor#makeFrame()` method.
* Removed previously deprecated `AuthenticationSettings.className` configuration option in Gremlin Server.
* Removed previously deprecated `GraphManager` methods `getGraphs()` and `getTraversalSources()`.
* Removed previously deprecated Gremlin Server setting for `serializedResponseTimeout`.
* Removed previously deprecated Structure API exceptions related to "element not found" situations.
* Removed previously deprecated `rebindings` options from the Java driver API.
* Removed previously deprecated `LambdaCollectingBarrierStep.Consumers` enum.
* Removed previously deprecated `HasContainer#makeHasContainers(String, P)`
* Removed support for Giraph.
* Removed previously deprecated JavaScript Driver property `traversers` of the `ResultSet`.
* gremlin-python: use explicit Bindings object for python instead of a 2-tuple

==== Bugs

* TINKERPOP-1777 Gremlin .max step returns -2147483648 for empty result sets *(breaking)*
* TINKERPOP-1869 Profile step and iterate do not play nicely with each other
* TINKERPOP-1898 Issue with bindings in strategies and lambdas
* TINKERPOP-1927 Gherkin scenario expects list with duplicates, but receives g:Set
* TINKERPOP-1933 gremlin-python maximum recursion depth exceeded on large responses
* TINKERPOP-1947 Path history isn't preserved for keys in mutations
* TINKERPOP-1949 Formatting error on website
* TINKERPOP-1958 TinkerGraphCountStrategy can return wrong counts
* TINKERPOP-1961 Duplicate copies of images directory in docs
* TINKERPOP-1962 GroovyTranslator doesn't handle empty maps
* TINKERPOP-1963 Use of reducing step in choose()
* TINKERPOP-1972 inject() tests are throwing exceptions in .NET GLV tests
* TINKERPOP-1978 Check for Websocket connection state when retrieved from Connection Pool missing
* TINKERPOP-1979 Several OLAP issues in MathStep
* TINKERPOP-1988 minor error in documentation
* TINKERPOP-1999 [Java][gremlin-driver] Query to a remote server via the websocket client hangs indefinitely if the server becomes unavailable
* TINKERPOP-2005 Intermittent NullPointerException in response handling
* TINKERPOP-2006 GraphML serialization invalid if a vertex and edge have similar named property
* TINKERPOP-2009 Pick.any and Pick.none should be exposed in Gremlin-JavaScript
* TINKERPOP-2021 Prevent maximum recursion depth failure
* TINKERPOP-2028 AbstractGraphSONMessageSerializerV2d0 should register GremlinServerModule when mapper is provided
* TINKERPOP-2029 ConcurrentModificationException for InlineFilterStrategy
* TINKERPOP-2030 KeepAlive task executed for every Connection.write call
* TINKERPOP-2032 Update jython-standalone
* TINKERPOP-2044 Cannot reconnect to Azure cosmos host that becomes available again
* TINKERPOP-2058 Contains predicates should rely on Compare predicates *(breaking)*
* TINKERPOP-2081 PersistedOutputRDD materialises rdd lazily with Spark 2.x
* TINKERPOP-2091 Wrong/Missing feature requirements in StructureStandardTestSuite
* TINKERPOP-2094 Gremlin Driver Cluster Builder serializer method does not use mimeType as suggested
* TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
* TINKERPOP-2096 gremlinpython: AttributeError when connection is closed before result is received
* TINKERPOP-2100 coalesce() creating unexpected results when used with order()
* TINKERPOP-2113 P.Within() doesn't work when given a List argument

==== Improvements

* TINKERPOP-550 Gremlin IO needs to support both OLTP and OLAP naturally.
* TINKERPOP-967 Support nested-repeat() structures
* TINKERPOP-1113 GraphComputer subclasses should support native methods
* TINKERPOP-1143 Remove deprecated TraversalSource.Builder and TraversalEngine. *(breaking)*
* TINKERPOP-1296 Remove deprecated serializedResponseTimeout from Gremlin Server *(breaking)*
* TINKERPOP-1342 Allow setting scriptEvaluationTimeout in driver
* TINKERPOP-1365 Log the seed used to initialize Random in tests
* TINKERPOP-1410 mvn install -Dmaven.test.skip=true doesn't work on a clean machine *(breaking)*
* TINKERPOP-1446 Add a StringFactory for Path which prefixes with type.
* TINKERPOP-1447 Add some JavaScript intelligence to the documentation so that comments and output are not copied in a copy paste
* TINKERPOP-1494 Means of exposing execution information from a result produced by RemoteConnection
* TINKERPOP-1518 Provide a way for providers to expose static Graph.Features to tests
* TINKERPOP-1522 Order of select() scopes *(breaking)*
* TINKERPOP-1595 Go through TraversalVertexProgram with a profile and optimize.
* TINKERPOP-1628 Implement TraversalSelectStep
* TINKERPOP-1685 Introduce optional feature to allow for upserts without read-before-write
* TINKERPOP-1705 Remove deprecated rebindings option *(breaking)*
* TINKERPOP-1707 Remove deprecated AuthenticationSettings.className option *(breaking)*
* TINKERPOP-1755 No docs for ReferenceElements
* TINKERPOP-1769 Python graph[empty] string representation is confusing
* TINKERPOP-1774 Gremlin .NET: Support min and max sizes in Connection pool
* TINKERPOP-1775 Gremlin .NET: Implement a Connection write queue to support request pipelining
* TINKERPOP-1778 Do not promote timedInterrupt option for Gremlin Server script processing
* TINKERPOP-1780 Add authentication tests for gremlin-python
* TINKERPOP-1831 Refactor EventStrategy  *(breaking)*
* TINKERPOP-1836 .NET sample project
* TINKERPOP-1841 Include Python GLV tests on TravisCI
* TINKERPOP-1849 Provide a way to fold() with an index
* TINKERPOP-1864 Gremlin Python tests for GraphSON 2.0 and 3.0
* TINKERPOP-1878 Sparql to Gremlin Compiler
* TINKERPOP-1888 Extend max and min to all Comparable properties, not just Numbers *(breaking)*
* TINKERPOP-1889 JavaScript GLV: Use heartbeat to prevent connection timeout
* TINKERPOP-1897 Provide Docker images of Gremlin Server and Console
* TINKERPOP-1906 Make ResponseException explorable
* TINKERPOP-1912 Remove MD5 checksums
* TINKERPOP-1913 Expose metadata from Gremlin Server to Clients
* TINKERPOP-1930 Drop support for Giraph *(breaking)*
* TINKERPOP-1934 Bump to latest version of httpclient
* TINKERPOP-1936 Performance enhancement to Bytecode deserialization
* TINKERPOP-1941 Remove deprecated Structure API exception methods *(breaking)*
* TINKERPOP-1942 Binary serialization format
* TINKERPOP-1945 Add support for extended GraphSon types to Gremlin.net
* TINKERPOP-1946 Remove the deprecated Credentials DSL infrastructure *(breaking)*
* TINKERPOP-1950 Traversal construction performance enhancements
* TINKERPOP-1951 gremlin-server.bat doesn't support paths containing spaces
* TINKERPOP-1953 Bump to Groovy 2.4.15
* TINKERPOP-1954 Remove deprecated GraphManager methods *(breaking)*
* TINKERPOP-1959 Provide a way to submit scripts to the server in gremlin-javascript
* TINKERPOP-1967 Add a connectedComponent() step
* TINKERPOP-1968 Refactor elements of Gremlin Server testing
* TINKERPOP-1975 Introduce with() step modulator *(breaking)*
* TINKERPOP-1976 Include Computer tests for GLVs
* TINKERPOP-1977 Gremlin-JavaScript: Support SASL authentication
* TINKERPOP-1984 Allow support for multiple serializer versions in Gremlin Server HTTP *(breaking)*
* TINKERPOP-1985 Update position on bulk loading
* TINKERPOP-1986 Remove deprecation from PartitionStrategy, SubgraphStrategy and GremlinScriptEngine *(breaking)*
* TINKERPOP-1987 Bump to Netty 4.1.x
* TINKERPOP-1989 Preserve order that plugins are applied in Gremlin Console
* TINKERPOP-1990 Add a shortestPath() step
* TINKERPOP-1993 Bump to Spark 2.3.1
* TINKERPOP-1995 DriverRemoteConnection close() method returns undefined
* TINKERPOP-1996 Introduce read() and write() steps
* TINKERPOP-2002 Create a blog post explaining the value of using TinkerPop
* TINKERPOP-2010 Generate jsdoc for gremlin-javascript
* TINKERPOP-2011 Use NumberHelper on choose()
* TINKERPOP-2012 Target .NET Standard 2.0 for Gremlin.Net
* TINKERPOP-2013 Process tests that are auto-ignored stink
* TINKERPOP-2015 Allow users to configure the WebSocket connections
* TINKERPOP-2016 Upgrade Jackson FasterXML to 2.9.5 or later to fix security vulnerability
* TINKERPOP-2017 Check for Column in by()
* TINKERPOP-2018 Generate API docs for Gremlin.Net
* TINKERPOP-2022 Cluster SSL should trust default ca certs by default
* TINKERPOP-2023 Gremlin Server should not create self-signed certs *(breaking)*
* TINKERPOP-2024 Gremlin Server Application archetype should connect via withRemote
* TINKERPOP-2025 Change to SHA-256/512 and drop SHA-1 for releases
* TINKERPOP-2026 Gremlin.Net.Driver should check ClientWebSocket.State before closing
* TINKERPOP-2031 Remove support for -i in gremlin-server.sh *(breaking)*
* TINKERPOP-2033 Maintain order of profile() annotations
* TINKERPOP-2034 Register synchronizedMap() with Gryo
* TINKERPOP-2037 Remove unused groovy-sql dependency
* TINKERPOP-2038 Make groovy script cache size configurable
* TINKERPOP-2039 Bump to Groovy 2.5.2 *(breaking)*
* TINKERPOP-2040 Improve flexibility of GroovyTranslator to handle custom types
* TINKERPOP-2041 Text Predicates
* TINKERPOP-2045 Remove non-indy groovy dependencies
* TINKERPOP-2049 Single argument with() overload
* TINKERPOP-2050 Add a :bytecode command to Gremlin Console
* TINKERPOP-2053 Provider OptionsStrategy for traversal configurations
* TINKERPOP-2055 Provide support for special number cases like Infinity in GraphSON
* TINKERPOP-2056 Use NumberHelper in Compare
* TINKERPOP-2059 Modulation of valueMap() *(breaking)*
* TINKERPOP-2060 Make Mutating steps non-final
* TINKERPOP-2061 Add with() configuration as global to a traversal
* TINKERPOP-2062 Add Traversal class to CoreImports
* TINKERPOP-2064 Add status attributes to results for gremlin-javascript
* TINKERPOP-2065 Optimize iterate() for remote traversals
* TINKERPOP-2066 Bump to Groovy 2.5.3
* TINKERPOP-2067 Allow getting raw data from Gremlin.Net.Driver.IGremlinClient
* TINKERPOP-2068 Bump Jackson Databind 2.9.7
* TINKERPOP-2069 Document configuration of Gremlin.Net
* TINKERPOP-2070 gremlin-javascript: Introduce Connection representation
* TINKERPOP-2071 gremlin-python: the graphson deserializer for g:Set should return a python set
* TINKERPOP-2072 Refactor custom type translation for ScriptTranslators *(breaking)*
* TINKERPOP-2073 Generate tabs for static code blocks
* TINKERPOP-2074 Ensure that only NuGet packages for the current version are pushed
* TINKERPOP-2075 Introduce ReferenceElementStrategy
* TINKERPOP-2077 VertexProgram.Builder should have a default create() method with no Graph
* TINKERPOP-2078 Hide use of EmptyGraph or RemoteGraph behind a more unified method for TraversalSource construction
* TINKERPOP-2079 Move RemoteGraph to test package *(breaking)*
* TINKERPOP-2084 For remote requests in console display the remote stack trace
* TINKERPOP-2092 Deprecate default GraphSON serializer fields
* TINKERPOP-2093 Bump to Groovy 2.5.4
* TINKERPOP-2097 Create a DriverRemoteConnection with an initialized Client
* TINKERPOP-2101 Support Spark 2.4
* TINKERPOP-2103 Remove deprecated submit() options on RemoteConnection *(breaking)*
* TINKERPOP-2104 Allow ImportCustomizer to handle fields
* TINKERPOP-2106 When gremlin executes timeout, throw TimeoutException instead of TraversalInterruptedException/InterruptedIOException
* TINKERPOP-2110 Allow Connection on Different Path (from /gremlin)
* TINKERPOP-2111 Add BulkSet as a GraphSON type *(breaking)*
* TINKERPOP-2114 Document common Gremlin anti-patterns
* TINKERPOP-2116 Explicit Bindings object for Python *(breaking)*
* TINKERPOP-2117 gremlin-python: Provide a better data structure for a Binding
* TINKERPOP-2119 Validate C# code samples in docs
* TINKERPOP-2121 Bump Jackson Databind 2.9.8

== TinkerPop 3.3.0 (Gremlin Symphony #40 in G Minor)

image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/gremlin-mozart.png[width=185]

[[release-3-3-11]]
=== TinkerPop 3.3.11 (Release Date: June 1, 2020)

* Added `trustStoreType` such that keystore and truststore can be of different types in the Java driver.
* Added session support to all GLVs: Javascript, .NET and Python.
* Fixed bug in Gremlin Server shutdown if failures occurred during `GraphManager` initialization.
* Modified Gremlin Server to close the session when the channel itself is closed.
* Fixed bug in `Order` where comparisons of `enum` types wouldn't compare with `String` values.
* Added `maxWaitForClose` configuration option to the Java driver.
* Deprecated `maxWaitForSessionClose` in the Java driver.
* Bumped to Jackson 2.9.10.4.
* Remove invalid service descriptors from gremlin-shaded.
* Fixed bug in Python and .NET traversal `clone()` where deep copies of bytecode were not occurring.
* Fixed bug where `profile()` was forcing `LazyBarrierStrategy` to add an extra `barrier()` to the end of traversals.
* Fixed bug in Python about integer serializer which was out of range of `g:Int32`
* Bumped commons-codec 1.14

==== Bugs

* TINKERPOP-2347 Remove invalid service descriptors from gremlin-shaded
* TINKERPOP-2350 clone() is not deep copying Traversal internals
* TINKERPOP-2351 Local Map ordering of keys can generate cast errors
* TINKERPOP-2353 Error while Shutting Down Gremlin Server
* TINKERPOP-2355 Jackson-databind version in Gremlin shaded dependency needs to be increased  - introduces vulnerability issues
* TINKERPOP-2360 failed to deserializer int32 when gremlin-python submit bytecode with a big int value
* TINKERPOP-2365 LazyBarrierStrategy adds a NoOpBarrierStep when profile() is present

==== Improvements

* TINKERPOP-2336 Allow close of channel without having to wait for server
* TINKERPOP-2339 Gremlin.Net: Update System.Net.WebSockets.Client dependency
* TINKERPOP-2354 Document recommendation to reuse graph traversal source

[[release-3-3-10]]
=== TinkerPop 3.3.10 (Release Date: February 3, 2020)

* Improved error messaging for a `Cluster` with a bad `Channelizer` configuration in the Java driver.
* Made `Cluster` be able to open configuration file on resources directory.
* Implemented `Traversal.clone()` operations for all language variants.
* Refactored `PathProcessorStrategy` to use the marker model.
* Bumped to Tornado 5.x for gremlin-python.
* Started keep-alive polling on `Connection` construction to ensure that a `Connection` doesn't die in the pool.
* Deprecated `TraversalStrategies.applyStrategies()`.
* Deprecated Jython support in `gremlin-python`.
* Deprecated `NioChannelizer` and related classes in `gremlin-driver` and `gremlin-server`.
* Fixed a bug in the `ClassCacheRequestCount` metric for `GremlinGroovyScriptEngine` which wasn't including the cache hit count, only the misses.
* Improved Gremlin Server executor thread handling on client close requests.
* Reverted: Modified Java driver to use IP address rather than hostname to create connections.
* Allow custom XMLInputFactory to be used with GraphMLReader.

==== Bugs

* TINKERPOP-2175 Executor thread is not returned on channel close
* TINKERPOP-2266 Keep alive not started at connection creation
* TINKERPOP-2274 Test of TinkerGraph Gremlin fail on Windows and non EN locale
* TINKERPOP-2332 JavaScript GLV: structure element toString() should internally call toString()
* TINKERPOP-2333 JavaScript GLV: GraphSON2/3 Edge deserialization is invalid

==== Improvements

* TINKERPOP-2307 Add better error message for badly configured Channelizer
* TINKERPOP-2309 Bump gremlinpython to Tornado 5.x
* TINKERPOP-2315 Implement some form of clone() or reset() for Traversal in GLVs
* TINKERPOP-2320 [SECURITY] XMLInputFactory initialization in GraphMLReader introduces
* TINKERPOP-2322 Deprecate Jython support
* TINKERPOP-2324 Deprecate the raw NIO support in the Java driver
* TINKERPOP-2329 JavaScript GLV: Update websocket library dependency
* TINKERPOP-2330 JavaScript GLV should expose GraphSON2Writer and GraphSONReader

[[release-3-3-9]]
=== TinkerPop 3.3.9 (Release Date: October 14, 2019)

* Exposed response status attributes in a `ResponseError` in gremlin-javascript.
* Added `ImmutableExplanation` for a `TraversalExplanation` that just contains data.
* Added support for `UnaryOperator` and `BinaryOperator` for `Lambda` instances.
* Fixed `TraversalExplanation` deserialization in GraphSON 2 and 3 which was not supported before in Java.
* Added support for custom request headers in Python.
* Fixed Java DSL annotation for generation of `addE()` which was formerly calling the wrong step.
* Deprecated `scriptEvaluationTimeout` in favor of the more generic `evaluationTimeout`.
* Bumped jackson-databind to 2.9.10 due to CVE-2019-14379, CVE-2019-14540, CVE-2019-16335.
* Added `ReservedKeysVerificationStrategy` to allow warnings or exceptions when certain keys are used for properties.
* Added the `AbstractWarningVerificationStrategy` base class for "warning" style `VerificationStrategy` implementations.
* Refactored `EdgeLabelVerificationStrategy` to use `AbstractWarningVerificationStrategy`.
* Added `EdgeLabelVerificationStrategy` to Python.
* Improved handling of `null` values in bytecode construction.
* Fixed Java driver authentication problems when calling the driver from multiple threads.
* Modified Java driver to use IP address rather than hostname to create connections.
* Fixed potential for `NullPointerException` with empty identifiers in `GraphStep`.
* Postponed the timing of transport creation to `connection.write` in Gremlin Python.
* Made `EventStrategy` compatible with multi-valued properties.
* Changed `TraversalOpProcessor` to throw a `SERVER_ERROR_SCRIPT_EVALUATION` (597) if lambdas don't compile.
* Bumped `commons-compress` to 1.19 due to CVE-2018-11771.
* gremlin-javascript: Use `socketError` Connection event to prevent exit on error and expose Connection events.

==== Bugs

* TINKERPOP-2159 EventStrategy doesn't handle multi-valued properties
* TINKERPOP-2283 GraphStep's ids null exception
* TINKERPOP-2285 Error object is unreachable
* TINKERPOP-2289 Use address instead of hostname for connection
* TINKERPOP-2290 Javascript GLV connection refused error handling
* TINKERPOP-2291 TraversalExplanation deserialization in GraphSON
* TINKERPOP-2298 Bytecode.java  flattenArguments throw exception when null
* TINKERPOP-2303 GremlinDsl generate addV instead of addE

==== Improvements

* TINKERPOP-1810 Add Lambda.binaryOperator and Lambda.unaryOperator
* TINKERPOP-1838 Python sample script
* TINKERPOP-2046 Gremlin-Python: Support custom request headers in WebSocket request
* TINKERPOP-2213 Replace scriptEvaluationTimeout in favor of something more suitable to bytecode
* TINKERPOP-2275 Update jackson databind 2.9.9.3+
* TINKERPOP-2277 Python sdk postpone the timing to create transport
* TINKERPOP-2280 Prevent use of T values as property key overloads

[[release-3-3-8]]
=== TinkerPop 3.3.8 (Release Date: August 5, 2019)

* Provided support for `withComputer()` in gremlin-javascript.
* Deprecated remote traversal side-effect retrieval and related infrastructure.
* Bumped to Groovy 2.4.17.
* Bumped to Jackson Databind 2.9.9.1.
* Fixed bug with Python in `g:Date` of GraphSON where local time zone was being used during serialization/deserialization.
* Improved error messaging when an attempt is made to serialize multi-properties to GraphML.
* Deprecated multi/meta-property support in `Neo4jGraph`.
* Improved exception and messaging for gt/gte/lt/lte when one of the object isn't a `Comparable`.
* Added test infrastructure to check for storage iterator leak.
* Fixed multiple iterator leaks in query processor.
* Fixed `optional()` so that the child traversal is treated as local.
* Changed default keep-alive time for driver to 3 minutes.
* Fixed bug where server-side keep-alive was not always disabled when its setting was zero.
* Added support for `hasNext()` in Javascript and .NET.
* Improved error messaging for invalid inputs to the TinkerGraph `IdManager` instances.
* Forced replacement of connections in Java driver for certain exception types that seem to ultimately kill the connection.
* Changed the `reverse()` of `desc` and `asc` on `Order` to not use the deprecated `decr` and `incr`.
* Fixed bug in `MatchStep` where the correct was not properly determined.
* Fixed bug where client/server exception mismatch when server throw StackOverflowError
* Added underscore suffixed steps and tokens in Gremlin-Python that conflict with global function names.
* Prevent exception when closing a session that doesn't exist.
* Allow predicates and traversals to be used as options in `BranchStep`.
* Ensure only a single final response is sent to the client with Gremlin Server.
* Deprecated `ResponseHandlerContext` with related infrastructure and folded its functionality into `Context` in Gremlin Server.
* Improved performance of `aggregate()` by avoiding excessive calls to `hasNext()` when the barrier is empty.

==== Bugs

* TINKERPOP-1619 TinkerGraphComputer worker count affects OptionalStep query results
* TINKERPOP-2224 Detect and fix resource leak
* TINKERPOP-2230 match() step unexpected behaviours
* TINKERPOP-2232 RemoteStrategy does not call parent class TraversalStrategy __init__
* TINKERPOP-2238 Fix remaining iterator leaks marked by @IgnoreIteratorLeak
* TINKERPOP-2241 Client exception don't match Server exception when server  throw StackOverflowError
* TINKERPOP-2248 Instability of driver for blocked requests
* TINKERPOP-2264 Gremlin Python should deserialize g:Date to UTC

==== Improvements

* TINKERPOP-1084 Branch option tokens should be allowed to be traversals.
* TINKERPOP-1921 Support hasNext terminal step in GLVs
* TINKERPOP-2020 Support withComputer() for javascript
* TINKERPOP-2223 Update jackson databind to 2.9.9
* TINKERPOP-2236 Improve error messaging for TinkerGraph IdManagers that fail on conversions
* TINKERPOP-2237 Prevent error when closing sessions that don't exist *(breaking)*
* TINKERPOP-2246 Consolidate the error propagation to the client
* TINKERPOP-2256 processAllStarts of AggregateStep should only be called when barrier is empty
* TINKERPOP-2260 Update jackson databind 2.9.9.1
* TINKERPOP-2265 Deprecate Traversal.getSideEffects() functionality for remoting purposes
* TINKERPOP-2270 Deprecate multi/metaproperty support in Neo4j
* TINKERPOP-2272 Rename steps and tokens that conflict with standard python functions

[[release-3-3-7]]
=== TinkerPop 3.3.7 (Release Date: May 28, 2019)

* Developed DSL pattern for gremlin-javascript.
* Generated uberjar artifact for Gremlin Console.
* Improved folding of `property()` step into related mutating steps.
* Added `inject()` to steps generated on the DSL `TraversalSource`.
* Removed `gperfutils` dependencies from Gremlin Console.
* Fixed `PartitionStrategy` when setting vertex label and having `includeMetaProperties` configured to `true`.
* Ensure `gremlin.sh` works when directories contain spaces.
* Prevented client-side hangs if metadata generation fails on the server.
* Fixed bug with `EventStrategy` in relation to `addE()` where detachment was not happening properly.
* Ensured that `gremlin.sh` works when directories contain spaces.
* Fixed bug in detachment of `Path` where embedded collection objects would prevent that process.
* Enabled `ctrl+c` to interrupt long running processes in Gremlin Console.
* Quieted "host unavailable" warnings for both the driver and Gremlin Console.
* Fixed construction of `g:List` from arrays in gremlin-javascript.
* Fixed bug in `GremlinGroovyScriptEngine` interpreter mode around class definitions.
* Implemented `EdgeLabelVerificationStrategy`.
* Fixed behavior of `P` for `within()` and `without()` in GLVs to be consistent with Java when using varargs.
* Cleared the input buffer after exceptions in Gremlin Console.
* Added parameter to configure the `processor` in the gremlin-javascript `client` constructor.
* Bumped `Netty` to 4.1.32.

==== Bugs

* TINKERPOP-2112 Folding in property() step is not being optimally performed
* TINKERPOP-2180 gremlin.sh doesn't work when directories contain spaces
* TINKERPOP-2183 InterpreterModeASTTransformation needs to be more specific about what it transforms
* TINKERPOP-2194 Enforcing an order on properties in one test method of ChooseTest
* TINKERPOP-2196 PartitionStrategy with includeMetaProperties(true) can't add labeled vertex
* TINKERPOP-2198 Documentation for Store contradicts itself
* TINKERPOP-2199 within step does not work with more than two parameters with python
* TINKERPOP-2200 AddEdgeStartStep used DetachedFactory.detach instead of EventStrategy.detach
* TINKERPOP-2204 Client receives no response on failed request
* TINKERPOP-2206 Certain types in javascript don't appear to serialize with a GraphSON type
* TINKERPOP-2212 Path is not detaching properly under certain conditions

==== Improvements

* TINKERPOP-2089 Javascript DSL support
* TINKERPOP-2179 Have o.a.t.g.driver.ser.SerializationException extend IOException
* TINKERPOP-2181 Allow ctrl+c to break out of a long running process in Gremlin Console
* TINKERPOP-2182 Remove gperfutils from Gremlin Console *(breaking)*
* TINKERPOP-2191 Implement EdgeLabelVerificationStrategy
* TINKERPOP-2211 Provide API to add per request option for a bytecode

[[release-3-3-6]]
=== TinkerPop 3.3.6 (Release Date: March 18, 2019)

* Docker images use user `gremlin` instead of `root`
* Added a new `ResponseStatusCode` for client-side serialization errors.
* Refactored use of `commons-lang` to use `common-lang3` only, though dependencies may still use `commons-lang`.
* Bumped `commons-lang3` to 3.8.1.
* Improved handling of client-side serialization errors that were formerly just being logged rather than being raised.
* Add Python `TraversalMetrics` and `Metrics` deserializers.
* Masked sensitive configuration options in the logs of `KryoShimServiceLoader`.
* Added `globalFunctionCacheEnabled` to the `GroovyCompilerGremlinPlugin` to allow that cache to be disabled.
* Added `globalFunctionCacheEnabled` override to `SessionOpProcessor` configuration.
* Added status code to `GremlinServerError` so that it would be more directly accessible during failures.
* Added GraphSON serialization support for `Duration`, `Char`, `ByteBuffer`, `Byte`, `BigInteger` and `BigDecimal` in `gremlin-python`.
* Added `ProfilingAware` interface to allow steps to be notified that `profile()` was being called.
* Fixed bug where `profile()` could produce negative timings when `group()` contained a reducing barrier.
* Improved logic determining the dead or alive state of a Java driver `Connection`.
* Improved handling of dead connections and the availability of hosts.
* Bumped `httpclient` to 4.5.7.
* Bumped `slf4j` to 1.7.25.
* Bumped `commons-codec` to 1.12.
* Bumped to Groovy 2.5.6.
* Bumped to Hadoop 2.7.7.
* Fixed partial response failures when using authentication in `gremlin-python`.
* Fixed concurrency issues in `TraverserSet.toString()` and `ObjectWritable.toString()`.
* Fixed a bug in `InlineFilterStrategy` that mixed up and's and or's when folding merging conditions together.
* Fixed a bug in `PartitionStrategy` where `addE()` as a start step was not applying the partition.
* Improved handling of failing `Authenticator` instances thus improving server responses to drivers.
* Improved performance of `JavaTranslator` by reducing calls to `Method.getParameters()`.
* Implemented `EarlyLimitStrategy` which is supposed to significantly reduce backend operations for queries that use `range()`.
* Reduced chance of hash collisions in `Bytecode` and its inner classes.
* Added `Symbol.asyncIterator` member to the `Traversal` class to provide support for `await ... of` loops (async iterables).

==== Bugs

* TINKERPOP-2081 PersistedOutputRDD materialises rdd lazily with Spark 2.x
* TINKERPOP-2091 Wrong/Missing feature requirements in StructureStandardTestSuite
* TINKERPOP-2094 Gremlin Driver Cluster Builder serializer method does not use mimeType as suggested
* TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
* TINKERPOP-2096 gremlinpython: AttributeError when connection is closed before result is received
* TINKERPOP-2100 coalesce() creating unexpected results when used with order()
* TINKERPOP-2105 Gremlin-Python connection not returned back to the pool on exception from gremlin server
* TINKERPOP-2113 P.Within() doesn't work when given a List argument

==== Improvements

* TINKERPOP-1889 JavaScript GLV: Use heartbeat to prevent connection timeout
* TINKERPOP-2010 Generate jsdoc for gremlin-javascript
* TINKERPOP-2013 Process tests that are auto-ignored stink
* TINKERPOP-2018 Generate API docs for Gremlin.Net
* TINKERPOP-2038 Make groovy script cache size configurable
* TINKERPOP-2050 Add a :bytecode command to Gremlin Console
* TINKERPOP-2062 Add Traversal class to CoreImports
* TINKERPOP-2065 Optimize iterate() for remote traversals
* TINKERPOP-2067 Allow getting raw data from Gremlin.Net.Driver.IGremlinClient
* TINKERPOP-2068 Bump Jackson Databind 2.9.7
* TINKERPOP-2069 Document configuration of Gremlin.Net
* TINKERPOP-2070 gremlin-javascript: Introduce Connection representation
* TINKERPOP-2071 gremlin-python: the graphson deserializer for g:Set should return a python set
* TINKERPOP-2073 Generate tabs for static code blocks
* TINKERPOP-2074 Ensure that only NuGet packages for the current version are pushed
* TINKERPOP-2077 VertexProgram.Builder should have a default create() method with no Graph
* TINKERPOP-2078 Hide use of EmptyGraph or RemoteGraph behind a more unified method for TraversalSource construction
* TINKERPOP-2084 For remote requests in console display the remote stack trace
* TINKERPOP-2092 Deprecate default GraphSON serializer fields
* TINKERPOP-2097 Create a DriverRemoteConnection with an initialized Client
* TINKERPOP-2102 Deprecate static fields on TraversalSource related to remoting
* TINKERPOP-2106 When gremlin executes timeout, throw TimeoutException instead of TraversalInterruptedException/InterruptedIOException
* TINKERPOP-2110 Allow Connection on Different Path (from /gremlin)
* TINKERPOP-2114 Document common Gremlin anti-patterns
* TINKERPOP-2118 Bump to Groovy 2.4.16
* TINKERPOP-2121 Bump Jackson Databind 2.9.8

[[release-3-3-5]]
=== TinkerPop 3.3.5 (Release Date: January 2, 2019)

This release also includes changes from <<release-3-2-11, 3.2.11>>.

* Fixed and/or folding in `InlineFilterStrategy`.
* Fixed configuration and serialization of `SubgraphStrategy` which was missing the `checkAdjacentVertices` flag.
* Captured `TraversalInterruptionException` and converted to `TimeoutException` for `GremlinExecutor`.
* Fixed a bug in `CoalesceStep` which squared the bulk if the step followed a `Barrier` step.
* Fixed a bug in `GroupStep` that assigned wrong reducing bi-operators
* Added `:bytecode` command to help developers debugging `Bytecode`-based traversals.
* Added option to set the path for the URI on the Java driver.
* Fixed `PersistedOutputRDD` to eager persist RDD by adding `count()` action calls.
* Deserialized `g:Set` to a Python `Set` in GraphSON in `gremlin-python`.
* Deprecated `StarGraph.builder()` and `StarGraph.Builder.build()` in favor of the more common "builder" patterns of `build()` and `create()` respectively.
* Deprecated `Serializers.DEFAULT_RESULT_SERIALIZER` and `DEFAULT_REQUEST_SERIALIZER`.
* Deprecated `TraversalSource#GREMLIN_REMOTE` and `TraversalSource#GREMLIN_REMOTE_CONNECTION_CLASS` moving them to `RemoteConnection`.
* Fixed the setting of the default label for a `ReferenceVertex` when the original vertex was of type `ComputerAdjacentVertex`.
* Changed Java driver to expect a generic `RemoteTraverser` object rather than the specific `DefaultRemoteTraverser`.
* Better handled server disconnect condition for the `gremlin-python` driver by throwing a clear exception.
* Display the remote stack trace in the Gremlin Console when scripts sent to the server fail.
* Added `AnonymousTraversalSource` which provides a more unified means of constructing a `TraversalSource`.
* Added `DriverRemoteConnection.using(Client)` to provide users better control over the number of connections being created.
* Changed behavior of GraphSON deserializer in gremlin-python such that `g:Set` returns a Python `Set`.
* Bumped to Groovy 2.4.16.
* Fixed bug that prevented `TraversalExplanation` from serializing properly with GraphSON.
* Changed behavior of `iterate()` in Python, Javascript and .NET to send `none()` thus avoiding unnecessary results being returned.
* Provided for a configurable class map cache in the `GremlinGroovyScriptEngine` and exposed that in Gremlin Server.
* `GraphProvider` instances can be annotated with `OptOut` configurations that will be applied in addition to the `OptOut` instances on a `Graph`.

==== Bugs

* TINKERPOP-2081 PersistedOutputRDD materialises rdd lazily with Spark 2.x
* TINKERPOP-2091 Wrong/Missing feature requirements in StructureStandardTestSuite
* TINKERPOP-2094 Gremlin Driver Cluster Builder serializer method does not use mimeType as suggested
* TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
* TINKERPOP-2096 gremlinpython: AttributeError when connection is closed before result is received
* TINKERPOP-2100 coalesce() creating unexpected results when used with order()
* TINKERPOP-2113 P.Within() doesn't work when given a List argument

==== Improvements

* TINKERPOP-1889 JavaScript GLV: Use heartbeat to prevent connection timeout
* TINKERPOP-2010 Generate jsdoc for gremlin-javascript
* TINKERPOP-2013 Process tests that are auto-ignored stink
* TINKERPOP-2018 Generate API docs for Gremlin.Net
* TINKERPOP-2038 Make groovy script cache size configurable
* TINKERPOP-2050 Add a :bytecode command to Gremlin Console
* TINKERPOP-2062 Add Traversal class to CoreImports
* TINKERPOP-2065 Optimize iterate() for remote traversals
* TINKERPOP-2067 Allow getting raw data from Gremlin.Net.Driver.IGremlinClient
* TINKERPOP-2069 Document configuration of Gremlin.Net
* TINKERPOP-2070 gremlin-javascript: Introduce Connection representation
* TINKERPOP-2071 gremlin-python: the graphson deserializer for g:Set should return a python set
* TINKERPOP-2073 Generate tabs for static code blocks
* TINKERPOP-2074 Ensure that only NuGet packages for the current version are pushed
* TINKERPOP-2077 VertexProgram.Builder should have a default create() method with no Graph
* TINKERPOP-2078 Hide use of EmptyGraph or RemoteGraph behind a more unified method for TraversalSource construction
* TINKERPOP-2084 For remote requests in console display the remote stack trace
* TINKERPOP-2092 Deprecate default GraphSON serializer fields
* TINKERPOP-2097 Create a DriverRemoteConnection with an initialized Client
* TINKERPOP-2102 Deprecate static fields on TraversalSource related to remoting
* TINKERPOP-2106 When gremlin executes timeout, throw TimeoutException instead of TraversalInterruptedException/InterruptedIOException
* TINKERPOP-2110 Allow Connection on Different Path (from /gremlin)
* TINKERPOP-2114 Document common Gremlin anti-patterns
* TINKERPOP-2118 Bump to Groovy 2.4.16
* TINKERPOP-2121 Bump Jackson Databind 2.9.8

[[release-3-3-4]]
=== TinkerPop 3.3.4 (Release Date: October 15, 2018)

This release also includes changes from <<release-3-2-10, 3.2.10>>.

* Added synchronized `Map` to Gryo 3.0 registrations.
* Removed `timedInterrupt` from documentation as a way to timeout.
* Deprecated `Order` for `incr` and `decr` in favor of `asc` and `desc`.
* Fixed bug in `math()` for OLAP where `ComputerVerificationStrategy` was incorrectly detecting path label access and preventing execution.

==== Bugs

* TINKERPOP-1898 Issue with bindings in strategies and lambdas
* TINKERPOP-1933 gremlin-python maximum recursion depth exceeded on large responses
* TINKERPOP-1958 TinkerGraphCountStrategy can return wrong counts
* TINKERPOP-1961 Duplicate copies of images directory in docs
* TINKERPOP-1962 GroovyTranslator doesn't handle empty maps
* TINKERPOP-1963 Use of reducing step in choose()
* TINKERPOP-1972 inject() tests are throwing exceptions in .NET GLV tests
* TINKERPOP-1978 Check for Websocket connection state when retrieved from Connection Pool missing
* TINKERPOP-1979 Several OLAP issues in MathStep
* TINKERPOP-1988 minor error in documentation
* TINKERPOP-1999 [Java][gremlin-driver] Query to a remote server via the websocket client hangs indefinitely if the server becomes unavailable
* TINKERPOP-2005 Intermittent NullPointerException in response handling
* TINKERPOP-2009 Pick.any and Pick.none should be exposed in Gremlin-JavaScript
* TINKERPOP-2021 Prevent maximum recursion depth failure
* TINKERPOP-2030 KeepAlive task executed for every Connection.write call
* TINKERPOP-2032 Update jython-standalone
* TINKERPOP-2044 Cannot reconnect to Azure cosmos host that becomes available again

==== Improvements

* TINKERPOP-1113 GraphComputer subclasses should support native methods
* TINKERPOP-1365 Log the seed used to initialize Random in tests
* TINKERPOP-1447 Add some JavaScript intelligence to the documentation so that comments and output are not copied in a copy paste
* TINKERPOP-1595 Go through TraversalVertexProgram with a profile and optimize.
* TINKERPOP-1778 Do not promote timedInterrupt option for Gremlin Server script processing
* TINKERPOP-1780 Add authentication tests for gremlin-python
* TINKERPOP-1836 .NET sample project
* TINKERPOP-1841 Include Python GLV tests on TravisCI
* TINKERPOP-1864 Gremlin Python tests for GraphSON 2.0 and 3.0
* TINKERPOP-1897 Provide Docker images of Gremlin Server and Console
* TINKERPOP-1945 Add support for extended GraphSon types to Gremlin.net
* TINKERPOP-1951 gremlin-server.bat doesn't support paths containing spaces
* TINKERPOP-1956 Deprecate Order incr/decr for asc/desc
* TINKERPOP-1959 Provide a way to submit scripts to the server in gremlin-javascript
* TINKERPOP-1968 Refactor elements of Gremlin Server testing
* TINKERPOP-1976 Include Computer tests for GLVs
* TINKERPOP-1977 Gremlin-JavaScript: Support SASL authentication
* TINKERPOP-1985 Update position on bulk loading
* TINKERPOP-1989 Preserve order that plugins are applied in Gremlin Console
* TINKERPOP-1995 DriverRemoteConnection close() method returns undefined
* TINKERPOP-2011 Use NumberHelper on choose()
* TINKERPOP-2012 Target .NET Standard 2.0 for Gremlin.Net
* TINKERPOP-2015 Allow users to configure the WebSocket connections
* TINKERPOP-2016 Upgrade Jackson FasterXML to 2.9.5 or later to fix security vulnerability
* TINKERPOP-2017 Check for Column in by()
* TINKERPOP-2022 Cluster SSL should trust default ca certs by default
* TINKERPOP-2023 Gremlin Server should not create self-signed certs *(breaking)*
* TINKERPOP-2024 Gremlin Server Application archetype should connect via withRemote
* TINKERPOP-2025 Change to SHA-256/512 and drop SHA-1 for releases
* TINKERPOP-2026 Gremlin.Net.Driver should check ClientWebSocket.State before closing
* TINKERPOP-2034 Register synchronizedMap() with Gryo
* TINKERPOP-2035 Gremlin-JavaScript: Pass custom headers to the websocket connection
* TINKERPOP-2040 Improve flexibility of GroovyTranslator to handle custom types
* TINKERPOP-2045 Remove non-indy groovy dependencies
* TINKERPOP-2055 Provide support for special number cases like Infinity in GraphSON
* TINKERPOP-2056 Use NumberHelper in Compare

[[release-3-3-3]]
=== TinkerPop 3.3.3 (Release Date: May 8, 2018)

This release also includes changes from <<release-3-2-9, 3.2.9>>.

* Implemented `TraversalSelectStep` which allows to `select()` runtime-generated keys.
* Coerced `BulkSet` to `g:List` in GraphSON 3.0.
* Deprecated `CredentialsGraph` DSL in favor of `CredentialsTraversalDsl` which uses the recommended method for Gremlin DSL development.
* Allowed `iterate()` to be called after `profile()`.

==== Bugs

* TINKERPOP-1869 Profile step and iterate do not play nicely with each other
* TINKERPOP-1927 Gherkin scenario expects list with duplicates, but receives g:Set
* TINKERPOP-1947 Path history isn't preserved for keys in mutations

==== Improvements

* TINKERPOP-1628 Implement TraversalSelectStep
* TINKERPOP-1755 No docs for ReferenceElements
* TINKERPOP-1903 Credentials DSL should use the Java annotation processor
* TINKERPOP-1912 Remove MD5 checksums
* TINKERPOP-1934 Bump to latest version of httpclient
* TINKERPOP-1936 Performance enhancement to Bytecode deserialization
* TINKERPOP-1943 JavaScript GLV: Support GraphSON3
* TINKERPOP-1944 JavaScript GLV: DriverRemoteConnection is not exported in the root module
* TINKERPOP-1950 Traversal construction performance enhancements
* TINKERPOP-1953 Bump to Groovy 2.4.15

[[release-3-3-2]]
=== TinkerPop 3.3.2 (Release Date: April 2, 2018)

This release also includes changes from <<release-3-2-8, 3.2.8>>.

* Fixed regression issue where the HTTPChannelizer doesn't instantiate the specified AuthenticationHandler.
* Defaulted GLV tests for gremlin-python to run for GraphSON 3.0.
* Fixed a bug with `Tree` serialization in GraphSON 3.0.
* In gremlin-python, the GraphSON 3.0 `g:Set` type is now deserialized to `List`.

==== Bugs

* TINKERPOP-1053 installed plugins are placed in a directory relative to where gremlin.sh is started
* TINKERPOP-1509 Failing test case for tree serialization
* TINKERPOP-1738 Proper functioning of GraphSONReader depends on order of elements in String representation
* TINKERPOP-1758 RemoteStrategy should be before all other DecorationStrategies.
* TINKERPOP-1855 Update Rexster links
* TINKERPOP-1858 HttpChannelizer regression: Does not create specified AuthenticationHandler
* TINKERPOP-1859 Complex instance of P not serializing to bytecode properly
* TINKERPOP-1860 valueMap(True) result in error in gremlin-python
* TINKERPOP-1862 TinkerGraph VertexProgram message passing doesn't work properly when using Direction.BOTH
* TINKERPOP-1867 union() can produce extra traversers
* TINKERPOP-1872 Apply edgeFunction in SparkMessenger
* TINKERPOP-1873 min() and max() work only in the range of Integer values
* TINKERPOP-1874 P does not appear to be serialized consistently in GraphSON
* TINKERPOP-1875 Gremlin-Python only aggregates to list when using GraphSON3
* TINKERPOP-1879 Gremlin Console does not resepect equal sign for flag argument assignments
* TINKERPOP-1880 Gremlin.NET Strong name signature could not be verified. (HRESULT: 0x80131045)
* TINKERPOP-1883 gremlinpython future will never return
* TINKERPOP-1890 getAnonymousTraversalClass() is not being generated for Java DSLs
* TINKERPOP-1891 Serialization of P.not() for gremlin-javascript
* TINKERPOP-1892 GLV test failures for .NET
* TINKERPOP-1894 GraphSONMessageSerializerV2d0 fails to deserialize valid P.not()
* TINKERPOP-1896 gremlin-python lambdas error
* TINKERPOP-1907 Fix failing GLV test for withSack() in .NET
* TINKERPOP-1917 gx:BigDecimal serialization broken in Gremlin.Net on systems with ',' as decimal separator
* TINKERPOP-1918 Scenarios fail because of wrong numerical types
* TINKERPOP-1919 Gherkin runner doesn't work with P.And() and P.Or() in Gremlin.Net
* TINKERPOP-1920 Tests fail because P.Within() arguments are wrapped in an array in Gremlin.Net
* TINKERPOP-1922 Gherkin features fail that contain P.not() in Gremlin.Net

==== Improvements

* TINKERPOP-1357 Centrality Recipes should mention pageRank and OLAP.
* TINKERPOP-1489 Provide a Javascript Gremlin Language Variant
* TINKERPOP-1586 SubgraphStrategy in OLAP
* TINKERPOP-1726 Support WebSockets ping/pong keep-alive in Gremlin server
* TINKERPOP-1842 iterate() missing in terminal steps documentation
* TINKERPOP-1844 Python GLV test should run for GraphSON 3.0 *(breaking)*
* TINKERPOP-1850 Range step has undocumented special values
* TINKERPOP-1854 Support lambdas in Gremlin.Net
* TINKERPOP-1857 GLV test suite consistency and completeness
* TINKERPOP-1863 Delaying the setting of requestId till the RequestMessage instantiation time
* TINKERPOP-1865 Run Gremlin .NET GLV tests with GraphSON 3.0
* TINKERPOP-1866 Support g:T for .NET
* TINKERPOP-1868 Support inject source step in Gremlin.Net
* TINKERPOP-1870 n^2 synchronious operation in OLAP WorkerExecutor.execute() method
* TINKERPOP-1871 Exception handling is slow in element  ReferenceElement creation
* TINKERPOP-1877 Add new graph data for specialized testing scenarios
* TINKERPOP-1884 Bump to Netty 4.0.56.Final
* TINKERPOP-1885 Various Gremlin.Net documentation updates
* TINKERPOP-1901 Enable usage of enums in more steps in Gremlin.Net
* TINKERPOP-1908 Bump to Groovy 2.4.14
* TINKERPOP-1911 Refactor JavaTranslator to cache all reflective calls
* TINKERPOP-1914 Support construct a GremlinServer instance from gremlin executor service

[[release-3-3-1]]
=== TinkerPop 3.3.1 (Release Date: December 17, 2017)

This release also includes changes from <<release-3-2-7, 3.2.7>>.

* Added `NoneStep` and `Traversal.none()` for full filtering integration with `iterate()`.
* Fixed bug in serialization of `Path` for GraphSON 3.0 in `gremlin-python`.
* Added support for GraphSON 3.0 in Gremlin.Net.
* Added `math()`-step which supports scientific calculator capabilities for numbers within a traversal.
* Added missing `GraphTraversalSource.addE()`-method to `GremlinDslProcessor`.
* Changed `to()` and `from()` traversal-based steps to take a wildcard `?` instead of of `E`.
* Added `addV(traversal)` and `addE(traversal)` so that created element labels can be determined dynamically.
* `PageRankVertexProgram` supports `maxIterations` but will break out early if epsilon-based convergence occurs.
* Added support for epsilon-based convergence in `PageRankVertexProgram`.
* Fixed two major bugs in how PageRank was being calculated in `PageRankVertexProgram`.
* Added `Io.requiresVersion(Object)` to allow graph providers a way to check the `Io` type and version being constructed.
* Defaulted `IoCore.gryo()` and `IoCore.graphson()` to both use their 3.0 formats which means that `Graph.io()` will use those by default.
* Bumped Neo4j 3.2.3

==== Bugs

* TINKERPOP-1773 Lop should be created as a "software" and not a "person"
* TINKERPOP-1783 PageRank gives incorrect results for graphs with sinks *(breaking)*
* TINKERPOP-1799 Failure to serialize path() in gremlin-python
* TINKERPOP-1847 tinkergraph-gremlin dependency on gremlin-test, bad scope?

==== Improvements

* TINKERPOP-1632 Create a set of default functions
* TINKERPOP-1692 Bump to Neo4j 3.2.3
* TINKERPOP-1717 Update name and link of DynamoDB storage backend in landing page
* TINKERPOP-1730 Gremlin .NET support for GraphSON 3.0
* TINKERPOP-1767 Method for graph providers to check an IO version and type
* TINKERPOP-1793 addE() should allow dynamic edge labels
* TINKERPOP-1834 Consider iterate() as a first class step

[[release-3-3-0]]
=== TinkerPop 3.3.0 (Release Date: August 21, 2017)

This release also includes changes from <<release-3-2-6, 3.2.6>>.

* Removed previously deprecated `ScriptElementFactory`.
* Added `GraphTraversalSource.addE(String)` in support of `g.addE().from().to()`.
* Added support for `to(Vertex)` and `from(Vertex)` as a shorthand for `to(V(a))` and `from(V(b))`.
* Bumped to support Spark 2.2.0.
* Detected if type checking was required in `GremlinGroovyScriptEngine` and disabled related infrastructure if not.
* Removed previously deprecated `GraphTraversal.selectV3d0()` step.
* Removed previously deprecated `DetachedEdge(Object,String,Map,Pair,Pair)` constructor.
* Removed previously deprecated `Bindings` constructor. It is now a private constructor.
* Removed previously deprecated `TraversalSource.withBindings()`.
* Removed previously deprecated `GraphTraversal.sack(BiFunction,String)`.
* `TraversalMetrics` and `Metrics` Gryo 1.0 formats changed given internal changes to their implementations.
* Made `TraversalMetrics` safe to write to from multiple threads.
* Removed previously deprecated `TraversalSideEffects` methods.
* Removed previously deprecated `finalization.LazyBarrierStrategy` (moved to `optimization.LazyBarrierStrategy`).
* Removed previously deprecated `Constants` in Hadoop.
* Removed previously deprecated `VertexComputing.generateComputer(Graph)`.
* Removed previously deprecated `ConfigurationTraversal`.
* Established the Gryo 3.0 format.
* `GryoVersion` now includes a default `ClassResolver` to supply to the `GryoMapper`.
* `GryoClassResolver` renamed to `GryoClassResolverV1d0` which has an abstract class that for providers to extend in `AbstractGryoClassResolver`.
* Removed previously deprecated `Order` enums of `keyIncr`, `keyDecr`, `valueIncr`, and `valueDecr.`
* Removed previously deprecated `GraphTraversal.mapKeys()` step.
* Removed previously deprecated `GraphTraversal.mapValues()` step.
* Removed previously deprecated `GraphTraversal#addV(Object...)`.
* Removed previously deprecated `GraphTraversal#addE(Direction, String, String, Object...)`.
* Removed previously deprecated `GraphTraversal#addOutE(String, String, Object...)`.
* Removed previously deprecated `GraphTraversal#addInV(String, String, Object...)`.
* Removed previously deprecated `GraphTraversal.groupV3d0()` and respective `GroupSideEffectStepV3d0` and `GroupStepV3d0`.
* Removed previously deprecated `TraversalSource.Builder` class.
* Removed previously deprecated `ConnectiveP`, `AndP`, `OrP` constructors.
* Removed previously deprecated `TraversalScriptFunction` class.
* Removed previously deprecated `TraversalScriptHelper` class.
* Removed previously deprecated `ScriptEngineCache` class.
* Removed previously deprecated `CoreImports` class.
* Removed previously deprecated `GremlinJythonScriptEngine#()` constructor.
* Removed access to previously deprecated `CoreGremlinPlugin#INSTANCE` field.
* `gremlin.sh` and `gremln.bat` no longer support the option to pass a script as an argument for execution mode without using the `-i` option.
* Graphite and Ganglia are no longer packaged with the Gremlin Server distribution.
* `TransactionException` is no longer a class of `AbstractTransaction` and it extends `RuntimeException`.
* Included an ellipse on long property names that are truncated.
* Renamed `RangeByIsCountStrategy` to `CountStrategy`.
* Added more specific typing to various `__` traversal steps. E.g. `<A,Vertex>out()` is `<Vertex,Vertex>out()`.
* Updated Docker build scripts to include Python dependencies (NOTE: users should remove any previously generated TinkerPop Docker images).
* Added "attachment requisite" `VertexProperty.element()` and `Property.element()` data in GraphSON serialization.
* GraphSON 3.0 is now the default serialization format in TinkerGraph and Gremlin Server.
* Changed `ServerGremlinExecutor` to not use generics since there really is no flexibility in the kind of `ScheduledExecutorService` that will be used.
* Removed support for passing a byte array on the `sasl` parameter.
* Removed previously deprecated `GraphSONMapper$Builder#embedTypes` option.
* Removed previously deprecated `:remote config timeout max`.
* Removed previously deprecated `ConnectionPoolSettings.sessionId` and `ConnectionPoolSettings.optionalSessionId()`.
* Removed previously deprecated `reconnectInitialDelay` setting from the Java driver.
* Removed previously deprecated `useMapperFromGraph` option.
* Established the GraphSON 3.0 format with new `g:Map`, `g:List` and `g:Set` types.
* Removed previously deprecated `Io.Builder#registry(IoRegistry)` method.
* Removed previously deprecated `GryoMessageSerializerV1d0(GryoMapper)` constructor.
* Removed previously deprecated `TinkerIoRegistry`.
* Removed previously deprecated `getInstance()` methods on all TinkerPop classes.
* Removed previously deprecated `VertexPropertyFeatures.supportsAddProperty()`.
* Removed previously deprecated TinkerGraph configuration member variables.
* Removed previously deprecated `Transaction.submit(Function)`.
* Removed previously deprecated `OpSelectorHandler.errorMeter` and `AbstractEvalOpProcessor.errorMeter` fields.
* Removed previously deprecated `AbstractEvalOpProcessor.validBindingName` field.
* Removed previously deprecated `SimpleAuthenticator.CONFIG_CREDENTIALS_LOCATION` field.
* Removed previously deprecated `IteratorHandler`, `NioGremlinResponseEncoder` and `WsGremlinResponseEncoder` classes.
* Removed previously deprecated `Session.kill()` and `Session.manualKill()`.
* Removed previously deprecated `Authenticator.newSaslNegotiator()` and its method implementations in classes that were assignable to that interface.
* Removed `gremlin-groovy-test`.
* Removed previously deprecated "G" functions in `gremlin-groovy` (i.e. `GFunction`).
* Removed references to the old `GremlinPlugin` system that was in `gremlin-groovy` - the revised `GremlinPlugin` system in `gremlin-core` is the only one now in use.
* `GremlinGroovyScriptEngine` no longer implements the now removed `DependencyManager`.
* Added `Vertex`, `Edge`, `VertexProperty`, and `Property` serializers to Gremlin-Python and exposed tests that use graph object arguments.
* `Bytecode.getSourceInstructions()` and `Bytecode.getStepInstructions()` now returns `List<Instruction>` instead of `Iterable<Instruction>`.
* Added various `TraversalStrategy` registrations with `GryoMapper`.
* Fixed a naming mistake in Gremlin-Python: `IdentityRemoveStrategy` is now called `IdentityRemovalStrategy`.
* Added `TranslationStrategy` test infrastructure that verifies `Bytecode` generated from a translation is equal to the original `Bytecode`.
* Moved `NumberHelper` into the `org.apache.tinkerpop.gremlin.util` package.
* Added `Pop.mixed` instead of using `null` to represent such semantics.
* `select()`-step now defaults to using `Pop.last` instead of `Pop.mixed`.
* Added `gremlin-io-test` module to validate IO formats.
* `RequestMessage` and `ResponseMessage` are now registered with `GryoMapper` as part of the TinkerPop range of type identifiers.
* Removed previously deprecated `Console` constructor that took a `String` as an argument from `gremlin-console`.
* Removed previously deprecated `ConcurrentBindings` from `gremlin-groovy`.
* Removed previously deprecated `ScriptExecutor` from `gremlin-groovy`.
* Removed previously deprecated `SandboxExtension` from `gremlin-groovy`.
* Removed previously deprecated `GremlinGroovyScriptEngine` constructor that took `ImportCustomizerProvider` as an argument from `gremlin-groovy`.
* Removed previously deprecated `GremlinGroovyScriptEngine#plugins()` from `gremlin-groovy`.
* Added `OptionalStep` for use with `optional()` to better handle issues associated with branch side-effects.
* `UnfoldStep` now supports unfolding of arrays.
* Removed all performance tests that were not part of `gremlin-benchmark`.
* Removed dependency on `junit-benchmarks` and it's related reference to `h2`.
* Moved the source for the "home page" into the repository under `/site` so that it easier to accept contributions.
* Added `UnshadedKryoShimService` as the new default serializer model for `SparkGraphComputer`.
* `GryoRegistrator` is more efficient than the previous `GryoSerializer` model in `SparkGraphComputer`.
* Added support for `IoRegistry` custom serialization in Spark/Giraph and provided a general `hadoop-gremlin` test suite.
* Replaced term `REST` with `HTTP` to remove any confusion as to the design of the API.
* Moved `gremlin-benchmark` under `gremlin-tools` module.
* Added `gremlin-tools` and its submodule `gremlin-coverage`.
* Removed `tryRandomCommit()` from `AbstractGremlinTest`.
* Changed `gremlin-benchmark` system property for the report location to `benchmarkReportDir` for consistency.
* Added SysV and systemd init scripts.
* `GraphTraversal.valueMap(includeTokens,propertyKeys...)` now returns a `Map<Object,E>` since keys could be `T.id` or `T.label`.
* Added `skip(long)` and `skip((Scope,long)` which call the `range(low,high)` equivalents with -1 as the high.
* Added Kerberos authentication to `gremlin-server` for websockets and nio transport.
* Added audit logging of authenticated users and gremlin queries to `gremlin-server`.

==== Bugs

* TINKERPOP-1211 UnfoldStep should unfold arrays. *(breaking)*
* TINKERPOP-1426 GryoSerializer should implement Java serialization interface
* TINKERPOP-1465 Remove deprecated newSaslNegotiator *(breaking)*
* TINKERPOP-1483 PropertyMapStep returns Map<String,E> but puts non String keys in it!
* TINKERPOP-1520 Difference between 'has' step generated graphson2.0 in java and python glv implementation
* TINKERPOP-1533 Storage and IoRegistry
* TINKERPOP-1597 PathRetractionStrategy messing up certain traversals
* TINKERPOP-1635 gremlin-python: Duplicate serialization of element property in PropertySerializer
* TINKERPOP-1658 Graphson2 map keys are serialised as strings
* TINKERPOP-1716 Traversal strategies are not applied with remote in Gremlin Console

==== Improvements

* TINKERPOP-832 Remove deprecated addV/E/InE/OutE methods *(breaking)*
* TINKERPOP-833 Remove deprecated GremlinGroovyScriptEngine constructor and plugins() *(breaking)*
* TINKERPOP-834 Remove deprecated sack() method *(breaking)*
* TINKERPOP-880 Remove deprecated GroupStepV3d0 and GroupSideEffectStepV3d0 *(breaking)*
* TINKERPOP-929 Remove Deprecated TinkerGraph public static methods. *(breaking)*
* TINKERPOP-980 Add a service script or daemon mode in the distribution *(breaking)*
* TINKERPOP-999 ServerGremlinExecutor construction need not use generics for ExecutorService *(breaking)*
* TINKERPOP-1004 Make Transaction.commit() failures consistent across implementations. *(breaking)*
* TINKERPOP-1010 Remove deprecated credentialsDbLocation for SimpleAuthenticator *(breaking)*
* TINKERPOP-1024 Remove deprecated tryRandomCommit() *(breaking)*
* TINKERPOP-1028 Remove deprecated ConnectionPoolSettings session settings *(breaking)*
* TINKERPOP-1040 Remove deprecated SandboxExtension *(breaking)*
* TINKERPOP-1046 Remove deprecated Gremlin Server handler implementations *(breaking)*
* TINKERPOP-1049 Remove deprecated error meter member variables in Gremlin Server handlers *(breaking)*
* TINKERPOP-1094 Remove deprecated VertexPropertyFeatures.FEATURE_ADD_PROPERTY *(breaking)*
* TINKERPOP-1116 Some anonymous traversal steps can be hard typed. *(breaking)*
* TINKERPOP-1130 Each release should store Kryo/GraphSON/GraphML versions to ensure future compatibility *(breaking)*
* TINKERPOP-1142 Remove deprecated valueIncr, valueDecr, keyIncr, keyDecr. *(breaking)*
* TINKERPOP-1169 Remove deprecated TraversalScriptFunction and TraversalScriptHelper *(breaking)*
* TINKERPOP-1170 Remove deprecated ConfigurationTraversal. *(breaking)*
* TINKERPOP-1171 Remove deprecated TraversalSource.Builder *(breaking)*
* TINKERPOP-1235 Remove deprecated ProcessPerformanceSuite and TraversalPerformanceTest *(breaking)*
* TINKERPOP-1275 Remove deprecated max setting for :remote *(breaking)*
* TINKERPOP-1283 Remove deprecated ScriptExecutor *(breaking)*
* TINKERPOP-1289 Remove deprecated ConnectiveP, AndP, and OrP constructors. *(breaking)*
* TINKERPOP-1291 Remove deprecated mapValues and mapKeys methods *(breaking)*
* TINKERPOP-1313 Rename RangeByIsCountStrategy *(breaking)*
* TINKERPOP-1316 Remove deprecated constructor from GryoMessageSerializers *(breaking)*
* TINKERPOP-1327 Bring GryoRegistrator to the forefront and deprecate GryoSerializer *(breaking)*
* TINKERPOP-1363 Cleanup Docker build script for next major release *(breaking)*
* TINKERPOP-1369 Replace REST API with HTTP API
* TINKERPOP-1389 Support Spark 2.0.0
* TINKERPOP-1399 NumberHelper needs to go into util and have a private constructor *(breaking)*
* TINKERPOP-1404 Path/label optimization
* TINKERPOP-1408 Remove Deprecated Io.Builder.registry() *(breaking)*
* TINKERPOP-1414 Change default GraphSON version to 3.0 *(breaking)*
* TINKERPOP-1420 Remove deprecated ConcurrentBindings in gremlin-groovy *(breaking)*
* TINKERPOP-1421 Remove deprecated ControlOps *(breaking)*
* TINKERPOP-1427 GraphSON 3.0 needs collection types and consistent number typing.
* TINKERPOP-1443 Use an API checker during build
* TINKERPOP-1445 Large nested VertexProperties and Properties do not get printed well
* TINKERPOP-1454 Create Serializers for Graph objects in Gremlin-Python
* TINKERPOP-1481 Remove deprecated reconnectInitialDelay in Java driver *(breaking)*
* TINKERPOP-1485 Move source for TinkerPop site to source code repo
* TINKERPOP-1506 Optional/Coalesce should not allow sideEffect traversals.
* TINKERPOP-1514 Restructure for gremlin-tools module *(breaking)*
* TINKERPOP-1524 Bytecode.getXXXInstructions should return a List, not Iterable.
* TINKERPOP-1526 Remove deprecated Session kill() overloads *(breaking)*
* TINKERPOP-1536 Include GLVs in Docker build
* TINKERPOP-1541 Select should default to Pop.last semantics *(breaking)*
* TINKERPOP-1549 Implement skip()
* TINKERPOP-1550 Make Graphite and Ganglia optional dependencies
* TINKERPOP-1563 Remove deprecated getInstance() methods *(breaking)*
* TINKERPOP-1565 Setup GraphSON 3.0
* TINKERPOP-1566 Kerberos authentication for gremlin-server
* TINKERPOP-1574 Get rid of untyped GraphSON in 3.0
* TINKERPOP-1603 Remove support for SASL byte array in protocol *(breaking)*
* TINKERPOP-1612 Remove gremlin-groovy-test module *(breaking)*
* TINKERPOP-1621 Remove deprecated GremlnPlugin and related infrastructure *(breaking)*
* TINKERPOP-1622 Remove deprecated G functions in gremlin-groovy *(breaking)*
* TINKERPOP-1651 Remove deprecated gremlin.sh init syntax *(breaking)*
* TINKERPOP-1686 Make TraversalMetrics thread safe *(breaking)*
* TINKERPOP-1698 Gryo 3.0
* TINKERPOP-1699 Remove deprecated userMapperFromGraph *(breaking)*
* TINKERPOP-1700 Remove deprecated embedTypes option
* TINKERPOP-1706 Remove deprecated ScriptEngineCache and related dead code *(breaking)*
* TINKERPOP-1715 Bump to Spark 2.2
* TINKERPOP-1719 Remove deprecated Traversal related code *(breaking)*
* TINKERPOP-1720 Remove deprecated Hadoop code *(breaking)*
* TINKERPOP-1721 Remove deprecated Bindings related code *(breaking)*
* TINKERPOP-1724 Remove deprecated ScriptElementFactory
* TINKERPOP-1729 Remove deprecated select steps.
* TINKERPOP-1740 Add vertex parameter overload to to() and from()
* TINKERPOP-1747 Streamline inheritance for gremlin-python GraphSON serializer classes

== TinkerPop 3.2.0 (Nine Inch Gremlins)

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

[[release-3-2-11]]
=== TinkerPop 3.2.11 (Release Date: January 2, 2019)

* Bumped to Jackson Databind 2.9.8

==== Improvements

* TINKERPOP-2074 Ensure that only NuGet packages for the current version are pushed
* TINKERPOP-2121 Bump Jackson Databind 2.9.8

[[release-3-2-10]]
=== TinkerPop 3.2.10 (Release Date: October 15, 2018)

* Removed conflicting non-indy groovy core dependency
* Bumped jython-standalone 2.7.1
* Added a delegate to the Gremlin.Net driver that can be used to configure the WebSocket connection.
* SSL security enhancements
* Added Gremlin version to Gremlin Server startup logging output.
* Fixed problem with Gremlin Server sometimes returning an additional message after a failure.
* Allowed spaces in classpath for `gremlin-server.bat`.
* Fixed bug in traversals that used Python lambdas with strategies in `gremlin-python`.
* Modified Maven archetype for Gremlin Server to use remote traversals rather than scripts.
* Added an system error code for failed plugin installs for Gremlin Server `-i` option.
* Fixed bug in keep-alive requests from over-queuing cancelled jobs.
* Match numbers in `choose()` options using `NumberHelper` (match values, ignore data type).
* Added support for GraphSON serialization of `Date` in Javascript.
* Added synchronized `Map` to Gryo 1.0 registrations.
* Added `Triple` to Gryo 1.0 registrations.
* Added support for `Double.NaN`, `Double.POSITIVE_INFINITY` and `Double.NEGATIVE_INFINITY`.
* Improved escaping of special characters in strings passed to the `GroovyTranslator`.
* Added `Cluster` configuration option to set a custom validation script to use to test server connectivity in the Java driver.
* Improved ability of `GroovyTranslator` to handle more types supported by GraphSON.
* Improved ability of `GroovyTranslator` to handle custom types.
* Added better internal processing of `Column` in `by(Function)`.
* Added `hasNext()` support on `Traversal` for `gremlin-python`.
* Added support for additional extended types in Gremlin.Net with `decimal`, `TimeSpan`, `BigInteger`, `byte`, `byte[]`, `char` and `short`.
* Fixed bug in Java driver where an disorderly shutdown of the server would cause the client to hang.
* Added a dotnet template project that should make it easier to get started with Gremlin.Net.
* Removed `ThreadInterruptCustomizerProvider` from documentation as a way to timeout.
* Changed behavior of `withRemote()` if called multiple times so as to simply throw an exception and not perform the side-effect of auto-closing.
* Added Docker images for Gremlin Console and Gremlin Server.
* Fixed bug in `branch()` where reducing steps as options would produce incorrect results.
* Removed recursive handling of streaming results from Gremlin-Python driver to avoid max recursion depth errors.
* Improved performance of `TraversalVertexProgram` and related infrastructure.
* Checked web socket state before closing connection in the .NET driver.
* Deprecated `BulkLoaderVertexProgram` and related infrastructure.
* Deprecated `BulkDumperVertexProgram` with the more aptly named `CloneVertexProgram`.
* Added `createGratefulDead()` to `TinkerFactory` to help make it easier to try to instantiate that toy graph.
* Added identifiers to edges in the Kitchen Sink toy graph.
* Ordered the loading of plugins in the Gremlin Console by their position in the configuration file.
* Refactored the Gremlin Server integration testing framework and streamlined that infrastructure.
* Logged the seed used in initializing `Random` for tests.
* Fixed bug in `GroovyTranslator` that didn't properly handle empty `Map` objects.
* Added concrete configuration methods to `SparkGraphComputer` to make a more clear API for configuring it.
* Fixed a bug in `TinkerGraphCountStrategy`, which didn't consider that certain map steps may not emit an element.
* Fixed a bug in JavaScript GLV where DriverRemoteConnection close() method didn't returned a Promise instance.
* Bumped to Jackson 2.9.6.
* Sasl Plain Text Authentication added to Gremlin Javascript.
* Ability to send scripts to server added to Gremlin Javascript.
* Translator class added to Gremlin Javascript to translate bytecode to script clientside.

==== Bugs

* TINKERPOP-1898 Issue with bindings in strategies and lambdas
* TINKERPOP-1933 gremlin-python maximum recursion depth exceeded on large responses
* TINKERPOP-1958 TinkerGraphCountStrategy can return wrong counts
* TINKERPOP-1961 Duplicate copies of images directory in docs
* TINKERPOP-1962 GroovyTranslator doesn't handle empty maps
* TINKERPOP-1963 Use of reducing step in choose()
* TINKERPOP-1972 inject() tests are throwing exceptions in .NET GLV tests
* TINKERPOP-1978 Check for Websocket connection state when retrieved from Connection Pool missing
* TINKERPOP-1988 minor error in documentation
* TINKERPOP-1999 [Java][gremlin-driver] Query to a remote server via the websocket client hangs indefinitely if the server becomes unavailable
* TINKERPOP-2005 Intermittent NullPointerException in response handling
* TINKERPOP-2009 Pick.any and Pick.none should be exposed in Gremlin-JavaScript
* TINKERPOP-2030 KeepAlive task executed for every Connection.write call
* TINKERPOP-2032 Update jython-standalone
* TINKERPOP-2044 Cannot reconnect to Azure cosmos host that becomes available again

==== Improvements

* TINKERPOP-1113 GraphComputer subclasses should support native methods
* TINKERPOP-1365 Log the seed used to initialize Random in tests
* TINKERPOP-1595 Go through TraversalVertexProgram with a profile and optimize.
* TINKERPOP-1778 Do not promote timedInterrupt option for Gremlin Server script processing
* TINKERPOP-1780 Add authentication tests for gremlin-python
* TINKERPOP-1836 .NET sample project
* TINKERPOP-1841 Include Python GLV tests on TravisCI
* TINKERPOP-1897 Provide Docker images of Gremlin Server and Console
* TINKERPOP-1945 Add support for extended GraphSon types to Gremlin.net
* TINKERPOP-1951 gremlin-server.bat doesn't support paths containing spaces
* TINKERPOP-1959 Provide a way to submit scripts to the server in gremlin-javascript
* TINKERPOP-1968 Refactor elements of Gremlin Server testing
* TINKERPOP-1976 Include Computer tests for GLVs
* TINKERPOP-1977 Gremlin-JavaScript: Support SASL authentication
* TINKERPOP-1985 Update position on bulk loading
* TINKERPOP-1989 Preserve order that plugins are applied in Gremlin Console
* TINKERPOP-1995 DriverRemoteConnection close() method returns undefined
* TINKERPOP-2011 Use NumberHelper on choose()
* TINKERPOP-2012 Target .NET Standard 2.0 for Gremlin.Net
* TINKERPOP-2015 Allow users to configure the WebSocket connections
* TINKERPOP-2016 Upgrade Jackson FasterXML to 2.9.5 or later to fix security vulnerability
* TINKERPOP-2017 Check for Column in by()
* TINKERPOP-2022 Cluster SSL should trust default ca certs by default
* TINKERPOP-2023 Gremlin Server should not create self-signed certs *(breaking)*
* TINKERPOP-2024 Gremlin Server Application archetype should connect via withRemote
* TINKERPOP-2025 Change to SHA-256/512 and drop SHA-1 for releases
* TINKERPOP-2026 Gremlin.Net.Driver should check ClientWebSocket.State before closing
* TINKERPOP-2034 Register synchronizedMap() with Gryo
* TINKERPOP-2035 Gremlin-JavaScript: Pass custom headers to the websocket connection
* TINKERPOP-2040 Improve flexibility of GroovyTranslator to handle custom types
* TINKERPOP-2045 Remove non-indy groovy dependencies
* TINKERPOP-2055 Provide support for special number cases like Infinity in GraphSON
* TINKERPOP-2056 Use NumberHelper in Compare

[[release-3-2-9]]
=== TinkerPop 3.2.9 (Release Date: May 8, 2018)

* Fixed bug where path history was not being preserved for keys in mutations.
* Bumped to httpclient 4.5.5.
* Bumped to Groovy 2.4.15 - fixes bug with `Lambda` construction.
* Improved performance of GraphSON deserialization of `Bytecode`.
* Improved performance of traversal construction.

====  Bugs

* TINKERPOP-1947 Path history isn't preserved for keys in mutations

==== Improvements

* TINKERPOP-1755 No docs for ReferenceElements
* TINKERPOP-1912 Remove MD5 checksums
* TINKERPOP-1934 Bump to latest version of httpclient
* TINKERPOP-1936 Performance enhancement to Bytecode deserialization
* TINKERPOP-1944 JavaScript GLV: DriverRemoteConnection is not exported in the root module
* TINKERPOP-1950 Traversal construction performance enhancements
* TINKERPOP-1953 Bump to Groovy 2.4.15

[[release-3-2-8]]
=== TinkerPop 3.2.8 (Release Date: April 2, 2018)

* Added a `Lambda` class to Gremlin.Net that makes it possible to use Groovy and Python lambdas with Gremlin.Net.
* Enums are now represented as classes in Gremlin.Net which allows to use them as arguments in more steps.
* Bumped to Groovy 2.4.14.
* Added `checkAdjacentVertices` option to `SubgraphStrategy`.
* Modified `GremlinDslProcessor` so that it generated the `getAnonymousTraversalClass()` method to return the DSL version of `__`.
* Added the "Kitchen Sink" test data set.
* Fixed deserialization of `P.not()` for GraphSON.
* Bumped to Jackson 2.9.4.
* Improved performance of `JavaTranslator` by caching reflected methods required for traversal construction.
* Ensure that `RemoteStrategy` is applied before all other `DecorationStrategy` instances.
* Added `idleConnectionTimeout` and `keepAliveInterval` to Gremlin Server that enables a "ping" and auto-close for seemingly dead clients.
* Fixed a bug where lambdas in `gremlin-python` would trigger a failure if steps using python-only symbols were present (such as `as_()`).
* Fixed a bug in `NumberHelper` that led to wrong min/max results if numbers exceeded the Integer limits.
* Delayed setting of the request identifier until `RequestMessage` construction by the builder.
* `ReferenceElement` avoids `UnsupportedOperationException` handling in construction thus improving performance.
* Improved error messaging for failed serialization and deserialization of request/response messages.
* Fixed handling of `Direction.BOTH` in `Messenger` implementations to pass the message to the opposite side of the `StarGraph`.
* Removed hardcoded expectation in metrics serialization test suite as different providers may have different outputs.
* Added `IndexedTraverserSet` which indexes on the value of a `Traverser` thus improving performance when used.
* Utilized `IndexedTraverserSet` in `TraversalVertexProgram` to avoid extra iteration when doing `Vertex` lookups.
* Bumped to Netty 4.0.56.Final.
* Fixed .NET GraphSON serialization of `P.Within()` and `P.without()` when passing a `Collection` as an argument.
* Fixed a bug in Gremlin Console which prevented handling of `gremlin.sh` flags that had an "=" between the flag and its arguments.
* Fixed bug where `SparkMessenger` was not applying the `edgeFunction` from `MessageScope`.
* Fixed a bug in `ComputerAwareStep` that didn't handle `reset()` properly and thus occasionally produced some extra traversers.
* Removed `TraversalPredicate` class in Gremlin.Net. It is now included in the `P` class instead.

==== Bugs

* TINKERPOP-1053 installed plugins are placed in a directory relative to where gremlin.sh is started
* TINKERPOP-1509 Failing test case for tree serialization
* TINKERPOP-1738 Proper functioning of GraphSONReader depends on order of elements in String representation
* TINKERPOP-1758 RemoteStrategy should be before all other DecorationStrategies.
* TINKERPOP-1855 Update Rexster links
* TINKERPOP-1859 Complex instance of P not serializing to bytecode properly
* TINKERPOP-1860 valueMap(True) result in error in gremlin-python
* TINKERPOP-1862 TinkerGraph VertexProgram message passing doesn't work properly when using Direction.BOTH
* TINKERPOP-1867 union() can produce extra traversers
* TINKERPOP-1872 Apply edgeFunction in SparkMessenger
* TINKERPOP-1873 min() and max() work only in the range of Integer values
* TINKERPOP-1874 P does not appear to be serialized consistently in GraphSON
* TINKERPOP-1879 Gremlin Console does not resepect equal sign for flag argument assignments
* TINKERPOP-1880 Gremlin.NET Strong name signature could not be verified. (HRESULT: 0x80131045)
* TINKERPOP-1883 gremlinpython future will never return
* TINKERPOP-1890 getAnonymousTraversalClass() is not being generated for Java DSLs
* TINKERPOP-1891 Serialization of P.not() for gremlin-javascript
* TINKERPOP-1892 GLV test failures for .NET
* TINKERPOP-1894 GraphSONMessageSerializerV2d0 fails to deserialize valid P.not()
* TINKERPOP-1896 gremlin-python lambdas error
* TINKERPOP-1907 Fix failing GLV test for withSack() in .NET
* TINKERPOP-1917 gx:BigDecimal serialization broken in Gremlin.Net on systems with ',' as decimal separator
* TINKERPOP-1918 Scenarios fail because of wrong numerical types
* TINKERPOP-1919 Gherkin runner doesn't work with P.And() and P.Or() in Gremlin.Net
* TINKERPOP-1920 Tests fail because P.Within() arguments are wrapped in an array in Gremlin.Net
* TINKERPOP-1922 Gherkin features fail that contain P.not() in Gremlin.Net

==== Improvements

* TINKERPOP-1357 Centrality Recipes should mention pageRank and OLAP.
* TINKERPOP-1489 Provide a Javascript Gremlin Language Variant
* TINKERPOP-1586 SubgraphStrategy in OLAP
* TINKERPOP-1726 Support WebSockets ping/pong keep-alive in Gremlin server
* TINKERPOP-1842 iterate() missing in terminal steps documentation
* TINKERPOP-1850 Range step has undocumented special values
* TINKERPOP-1854 Support lambdas in Gremlin.Net
* TINKERPOP-1857 GLV test suite consistency and completeness
* TINKERPOP-1863 Delaying the setting of requestId till the RequestMessage instantiation time
* TINKERPOP-1868 Support inject source step in Gremlin.Net
* TINKERPOP-1870 n^2 synchronious operation in OLAP WorkerExecutor.execute() method
* TINKERPOP-1877 Add new graph data for specialized testing scenarios
* TINKERPOP-1884 Bump to Netty 4.0.56.Final
* TINKERPOP-1885 Various Gremlin.Net documentation updates
* TINKERPOP-1901 Enable usage of enums in more steps in Gremlin.Net
* TINKERPOP-1908 Bump to Groovy 2.4.14
* TINKERPOP-1911 Refactor JavaTranslator to cache all reflective calls

[[release-3-2-7]]
=== TinkerPop 3.2.7 (Release Date: December 17, 2017)

* Added core GraphSON classes for Gremlin-Python: `UUID`, `Date`, and `Timestamp`.
* Documented the recommended method for constructing DSLs with Gremlin.Net.
* Provided a method to configure detachment options with `EventStrategy`.
* Fixed a race condition in `TinkerIndex`.
* Fixed bug in handling of the long forms of `-e` and `-i` (`--execute` and `--interactive` respectively) for Gremlin Console.
* Fixed bug in `LambdaRestrictionStrategy` where traversals using `Lambda` scripts weren't causing the strategy to trigger.
* Improved error messaging for bytecode deserialization errors in Gremlin Server.
* Fixed an `ArrayOutOfBoundsException` in `hasId()` for the rare situation when the provided collection is empty.
* Bumped to Netty 4.0.53
* `TraversalVertexProgram` `profile()` now accounts for worker iteration in `GraphComputer` OLAP.
* Returned the `Builder` instance from the `DetachedEdge.Builder` methods of `setOutE` and `setOutV`.
* Added test framework for GLVs.
* Fixed bug in `TraversalHelper.replaceStep()` where the step being replaced needed to be removed prior to the new one being added.
* Added alias support in the .NET `DriverRemoteConnection`.
* Added a test for self-edges and fixed `Neo4jVertex` to provided repeated self-edges on `BOTH`.
* Better respected permissions on the `plugins.txt` file and prevented writing if marked as read-only.
* Added getters for the lambdas held by `LambdaCollectingBarrierStep`, `LambdaFlatMapStep` and `LambdaSideEffectStep`.
* Fixed an old hack in `GroovyTranslator` and `PythonTranslator` where `Elements` were being mapped to their id only.
* Fixed an "attachement"-bug in `InjectStep` with a solution generalized to `StartStep`.
* Truncate the script in error logs and error return messages for "Method code too large" errors in Gremlin Server.
* Fixed a bug in `LambdaRestrictionStrategy` where it was too eager to consider a step as being a lambda step.
* `ReferenceVertex` was missing its `label()` string. `ReferenceElement` now supports all label handling.
* Fixed a bug where bytecode containing lambdas would randomly select a traversal source from bindings.
* Deprecated `GremlinScriptEngine.eval()` methods and replaced them with new overloads that include the specific `TraversalSource` to bind to.
* Added `GraphHelper.cloneElements(Graph original, Graph clone)` to the `gremlin-test` module to quickly clone a graph.
* Added `GremlinDsl.AnonymousMethod` annotation to help provide explicit types for anonymous methods when the types are not easily inferred.
* Bumped to GMavenPlus 1.6.
* Added better error message for illegal use of `repeat()`-step.
* Fixed a bug in `RangeByIsCountStrategy` that led to unexpected behaviors when predicates were used with floating point numbers.
* Bumped to Jackson 2.8.10.
* Deprecated `MutationListener.vertexPropertyChanged()` method that did not use `VertexProperty` and added a new method that does.
* Added an `EmbeddedRemoteConnection` so that it's possible to mimic a remote connection within the same JVM.
* Supported interruption for remote traversals.
* Allow the `:remote` command to accept a `Cluster` object defined in the console itself.
* The Console's `plugin.txt` file is only updated if there were manually uninstalled plugins.
* Fixed a bug in `MatchStep` where mid-traversal `where()` variables were not being considered in start-scope.
* Generalized `MatchStep` to locally compute all clauses with barriers (not just reducing barriers).
* Ensured that plugins were applied in the order they were configured.
* Fixed a bug in `Neo4jGremlinPlugin` that prevented it from loading properly in the `GremlinPythonScriptEngine`.
* Fixed a bug in `ComputerVerificationStrategy` where child traversals were being analyzed prior to compilation.
* Fixed a bug that prevented Gremlin from ordering lists and streams made of mixed number types.
* Fixed a bug where `keepLabels` were being corrupted because a defensive copy was not being made when they were being set by `PathRetractionStrategy`.
* Cancel script evaluation timeout in `GremlinExecutor` when script evaluation finished.
* Added a recipe for OLAP traversals with Spark on YARN.
* Added `spark-yarn` dependencies to the manifest of `spark-gremlin`.

==== Bugs

* TINKERPOP-1650 PathRetractionStrategy makes Match steps unsolvable
* TINKERPOP-1731 Docker build does not appear to work for gremlin-dotnet
* TINKERPOP-1745 Gremlin .NET: Use DateTimeOffset instead of DateTime to represent g:Date
* TINKERPOP-1753 OrderStep not able to order by non-integer numbers
* TINKERPOP-1760 OLAP compilation failing around ConnectiveStrategy
* TINKERPOP-1761 GremlinExecutor: Timeout future not cancelled on successful script evaluation
* TINKERPOP-1762 Make MatchStep analyze mid-clause variables for executing ordering purposes.
* TINKERPOP-1764 Generalize MatchStep to localize all barriers, not just reducing barriers.
* TINKERPOP-1766 Gremlin.Net: Closed connections should not be re-used
* TINKERPOP-1782 RangeByIsCountStrategy doesn't handle floating point numbers properly
* TINKERPOP-1789 Reference elements should be represented by id and label *(breaking)*
* TINKERPOP-1790 GraphSON 3.0 doc updates
* TINKERPOP-1791 GremlinDsl custom step with generic end type produces invalid code in __.java
* TINKERPOP-1792 Random TraversalSource Selection in GremlinScriptEngine
* TINKERPOP-1795 Getting Lambda comparator message for .profile() step
* TINKERPOP-1796 Driver connection pool SSL properties missing
* TINKERPOP-1797 LambdaRestrictionStrategy and LambdaMapStep in `by()`-modulation.
* TINKERPOP-1798 MutationListener.vertexPropertyChanged oldValue should be a VertexProperty
* TINKERPOP-1801 OLAP profile() step return incorrect timing
* TINKERPOP-1802 hasId() fails for empty collections
* TINKERPOP-1803 inject() doesn't re-attach with remote traversals
* TINKERPOP-1819 documentation query and description mismatch
* TINKERPOP-1821 Consistent behavior of self-referencing edges
* TINKERPOP-1825 Gremlin .NET: Constant() step has incorrect parameter defined
* TINKERPOP-1830 Race condition in Tinkergraph index creation
* TINKERPOP-1832 TraversalHelper.replaceStep sets previousStep to the wrong step
* TINKERPOP-1846 LambdaRestrictionStrategy not triggering for Lambda scripts
* TINKERPOP-1848 Fix g:Date assertion in python tests
* TINKERPOP-1851 Gremlin long options for -e and -i are not working properly

==== Improvements

* TINKERPOP-1661 Docker-built documentation does not always point locally
* TINKERPOP-1725 DotNet GLV: Make traversal generation deterministic
* TINKERPOP-1734 DSL for Gremlin .NET
* TINKERPOP-1746 Better error message on wrong ordering of emit()/until()/has()
* TINKERPOP-1752 Gremlin.Net: Generate completely type-safe methods
* TINKERPOP-1756 Provide a way to easily mock a RemoteConnection for tests
* TINKERPOP-1759 Improve hashcode and equals for Traverser implementations
* TINKERPOP-1768 Bump to Jackson 2.8.10
* TINKERPOP-1770 Remote traversal timeout
* TINKERPOP-1771 gremlin.bat doesn't support paths containing spaces
* TINKERPOP-1779 Bump to GMavenPlus 1.6
* TINKERPOP-1784 Gremlin Language Test Suite
* TINKERPOP-1785 Gremlin.Net should be strong-name signed
* TINKERPOP-1786 Recipe and missing manifest items for Spark on Yarn
* TINKERPOP-1787 Allow :remote command to accept a user defined Cluster instance
* TINKERPOP-1806 Consistently use Gremlin.Net instead of Gremlin-DotNet
* TINKERPOP-1807 Gremlin-Python doesn't support GraphSON types g:Date, g:Timestamp and g:UUID
* TINKERPOP-1808 Add ability to get the consumer in LambdaSideEffectStep
* TINKERPOP-1811 Improve error reporting for serialization errors between gremlin-python and gremlin-server
* TINKERPOP-1812 ProfileTest assumes that graph implementations will not add their own steps
* TINKERPOP-1813 Subgraph step requires the graph API
* TINKERPOP-1814 Some process tests require the graph API
* TINKERPOP-1820 Include .NET GLV tests on TravisCI
* TINKERPOP-1824 Update netty version to 4.0.52
* TINKERPOP-1827 Gremlin .NET: Test Suite Runner
* TINKERPOP-1829 Improve flexibility of detachment for EventStrategy
* TINKERPOP-1833 DetachedEdge.Builder#setInV and setOutV doesn't return the builder
* TINKERPOP-1835 Bump Netty 4.0.53
* TINKERPOP-1837 Gremlin .NET: Provide type coercion between IDictionary<K, V> instances

[[release-3-2-6]]
=== TinkerPop 3.2.6 (Release Date: August 21, 2017)

This release also includes changes from <<release-3-1-8, 3.1.8>>.

* Bumped to Netty 4.0.50
* Registered `HashMap$TreeNode` to Gryo.
* Fixed a lambda-leak in `SackValueStep` where `BiFunction` must be tested for true lambda status.
* Fixed a bug in `RangeByIsCountStrategy` that broke any `ConnectiveStep` that included a child traversal with an optimizable pattern.
* Allowed access to `InjectStep.injections` for `TraversalStrategy` analysis.
* Exceptions that occur during result iteration in Gremlin Server will now return `SCRIPT_EVALUATION_EXCEPTION` rather than `SERVER_ERROR`.
* `AddEdgeStep` attaches detached vertices prior to edge creation.
* Added graph element GraphSON serializers in Gremlin-Python.
* Initialization scripts for Gremlin Server will not timeout.
* Added Gremlin.Net.
* `ProfileTest` is now less stringent about assertions which will reduce burdens on providers.
* `GremlinExecutor` begins timeout of script evaluation at the time the script was submitted and not from the time it began evaluation.
* Added Gremlin.Net.
* `ReferenceFactory` and `DetachedFactory` now detach elements in collections accordingly.
* Deprecated `GryoLiteMessageSerializerV1d0` in favor of `HaltedTraverserStrategy`.
* Deprecated the `useMapperFromGraph` configuration option for Gremlin Server serializers.
* `JavaTranslator` is now smart about handling `BulkSet` and `Tree`.
* Added annotations to the traversal metrics pretty print.
* `EdgeOtherVertexStep` is no longer final and can be extended by providers.
* `EdgeVertexStep` is no longer final and can be extended by providers.
* Deprecated `Transaction.submit(Function)`.
* Fixed `HADOOP_GREMLIN_LIBS` parsing for Windows.
* Improved GraphSON serialization performance around `VertexProperty`.
* Changed some tests in `EventStrategyProcessTest` which were enforcing some unintended semantics around transaction state.
* Added WsAndHttpChannelizer and SaslAndHttpBasicAuthenticationHandler to be allow for servicing Http and Websocket requests to the same server
* Added deep copy of `Bytecode` to `DefaultTraversal.clone()`.

==== Bugs

* TINKERPOP-1385 Refactor Profiling test cases
* TINKERPOP-1679 Detached side-effects aren't attached when remoted
* TINKERPOP-1683 AbstractHadoopGraphComputer on Windows
* TINKERPOP-1691 Some EventStrategyProcessTest assume element state is synced in memory
* TINKERPOP-1704 XXXTranslators are not being respective of BulkSet and Tree.
* TINKERPOP-1727 Bytecode object shallow copied when traversals are cloned
* TINKERPOP-1742 RangeByIsCountStrategy fails for ConnectiveSteps
* TINKERPOP-1743 LambdaRestrictionStrategy does not catch lambdas passed to sack()
* TINKERPOP-1744 Gremlin .NET: Exception from sync execution gets wrapped in AggregateException

==== Improvements

* TINKERPOP-741 Remove Options For Transaction Retry
* TINKERPOP-915 Gremlin Server supports REST and Websockets simultanteously
* TINKERPOP-920 Test case needed for ensuring same cardinality for key.
* TINKERPOP-1552 C# Gremlin Language Variant
* TINKERPOP-1669 EdgeVertexStep should be designed for extension
* TINKERPOP-1676 Improve GraphSON 2.0 Performance  *(breaking)*
* TINKERPOP-1688 Include TraversalMetrics annotation in pretty print
* TINKERPOP-1694 Deprecate useMapperFromGraph
* TINKERPOP-1701 HaltedTraverserStrategy should recurse into collections for detachment.
* TINKERPOP-1703 Make EdgeOtherVertexStep non-final
* TINKERPOP-1708 Add a "Note on Scopes" document
* TINKERPOP-1709 Add a list of all the steps that support by()/from()/to()/as()/option()
* TINKERPOP-1710 Add a note on tree() by-modulation and uniqueness of tree branches.
* TINKERPOP-1714 Gremlin Server scriptEvaluationTimeout should take into account request arrival time
* TINKERPOP-1718 Deprecate GryoLiteMessageSerializerV1d0
* TINKERPOP-1748 Callout comments break code snippets
* TINKERPOP-1749 Bump to Netty 4.0.50

[[release-3-2-5]]
=== TinkerPop 3.2.5 (Release Date: June 12, 2017)

This release also includes changes from <<release-3-1-7, 3.1.7>>.

* Fixed folding of multiple `hasId()` steps into `GraphStep`.
* Added string performance options to `StarGraph`.
* Fixed a bug in `until(predicate)` where it was actually calling `emit(predicate)`.
* Fixed inconsistency in GraphSON serialization of `Path` where properties of graph elements were being included when serialized.
* Improved performance and memory usage of GraphSON when serializing `TinkerGraph` and graph elements.
* Removed use of `stream()` in `DetachedEdge` and `DetachedVertex`.
* Deprecated a constructor in `DetachedEdge` that made use of `Pair` in favor of a new one that just uses the objects that were in the `Pair`.
* Improved error messaging on the `g.addV(Object...)` when passing an invalid arguments.
* Reduced memory usage for TinkerGraph deserialization in GraphSON by streaming vertices and edges.
* Added the `gremlin-archetype-dsl` to demonstrate how to structure a Maven project for a DSL.
* Developed and documented patterns for Domain Specific Language implementations.
* Removed the Groovy dependency from `gremlin-python` and used Groovy Templates and the `gmavenplus-plugin` to generate the python GLV classes.
* Now using Groovy `[...]` map notation in `GroovyTranslator` instead of `new LinkedHashMap(){{ }}`.
* Maintained type information on `Traversal.promise()`.
* Propagated exception to `Future` instead of calling thread in `RemoteConnection`.
* Fixed a bug in `RepeatUnrollStrategy` where `LoopsStep` and `LambdaHolder` should invalidate the strategy's application.
* Deprecated `authentication.className` setting in favor of using `authentication.authenticator`.
* Added `authentication.authenticationHandler` setting.
* Added abstraction to authentication to allow users to plug in their own `AbstractAuthenticationHandler` implementations.
* Fixed a `NullPointerException` bug in `B_LP_O_S_SE_SL_Traverser`.
* `PathRetractionStrategy` now uses the marker-model to reduce recursive lookups of invalidating steps.
* `ProfileStrategy` now uses the marker-model to reduce recursive lookups of `ProfileSideEffectStep`.
* `Mutating` steps now implement `Scoping` interface.
* Fixed a step id compilation bug in `AddVertexStartStep`, `AddVertexStep`, `AddEdgeStep`, and `AddPropertyStep`.
* Added more details to Gremlin Server client side messages - exception hierarchy and stack trace.
* Deprecated "Exception-Class" in the Gremlin Server HTTP protocol in favor of the new "exceptions" field.
* De-registered metrics on Gremlin Server shutdown.
* Added "help" command option on `:remote config` for plugins that support that feature in the Gremlin Console.
* Allowed for multiple scripts and related arguments to be passed to `gremlin.sh` via `-i` and `-e`.
* `LABELED_PATH` requirement is now set if any step in the traversal is labeled.
* Updated `PathRetractionStrategy` to not run if the provided traversal contains a `VertexProgramStep` that has a `LABELED_PATH` requirement.
* Added various metrics to the `GremlinGroovyScriptEngine` around script compilation and exposed them in Gremlin Server.
* Moved the `caffeine` dependency down to `gremlin-groovy` and out of `gremlin-server`.
* Improved script compilation in `GremlinGroovyScriptEngine` to use better caching, log long compile times and prevent failed compilations from recompiling on future requests.
* Synchronized script compilation.
* Logged Script compilation times.
* Prevented failed scripts from recompiling.
* Logged warnings for scripts that take "too long" to compile.
* Improved memory usage of the `GremlinGroovyScriptEngine`.
* Added `cyclicPath().from().to().by()` support to `GraphTraversal`.
* Added `simplePath().from().to().by()` support to `GraphTraversal`.
* Added `path().from().to()` support to `GraphTraversal` so sub-paths can be isolated from the current path.
* Added `FromToModulating` interface for use with `to()`- and `from()`-based step modulators.
* Added `Path.subPath()` which supports isolating a sub-path from `Path` via to/from-labels.
* Fixed `NullPointerException` in `GraphMLReader` that occurred when an `<edge>` didn't have an ID field and the base graph supported ID assignment.
* Added `ScopingStrategy` which will computer and provide all `Scoping` steps with the path labels of the global `Traversal`.
* Split `ComputerVerificationStrategy` into two strategies: `ComputerVerificationStrategy` and `ComputerFinalizationStrategy`.
* Removed `HasTest.g_V_hasId_compilationEquality` from process test suite as it makes too many assumptions about provider compilation.
* Deprecated `CustomizerProvider` infrastructure.
* Deprecated `PluginAcceptor` infrastructure.
* Improved consistency of the application of bindings to `GremlinScriptEngine` implementations in the `BindingsGremlinPlugin`.
* Fixed a bug in OLAP `ComputerAwareStep` where end-step labels were not being appended to the traverser correctly.
* Refactor `SparkContext` handler to support external kill and stop operations.
* Fixed an optimization bug in `LazyBarrierStrategy` around appending barriers to the end of a `Traversal`.
* Fixed an optimization bug in `PathRetractionStrategy` around appending barriers to the end of a `Traversal`.
* `TraverserIterator` in GremlinServer is smart to try and bulk traversers prior to network I/O.
* Improved error handling of compilation failures for very large or highly parameterized script sent to Gremlin Server.
* Fixed a bug in `RangeByIsCountStrategy` that changed the meaning of inner traversals.
* Improved Gremlin-Python Driver implementation by adding a threaded client with basic connection pooling and support for pluggable websocket clients.
* Changed `GraphManager` from a final class implementation to an interface.
* Updated `GraphManager` interface to include methods for opening/instantiating a graph and closing a graph.
* Implemented `DefaultGraphManager` to include previous `GraphManager` functionality and adhere to updated interface.
* Deprecated `GraphManager.getGraphs()` and added `GraphManager.getGraphNames()`.
* Deprecated `GraphManager.getTraversalSources()` and added `GraphManager.getTraversalSourceNames()`.
* Fixed a bug so now users can supply a YAML with an empty `staticVariableTypes` to be used by the `FileSandboxExtension`

==== Bugs

* TINKERPOP-1258 HasTest.g_V_hasId_compilationEquality makes GraphStep assumptions
* TINKERPOP-1528 CountByIsRangeStrategy fails for a particular query
* TINKERPOP-1626 choose() is buggy in OLAP
* TINKERPOP-1638 count() is optimized away in where()
* TINKERPOP-1640 ComputerVerificationStrategy gives false errors
* TINKERPOP-1652 Disable PathRetractionStrategy strategy if VertexProgramStep has LABELLED_PATH requirement
* TINKERPOP-1660 Documentation links should not link to TINKERPOP-xxxx branches
* TINKERPOP-1666 NPE in FileSandboxExtension if staticVariableTypes is empty in supplied YAML file
* TINKERPOP-1668 RepeatUnrollStrategy should not execute if there is a LoopStep used.
* TINKERPOP-1670 End type lost when using promise()
* TINKERPOP-1673 GroovyTranslator produces Gremlin that can't execute on :remote
* TINKERPOP-1675 RemoteStep#processNextStart() throws CompletionException instead of underlying exception
* TINKERPOP-1681 Multiple hasId's are or'd into GraphStep

==== Improvements

* TINKERPOP-761 Some basic mathematical functions / steps
* TINKERPOP-786 Patterns for DSL Development
* TINKERPOP-1044 ResponseMessage should contain server-side exception name.
* TINKERPOP-1095 Create a custom ScriptContext
* TINKERPOP-1266 Make memory available to benchmarks configurable
* TINKERPOP-1303 add help for :remote config for Gephi Plugin
* TINKERPOP-1340 docs do not state at what version an API was introduced (or deprecated)
* TINKERPOP-1387 from and to modulators for path steps
* TINKERPOP-1438 Consider GraphManager as an interface*(breaking)*
* TINKERPOP-1453 Allow Gremlin-Python to handle asynchronous failure
* TINKERPOP-1577 Provide support for Python3 or Python2 in the Docker builds.
* TINKERPOP-1599 implement real gremlin-python driver
* TINKERPOP-1614 Improve documentation for Graph.V() and Graph.E() on main docs page
* TINKERPOP-1618 Remove groovy dependency from gremlin-python
* TINKERPOP-1627 LazyBarrierStrategy should not append an end barrier.
* TINKERPOP-1631 Fix visibility issues with the BindingsGremlinPlugin
* TINKERPOP-1634 Deprecate old methods of GremlinGroovyScriptEngine customization
* TINKERPOP-1642 Improve performance of mutating traversals
* TINKERPOP-1644 Improve script compilation process and include metrics
* TINKERPOP-1653 Allow multiple scripts with arguments to be passed to the Console
* TINKERPOP-1657 Provide abstraction to easily allow different HttpAuth schemes
* TINKERPOP-1663 Validate a maximum for the number of parameters passed to Gremlin Server
* TINKERPOP-1665 Remove unittest from Gremlin-Python tests
* TINKERPOP-1671 Default method for RemoteConnection.submitAsync throws exception from submit on calling thread instead of failing the future
* TINKERPOP-1677 Bump Groovy to 2.4.11
* TINKERPOP-1680 Add string performance options to StarGraph

[[release-3-2-4]]
=== TinkerPop 3.2.4 (Release Date: February 8, 2017)

This release also includes changes from <<release-3-1-6, 3.1.6>>.

* Fixed a bug where `PathProcessor.keepLabels` were not being pushed down into child traversals by `PathRetractionStrategy`.
* Added default `MessagePassingReductionStrategy` for `GraphComputer` that can reduce the number of message passing iterations.
* Fixed a bug associated with user-provided maps and `GroupSideEffectStep`.
* `GroupBiOperator` no longer maintains a detached traversal and thus, no more side-effect related OLAP inconsistencies.
* Added `ProjectedTraverser` which wraps a traverser with a `List<Object>` of projected data.
* Fixed an optimization bug in `CollectingBarrierSteps` where the barrier was being consumed on each `addBarrier()`.
* `OrderGlobalStep` and `SampleGlobalStep` use `ProjectedTraverser` and now can work up to the local star graph in OLAP.
* SASL negotiation supports both a byte array and Base64 encoded bytes as a string for authentication to Gremlin Server.
* Deprecated all test suites in `gremlin-groovy-test` - Graph Providers no longer need to implement these.
* Deprecated `TinkerIoRegistry` replacing it with the more consistently named `TinkerIoRegistryV1d0`.
* Made error messaging more consistent during result iteration timeouts in Gremlin Server.
* Fixed a memory leak in the classloader for the `GremlinGroovyScriptEngine` where classes in the loader were not releasing from memory as a strong reference was always maintained.
* `PathRetractionStrategy` does not add a `NoOpBarrierStep` to the end of local children as its wasted computation in 99% of traversals.
* Fixed a bug in `AddVertexStartStep` where if a side-effect was being used in the parametrization, an NPE occurred.
* Fixed a bug in `LazyBarrierStrategy` where `profile()` was deactivating it accidentally.
* Fixed a bug in `RepeatUnrollStrategy` where stateful `DedupGlobalStep` was cloned and thus, maintained two deduplication sets.
* Added documentation around "terminal steps" in Gremlin: `hasNext()`, `next()`, `toList()`, etc.
* Added specific GraphSON serializers for `RequestMessage` and `ResponseMessage` in GraphSON 2.0.
* Added `CloseableIterator` to allow `Graph` providers who open expensive resources a way to let users release them.
* Fixed minor bug in `gremlin-driver` where closing a session-based `Client` without initializing it could generate an error.
* Relieved synchronization pressure in various areas of `TinkerGraphComputer`.
* Fixed an optimization bug in OLAP-based `DedupGlobalStep` where deduping occurred twice.
* `MemoryComputeKey` now implements `Cloneable` which is useful for `BiOperator` reducers that maintain thread-unsafe state.
* `TinkerGraphComputer` now supports distributed `Memory` with lock-free partition aggregation.
* `TinkerGraph` Gryo and GraphSON deserialization is now configured to use multi-properties.
* Changed behavior of `ElementHelper.areEqual(Property, Property)` to not throw exceptions with `null` arguments.
* Added `GryoVersion` for future flexibility when introducing a new verison of Gryo and moved serializer registrations to it.
* Fixed Gryo serialization of `ConnectiveP` instances.
* Lessened the severity of Gremlin Server logging when it encounters two or more serializers addressing the same mime type.
* Bumped to Netty 4.0.42.final.
* Added `ByteBuffer`, `InetAddress`, `Timestamp` to the list of Gryo supported classes.
* Fixed Gryo serialization of `Class`.
* Fixed GraphSON serialization of enums like `T`, `P`, etc. where values were overriding each other in the GraphSON type registry.
* Fixed a bug in Gremlin-Python around `__.__()` and `__.start()`.
* Fixed a bug around long serialization in Gremlin-Python when using Python3.
* Deprecated `TraversalSource.withBindings()` as it is no longer needed in Gremlin-Java and never was needed for other variants.
* Fixed a bug in Gremlin-Java `Bytecode` where anonymous traversals were not aware of parent bindings.
* Fixed a bug in Gremlin-Java GraphSON deserialization around `P.within()` and `P.without()`.
* Converted Spark process suite tests to "integration" tests.
* Fixed a bug in `InlineFilterStrategy` having to do with folding `HasContainers` into `VertexStep`.
* Deprecated `HasContainer.makeHasContainers()` which was used to dissect `AndP` and shouldn't be used at the TinkerPop-level.
* `GraphTraversal.has()` now will try and fold-left `HasContainer` if end step is a `HasContainerHolder`.
* Created explicit `P`-predicate methods for `GraphTraversal.hasXXX()`.
* Fixed a bug in `FilterRankStrategy` around `where().by()` ordering.
* Added another optimization in `RangeByIsCountStrategy`, that removes `count().is()` altogether if it's not needed.
* Fixed a OLAP `MatchStep.clone()`-bug that occurs when the `match()` is in a local child.
* Added another optimization in `RangeByIsCountStrategy`, that removes `count().is()` altogether if it's not needed.
* Fixed a bug in `RangeByIsCountStrategy` where labeled parents shouldn't have the strategy applied to their children.
* Fixed a bug in `PathRetractionStrategy` where `MatchEndStep` labels were being dropped when they shouldn't be.
* Added `TinkerGraphCountStrategy` which translates `g.V().map*.count()` patterns into direct `Map.size()` calls in `TinkerGraph`.
* Added `Path.head()` and `Path.isEmpty()` with default method implementations.
* Fixed a `NoSuchElementException` bug with `GroupXXXStep` where if the reduced `TraverserSet` is empty, don't add the key/value.
* Fixed a `NullPointerException` bug with profiling `GroupSideEffectStep` in OLTP.
* Improved ability to release resources in `GraphProvider` instances in the test suite.
* Factored `GremlinPlugin` functionality out of gremlin-groovy and into gremlin-core - related classes were deprecated.
* Added a `force` option for killing sessions without waiting for transaction close or timeout of a currently running job or multiple jobs.
* Deprecated `Session.kill()` and `Session.manualKill()`.
* Added `Traversal.promise()` method to allow for asynchronous traversal processing on "remote" traversals.
* Deprecated `RemoteConnection.submit(Bytecode)` in favor of `submitAsync(Bytecode)`.
* Added `choose(predicate,traversal)` and `choose(traversal,traversal)` to effect if/then-semantics (no else). Equivalent to `choose(x,y,identity())`.
* Removed `ImmutablePath.TailPath` as it is no longer required with new recursion model.
* Removed call stack recursion in `ImmutablePath`.
* Gremlin-Python serializes `Bytecode` as an object (instead of a JSON string) when submit over the `RemoteConnection`.
* Fixed the handling of the `DriverRemoteConnection` pass-through configurations to the driver.
* `IncidentToAdjacentStrategy` now uses a hidden label marker model to avoid repeated recursion for invalidating steps.
* `PathProcessorStrategy` can inline certain `where(traversal)`-steps in order to increase the likelihood of star-local children.
* `SparkGraphComputer` no longer starts a worker iteration if the worker's partition is empty.
* Added `ProjectStep.getProjectKeys()` for strategies that rely on such information.
* Added `VertexFeatures.supportsDuplicateMultiProperties()` for graphs that only support unique values in multi-properties.
* Deprecated the "performance" tests in `OptIn`.
* Deprecated `getInstance()` methods in favor of `instance()` for better consistency with the rest of the API.
* Block calls to "remote" traversal side-effects until the traversal read is complete which signifies an end to iteration.
* Added `Pick.none` and `Pick.any` to the serializers and importers.
* Added a class loader to `TraversalStrategies.GlobalCache` which guarantees strategies are registered prior to `GlobalCache.getStrategies()`.
* Fixed a severe bug where `GraphComputer` strategies are not being loaded until the second use of the traversal source.
* The root traversal now throws regular `NoSuchElementException` instead of `FastNoSuchElementException`. (*breaking*)
* Added a short sleep to prevent traversal from finishing before it can be interrupted during `TraversalInterruptionComputerTest`.
* Added support for SSL client authentication

==== Bugs

* TINKERPOP-1380 dedup() doesn't dedup in rare cases
* TINKERPOP-1384 Description of filter function in traversal documentation
* TINKERPOP-1428 profile() throws NPE for union(group, group)
* TINKERPOP-1521 Mutating steps don't recognize side-effects
* TINKERPOP-1525 Plug VertexProgram iteration leak on empty Spark RDD partitions
* TINKERPOP-1534 Gremlin Server instances leaking in tests
* TINKERPOP-1537 Python tests should not use hard-coded number of workers
* TINKERPOP-1547 Two bugs found associated with MatchStep: Path retraction and range count.
* TINKERPOP-1548 Traversals can complete before interrupted in TraversalInterruptionComputerTest
* TINKERPOP-1560 Cache in GroovyClassLoader may continue to grow
* TINKERPOP-1561 gremiln-python GraphSONWriter doesn't properly serialize long in Python 3.5
* TINKERPOP-1567 GraphSON deserialization fails with within('a')
* TINKERPOP-1573 Bindings don't work in coalesce
* TINKERPOP-1576 gremlin-python calls non-existent methods
* TINKERPOP-1581 Gremlin-Python driver connection is not thread safe.
* TINKERPOP-1583 PathRetractionStrategy retracts keys that are actually needed
* TINKERPOP-1585 OLAP dedup over non elements
* TINKERPOP-1587 Gremlin Server Subgraph Cardinality Not Respected
* TINKERPOP-1594 LazyBarrierStrategy does not activate with ProfileStep
* TINKERPOP-1605 gremlin-console 3.2.3 -e can no longer take paths relative to current working directory

==== Improvements

* TINKERPOP-887 FastNoSuchElementException hides stack trace in client code
* TINKERPOP-919 Features needs to specify whether 2 vertex properties with same key/value is allowed.
* TINKERPOP-932 Add ability to cancel script execution associated with a Gremlin Server Session
* TINKERPOP-1248 OrderGlobalStep should use local star graph to compute sorts, prior to reduction.
* TINKERPOP-1261 Side-effect group().by() can't handle user-defined maps
* TINKERPOP-1292 TinkerGraphComputer VertexProgramInterceptors
* TINKERPOP-1372 ImmutablePath should not use Java recursion (call stacks are wack)
* TINKERPOP-1433 Add steps to dev docs to help committers get their keys in order
* TINKERPOP-1434 Block calls to traversal side-effects until read is complete
* TINKERPOP-1471 IncidentToAdjacentStrategy use hidden marker to avoid repeated recursion.
* TINKERPOP-1473 Given PathRetractionStrategy, PathProcessorStrategy can be extended to support partial where() inlining.
* TINKERPOP-1482 has(x).has(y) chains should be has(x.and(y))
* TINKERPOP-1490 Provider a Future based Traversal.async(Function<Traversal,V>) terminal step
* TINKERPOP-1502 Chained has()-steps should simply left-append HasContainers in Gremlin-Java.
* TINKERPOP-1507 Pick.any and Pick.none are not in GraphSON or Gremlin-Python
* TINKERPOP-1508 Add choose(predicate,trueTraversal)
* TINKERPOP-1527 Do not override registered strategies in TraversalStrategies.GlobalCache
* TINKERPOP-1530 Consistent use of instance()
* TINKERPOP-1539 Create a ComplexTraversalTest with crazy nested gnarly traversals.
* TINKERPOP-1542 Add Path.isEmpty() with a default implementation.
* TINKERPOP-1562 Migrate ScriptEngine-related code to gremlin-core
* TINKERPOP-1570 Bump to Netty 4.0.42
* TINKERPOP-1582 TraversalOpProcessor does not support custom serializers
* TINKERPOP-1584 Add gryo serializers to support types covered in GraphSON
* TINKERPOP-1588 Added Terminal Steps section to the docs
* TINKERPOP-1589 Re-Introduce CloseableIterator
* TINKERPOP-1590 Create TinkerWorkerMemory and Partitioned Vertices
* TINKERPOP-1600 Consistent use of base 64 encoded bytes for SASL negotiation
* TINKERPOP-1602 Support SSL client certificate authentication
* TINKERPOP-1606 Refactor GroupStep to not have the reduction traversal included in its BiOperator.
* TINKERPOP-1610 Deprecate gremlin-groovy-test provider based tests
* TINKERPOP-1617 Create a SingleIterationStrategy which will do its best to rewrite OLAP traversals to not message pass.

[[release-3-2-3]]
=== TinkerPop 3.2.3 (Release Date: October 17, 2016)

This release also includes changes from <<release-3-1-5, 3.1.5>>.

* Restructured Gremlin-Python's GraphSON I/O package to make it easier for users to register serializers/deserializers. (*breaking*)
* Fixed a bug with `TraversalOpProcessor` that was returning a final result prior to committing the transaction.
* Fixed a bug in `ConnectiveStrategy` where infix and/or was not correctly reasoning on `choose()` `HasNextStep` injections.
* Increased performance of `CredentialGraph` authentication.
* Removed Java 8 stream usage from `TraversalHelper` for performance reasons.
* Fixed a bug in `RepeatStep` where `emit().as('x')` wasn't adding the step labels to the emit-traverser.
* Added `GraphComputing.atMaster(boolean)` to allow steps to know whether they are executing at master or distributed at workers.
* Fixed a bug in OLAP where `DedupGlobalStep` wasn't de-duping local master traversers.
* Added `HasContainerHolder.removeHasContainer()`-method with default `UnsupportedOperationException` implementation.
* `TraversalSource.withComputer()` is simplified to add a `VertexProgramStrategy`. Easier for language variants.
* Fixed a `Set`, `List`, `Map` bug in the various `Translators` where such collections were not being internally translated.
* Fixed a `Bytecode` bug where nested structures (map, list, set) were not being analyzed for bindings and bytecode conversions.
* Fixed a `String` bug in `GroovyTranslator` and `PythonTranslator` where if the string has double-quotes it now uses """ """.
* Added a default `TraversalStrategy.getConfiguration()` which returns the configuration needed to construct the strategy.
* `Computer` instances can be created with `Computer.create(Configuration)` and accessed via `Computer.getConf()`.
* Every `TraversalStrategy` can be created via a `Configuration` and a static `MyStrategy.create(Configuration)`.
* Added language-agnostic `TraversalStrategy` support in `Bytecode`.
* Added `PartitionStrategy.Builder.readPartitions()` and deprecated `PartitionStrategy.Builder.addPartition()`.
* A new version of `LazyBarrierStrategy` has been created and added to the default strategies.
* `FilterRankStrategy` now propagates labels "right" over non-`Scoping` filters.
* Fixed a bug in `ConnectiveP` where nested equivalent connectives should be inlined.
* Fixed a bug in `IncidentToAdjacentStrategy` where `TreeStep` traversals were allowed.
* Fixed a end-step label bug in `MatchPredicateStrategy`.
* Fixed a bug in `MatchPredicateStrategy` where inlined traversals did not have strategies applied to it.
* Fixed a bug in `RepeatUnrollStrategy` where inlined traversal did not have strategies applied to it.
* Fixed padding of prompt in Gremlin Console when the number of lines went beyond a single digit.
* Fixed GraphSON 2.0 namespace for `TinkerGraph` to be "tinker" instead of "gremlin".
* Dropped serialization support in GraphSON 2.0 for `Calendar`, `TimeZone`, and `Timestamp`.
* Added `TraversalHelper.copyLabels()` for copying (or moving) labels form one step to another.
* Added `TraversalHelper.applySingleLevelStrategies()` which will apply a subset of strategies but not walk the child tree.
* Added the concept that hidden labels using during traversal compilation are removed at the end during `StandardVerificationStrategy`. (*breaking*)
* Added `InlineFilterStrategy` which will determine if various `TraversalParent` children are filters and if so, inline them.
* Removed `IdentityRemovalStrategy` from the default listing as its not worth the clock cycles.
* Removed the "!" symbol in `NotStep.toString()` as it is confusing and the `NotStep`-name is sufficient.
* Fixed a bug in `TraversalVertexProgram` (OLAP) around ordering and connectives (i.e. `and()` and `or()`).
* Added `AbstractGremlinProcessTest.checkOrderedResults()` to make testing ordered results easier.
* `AbstractLambdaTraversal` now supports a `bypassTraversal` where it is possible for strategies to redefine such lambda traversals.
* Added an internal utility `ClassFilterStep` which determines if the traverser object's class is an instance of the provided class.
* `ConnectiveStep` extends `FilterStep` and thus, is more appropriately categorized in the step hierarchy.
* `PropertyMapStep` supports a provided traversal for accessing the properties of the element. (*breaking*)
* `SubgraphStrategy` now supports vertex property filtering.
* Fixed a bug in Gremlin-Python `P` where predicates reversed the order of the predicates.
* Added tests to `DedupTest` for the `dedup(Scope, String...)` overload.
* Added more detailed reference documentation for IO formats.
* Fixed a bug in serialization of `Lambda` instances in GraphSON, which prevented their use in remote traversals.
* Fixed a naming bug in Gremlin-Python where `P._and` and `P._or` should be `P.and_` and `P.or_`. (*breaking*)
* `where()` predicate-based steps now support `by()`-modulation.
* Added Gryo serialization for `Bytecode`.
* Moved utility-based serializers to `UtilSerializers` for Gryo - these classes were private and hence this change is non-breaking.
* `TraversalRing` returns a `null` if it does not contain traversals (previously `IdentityTraversal`).
* Deprecated `Graph.Exceptions.elementNotFoundException()` as it was not used in the code base outside of the test suite.
* Fixed a `JavaTranslator` bug where `Bytecode` instructions were being mutated during translation.
* Added `Path` to Gremlin-Python with respective GraphSON 2.0 deserializer.
* `Traversal` and `TraversalSource` now implement `AutoCloseable`.
* Added "keep-alive" functionality to the Java driver, which will send a heartbeat to the server when normal request activity on a connection stops for a period of time.
* Renamed the `empty.result.indicator` preference to `result.indicator.null` in Gremlin Console
* If `result.indicator.null` is set to an empty string, then no "result line" is printed in Gremlin Console.
* Deprecated `reconnectInitialDelay` on the Java driver.
* Added some validations to `Cluster` instance building.
* Produced better errors in `readGraph` of `GryoReader` and `GraphSONReader` if a `Vertex` cannot be found in the cache on edge loading.
* VertexPrograms can now declare traverser requirements, e.g. to have access to the path when used with `.program()`.
* New build options for `gremlin-python` where `-DglvPython` is no longer required.
* Added missing `InetAddress` to GraphSON extension module.
* Added new recipe for "Pagination".
* Added new recipe for "Recommendation".
* Added functionality to Gremlin-Server REST endpoint to forward Exception Messages and Class in HTTP Response
* Gremlin Server `TraversalOpProcessor` now returns confirmation upon `Op` `close`.
* Added `close` method Java driver and Python driver `DriverRemoteTraversalSideEffects`.

==== Bugs

* TINKERPOP-1423 IncidentToAdjacentStrategy should be disabled for tree steps
* TINKERPOP-1440 g:Path needs a GraphSON deserializer in Gremlin-Python
* TINKERPOP-1457 Groovy Lambdas for remote traversals not serializable
* TINKERPOP-1458 Gremlin Server doesn't return confirmation upon Traversal OpProcessor "close" op
* TINKERPOP-1466 PeerPressureTest has been failing recently
* TINKERPOP-1472 RepeatUnrollStrategy does not semi-compile inlined repeat traversal
* TINKERPOP-1476 TinkerGraph does not get typed with the right type name in GraphSON
* TINKERPOP-1495 Global list deduplication doesn't work in OLAP
* TINKERPOP-1500 and/or infix and choose() do not work correctly.
* TINKERPOP-1511 Remote client addV, V()

==== Improvements

* TINKERPOP-790 Implement AutoCloseable on TraversalSource
* TINKERPOP-944 Deprecate Graph.Exceptions.elementNotFound
* TINKERPOP-1189 SimpleAuthenticator over HttpChannelizer makes Gremlin Server pretty slow and consumes more CPU
* TINKERPOP-1249 Gremlin driver to periodically issue ping / heartbeat to gremlin server
* TINKERPOP-1280 VertexPrograms should declare traverser requirements
* TINKERPOP-1330 by()-modulation for where()
* TINKERPOP-1409 Make the "null" return in the gremlin console into something more understandable  *(breaking)*
* TINKERPOP-1431 Documentation generation requires tests to execute on gremlin-python
* TINKERPOP-1437 Add tests for dedup(Scope) in DedupTest
* TINKERPOP-1444 Benchmark bytecode->Traversal creation and implement GremlinServer cache if necessary.
* TINKERPOP-1448 gremlin-python should be Python 2/3 compatible
* TINKERPOP-1449 Streamline gremlin-python build
* TINKERPOP-1455 Provide String-based withStrategy()/withoutStrategy() for language variant usage
* TINKERPOP-1456 Support SubgraphStrategy.vertexProperties().
* TINKERPOP-1460 Deprecate reconnectInitialDelay in Java driver
* TINKERPOP-1464 Gryo Serialization for Bytecode
* TINKERPOP-1469 Get rid of Stream-usage in TraversalHelper
* TINKERPOP-1470 InlineFilterStrategy should try and P.or() has() children in OrSteps.
* TINKERPOP-1486 Improve API of RemoteConnection
* TINKERPOP-1487 Reference Documentation for IO
* TINKERPOP-1488 Make LazyBarrierStrategy part of the default TraversalStrategies *(breaking)*
* TINKERPOP-1492 RemoteStrategy or the RemoteConnection should append a lazy barrier().
* TINKERPOP-1423 IncidentToAdjacentStrategy should be disabled for tree steps
* TINKERPOP-1440 g:Path needs a GraphSON deserializer in Gremlin-Python
* TINKERPOP-1457 Groovy Lambdas for remote traversals not serializable
* TINKERPOP-1458 Gremlin Server doesn't return confirmation upon Traversal OpProcessor "close" op
* TINKERPOP-1466 PeerPressureTest has been failing recently
* TINKERPOP-1472 RepeatUnrollStrategy does not semi-compile inlined repeat traversal
* TINKERPOP-1495 Global list deduplication doesn't work in OLAP
* TINKERPOP-1500 and/or infix and choose() do not work correctly.
* TINKERPOP-1511 Remote client addV, V()

[[release-3-2-2]]
=== TinkerPop 3.2.2 (Release Date: September 6, 2016)

This release also includes changes from <<release-3-1-4, 3.1.4>>.

* Included GraphSON as a default serializer (in addition to Gryo, which was already present) in Gremlin Server if none are defined.
* Added `gremlin-python` package as a Gremlin language variant in Python.
* Added `Bytecode` which specifies the instructions and arguments used to construct a traversal.
* Created an experimental GraphSON representation of `Bytecode` that will be considered unstable until 3.3.0.
* Added `Translator` which allows from the translation of `Bytecode` into some other form (e.g. script, `Traversal`, etc.).
* Added `JavaTranslator`, `GroovyTranslator`, `PythonTranslator`, and `JythonTranslator` for translating `Bytecode` accordingly.
* Added `TranslationStrategy` to `gremlin-test` so translators can be tested against the process test suite.
* Added `Traversal.Admin.nextTraverser()` to get the next result in bulk-form (w/ default implementation).
* Added `TraversalSource.getAnonymousTraversalClass()` (w/ default implementation).
* Added `GremlinScriptEngine` interface which specifies a `eval(Bytecode, Bindings)` method.
* Deprecated `RemoteGraph` in favor of `TraversalSource.withRemote()` as it is more technically correct to tie a remote traversal to the `TraversalSource` than a `Graph` instance.
* `GremlinGroovyScriptEngine` implements `GremlinScriptEngine`.
* Added `GremlinJythonScriptEngine` which implements `GremlinScriptEngine`.
* Removed support for submitting a Java serialized `Traversal` to Gremlin Server.
* Removed a largely internal feature that supported automatic unrolling of traversers in the Gremlin Driver.
* Made it possible to directly initialize `OpProcessor` implementations with server `Settings`.
* Included GraphSON as a default serializer (in addition to Gryo, which was already present) in Gremlin Server if none are defined
* Introduced GraphSON 2.0.
* Deprecated `embedTypes` on the builder for `GraphSONMapper`.
* Bumped to Netty 4.0.40.final.
* Defaulted the `gremlinPool` setting in Gremlin Server to be zero, which will instructs it to use `Runtime.availableProcessors()` for that settings.
* Changed scope of log4j dependencies so that they would only be used in tests and the binary distributions of Gremlin Console and Server.
* Deprecated `Io.Builder.registry()` in favor of the newly introduced `Io.Builder.onMapper()`.
* Added new recipe for "Traversal Induced Values".
* Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
* Added class registrations for `Map.Entry` implementations to `GryoMapper`.
* Added methods to retrieve `Cluster` settings in `gremlin-driver`.
* Fixed a severe bug in `SubgraphStrategy`.
* Deprecated `SubgraphStrategy.Builder.vertexCriterion()/edgeCriterion()` in favor of `vertices()/edges()`.
* Fixed a small bug in `StandardVerificationStrategy` that caused verification to fail when `withPath` was used in conjunction with `ProfileStep`.
* Added color preferences
* Added input, result prompt preferences
* Added multi-line indicator in Gremlin Console

==== Bugs

* TINKERPOP-810 store not visible
* TINKERPOP-1151 slf4j-log4j12 / log4j is only required for testing *(breaking)*
* TINKERPOP-1383 publish-docs.sh might publish to current too early
* TINKERPOP-1390 IdentityRemoveStrategyTest fails randomly
* TINKERPOP-1400 SubgraphStrategy introduces infinite recursion if filter has Vertex/Edge steps.
* TINKERPOP-1405 profile() doesn't like withPath()

==== Improvements

* TINKERPOP-1037 Gremlin shell output coloring
* TINKERPOP-1226 Gremlin Console should :clear automagically after "Display stack trace."
* TINKERPOP-1230 Serialising lambdas for RemoteGraph
* TINKERPOP-1274 GraphSON Version 2.0
* TINKERPOP-1278 Implement Gremlin-Python and general purpose language variant test infrastructure
* TINKERPOP-1285 Gremline console does not differentiate between multi-line and single-line input
* TINKERPOP-1334 Provide a way to pull gremlin.driver.Cluster connection settings.
* TINKERPOP-1347 RemoteConnection needs to provide TraversalSideEffects. *(breaking)*
* TINKERPOP-1373 Default gremlinPool to number of cores
* TINKERPOP-1386 Bump to Netty 4.0.40.Final
* TINKERPOP-1392 Remove support for java serialized Traversal *(breaking)*
* TINKERPOP-1394 Fix links in Recipes doc
* TINKERPOP-1396 Traversal Induced Values Recipe
* TINKERPOP-1402 Impossible for graph implementations to provide a class resolver for Gryo IO
* TINKERPOP-1407 Default serializers for Gremlin Server
* TINKERPOP-1425 Use trailing underscores in gremlin-python

[[release-3-2-1]]
=== TinkerPop 3.2.1 (Release Date: July 18, 2016)

This release also includes changes from <<release-3-1-3, 3.1.3>>.

* `PathProcessor` steps now have the ability (if configured through a strategy) to drop `Traverser` path segments.
* `MatchStep` in OLTP has a lazy barrier to increase the probability of bulking.
* Added `PathRetractionStrategy` which will remove labeled path segments that will no longer be referenced.
* Added `Path.retract()` to support retracting paths based on labels.
* Optimized `ImmutablePath` and `MutablePath` equality code removing significant unnecessary object creation code.
* Bumped to Groovy 2.4.7.
* Added `RepeatUnrollStrategy` to linearize a `repeat()`-traversal if loop amount is known at compile time.
* Fixed a bug in `BranchStep` around child integration during `clone()`.
* Fixed a bug in `AbstractStep` around label set cloning.
* Added `TraversalStrategyPerformanceTest` for verifying the performance gains of optimization-based traversal strategies.
* `TraversalExplanation.prettyPrint()` exists which provides word wrapping and GremlinConsole is smart to use console width to control `toString()`.
* `TraversalOpProcessor` (`RemoteConnection`) uses `HaltedTraverserStrategy` metadata to determine detachment procedure prior to returning results.
* Allow DFS paths in `HADOOP_GREMLIN_LIBS`.
* Added a safer serializer infrastructure for use with `SparkGraphComputer` that uses `KryoSerializer` and the new `GryoRegistrator`.
* Added `HaltedTraverserStrategy` to allow users to get back different element detachments in OLAP.
* Fixed a `NullPointerException` bug around nested `group()`-steps in OLAP.
* Fixed a severe bug around halted traversers in a multi-job OLAP traversal chain.
* Ensure a separation of `GraphComputer` and `VertexProgram` configurations in `SparkGraphComputer` and `GiraphGraphComputer`.
* `PeerPressureVertexProgram` now supports dynamic initial vote strength calculations.
* Added `EmptyMemory` for ease of use when no memory exists.
* Updated `VertexComputing.generateProgram()` API to include `Memory`. *(breaking)*
* `ImmutablePath.TailPath` is now serializable like `ImmutablePath`.
* Added `ConfigurationCompilerProvider` which allows fine-grained control of some of the internal `GremlinGroovyScriptEngine` settings at the Groovy compilation level.
* Introduced the `application/vnd.gremlin-v1.0+gryo-lite` serialization type to Gremlin Server which users "reference" elements rather than "detached".
* `GryoMapper` allows overrides of existing serializers on calls to `addCustom` on the builder.
* Added a traversal style guide to the recipes cookbook.
* Fixed a bug in master-traversal traverser propagation.
* Added useful methods for custom `VertexPrograms` to be used with `program()`-step.
* Increased the test coverage around traverser propagation within a multi-job OLAP traversal.
* Added tests to validate the status of a transaction immediately following calls to close.
* Added tests to ensure that threaded transactions cannot be re-used.
* `GraphFilter` helper methods are now more intelligent when determining edge direction/label legality.
* Added `GraphFilterStrategy` to automatically construct `GraphFilters` via traversal introspection in OLAP.
* Updated the Gephi Plugin to support Gephi 0.9.x.
* Increased the testing and scope of `TraversalHelper.isLocalStarGraph()`.
* Changed signature of `get_g_VXlistXv1_v2_v3XX_name` and `get_g_VXlistX1_2_3XX_name` of `VertexTest` to take arguments for the `Traversal` to be constructed by extending classes.
* Added `VertexProgramInterceptor` interface as a general pattern for `GraphComputer` providers to use for bypassing `GraphComputer` semantics where appropriate.
* Added `SparkStarBarrierInterceptor` that uses Spark DSL for local star graph traversals that end with a `ReducingBarrierStep`.
* Added `SparkInterceptorStrategy` which identifies which interceptor to use (if any) given the submitted `VertexProgram`.
* Added `SparkSingleIterationStrategy` that does not partition nor cache the graph RDD if the traversal does not message pass.
* Added more helper methods to `TraversalHelper` for handling scoped traversal children.
* Deprecated all "performance" tests based on "JUnit Benchmarks".
* `SparkGraphComputer` no longer shuffles empty views or empty outgoing messages in order to save time and space.
* `TraversalVertexProgram` no longer maintains empty halted traverser properties in order to save space.
* Added `List<P<V>>` constructors to `ConnectiveP`, `AndP`, and `OrP` for ease of use.
* Added support for interactive (`-i`) and execute (`-e`) modes for Gremlin Console.
* Displayed line numbers for script execution failures of `-e` and `-i`.
* Improved messaging around script execution errors in Gremlin Console.
* Added "help" support to Gremlin Console with the `-h` flag.
* Added options to better control verbosity of Gremlin Console output with `-Q`, `-V` and `-D`.
* Deprecated the `ScriptExecutor` - the `-e` option to `gremlin.sh` is now handled by `Console`.
* `Traversal` now allows cancellation with `Thread.interrupt()`.
* Added a Gremlin language variant tutorial teaching people how to embed Gremlin in a host programming language.

==== Bugs

* TINKERPOP-1281 Memory.HALTED_TRAVERSER transience is not sound.
* TINKERPOP-1305 HALTED_TRAVERSERS hold wrong information
* TINKERPOP-1307 NPE with OLTP nested group() in an OLAP group() traversal
* TINKERPOP-1323 ComputerVerificationStrategy fails for nested match() steps
* TINKERPOP-1341 UnshadedKryoAdapter fails to deserialize StarGraph when SparkConf sets spark.rdd.compress=true whereas GryoSerializer works
* TINKERPOP-1348 TraversalInterruptionTest success dependent on iteration order

==== Improvements

* TINKERPOP-818 Consider a P.type()
* TINKERPOP-946 Traversal respecting Thread.interrupt()
* TINKERPOP-947 Enforce semantics of threaded transactions as manual *(breaking)*
* TINKERPOP-1059 Add test to ensure transaction opening happens at read/write and not on close *(breaking)*
* TINKERPOP-1071 Enhance pre-processor output
* TINKERPOP-1091 Get KryoSerializer to work natively. *(breaking)*
* TINKERPOP-1120 If there is no view nor messages, don't create empty views/messages in SparkExecutor
* TINKERPOP-1144 Improve ScriptElementFactory
* TINKERPOP-1155 gremlin.sh -e doesn't log line numbers for errors
* TINKERPOP-1156 gremlin.sh could use a help text
* TINKERPOP-1157 gremlin.sh should allow you to execute a script and go interactive on error or completion
* TINKERPOP-1232 Write a tutorial demonstrating the 3 ways to write a Gremlin language variant.
* TINKERPOP-1254 Support dropping traverser path information when it is no longer needed.
* TINKERPOP-1268 Improve script execution options for console *(breaking)*
* TINKERPOP-1273 Deprecate old performance tests
* TINKERPOP-1276 Deprecate serializedResponseTimeout
* TINKERPOP-1279 Add Iterable<V> parameter constructor to ConnectiveP subclasses
* TINKERPOP-1282 Add more compliance tests around how memory and vertex compute keys are propagated in chained OLAP.
* TINKERPOP-1286 Add Recipes documentation
* TINKERPOP-1288 Support gremlin.spark.skipPartitioning configuration.
* TINKERPOP-1290 Create VertexProgramInterceptor as a pattern for GraphComputer strategies.
* TINKERPOP-1293 Implement GraphFilterStrategy as a default registration for GraphComputer
* TINKERPOP-1294 Deprecate use of junit-benchmarks
* TINKERPOP-1297 Gephi plugin on Gephi 0.9.x  *(breaking)*
* TINKERPOP-1299 Refactor TraversalVertexProgram to make it easier to understand.
* TINKERPOP-1308 Serialize to "reference" for Gremlin Server
* TINKERPOP-1310 Allow OLAP to return properties as Detached
* TINKERPOP-1321 Loosen coupling between TinkerPop serialization logic and shaded Kryo
* TINKERPOP-1322 Provide fine-grained control of CompilerConfiguration
* TINKERPOP-1328 Provide [gremlin-python] as an code executor in docs
* TINKERPOP-1331 HADOOP_GREMLIN_LIBS can only point to local file system
* TINKERPOP-1332 Improve .explain() Dialogue
* TINKERPOP-1338 Bump to Groovy 2.4.7
* TINKERPOP-1349 RepeatUnrollStrategy should unroll loops while maintaining equivalent semantics.
* TINKERPOP-1355 Design HasContainer for extension

[[release-3-2-0-incubating]]
=== TinkerPop 3.2.0 (Release Date: April 8, 2016)

This release also includes changes from <<release-3-1-2-incubating, 3.1.2-incubating>>.

* Bumped to Neo4j 2.3.3.
* Renamed variable `local` to `fs` in `HadoopGremlinPlugin` to avoid a naming conflict with `Scope.local`. *(breaking)*
* Added `GraphTraversal.optional()` which will use the inner traversal if it returns results, else it won't.
* `GroupStep` and `GroupSideEffectStep` make use of mid-traversal reducers to limit memory consumption in OLAP.
* Added `GraphTraversal.program(VertexProgram)` to allow arbitrary user vertex programs in OLAP.
* Added `GraphTraversal.project()` for creating a `Map<String,E>` given the current traverser and an arbitrary number of `by()`-modulators.
* `HADOOP_GREMLIN_LIBS` can now reference a directory in HDFS and will be used if the directory does not exist locally.
* Added `gremlin-benchmark` module with JMH benchmarking base classes that can be used for further benchmark development.
* `TraversalStrategies.GlobalCache` supports both `Graph` and `GraphComputer` strategy registrations.
* `select("a","b").by("name").by("age")`-style traversals now work in OLAP with new `PathProcessorStrategy`.
* `DedupGlobalStep` can now handle star-bound `by()`-modulators and scoped keys on `GraphComputer`.
* Added `Computer` which is a builder for `GraphComputers` that is serializable.
* `PersistedOutputRDD` now implements `PersistResultGraphAware` and thus, no more unneeded warnings when using it.
* Renamed `StandardTraversalMetrics` to `DefaultTraversalMetrics` given the `DefaultXXX`-convention throughout. *(breaking)*
* Bumped to Apache Hadoop 2.7.2.
* Fixed a bug around profiling and nested traversals.
* Added `gremlin.hadoop.defaultGraphComputer` so users can use `graph.compute()` with `HadoopGraph`.
* Added `gremlin.hadoop.graphReader` and `gremlin.hadoop.graphWriter` which can handled `XXXFormats` and `XXXRDDs`.
* Deprecated `gremlin.hadoop.graphInputFormat`, `gremlin.hadoop.graphOutputFormat`, `gremlin.spark.graphInputRDD`, and `gremlin.spark.graphOutputRDD`.
* If no configuration is provided to `HadoopPools` it uses the default configuration to create a pool once and only once per JVM.
* Implemented `RemoteGraph`, `RemoteConnection`, and `RemoteStrategy`.
* Added validation to `GryoMapper` Kryo identifiers before construction to prevent accidental duplicates.
* Added `GraphStep.addIds()` which is useful for `HasContainer` "fold ins."
* Added a static `GraphStep.processHashContainerIds()` helper for handling id-based `HasContainers`.
* `GraphStep` implementations should have `g.V().hasId(x)` and `g.V(x)` compile equivalently. *(breaking)*
* Optimized `ExpandableStepIterator` with simpler logic and increased the likelihood of bulking.
* Optimized `TraverserRequirement` calculations.
* `Step.addStart()` and `Step.addStarts()` now take `Traverser.Admin<S>` and `Traverser.Admin<S>`, respectively. *(breaking)*
* `Step.processNextStart()` and `Step.next()` now return `Traverser.Admin<E>`. *(breaking)*
* `Traversal.addTraverserRequirement()` method removed. *(breaking)*
* Fixed a `hashCode()` bug in `OrderGlobalStep` and `OrderLocalStep`.
* Added `OrderLimitStrategy` which will ensure that partitions are limited before being merged in OLAP.
* `ComparatorHolder` now separates the traversal from the comparator. *(breaking)*
* Bumped to Apache Spark 1.6.1.
* If no Spark serializer is provided then `GryoSerializer` is the default, not `JavaSerializer`.
* Added `Operator.sumLong` as a optimized binary operator intended to be used by `Memory` reducers that know they are dealing with longs.
* Traversers from `ComputerResultStep` are no longer attached. Attaching is only used in TinkerPop's test suite via `System.getProperties()`.
* Fixed a `hashCode()`/`equals()` bug in `MessageScope`.
* Fixed a severe `Traversal` cloning issue that caused inconsistent `TraversalSideEffects`.
* `TraversalSideEffects` remain consistent and usable across multiple chained OLAP jobs.
* Added `MemoryTraversalSideEffects` which wraps `Memory` in a `TraversalSideEffects` for use in OLAP.
* `TraversalSideEffects` are now fully functional in OLAP save that an accurate global view is possible at the start of an iteration (not during).
* Updated the `TraversalSideEffects` API to support registered reducers and updated `get()`-semantics. *(breaking)*
* Split existing `profile()` into `ProfileStep` and `ProfileSideEffectStep`.
* The `profile()`-step acts like a reducing barrier and emits `TraversalMetrics` without the need for `cap()`. *(breaking)*
* Added `LocalBarrier` interface to allow traversers to remain distributed during an iteration so as to reduce cluster traffic.
* Added `NoOpBarrierStep` as a `LocalBarrier` implementation of `LambdaCollectingBarrierStep(noOp)`.
* `AggregateStep` implements `LocalBarrier` and thus, doesn't needlessly communicate its barrier traversers.
* Fixed an OLAP-based `Barrier` synchronization bug.
* Fixed a semantic bug in `BranchStep` (and inheriting steps) where barriers reacted locally. *(breaking)*
* Added `MemoryComputeKey` for specification of `Memory` keys in `VertexProgram`. *(breaking)*
* Added `VertexComputeKey` for specification of vertex compute properties in `VertexProgram`. *(breaking)*
* Added `and`, `or`, and `addAll` to `Operator`.
* `Memory` API changed to support setting and adding values for reduction. *(breaking)*
* `Memory` keys can be marked as broadcast and only those values are sent to workers on each iterator.
* `Memory` keys can be marked transient and thus deleted at the end of the OLAP job.
* Vertex compute keys can be marked transient and thus deleted at the end of the OLAP job.
* `VertexProgram` API changed to support `MemoryComputeKey` and `VertexComputeKey`. *(breaking)*
* `TraversalVertexProgram` able to execute OLAP and OLTP traversal sections dynamically within the same job.
* Removed `FinalGet` interface as all post processing of reductions should be handled by the reducing step explicitly. *(breaking)*
* Simplified all `SupplyingBarrierStep` implementations as they no longer require `MapReduce` in OLAP.
* Simplified all `CollectingBarrierStep` implementations as they no longer require `MapReduce` in OLAP.
* Simplified all `ReducingBarrierStep` implementations as they no longer require `MapReduce` in OLAP.
* All steps in OLAP that used `MapReduce` now use `Memory` to do their reductions which expands the list of legal traversals.
* `GroupStep` simplified with `GroupHelper.GroupMap` no longer being needed. Related to the removal of `FinalGet`.
* OLAP side-effects that are no longer generated by `MapReduce` are simply stored in `ComputerResult.Memory` w/ no disk persistence needed. *(breaking)*
* Added `Generate` step interface which states that there could be a final generating phase to a side-effect or reduction (e.g. `GroupStep`).
* `Barrier` step interface is now the means by which non-parallel steps communicate with their counterparts in OLAP.
* Added `MemoryComputing` step interface which states that the step uses `MemoryComputeKeys` for its computation in OLAP.
* Added `PeerPressureVertexProgramStep` and `GraphTraversal.peerPressure()`.
* Added `PureTraversal` for handling pure and compiled versions of a `Traversal`. Useful in OLAP.
* Added `ScriptTraversal` which allows for delayed compilation of script-based `Traversals`.
* Simplified `VertexProgram` implementations with a `PureTraversal`-model and deprecated `ConfigurationTraversal`.
* Simplified script-based `Traversals` via `ScriptTraversal` and deprecated `TraversalScriptFunction` and `TraversalScriptHelper`.
* Added `TimesModulating` interface which allows the `Step` to decide how a `times()`-modulation should be handled.
* Added `ByModulating` interface which allows the `Step` to decide how a `by()`-modulation should be handled. *(breaking)*
* Simplified the `by()`-modulation patterns of `OrderGlobalStep` and `OrderLocalStep`.
* Added `GraphComputerTest.shouldSupportPreExistingComputeKeys()` to ensure existing compute keys are "revived." *(breaking)*
* Added `GraphComputerTest.shouldSupportJobChaining()` to ensure OLAP jobs can be linearly chained. *(breaking)*
* Fixed a bug in both `SparkGraphComputer` and `GiraphGraphComputer` regarding source data access in job chains.
* Expanded job chaining test coverage for `GraphComputer` providers.
* Added `TraversalHelper.onGraphComputer(traversal)`.
* `MapReduce.map()` no longer has a default implementation. This method must be implemented. *(breaking)*
* `TraversalVertexProgram` can work without a `GraphStep` start.
* Added `PageRankVertexProgramStep` and `GraphTraversal.pageRank()`.
* Added `TraversalVertexProgramStep` to support OLAP traversal job chaining.
* Added `VertexProgramStrategy` which compiles multiple OLAP jobs into a single traversal.
* Simplified the comparator model in `OrderGlobalStep` and `OrderLocalStep`.
* Refactored `TraversalSource` model to allow fluent-method construction of `TraversalSources`.
* Deprecated the concept of a `TraversalSource.Builder`.
* Removed the concept of a `TraversalEngine`. All `Traversal` modulations are now mediated by `TraversalStrategies`. *(breaking)*
* Added `SideEffectStrategy` for registering sideEffects in a spawned `Traversal`.
* Added `SackStrategy` for registering a sack for a spawned `Traversal`.
* Added `RequirementsStrategy` and `RequirementsStep` for adding dynamic `TraverserRequirements` to a `Traversal`.
* Removed `EngineDependentStrategy`.
* Renamed step interface `EngineDependent` to `GraphComputing` with method `onGraphComputer()`. *(breaking)*
* Cleaned up various `TraversalStrategy` tests now that `TraversalEngine` no longer exists.
* Added `GraphFilter` to support filtering out vertices and edges that won't be touched by an OLAP job.
* Added `GraphComputer.vertices()` and `GraphComputer.edges()` for `GraphFilter` construction. *(breaking)*
* `SparkGraphComputer`, `GiraphGraphComputer`, and `TinkerGraphComputer` all support `GraphFilter`.
* Added `GraphComputerTest.shouldSupportGraphFilter()` which verifies all filtered graphs have the same topology.
* Added `GraphFilterAware` interface to `hadoop-gremlin/` which tells the OLAP engine that the `InputFormat` handles filtering.
* `GryoInputFormat` and `ScriptInputFormat` implement `GraphFilterAware`.
* Added `GraphFilterInputFormat` which handles graph filtering for `InputFormats` that are not `GraphFilterAware`.
* Fixed a bug in `TraversalHelper.isLocalStarGraph()` which allowed certain illegal traversals to pass.
* Added `TraversalHelper.isLocalProperties()` to verify that the traversal does not touch incident edges.
* `GraphReader` I/O interface now has `Optional<Vertex> readGraph(InputStream, GraphFilter)`. Default `UnsupportedOperationException`.
* `GryoReader` does not materialize edges that will be filtered out and this greatly reduces GC and load times.
* Created custom `Serializers` for `SparkGraphComputer` message-passing classes which reduce graph sizes significantly.

==== Bugs

* TINKERPOP-951 Barrier steps provide unexpected results in Gremlin OLAP
* TINKERPOP-1057 GroupSideEffectStep doesn't use provided maps
* TINKERPOP-1103 Two objects fighting for local variable name in Gremlin Console *(breaking)*
* TINKERPOP-1149 TraversalXXXSteps Aren't Providing SideEffects
* TINKERPOP-1181 select(Column) should not use a LambdaMapStep
* TINKERPOP-1188 Semantics of BarrierSteps in TraversalParent global traversals is wrong. *(breaking)*
* TINKERPOP-1194 explain() seems broken
* TINKERPOP-1217 Repeated Logging of "The HadoopPools has not been initialized, using the default pool"

==== Improvements

* TINKERPOP-570 [Proposal] Provide support for OLAP to OLTP to OLAP to OLTP
* TINKERPOP-575 Implement RemoteGraph
* TINKERPOP-813 [Proposal] Make the Gremlin Graph Traversal Machine and Instruction Set Explicit
* TINKERPOP-872 Remove GroupCountStep in favor of new Reduce-based GroupStep
* TINKERPOP-890 Remove the concept of branch/ package. *(breaking)*
* TINKERPOP-958 Improve usability of .profile() step.
* TINKERPOP-962 Provide "vertex query" selectivity when importing data in OLAP. *(breaking)*
* TINKERPOP-968 Add first class support for an optional traversal
* TINKERPOP-971 TraversalSource should be fluent like GraphComputer *(breaking)*
* TINKERPOP-1016 Replace junit-benchmarks with JMH
* TINKERPOP-1021 Deprecate Order.valueIncr, Order.valueDecr, Order.keyIncr, and Order.keyDecr *(breaking)*
* TINKERPOP-1032 Clean up the conf/hadoop configurations
* TINKERPOP-1034 Bump to support Spark 1.5.2
* TINKERPOP-1069 Support Spark 1.6.0
* TINKERPOP-1082 INPUT_RDD and INPUT_FORMAT are bad, we should just have one key.
* TINKERPOP-1112 Create GryoSerializers for the Spark Payload classes.
* TINKERPOP-1121 FileSystemStorage needs to be smart about /.
* TINKERPOP-1132 Messenger.receiveMessages() Iterator should .remove().
* TINKERPOP-1140 TraversalVertexProgramStep in support of OLAP/OLTP conversions.
* TINKERPOP-1153 Add ByModulating and TimesModulating interfaces.
* TINKERPOP-1154 Create a ScriptTraversal which is Serializable and auto-compiles.
* TINKERPOP-1162 Add VertexProgram.getTransientComputeKeys() for removing scratch-data. *(breaking)*
* TINKERPOP-1163 GraphComputer's can have TraversalStrategies.
* TINKERPOP-1164 ReducingBarriersSteps should use ComputerMemory, not MapReduce.
* TINKERPOP-1166 Add Memory.reduce() as option to Memory implementations. *(breaking)*
* TINKERPOP-1173 If no Serializer is provided in Configuration, use GryoSerializer by default (Spark)
* TINKERPOP-1180 Add more optimized binary operators to Operator.
* TINKERPOP-1192 TraversalSideEffects should support registered reducers (binary operators).
* TINKERPOP-1193 Add a LocalBarrier interface.
* TINKERPOP-1199 Use "MicroMetrics" as the mutator of the TraversalMetrics.
* TINKERPOP-1206 ExpandableIterator can take a full TraverserSet at once -- Barriers.
* TINKERPOP-1209 ComparatorHolder should returns a Pair<Traversal,Comparator>. *(breaking)*
* TINKERPOP-1210 Provide an OrderLimitStep as an optimization.
* TINKERPOP-1219 Create a test case that ensures the provider's compilation of g.V(x) and g.V().hasId(x) is identical *(breaking)*
* TINKERPOP-1222 Allow default GraphComputer configuration
* TINKERPOP-1223 Allow jars in gremlin.distributedJars to be read from HDFS
* TINKERPOP-1225 Do a "rolling reduce" for GroupXXXStep in OLAP.
* TINKERPOP-1227 Add Metrics for the TraversalOpProcessor
* TINKERPOP-1234 program() step that takes arbitrary vertex programs
* TINKERPOP-1236 SelectDenormalizationStrategy for select().by(starGraph) in OLAP.
* TINKERPOP-1237 ProjectMap: For the Love of Die Faterland
* TINKERPOP-1238 Re-use Client instances in RemoteGraph tests

== TinkerPop 3.1.0 (A 187 On The Undercover Gremlinz)

image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/gremlin-gangster.png[width=185]

[[release-3-1-8]]
=== TinkerPop 3.1.8 (Release Date: August 21, 2017)

* Fixed a `MessageScope` bug in `TinkerGraphComputer`.
* Fixed a bug in `BigDecimal` divisions in `NumberHelper` that potentially threw an `ArithmeticException`.
* Non-deserializable exceptions no longer added to ScriptRecordReader IOExceptions.

==== Bugs

* TINKERPOP-1519 TinkerGraphComputer doesn't handle multiple MessageScopes in single iteration
* TINKERPOP-1736 Sack step evaluated by Groovy interprets numbers in an unexpected way
* TINKERPOP-1754 Spark can not deserialise some ScriptRecordReader parse exceptions

[[release-3-1-7]]
=== TinkerPop 3.1.7 (Release Date: June 12, 2017)

* Configured Modern and The Crew graphs to work with a integer `IdManager` when `TinkerFactory.createXXX()` is called.
* Added XSLT transform option to convert TinkerPop 2.x GraphML to 3.x GraphML.
* Added validation to `StarVertexProperty`.
* Bumped to Jackson 2.8.7.
* Fixed `EventStrategy` so that newly added properties trigger events with the name of the key that was added.
* Drop use of jitpack for the jbcrypt artifact - using the official one in Maven Central.
* Bumped to Groovy 2.4.11.

==== Improvements

* TINKERPOP-1504 MutationListener doesn't provide property key on property additions
* TINKERPOP-1608 TP2-to-TP3 GraphML XSLT
* TINKERPOP-1633 Use org.mindrot:jbcrypt v0.4
* TINKERPOP-1645 Bump to Groovy 2.4.9
* TINKERPOP-1654 Upgrade to jackson-databind 2.8.6+ in gremlin-shaded
* TINKERPOP-1659 Docker build should use maven settings.xml
* TINKERPOP-1664 StarVertexProperty#property should throw an NPE if the value is null

[[release-3-1-6]]
=== TinkerPop 3.1.6 (Release Date: February 3, 2017)

* Fixed bug in `IncidentToAdjacentStrategy`, it was missing some invalidating steps.
* Returned a confirmation on session close from Gremlin Server.
* Use non-default port for running tests on Gremlin Server.
* Fully shutdown metrics services in Gremlin Server on shutdown.
* Deprecated `tryRandomCommit()` in `AbstractGremlinTest` - the annotation was never added in 3.1.1, and was only deprecated via javadoc.
* Minor fixes to various test feature requirements in `gremlin-test`.
* Allow developers to pass options to `docker run` with TINKERPOP_DOCKER_OPTS environment variable

==== Bugs

* TINKERPOP-1493 Groovy project doesn't build on Windows
* TINKERPOP-1545 IncidentToAdjacentStrategy is buggy

==== Improvements

* TINKERPOP-1538 Gremlin Server spawned by test suites should use a different port
* TINKERPOP-1544 Return a confirmation of session close
* TINKERPOP-1556 Allow Hadoop to run on IPv6 systems
* TINKERPOP-1557 Improve docker build time with this one weird trick!
* TINKERPOP-1598 Bump to Grovy 2.4.8

[[release-3-1-5]]
=== TinkerPop 3.1.5 (Release Date: October 17, 2016)

* Improved handling of `Cluster.close()` and `Client.close()` to prevent the methods from hanging.
* Fixed a bug in `NotStep` where child requirements were not being analyzed.
* Fixed output redirection and potential memory leak in `GremlinGroovyScriptEngine`.
* Corrected naming of `g_withPath_V_asXaX_out_out_mapXa_name_it_nameX` and `g_withPath_V_asXaX_out_mapXa_nameX` in `MapTest`.
* Improved session cleanup when a close is triggered by the client.
* Removed the `appveyor.yml` file as the AppVeyor build is no longer enabled by Apache Infrastructure.
* Fixed TinkerGraph which was not saving on `close()` if the path only consisted of the file name.
* Fixed a bug in `RangeByIsCountStrategy` which didn't use the `NotStep` properly.

==== Bugs

* TINKERPOP-1158 gremlin.sh -v emits log4j initialization errors
* TINKERPOP-1391 issue with where filter
* TINKERPOP-1442 Killing session should make better attempt to cleanup
* TINKERPOP-1451 TinkerGraph persistence cannot handle a single file name as the graph location
* TINKERPOP-1467 Improve close() operations on the Java driver
* TINKERPOP-1478 Propogate ScriptEngine fixes from groovy to GremlinGroovyScriptEngine
* TINKERPOP-1512 gremlin-server-classic.yaml is broken

==== Improvements

* TINKERPOP-927 bin/publish-docs.sh should only upload diffs.
* TINKERPOP-1264 Improve BLVP docs
* TINKERPOP-1477 Make DependencyGrabberTest an integration test

[[release-3-1-4]]
=== TinkerPop 3.1.4 (Release Date: September 6, 2016)

* Improved the error provided by a client-side session if no hosts were available.
* Fixed a bug in `PropertiesTest` which assumed long id values.
* Fixed a bug in `StarGraph` around self-edges.
* Fixed a potential leak of a `ReferenceCounted` resource in Gremlin Server.
* Renamed distributions to make the prefix "apache-tinkerpop-" as opposed to just "apache-".
* Fixed a problem (previously thought resolved on 3.1.3) causing Gremlin Server to lock up when parallel requests were submitted on the same session if those parallel requests included a script that blocked indefinitely.
* Fixed bug in `TailGlobalStep` where excess bulk was not accounted for correctly.

==== Bugs

* TINKERPOP-1350 Server locks when submitting parallel requests on session
* TINKERPOP-1375 Possible ByteBuf leak for certain transactional scenarios
* TINKERPOP-1377 Closing a remote in "console mode" has bad message
* TINKERPOP-1379 unaccounted excess in TailGlobalStep
* TINKERPOP-1397 StarVertex self edge has buggy interaction with graph filters
* TINKERPOP-1419 Wrong exception when a SessionedClient is initialized with no available host

==== Improvements

* TINKERPOP-989 Default documentation should be reference/index.html
* TINKERPOP-1376 Rename TinkerPop artifacts
* TINKERPOP-1413 PropertiesTest#g_V_hasXageX_propertiesXnameX assumes that ids are longs
* TINKERPOP-1416 Write Gremlin Server log files somewhere during doc generation
* TINKERPOP-1418 CoreTraversalTests depend on missing functionality

[[release-3-1-3]]
=== TinkerPop 3.1.3 (Release Date: July 18, 2016)

* Fixed bug in `SubgraphStep` where features were not being checked properly prior to reading meta-properties.
* Ensured calls to `Result.hasNext()` were idempotent.
* Avoid hamcrest conflict by using mockito-core instead of mockito-all dependency in `gremlin-test`.
* Fixed bug in `GremlinExecutor` causing Gremlin Server to lock up when parallel requests were submitted on the same session if those parallel requests included a script that blocked indefinitely.
* Changed `GremlinExecutor` timeout scheduling so that the timer would not start until a time closer to the actual start of script evaluation.
* Fixed bug in `SubgraphStrategy` where step labels were not being propogated properly to new steps injected by the strategy.
* Fix incorrect test `FeatureRequirement` annotations.
* Defaulted to `Edge.DEFAULT` if no edge label was supplied in GraphML.
* Fixed bug in `IoGraphTest` causing IllegalArgumentException: URI is not hierarchical error for external graph implementations.
* Fixed bug in `GremlinGroovyScriptEngineFileSandboxTest` resource loading
* Improved `TinkerGraph` performance when iterating vertices and edges.
* Fixed a bug where timeout functions provided to the `GremlinExecutor` were not executing in the same thread as the script evaluation.
* Fixed a bug in the driver where many parallel requests over a session would sometimes force a connection to close and replace itself.
* Graph providers should no longer rely on the test suite to validate that hyphens work for property keys.
* Optimized a few special cases in `RangeByIsCountStrategy`.
* Added more "invalid" variable bindings to the list used by Gremlin Server to validate incoming bindings on requests.
* Fixed a bug where the `ConnectionPool` in the driver would not grow with certain configuration options.
* Fixed a bug where pauses in Gremlin Server writing to an overtaxed client would generate unexpected `FastNoSuchElementException` errors.
* Named the thread pool used by Gremlin Server sessions: "gremlin-server-session-$n".
* Fixed a bug in `BulkSet.equals()` which made itself apparent when using `store()` and `aggregate()` with labeled `cap()`.
* Fixed a bug where `Result.one()` could potentially block indefinitely under certain circumstances.
* Ensured that all asserts of vertex and edge counts were being applied properly in the test suite.
* Fixed bug in `gremlin-driver` where certain channel-level errors would not allow the driver to reconnect.
* `SubgraphStep` now consults the parent graph features to determine cardinality of a property.
* Use of `Ctrl-C` in Gremlin Console now triggers closing of open remotes.
* Bumped SLF4J to 1.7.21 as previous versions suffered from a memory leak.
* Fixed a bug in `Neo4jGraphStepStrategy` where it wasn't defined properly as a `ProviderOptimizationStrategy`.
* Renamed `AndTest.get_g_V_andXhasXage_gt_27X__outE_count_gt_2X_name` to `get_g_V_andXhasXage_gt_27X__outE_count_gte_2X_name` to match the traversal being tested.
* Fixed a self-loop bug in `StarGraph`.
* Added configuration option for disabling `:remote` timeout with `:remote config timeout none`.
* Added `init-tp-spark.sh` to Gremlin Console binary distribution.
* Fixed bug where use of `:x` in a Gremlin Console initialization script would generate a stack trace.
* Added configuration options to Gremlin Driver and Server to override the SSL configuration with an `SslContext`.
* Added driver configuration settings for SSL: `keyCertChainFile`, `keyFile` and `keyPassword`.
* Fixed bug where transaction managed sessions were not properly rolling back transactions for exceptions encountered during script evaluation.
* Fixed bug in `:uninstall` command if the default `/ext` directory was not used.
* Added support to Gremlin Driver to allow either plain text or GSSAPI SASL authentication allowing the client to pass the SASL mechanism in the request.
* Improved dryRun functionality for the docs processor. It's now possible to dry run (or full run) only specific files.
* Added precompile of `ScriptInputFormat` scripts to `ScriptRecordReader` to improve performance.

==== Bugs

* TINKERPOP-906 Install plugin always fails after first unresolved dependency
* TINKERPOP-1088 Preserve Cardinality in Subgraph
* TINKERPOP-1092 Gremlin Console init script with :x throws exception
* TINKERPOP-1139 [Neo4JGraph] GraphTraversal with SubgraphStrategy removes addLabelStep (as("b"))
* TINKERPOP-1196 Calls to Result.one() might block indefinitely
* TINKERPOP-1215 Labeled a SideEffectCapStep cause problems.
* TINKERPOP-1242 ScriptEngineTest randomly hangs indefinately.
* TINKERPOP-1257 Bad SackTest variable use.
* TINKERPOP-1265 Managed Session Eval Exceptions Rollback
* TINKERPOP-1272 Gremlin Console distribution needs bin/init-tp-spark.sh
* TINKERPOP-1284 StarGraph does not handle self-loops correctly.
* TINKERPOP-1300 Many asserts around vertex/edge counts on graphs not applied
* TINKERPOP-1317 IoGraphTest throws error: URI is not hierarchical
* TINKERPOP-1318 java.lang.NoSuchMethodError: org/hamcrest/Matcher.describeMismatch
* TINKERPOP-1319 several FeatureRequirement annotations are incorrect in gremlin-test
* TINKERPOP-1320 GremlinGroovyScriptEngineFileSandboxTest throws error: URI is not hierarchical
* TINKERPOP-1324 Better error for invalid args to addV()
* TINKERPOP-1350 Server locks when submitting parallel requests on session
* TINKERPOP-1351 Number of connections going beyond the pool max size
* TINKERPOP-1352 Connection Pool doesn't always grow
* TINKERPOP-1359 Exception thrown when calling subgraph() on Neo4jGraph
* TINKERPOP-1360 intermittent error in spark-gremlin integration test

==== Improvements

* TINKERPOP-939 Neo4jGraph should support HighAvailability (Neo4jHA).
* TINKERPOP-1003 Setting up latest/current links for bins and docs.
* TINKERPOP-1020 Provide --dryRun selectivity for "half publishing" docs.
* TINKERPOP-1063 TinkerGraph performance enhancements
* TINKERPOP-1229 More Descriptive Messaging for :remote console
* TINKERPOP-1260 Log for validate-distribution.sh
* TINKERPOP-1263 Pass SASL mechanism name through with initial SASL response
* TINKERPOP-1267 Configure Console for no timeout on remote requests
* TINKERPOP-1269 More SSL settings for driver
* TINKERPOP-1295 Precompile ScriptInputFormat scripts once during initialization of ScriptRecordReader
* TINKERPOP-1301 Provide Javadoc for ScriptInput/OutputFormat's
* TINKERPOP-1302 Ctrl-C should kill open remotes in Console
* TINKERPOP-1312 .count().is(0) is not properly optimized
* TINKERPOP-1314 Improve error detection in docs preprocessor
* TINKERPOP-1354 Include all static enum imports in request validation for bindings *(breaking)*

[[release-3-1-2-incubating]]
=== TinkerPop 3.1.2 (Release Date: April 8, 2016)

* Fixed two `NullPointerException`-potential situations in `ObjectWritable`.
* Provided Docker script that allows the execution of several build tasks within a Docker container.
* Added a per-request `scriptEvaluationTimeout` option to the Gremlin Server protocol.
* Changed `DriverRemoteAcceptor` to send scripts as multi-line.
* Fixed a bug in `gremlin-driver` where connections were not returning to the pool after many consecutive errors.
* Fixed a bug where `tree()` did not serialize into GraphSON.
* Bumped to SLF4j 1.7.19.
* Bumped to Apache Hadoop 2.7.2.
* Fixed a bug in `gremlin-driver` where a really fast call to get a `Future` to wait for a result might not register an error raised from the server.
* Fixed a severe bug where `LP_O_OB_P_S_SE_SL_Traverser` was not registered with `GryoMapper`.
* The future from `GremlinExecutor.eval()` is completed after the entire evaluation lifecyle is completed.
* Spark `Memory` uses `collect().iterator()` instead of `toLocalIterator()` to reduce noise in Spark UI.
* Added the `:remote console` option which flips the Gremlin Console into a remote-only mode where all script evaluation is routed to the currently configured remote, which removes the need to use the `:>` command.
* Added `allowRemoteConsole()` to the `RemoteAcceptor` interface.
* The `:remote` for `tinkerpop.server` now includes an option to establish the connection as a "session".
* Provided an implementation for calls to `SessionedClient.alias()`, which formerly threw an `UnsupportedOperationException`.
* Bumped to commons-collections 3.2.2.
* Fixed a bug where `OrderGlobalStep` and `OrderLocalStep` were not incorporating their children's traverser requirements.
* Fixed a compilation bug in `TraversalExplanation`.
* Fixed bug where a session explicitly closed was being closed again by session expiration.
* Improved the recovery options for `gremlin-driver` after failed requests to Gremlin Server.
* Added `maxWaitForSessionClose` to the settings for `gremlin-driver`.
* Bumped to Netty 4.0.34.Final.
* Added "interpreter mode" for the `ScriptEngine` and Gremlin Server which allows variables defined with `def` or a type to be recognized as "global".
* Bumped to Apache Groovy 2.4.6.
* Added the `gremlin-archetype-server` archetype that demonstrates
* Added the `gremlin-archetype-tinkergraph` archetype that demonstrates a basic project that uses TinkerGraph.
* Added `gremlin-archetype` module to house TinkerPop "examples".
* Fixed a condition where `ConnectionPool` initialization in the driver would present a `NullPointerException` on initialization if there were errors constructing the pool in full.
* Fixed a bug in the round-robin load balancing strategy in the driver would waste requests potentially sending messages to dead hosts.
* Added new Provider Documentation book - content for this book was extracted from the reference documentation.
* Fixed a bug where multiple "close" requests were being sent by the driver on `Client.close()`.
* Fixed an `Property` attach bug that shows up in serialization-based `GraphComputer` implementations.
* Fixed a pom.xml bug where Gremlin Console/Server were not pulling the latest Neo4j 2.3.2.
* Fixed bug in "round robin" load balancing in `gremlin-driver` where requests were wrongly being sent to the same host.
* Prevented the spawning of unneeded reconnect tasks in `gremlin-driver` when a host goes offline.
* Fixed bug preventing `gremlin-driver` from reconnecting to Gremlin Server when it was restarted.
* Better handled errors that occurred on commits and serialization in Gremlin Server to first break the result iteration loop and to ensure commit errors were reported to the client.
* Added GraphSON serializers for the `java.time.*` classes.
* Improved the logging of the Gremlin Server REST endpoint as it pertained to script execution failures.
* `TraversalExplanation` is now `Serializable` and compatible with GraphSON and Gryo serialization.
* Fixed a problem with global bindings in Gremlin Server which weren't properly designed to handle concurrent modification.
* Deprecated `ScriptElementFactory` and made the local `StarGraph` globally available for ``ScriptInputFormat``'s `parse()` method.
* Improved reusability of unique test directory creation in `/target` for `AbstractGraphProvider`, which was formerly only available to Neo4j, by adding `makeTestDirectory()`.
* Optimized memory-usage in `TraversalVertexProgram`.
* `Graph` instances are not merely "closed" at the end of tests, they are "cleared" via `GraphProvider.clear()`, which should in turn cleans up old data for an implementation.
* Expanded the Gremlin Server protocol to allow for transaction management on in-session requests and updated the `gremlin-driver` to take advantage of that.
* Greatly reduced the amount of objects required in OLAP for the `ReducingBarrierStep` steps.
* Improved messages for the different distinct "timeouts" that a user can encounter with Gremlin Server.

==== Bugs

* TINKERPOP-1041 StructureStandardTestSuite has file I/O issues on Windows
* TINKERPOP-1105 SparkGraphComputer / Null Pointer Exceptions for properties traversals
* TINKERPOP-1106 Errors on commit in Gremlin Server don't register as exception on driver
* TINKERPOP-1125 RoundRobin load balancing always uses the second Host when size = 2
* TINKERPOP-1126 A single Host spawns many reconnect tasks
* TINKERPOP-1127 client fails to reconnect to restarted server
* TINKERPOP-1146 IoTest are not clearing the db after the test run
* TINKERPOP-1148 ConcurrentModificationException with bindings in Gremlin Server
* TINKERPOP-1150 Update pom file dependencies to work with Neo4j 2.3.2
* TINKERPOP-1159 Client sends multiple session close messages per host
* TINKERPOP-1168 Switch plugins in docs preprocessor
* TINKERPOP-1172 Reconnect to Gremlin Server previously marked as dead
* TINKERPOP-1175 Anonymous traversals can't be explained
* TINKERPOP-1184 Sessions not being closed properly
* TINKERPOP-1216 OrderStep or O_Traverser is broken
* TINKERPOP-1239 Excessive continual failure for requests can cause TimeoutException in driver
* TINKERPOP-1245 Gremlin shell starts incorrectly on OS X due to awk difference
* TINKERPOP-1251 NPE in ObjectWritable.toString
* TINKERPOP-1252 Failed Neo4j transaction can leave Neo4jTransaction in inconsistent state

==== Improvements

* TINKERPOP-732 gremlin-server GraphSON serializer issue with tree()
* TINKERPOP-916 Develop a better "simple" driver for testing and example purposes
* TINKERPOP-937 Extract the implementations sections of the primary documentation to its own book
* TINKERPOP-956 Connection errors tend to force a complete close of the channel
* TINKERPOP-1039 Enable auto-commit for session'd requests.
* TINKERPOP-1068 Bump to support jbcrypt-0.4m.jar
* TINKERPOP-1080 Bump Netty version - 4.0.34.Final
* TINKERPOP-1085 Establish TinkerPop "example" projects
* TINKERPOP-1096 Support aliasing for sessions in Gremlin Server
* TINKERPOP-1097 Gremlin Console supporting sessions
* TINKERPOP-1107 Provide a way to support global variables with sandboxing enabled
* TINKERPOP-1109 Make Gremlin Console better suited for system level installs
* TINKERPOP-1131 TraversalVertexProgram traverser management is inefficient memory-wise.
* TINKERPOP-1135 Improve GraphSON representation of java.time.* classes
* TINKERPOP-1137 Deprecate ScriptElementFactory and make star graph globally available
* TINKERPOP-1138 Improve messaging on server timeouts
* TINKERPOP-1147 Add serialization for TraversalExplanation
* TINKERPOP-1160 Add timeout configuration for time to wait for connection close
* TINKERPOP-1165 Tooling Support: Compile with -parameters
* TINKERPOP-1176 Bump Groovy version - 2.4.6
* TINKERPOP-1177 Improve documentation around Spark's storage levels
* TINKERPOP-1197 Document Gremlin Server available metrics
* TINKERPOP-1198 Bump commons-collections to 3.2.2
* TINKERPOP-1213 missing docs for has(label, key, value)
* TINKERPOP-1218 Usage of toLocalIterator Produces large amount of Spark Jobs

[[release-3-1-1-incubating]]
=== TinkerPop 3.1.1 (Release Date: February 8, 2016)

* Made `GryoRecordReader` more robust to 0 byte record splits.
* Fixed a constructor/serialization bug in `LP_O_OB_S_SE_SL_Traverser`.
* Added a lazy iterator, memory safe implementation of MapReduce to `SparkGraphComputer`.
* Added `MapReduce.combine()` support to `SparkGraphComputer`.
* Bumped to Neo4j 2.3.2.
* Fixed Java comparator contract issue around `Order.shuffle`.
* Optimized a very inefficient implementation of `SampleLocalStep`.
* Reduced the complexity and execution time of all `AbstractLambdaTraversal` instances.
* `DefaultTraversal` has a well defined `hashCode()` and `equals()`.
* Added serializers to Gryo for `java.time` related classes.
* Integrated `NumberHelper` in `SackFunctions`.
* Deprecated `VertexPropertyFeatures.supportsAddProperty()` which effectively was a duplicate of `VertexFeatures.supportsMetaProperties`.
* The Spark persistence `StorageLevel` can now be set for both job graphs and `PersistedOutputRDD` data.
* Added to the list of "invalid binding keys" allowed by Gremlin Server to cover the private fields of `T` which get exposed in the `ScriptEngine` on static imports.
* Added `BulkDumperVertexProgram` that allows to dump a whole graph in any of the supported IO formats (GraphSON, Gryo, Script).
* Fixed a bug around duration calculations of `cap()`-step during profiling.
* It is possible to completely avoid using HDFS with Spark if `PersistedInputRDD` and `PersistedOutpuRDD` are leveraged.
* `InputRDD` and `OutputRDD` can now process both graphs and memory (i.e. sideEffects).
* Removed Groovy specific meta-programming overloads for handling Hadoop `FileSystem` (instead, its all accessible via `FileSystemStorage`).
* Added `FileSystemStorage` and `SparkContextStorage` which both implement the new `Storage` API.
* Added `Storage` to the gremlin-core io-package which providers can implement to allow conventional access to data sources (e.g. `ls()`, `rm()`, `cp()`, etc.).
* Bumped to Spark 1.5.2.
* Bumped to Groovy 2.4.5.
* Added `--noClean` option in `bin/process-docs.sh` to prevent the script from cleaning Grapes and HDFS.
* Execute the `LifeCycle.beforeEval()` in the same thread that `eval()` is executed in for `GremlinExecutor`.
* Improved error handling of Gremlin Console initialization scripts to better separate errors in initialization script I/O versus execution of the script itself.
* Fixed a bug in `Graph.OptOut` when trying to opt-out of certain test cases with the `method` property set to "*".
* Added another `BulkLoader` implementation (`OneTimeBulkLoader`) that doesn't store temporary properties in the target graph.
* Added option to allow for a custom `ClassResolver` to be assigned to a `GryoMapper` instance.
* Fixed a `SparkGraphComputer` sorting bug in MapReduce that occurred when there was more than one partition.
* Added `strictTransactionManagement` to the Gremlin Server settings to indicate that the `aliases` parameter must be passed on requests and that transaction management will be scoped to the graphs provided in that argument.
* Fixed a `NullPointerException` bug in `PeerPressureVertexProgram` that occurred when an adjacency traversal was not provided.
* Standardized "test data directories" across all tests as generated by `TestHelper`.
* Fixed a bug in Gremlin Server where error messages were not always being passed back in the `statusMessage` field of the `ResponseMessage`.
* Added validation for parameter `bindings` to ensure that keys were `String` values.
* Improved Transaction Management consistency in Gremlin Server.
* Added `FileSandboxExtension` which takes a configuration file to white list methods and classes that can be used in `ScriptEngine` execution.
* Deprecated `SandboxExtension` and `SimpleSandboxExtension` in favor of `AbstractSandboxExtension` which provides better abstractions for those writing sandboxes.
* Fixed a long standing "view merge" issue requiring `reduceByKey()` on input data to Spark. It is no longer required.
* Added `Spark` static object to allow "file system" control of persisted RDDs in Spark.
* Added a Spark "job server" to ensure that persisted RDDs are not garbage collected by Spark.
* Improved logging control during builds with Maven.
* Fixed settings that weren't being passed to the Gremlin Driver `Cluster` through configuration file.
* `Column` now implements `Function`. The modulator `by(valueDecr)` can be replaced by `by(values,decr)` and thus, projection and order are separated.
* Added `InputRDDFormat` which wraps an `InputRDD` to make it accessible to Hadoop and not just Spark.
* Added `AbstractSparkTest` which handles closing `SparkContext` instances between tests now that we support persisted contexts.
* Fixed a serialization bug in `GryoSerializer` that made it difficult for graph providers to yield `InputRDDs` for `SparkGraphComputer`.
* `SparkGraphComputer` is now tested against Gryo, GraphSON, and `InputRDD` data sources.
* `HadoopElementIterator` (for Hadoop-Gremlin OLTP) now works for any `InputFormat`, not just `FileInputFormats`.
* Added `Traverser.Admin.getTags()` which are used to mark branches in a traversal (useful in `match()` and related future steps).
* Fixed the `Future` model for `GiraphGraphComputer` and `SparkGraphComputer` so that class loaders are preserved.
* Added support for arbitrary vertex ID types in `BulkLoaderVertexProgram`.
* Deprecated `credentialsDbLocation` from `SimpleAuthenticator` in Gremlin Server.
* `TinkerGraph` has "native" serialization in GraphSON, which enables it to be a return value from Gremlin Server.
* Improved the ability to embed Gremlin Server by providing a way to get the `ServerGremlinExecutor` and improve reusability of `AbstractEvalOpProcessor` and related classes.
* Added `Authenticator.newSaslNegotiator(InetAddress)` and deprecated the zero-arg version of that method.
* `ProfileStep` is now available off of `Traversal` via `profile()`. To be consistent with `Traversal.explain()`.
* If no comparator is provided to `order()`, `Order.incr` is assumed (previously, an exception occurred).
* Fixed various Gremlin-Groovy tests that assumed `toString()`-able ids.
* Split TinkerPop documentation into different directories.
* Added `explain()`-step which yields a `TraversalExplanation` with a pretty `toString()` detailing the compilation process.
* Fixed a traversal strategy ordering bug in `AdjacentToIncidentStrategy` and `IncidentToAdjacentStrategy`.
* Made a number of changes to improve traversal startup and execution performance.
* Added support for 'gremlin.tinkergraph.graphLocation' to accept a fully qualified class name that implements `Io.Builder` interface.

==== Bugs

* TINKERPOP-763 IsStep broken when profiling is enabled.
* TINKERPOP-972 Cluster::close does not shut down its executor
* TINKERPOP-973 BLVP shouldn't clear configuration properties
* TINKERPOP-976 Fail earlier if invalid version is supplied in validate-distribution.sh
* TINKERPOP-977 Dead link to traversal javadocs
* TINKERPOP-979 ComputerVerificationStrategy not picking up Order local traversal
* TINKERPOP-985 shouldPersistDataOnClose makes incorrect feature check
* TINKERPOP-990 Mixed types in VertexPropertyTest
* TINKERPOP-993 cyclicPath is not(simplePath)
* TINKERPOP-997 FeatureRequirementSet.SIMPLE should not require multi-property *(breaking)*
* TINKERPOP-1000 GremlinGroovyScriptEngineOverGraphTest failures
* TINKERPOP-1001 SugarLoaderPerformanceTest contains hardcoded vertex ids
* TINKERPOP-1002 Should rollback transaction after catching on close
* TINKERPOP-1006 Random error during builds: shouldReloadClassLoaderWhileDoingEvalInSeparateThread()
* TINKERPOP-1011 HadoopGraph can't re-attach when the InputFormat is not a FileInputFormat
* TINKERPOP-1012 BulkLoaderVertexProgram shouldn't assume vertex IDs of type Long
* TINKERPOP-1025 Solve SparkContext Persistence Issues with BulkLoaderVertexProgram
* TINKERPOP-1027 Merge view prior to writing graphRDD to output format/rdd
* TINKERPOP-1036 Support self-looping edges in IO
* TINKERPOP-1052 @Graph.OptOut causes Exception during Suite setup
* TINKERPOP-1060 LambdaRestrictionStrategy too restrictive
* TINKERPOP-1075 Profile duration of cap step seems broken.
* TINKERPOP-1083 Traversal needs a hashCode() and equals() definition.
* TINKERPOP-1089 Order.shuffle implementation is too fragile
* TINKERPOP-1119 LP_O_OB_S_SE_SL_Traverser doesn't have a protected constructor().

==== Improvements

* TINKERPOP-320 BulkDumperVertexProgram
* TINKERPOP-379 MessageScope.Local.setStaticMessage(M msg)
* TINKERPOP-824 Do we need runtime BigDecimal in more places?
* TINKERPOP-859 Provide a more general way to set log levels in plugins
* TINKERPOP-860 Bindings applied to the PluginAcceptor should appear to Gremlin Server
* TINKERPOP-886 Allow any GraphReader/Writer to be persistence engine for TinkerGraph
* TINKERPOP-891 Re-examine Sandboxing Abstractions
* TINKERPOP-912 Improve the ability to embed Gremlin Server with Channelizer injection
* TINKERPOP-928 Use directories to separate different books
* TINKERPOP-930 Tie Alias to Transaction Manager in Gremlin Server
* TINKERPOP-938 Add a "clear SNAPSHOT jars" section to the process-docs.sh.
* TINKERPOP-941 Improve error message for wrong order().by() arguments
* TINKERPOP-943 Warn if Gremlin Server is running prior to generating docs
* TINKERPOP-945 Exceptions should allow me to include root cause if/when available
* TINKERPOP-952 Include Cardinality.list example in VertexProperty section of main docs.
* TINKERPOP-954 Consistent test directory usage
* TINKERPOP-957 Improve speed of addV()
* TINKERPOP-964 Test XXXGraphComputer on a Hadoop2 cluster (non-pseudocluster).
* TINKERPOP-970 ProfileStep should be off Traversal, not GraphTraversal
* TINKERPOP-978 Native TinkerGraph Serializers for GraphSON
* TINKERPOP-981 Deprecate support for credentialsDbLocation in Gremlin Server Config
* TINKERPOP-982 valuesDecr, valuesIncr, keysDecr, and valuesDecr is lame.
* TINKERPOP-983 Provide a way to track open Graph instances in tests
* TINKERPOP-984 Use GraphProvider for id conversion in Groovy Environment test suite
* TINKERPOP-987 Use tinkerpop.apache.org URL in all documentation and homepage
* TINKERPOP-988 SparkGraphComputer.submit shouldn't use ForkJoinPool.commonPool
* TINKERPOP-992 Better support for schema driven Graphs in IO related tests
* TINKERPOP-994 Driver using deprecated Rebindings Still
* TINKERPOP-995 Add Authenticator.newSaslNegotiator(InetAddress)
* TINKERPOP-996 Please delete old releases from mirroring system
* TINKERPOP-998 Deprecate VertexPropertyFeatures.FEATURE_ADD_PROPERTY
* TINKERPOP-1009 Add a CAUTION to documentation about HadoopGraph and getting back elements
* TINKERPOP-1013 Traverser tags as a safer way of using path labels
* TINKERPOP-1018 Allow setting for maxContentLength to be set from yaml in driver
* TINKERPOP-1019 Convert println in test to SLF4j
* TINKERPOP-1022 Automatically warm up ops handlers
* TINKERPOP-1023 Add a spark variable in SparkGremlinPlugin like we do hdfs for HadoopGremlinPlugin
* TINKERPOP-1026 BVLP should store vertex IDs as String
* TINKERPOP-1033 Store sideEffects as a persisted RDD
* TINKERPOP-1035 Better Consistency in Gremlin Server Transaction Management
* TINKERPOP-1045 Client-Side Hangs when attempting to access a HashMap with Keys of type Integer
* TINKERPOP-1047 TinkerGraph GraphSON storage format broken
* TINKERPOP-1051 Add note in best practice docs about gremlin server heap setting
* TINKERPOP-1055 Gremlin Console FileNotFoundException can be misleading
* TINKERPOP-1062 Make LifeCycle beforeEval execute in same thread as eval operation
* TINKERPOP-1064 Allow a ClassResolver to be added to GryoMapper construction
* TINKERPOP-1065 Fix some typos and clarify some wording in the TinkerPop documentation
* TINKERPOP-1066 Add ioRegistries configuration to GraphSON MessageSerializer
* TINKERPOP-1067 Update Groovy to 2.4.5
* TINKERPOP-1072 Allow the user to set persistence options using StorageLevel.valueOf()
* TINKERPOP-1073 HadoopGraph toString() is weird for Spark PersitedRDD data.
* TINKERPOP-1086 Include gryo serializers for java.time related classes
* TINKERPOP-1087 Add has()/order() to FilterRankStrategy
* TINKERPOP-1093 Add Spark init.sh script and update dev documentation.
* TINKERPOP-1100 Look deeply into adding combine()-support in Spark MapReduce.
* TINKERPOP-1117 InputFormatRDD.readGraphRDD requires a valid gremlin.hadoop.inputLocation, breaking InputFormats (Cassandra, HBase) that don't need one

[[release-3-1-0-incubating]]
=== TinkerPop 3.1.0 (Release Date: November 16, 2015)

This release also includes changes from <<release-3-0-1-incubating, 3.0.1-incubating>> and <<release-3-0-2-incubating, 3.0.2-incubating>>.

* Fixed bug in Gryo and GraphSON (with embedded types) serialization for serialization of results returned from `Map.entrySet()`.
* `Transaction` settings for `onReadWrite` and `onClose` are now `ThreadLocal` in nature of standard transactions.
* Optimized `BulkLoaderVertexProgram`. It now uses `EventStrategy` to monitor what the underlying `BulkLoader` implementation does (e.g. whether it creates a new vertex or returns an existing).
* Integrated `NumberHelper` in `SumStep`, `MinStep`, `MaxStep` and `MeanStep` (local and global step variants).
* Gremlin Console remoting to Gremlin Server now supports a configuration option for assigning aliases.
* `CountMatchAlgorithm`, in OLAP, now biases traversal selection towards those traversals that start at the current traverser location to reduce message passing.
* Fixed a file stream bug in Hadoop OLTP that showed up if the streamed file was more than 2G of data.
* Added the ability to set thread local properties in `SparkGraphComputer` when using a persistent context.
* Bumped to Neo4j 2.3.0.
* Deprecated "rebindings" as an argument to Gremlin Server and replaced it with "aliases".
* Added `PersistedInputRDD` and `PersistedOutputRDD` which enables `SparkGraphComputer` to store the graph RDD in the context between jobs (no HDFS serialization required).
* Renamed the `public static String` configuration variable names of TinkerGraph (deprecated old variables).
* Added `GraphComputer.configure(key,value)` to allow engine-specific configurations.
* `GraphStep` is no longer in the `sideEffect`-package and is now in `map`-package (breaking change).
* Added support for mid-traversal `V()`-steps (`GraphStep` semantics updated).
* Fixed `Number` handling in `Operator` enums. Prior this change a lot of operations on mixed `Number` types returned a wrong result (wrong data type).
* Fixed a bug in Gremlin Server/Driver serializer where empty buffers were getting returned in certain cases.
* Renamed `ConjunctionX` to `ConnectiveX` because "conjunction" is assumed "and" (disjunction "or"), where "connective" is the parent concept.
* Removed `PathIdentityStep` as it was a hack that is now solved by `Traversal.Admin.addTraverserRequirement()`.
* Added `Traversal.Admin.addTraverserRequirement()` to allow a traversal strategy or source to add requirements (not only step determined anymore).
* Added `TraverserRequirement.ONE_BULK` to state the traverser does not handle bulk.
* Added `GraphTraversalSource.withBulk(boolean)` to enabled users to compute only using `bulk=1`.
* Gremlin Server supports Netty native transport on linux.
* Removed the need for `GFunction` (etc.) closure wrappers in Gremlin-Groovy as `as Function` can be used to convert closures accordingly.
* Added `SelectColumnStep` (`select(keys)` and `select(values)`). Deprecated `mapKeys()` and `mapValues()`.
* Renamed `gremlin.hadoop.graphInputRDD` and `gremlin.hadoop.graphOutputRDD` to `gremlin.spark.graphInputRDD` and `gremlin.spark.graphOutputRDD`, respectively.
* Fixed a bug in `FoldStep` around bulking. This could be a breaking change, but it is the correct semantics.
* Previous `group()`-behavior steps are accessible via the deprecated `groupV3d0()`-steps.
* `GroupStep` and `GroupSideEffectStep` now do lazy reductions to reduce memory footprint. Breaking change for `group()` semantics.
* Added `GroupStepHelper` with various static methods and classes that are used by both `GroupStep` and `GroupSideEffectStep`.
* Added `BarrierStep` interface with `processAllStarts()` method which process all starts up to yielding the barrier result.
* Fixed a severe threading issue in `TinkerGraphComputer`.
* The location of the jars in HDFS is now `hadoop-gremlin-x.y.z-libs` to ensure multiple TinkerPop versions don't clash.
* `GiraphGraphComputer` will only upload the jars to HDFS if it doesn't already exist (to help speed up startup time).
* `GiraphGraphComputer.workers()` is smart about using threads and machines to load balance TinkerPop workers across cluster.
* `GraphComputer.workers(int)` allows the user to programmatically set the number of workers to spawn.
* Added `GryoSerializer` as the new recommended Spark `Serializer`. Handles `Graph` and `GryoMapper` registries.
* `GryoPool` now makes use of `GryoPool.Builder` for its construction.
* Bumped to Apache Hadoop 2.7.1.
* Bumped to Apache Giraph 1.1.0.
* Bumped to Apache Spark 1.5.1.
* Split Hadoop-Gremlin apart such there is now `hadoop-gremlin`, `spark-gremlin`, and `giraph-gremlin` (and respective `GremlinPlugins`).
* Added `LambdaCollectingBarrierStep` which generalizes `NoOpBarrierStep` and allows for `barrier(normSack)`-type operations.
* Fixed bugs in the Gremlin Server's NIO protocol both on the server and driver side.
* Added `Path.popEquals(Pop,Object)` to check for path equality based on `Pop` (useful for `TraverserRequirement.LABELED_PATH`).
* Added `Operator.assign` to allow setting a direct value.
* `Operator` is now a `BinaryOperator<Object>` with appropriate typecasting for respective number operators.
* Simplified `SackValueStep` so it now supports both `sack(function)` and `sack(function).by()`. Deprecated `sack(function,string)` .
* Added `Parameters` object to allow for the parameters of a step to be retrieved at runtime via a traversal.
* Redesigned (though backwards compatible) `AddEdgeStep`, `AddVertexStep`, and `AddPropertyStep` (and respective `GraphTraversal` API).
* Added `GraphTraversalSource.inject()` so users can spawn a traverser with non-graph objects.
* `GraphStep` can now take a single argument `Collection` which is either elements or element ids (i.e. `g.V([1,2,3])` is supported now).
* Added `LoopsStep` to make the loop counter accessible within `repeat()`, `until()` and `emit()`.
* Gephi Plugin no longer requires manual insert of `store` steps to visualize a traversal.
* Added a `TinkerIoRegistry` that registers a custom serializer for Gryo that will serialize an entire `TinkerGraph` instance.
* Added configuration options to Gephi Plugin for setting the size of nodes visualized.
* Replaced `DedupBijectionStrategy` with the more effective `FilterRankingStrategy`.
* `ComputerAwareSteps` must not only handle step ids, but also step labels.
* Renamed `B_O_P_SE_SL_Traverser` to `B_LP_O_P_SE_SL_Traverser` as it now supports `TraverserRequirement.LABELED_PATH`.
* Added `B_LP_O_S_SE_SL_Traverser` in support of `TraverserRequirement.LABELED_PATH`.
* Added `TraverserRequirement.LABELED_PATH` which only generates path data for steps that are labeled (greatly increases the likelihood of bulking).
* Fixed a bug in `Path` usage that required an API update: `Path.addLabel()` is now `Path.extend(Set<String>)` and `Traverser.addLabels(Set<String>)`.
* Made `Path` iterable, so that it can be ``unfold()``'ed and used by local steps like `min(local)`, `max(local)`, etc.
* `WhereTraversalStep` and `WherePredicateStep` are now the only "special" `Scoping` steps after `MatchStartStep` in `match()`.

==== Bugs

* TINKERPOP-774 order / dedup issues
* TINKERPOP-799 [Proposal] with()-modulator for stream level variable binding.
* TINKERPOP-801 groupCount() fails for vertices (elements?) (using Spark)
* TINKERPOP-811 AddPropertyStepTest fails "all of a sudden"
* TINKERPOP-823 addV() broken for multi-value properties
* TINKERPOP-843 Misspecified HADOOP_GREMLIN_LIBS generates NullPointerException
* TINKERPOP-857 Add GraphComputer.config(key,value)
* TINKERPOP-895 Use "as BinaryOperator" and remove GBinaryOperator
* TINKERPOP-903 Fix empty buffer return upon buffer capacity exceeded
* TINKERPOP-910 In session transaction opened from sessionless request
* TINKERPOP-918 ComputerVerificationStrategy is too restrictive
* TINKERPOP-926 Renamed TinkerGraph public statics to common pattern used for other statics.
* TINKERPOP-948 AbstractGremlinProcessTest.checkMap not asserted in GroupTest
* TINKERPOP-953 Artifact equality is not evaluating properly
* TINKERPOP-955 HashMap$Node not serializable

==== Improvements

* TINKERPOP-297 Ensure Consistent Behavior Over Deleted Elements *(breaking)*
* TINKERPOP-333 Support VertexProperty in PartitionStrategy
* TINKERPOP-391 More fluency in GraphComputer for parameterization.
* TINKERPOP-616 Use Spark 1.3.0 in Hadoop-Gremlin.
* TINKERPOP-624 Passing Detached/Referenced to Graph.vertices/edge()
* TINKERPOP-680 Configurable Channelizer for Gremlin Driver
* TINKERPOP-728 Improve Remote Graph Object Treatment in Console
* TINKERPOP-756 Provide a strict parsing option for GraphMLReader
* TINKERPOP-760 Make loop counter accessible within repeat()
* TINKERPOP-762 Allow mid-traversal V() (and E())
* TINKERPOP-765 Decompose AbstractTransaction for different transactional contexts *(breaking)*
* TINKERPOP-767 Path should play well with "local" steps.
* TINKERPOP-768 MatchStep in OLAP should be smart about current vertex.
* TINKERPOP-769 Make the introduction of the TP3 docs story better.
* TINKERPOP-772 TraverserRequirement.LABELED_PATH
* TINKERPOP-796 Support merge binary operator for Gremlin sacks *(breaking)*
* TINKERPOP-798 [Proposal] Rename mapKeys()/mapValues() to select(keys) and select(values).
* TINKERPOP-802 Provide sack(object) so that the sack can be directly set.
* TINKERPOP-803 A better solution to g.V(someCollection.toArray())
* TINKERPOP-805 Enforce AutoCloseable Semantics on Transaction *(breaking)*
* TINKERPOP-821 Improve testing around TraversalHelper around recursive methods
* TINKERPOP-825 [Proposal] SetBulkStep (sideEffectStep)
* TINKERPOP-826 OneToManyBarrierStrategy
* TINKERPOP-827 Add a console session to the PageRank section of the docs.
* TINKERPOP-829 TinkerGraphComputer should support the user specified thread/worker count.
* TINKERPOP-835 Shade Jackson Dependencies *(breaking)*
* TINKERPOP-836 Support Hadoop2 in place of Hadoop1
* TINKERPOP-850 Reduce Graph.addVertex overload ambiguity *(breaking)*
* TINKERPOP-851 GroupCountStep needs a by() for the count.
* TINKERPOP-861 Solve "The Number Problem" for Operator (and follow on operators)
* TINKERPOP-863 [Proposal] Turn off bulking -- or is there something more general? (hope not).
* TINKERPOP-866 GroupStep and Traversal-Based Reductions *(breaking)*
* TINKERPOP-868 Allow Spark Gremlin Computer to Reuse Spark Contexts
* TINKERPOP-874 Rename Gremlin-Spark properties using gremlin.spark prefix. *(breaking)*
* TINKERPOP-876 Rename VendorOptimizationStrategy XXXOptimizationStrategy *(breaking)*
* TINKERPOP-879 Remove deprecated promoteBindings from GremlinExecutor *(breaking)*
* TINKERPOP-885 Change Transaction.onReadWrite() to be a ThreadLocal setting *(breaking)*
* TINKERPOP-888 GraphTraversal.property overloads *(breaking)*
* TINKERPOP-896 Simplify the {{withSack}} methods of {{GraphTraversalSource}}. *(breaking)*
* TINKERPOP-897 Remove deprecated GSupplier, GFunction, GConsumer, etc. methods. *(breaking)*
* TINKERPOP-898 Rename ConjuctionP and ConjuctionStep to ConnectiveP and ConnectiveStep *(breaking)*
* TINKERPOP-899 Bump to the latest version of Neo4j.
* TINKERPOP-900 Provide by(object) which compiles to by(constant(object))
* TINKERPOP-901 Option for use of Netty epoll on Linux to reduce GC pressure
* TINKERPOP-904 BulkLoaderVertexProgram optimizations
* TINKERPOP-905 Harden time oriented tests in ResultQueueTest
* TINKERPOP-907 getters for RepeatStep.untilTraversal and RepeatStep.emitTraversal
* TINKERPOP-908 Use line breaks in documentation
* TINKERPOP-909 Improve steps that handle numeric data
* TINKERPOP-911 Allow setting Thread Specific Spark JobGroup/Custom Properties based on hadoop conf
* TINKERPOP-913 Rename Gremlin Server arguments rebinding to alias
* TINKERPOP-914 DriverRemoteAcceptor in Gremlin Console supports aliases
* TINKERPOP-917 Add HadoopGraph.open(String)
* TINKERPOP-922 Add a book for Developer Documentation
* TINKERPOP-923 Add a book for Tutorials
* TINKERPOP-925 Use persisted SparkContext to persist an RDD across Spark jobs.
* TINKERPOP-931 Make it possible to extend the core OpProcessor implementations
* TINKERPOP-933 Improve release process to get files named properly
* TINKERPOP-935 Add missing "close" operation to the session opProcessor docs

== TinkerPop 3.0.0 (A Gremlin Rāga in 7/16 Time)

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

[[release-3-0-2-incubating]]
=== TinkerPop 3.0.2 (Release Date: October 19, 2015)

* Cleaned up `ext/` directory when plugin installation fails for `gremlin-server` and `gremlin-console`.
* Fixed issues in `gremlin-server` when configured for HTTP basic authentication.
* Made `BulkLoaderVertexProgram` work for any persistent TP3-supporting graph (input and output).
* `TreeSideEffectStep` now implements `PathProcessor` which fixed a `ComputerVerificationStrategy` issue.
* Added a shell script that verifies source and binary distributions.
* Fixed a bulk related bug in `GroupStep` when used on `GraphComputer` (OLAP).
* Gremlin Server binary distribution now packages `tinkergraph-gremlin` and `gremlin-groovy` as plugins to be consistent with Gremlin Console's packaging.
* The `RepeatStep` clauses (`until()`,`emit()`,`repeat()`) can only be set at most one time in order to prevent user confusion.
* Fixed a `clone()` bug in `RepeatStep`, `TreeStep`, `GroupCountStep`, `GroupStep`, and `TraversalRing`.
* Fixed a thread context bug in `TinkerGraphComputer`.
* Fixed issues with the `gremlin-driver` related to hanging connections in certain conditions.
* TinkerGraph now has an option for persistence where the data is saved on `close()` and, if present, loaded on `open()`.
* Added an overload for `GremlinExecutor.eval()` that takes a `Lifecycle` object to override some default settings from `GremlinExecutor.Builder`.
* Improved session closing for transactional graphs during shutdown of Gremlin Server.
* Fixed id parameter used in tests for `GroovyStoreTest` and `GroovyRepeatTest` to not be treated as an embedded string.
* `GraphStep` will convert any `Vertex` or `Edge` ids to their id `Object` prior to submission to `GraphComputer` (OLAP).

==== Bugs

* TINKERPOP-814 ConnectionPool can fill with dead Connections
* TINKERPOP-816 Gryo deserialization of error response with null message causes NPE and protocol desync
* TINKERPOP-817 Gryo serialization of large responses fails and causes protocol desync
* TINKERPOP-840 TreeTest Is not being ignored via ComputerVerificationStrategy
* TINKERPOP-849 gremlin-server doesn't close sessions on 'close' opcode
* TINKERPOP-855 sasl authentication type error due to Json format
* TINKERPOP-865 Errors with HTTP REST basic auth
* TINKERPOP-867 TinkerGraphProvider does not initialize temp dir
* TINKERPOP-870 Rebound client requires a connection to occur on the underlying client.
* TINKERPOP-877 Driver hangs if SSL enabled on server but not on client

==== Improvements

* TINKERPOP-828 TinkerGraph can supportPersistence(), should we allow it.
* TINKERPOP-830 process-docs.sh introduces extra white space dependent on console width
* TINKERPOP-839 Docs should have a ${version.number} under the logo.
* TINKERPOP-852 A shell script that validates the distribution artifacts at release time
* TINKERPOP-853 TinkerPop Logo in JavaDoc index.html
* TINKERPOP-858 Cleanup after failed :install

[[release-3-0-1-incubating]]
=== TinkerPop 3.0.1 (Release Date: September 2, 2015)

* `Compare` now uses `BigDecimal` internally to ensure that precision is not lost on standard number comparisons.
* Renamed `ComputerVerificationStrategy` to `VerificationStrategy` so all the verification strategies can use it.
* Added `StandardVerificationStrategy` that throws exceptions for illegal traversal patterns on the standard engine (which extends to `GraphComputer`).
* Added `GraphFeatures.supportsConcurrentAccess()` to allows `Graph` implementations to signify if multiple instances can access the same data.
* Clarified semantics of `Transaction.close()` in unit tests - now refers only to closing the current transaction in the current thread.
* `Neo4jGraph` no longer uses `OptOut` on `TransactionTest.shouldRollbackOnCloseWhenConfigured` (formerly `shouldRollbackOnShutdownWhenConfigured`)
* Gremlin Server initialization scripts can now return a `Map` of values that will become global bindings for the server.
* Introduced the `--dryRun` option to the document generation process which ignores actual script execution in the Gremlin Console.
* Fixed bug in `EventStrategy` around property changed events when calling `property` without cardinality or meta-property values.
* Improved support for the `Accept` header for REST-based requests in Gremlin Server.
* `GraphFactory` now allows specification of the class to use to instantiate the `Graph` through the `GraphFactoryClass` annotation.
* Added `wrapAdjacencyList` and `unwrapAdjacencyList` options to `GraphSONWriter` and `GraphSONReader` respectively, thus allowing valid JSON to be written/read if the user desires.
* Added Gremlin Server/Driver authentication support via SASL.
* Added Basic HTTP authentication support for REST in Gremlin Server.
* Added Gremlin Server plugin to help with "credential graph" management (used in conjunction with authentication features of Gremlin Server).
* Added "secure" Gremlin Server/Driver example configuration files.
* Adjusted configuration for javadoc generation to eliminate error messages.
* Removed "reserved" graph concept names from tests (e.g. "label", "edge", "value") to support the convention of avoiding these strings for property names.
* Introduced `GraphProvider.Descriptor` which annotates a `GraphProvider` implementation to describe what `GraphComputer` implementation will be used.
* Modified `OptOut` to include a `computers` attribute which allows the `Graph` to opt-out of computer-based tests for specific computation engines.
* Added a `SandboxExtension` that can be plugged into `TypeCheckedCustomizerProvider` and `CompileStaticCustomizerProvider` to control classes and methods that can be used in the `GremlinGroovyScriptEngine`.
* Added a number of new `ImportCustomizerProvider` implementations such as, `TimedInterruptCustomizerProvider`, `TypeCheckedCustomizerProvider` and others.
* Refactored `GremlinGroovyScriptEngine` to make more general use of `ImportCustomizerProvider` implementations.
* Removed `SecurityCustomizerProvider` class and the "sandbox" configuration on the `ScriptEngines` class - this was an experimental feature and not meant for public use.
* Removed dependency on `groovy-sandbox` from the `gremlin-groovy` module.

==== Bugs

* TINKERPOP-770 Exception while AddPropertyStep tries to detach vertex property
* TINKERPOP-780 Use of fold() in repeat()
* TINKERPOP-782 map(Traversal) should declare requirements of child
* TINKERPOP-785 Gremlin Server Not Properly Reporting Port Conflict
* TINKERPOP-792 select at start of match traversal on Map can fail
* TINKERPOP-794 IncidentToAdjecentStrategy malfunction
* TINKERPOP-804 Failed installing neo4j-gremlin extension on Windows 7
* TINKERPOP-822 Neo4j GraphStep with element arguments ignores has  *(breaking)*

==== Improvements

* TINKERPOP-576 Gremlin Server Authentication
* TINKERPOP-582 Remove Groovy Sandbox Dependency
* TINKERPOP-610 General graph concept names in test schema
* TINKERPOP-656 IoRegistry Chaining
* TINKERPOP-690 Be able to OPT_OUT for Standard, but not Computer *(breaking)*
* TINKERPOP-699 GraphSON writeGraph not producing valid json object
* TINKERPOP-750 Compare should not have special case for Number
* TINKERPOP-752 Make Gremlin Server Better Respect ACCEPT
* TINKERPOP-764 Unify semantics of Transaction.close() in tests and documentation *(breaking)*
* TINKERPOP-771 IoRegistry Instantiation With GryoPool
* TINKERPOP-778 Support GraphFactory location via annotation.
* TINKERPOP-791 Document rules for committers
* TINKERPOP-797 order() seems to only like List? *(breaking)*
* TINKERPOP-808 TraversalComparator.comparator needs a getter

=== TinkerPop 3.0.0 (Release Date: July 9, 2015)

* Modified the `GremlinExecutor` to catch `Throwable` as opposed to `Exception` so as to properly handle `Error` based exceptions.
* Modified the `GremlinGroovyScriptEngine` compilation configuration to prevent inappropriate script evaluation timeouts on standalone functions.
* Added a custom configuration for "timed interrupt" in the `ScriptEngines` instantiation of the `GremlinGroovyScriptEngine`.
* Added `mapKeys()` (`MapKeyStep`) and `mapValues()` (`MapValueStep`) to get the keys and values of a map, respectively.
* `select()` no longer supports empty arguments. The user must specify the keys they are selecting.
* `MatchStep` and `match()` no longer have a "start label" parameter -- it is computed if the incoming traverser does not have requisite labels.
* Turned transactional testing back on in Gremlin Server using Neo4j.
* Renamed `Transaction.create()` to `Transaction.createThreadedTx()`.
* Added `TraversalParent.removeGlobalChild()` and `TraversalParent.removeLocalChild()`.
* Added a `clear` option to the Gephi Plugin to empty the Gephi workspace.
* Refactored `ResultSet` and related classes to stop polling for results.
* `AbstractStep` now guarantees that bulk-less and null-valued traversers are never propagated.
* Added `dedup(string...)` which allows for the deduplication of a stream based on unique scope values.
* Fixed multiple bugs in the Gephi Plugin related to refactoring of traversal side-effects.
* Split `WhereStep` into `WherePredicateStep` and `WhereTraversalStep` to simplify internals.
* Prevent the driver from attempting to reconnect on a dead host if the `Cluster.close()` method has been called.
* Renamed the "deactivate" option on `:plugin` command to "unuse" to be symmetric with the "use" option.
* Added `Traversal.toStream()` to turn the `Traversal<S,E>` into a `Stream<E>`.
* Added `Scoping.Variable` enum of `START` and `END` which allows the `Scoping` step to specify where its bindings are.
* `ComputerVerificationStrategy` is smart about not allowing `WhereXXXStep` with a start-variable to run in OLAP as it selects the value from the path.
* Rewrote `MatchStep` where it now works on `GraphComputer`, solves more patterns, provides plugable execution plans, supports nested AND/OR, `not()`-patterns, etc.
* Renamed `Graphs` in Gremlin Server to `GraphManager`.
* Fixed bug in Gremlin Driver where client-side serialization errors would not bubble up properly.
* Fixed problem in Gremlin Server to ensure that a final `SUCCESS` or `NO_CONTENT` message assured that the transaction was successful in sessionless requests.
* Arrow keys for cycling through command history now work in Gremlin Console when being used on Windows.
* Added `NotStep` and `not(traversal)` for not'ing a traversal (integrates like `ConjunctionStep`).
* Removed `TraversalP`. Traversals and `P`-predicates are completely separate concepts.
* `has(key,traversal)` is now an alias for `filter(__.values(key).traversal)` using `TraversalFilterStep`.
* Simplified `SubgraphStrategy` by using `TraversalFilterStep` instead of the more complex `WhereStep`.
* Added `TraversalMapStep`, `TraversalFlatMapStep`, `TraversalFilterStep`, and `TraversalSideEffectStep` which all leverage an internal traversal.
* Added `Path.get(pop,label)` as default helpers in `Path`.
* Added `Pop.first`, `Pop.last`, and `Pop.all` as enums for getting single items from a collection or a list of said items.
* Changed `GremlinServer.start()` to return a `CompletableFuture` that contains the constructed `ServerGremlinExecutor`.
* Restructured `IoTest` breaking it up into smaller and more logically grouped test cases.
* Gremlin Server `Settings` now has sensible defaults thus allowing the server to be started with no additional configuration.
* Fixed garbled characters in Gremlin Console that notably showed up in `:help`
* Replaced dependency on `groovy-all` with individual Groovy dependencies as needed.
* Bumped `org.gperfutils:gbench` to the `0.4.3` and a version explicitly compatible with Groovy 2.4.x.
* Renamed `KeyStep` to `PropertyKeyStep` to be consistent with `PropertyValueStep`.
* Added `Gremlin-Lib-Paths` to modify paths in plugin `lib` directory.
* Modified the capabilities of `Gremlin-Plugin-Paths` to delete paths that have no value on the right-hand-side of the equals sign.
* The REST API in Gremlin Server now requires parameters to be defined with a "bindings." prefix.
* Modified the REST API in Gremlin Server to accept rebindings.
* Added `rebindings` optional argument to sessionless requests to allow global bindings to be rebound as needed.
* Added `LazyBarrierStrategy` which "stalls" a traversal of a particular form in order to gain a bulking optimization.
* `CollectingBarrierStep` supports `maxBarrierSize` for "lazy barrier," memory conservation.
* `Scoping` now has `getScopeKeys()` to get the keys desired by the scoping step.
* Refactored SSL support in the Gremlin Server/Driver.
* Factored out `ServerGremlinExecutor` which contains the core elements of server-side script execution in Gremlin Server.
* Bumped to netty 4.0.28.Final.
* Refactored the `Mutating` interface and introduce `CallbackRegistry` interface around `EventStrategy`.
* Changed `onReadWrite` and `onClose` of `AbstractTransaction` to be synchronized.
* Added `LabelP` to support index lookups and `has()` filtering on `Neo4jGraph` multi-label vertices.
* `AddEdgeStep` is now a `Scoping` step.
* Added a fully defined set of `Graph.Feature` implementations to `EmptyGraph`.
* Dropped dependency on `org.json:json` - used existing Jackson dependency.
* Added back neo4j-gremlin as the licensing of the Neo4j API is now Apache2.
* Added `willAllowId` method to features related to vertices, edges and vertex properties to test if an identifier can be use when `supportsUserSuppliedIds` is `true`.
* Fixed a bug in `GraphTraversal.choose(predicate,trueTraversal,falseTraversal)`.
* Removed `MapTraversal`, `MapTraverserTraversal`, `FilterTraversal`, and `FilterTraverserTraversal` as these are simply `__.map(function)` and `__.filter(predicate)`.
* Include `hadoop-gremlin` Hadoop configuration sample files in Gremlin Console distribution.
* Iteration of results in Gremlin Server occur in the same thread as evaluation and prior to transaction close.
* TinkerGraphComputer now supports every `ResultGraph`/`Persist` combination.
* `GraphComputerTest` extended with validation of the semantics of all `ResultGraph`/`Persist` combinations.
* GiraphGraphComputer no longer requires an extra iteration and MapReduce job to derive the full `Memory` result.
* SparkGraphComputer now supports `InputRDD` and `OutputRDD` to allow vendors/users to use a `SparkContext` to read/write the graph adjacency list.
* Added `Scoping.getScopeValue()` method so all "selecting" steps use the same pattern for map, path, and sideEffect data retrieval.

=== TinkerPop 3.0.0.M9 (Release Date: May 26, 2015)

* Removed `GraphComputer.isolation()` as all implementations use standard BSP.
* Added a Gremlin Server `LifeCycleHook` to ensure that certain scripts execute once at startup and once at shutdown.
* `has(key)` and `hasNot(key)` are now aliases for `where(values(key))` and `where(not(values(key)))`, respectively.
* TinkerGraph classes are now final to restrict user and vendor extension.
* Added `TraversalStrategy.VendorOptimization` to ensure that all TinkerPop optimizations execute first on the known TinkerPop steps.
* Added `TailGlobalStep` and `TailLocalStep` (`tail()`) which gets objects from the end of the traversal stream.
* `AndStep` and `OrStep` are now simply markers where `WhereStep(a.and(b).and(c)...and(z))` is the compilation.
* Moved `Compare`, `Contains`, `Order`, `Operator`, and `P` to `process/traversal` from `structure/` as they are process-based objects.
* `HasContainer` now uses `P` predicate as helper methods and tests are more thorough on `P`.
* Changed Gremlin Server integration/performance tests to be runnable from within the `gremlin-server` directory or from the project root.
* Moved the string methods of `TraversalHelper` to `StringFactory`.
* Renamed JSON-related serializers for Gremlin Server to be more consistent with GraphSON naming.
* Removed `HasTraversalStep` in favor of new `P.traversal` model with `HasStep`.
* Fixed bug in `WsGremlinTextRequestDecoder` where custom serializers from graphs were not being used.
* Added `AndP` which allows for the `and()`-ing of `P` predicates.
* `Order.opposite()` is now `reversed()` as that is a `Comparator` interface method with the same semantics.
* `Compare/Contains/P.opposite()` are now `negate()` as that is a `BiPredicate` interface method with the same semantics.
* `has(traversal)` is replaced by `where(traversal)` and `has(key,traversal)`. `HasXXX` is always with respects to an element property.
* Added `TraversalScriptHelper` with static methods for dynamically creating a `Traversal` from a JSR 223 `ScriptEngine`.
* Changed `SubgraphStrategy` to take `Traversal` rather than `Predicate` for filtering.
* Improved `SubgraphStrategy` to only modify the `Traversal` if filtering was required.
* Improved logging of errors in the `HttpGremlinEndpointHandler` to include a stracktrace if one was present.
* Moved `AbstractGremlinSuite.GraphProviderClass` to `org.apache.tinkerpop.gremlin.GraphProviderClass`.
* Simplified the Gremlin-Groovy test suite where there is now no distinction between `STANDARD` and `COMPUTER` tests.
* `VertexProgram` and `MapReduce` now add a `Graph` parameter to `loadState(Graph, Configuration)`.
* Added `ScopingStrategy` which auto-scopes `select()` and `where()` so the language looks clean.
* Added `Scoping` as a marker interface to state that a step desires a particular `Scope`.
* `SelectStep`, `SelectOneStep`, and `WhereStep` support both `Scope.local` and `Scope.global` for `Map<String,Object>` or `Path` analysis, respectively.
* Fixed a bug in the `TraversalStrategies` sort algorithm.
* Removed numerous unused static utility methods in `TraversalHelper`.
* TinkerGraph process suite tests are now running with and without strategies in place.
* Added `IncidentToAdjacentStrategy` which rewrites `outE().inV()`, `inE().outV()` and `bothE().otherV()` to `out()`, `in()` and `both()` respectively.
* Renamed `ComparatorHolderRemovalStrategy` to `OrderGlobalRemovalStrategy` as it now only applies to `OrderGlobalStep`.
* Anonymous traversal no longer have `EmptyGraph` as their graph, but instead use `Optional<Graph>.isPresent() == false`.
* Added `Traversal.Admin.setGraph(Graph)` as strategies that need reference to the graph, need it across all nested traversals.
* `AbstractLambdaTraversal` is now smart about `TraversalParent` and `TraversalStrategies`.
* Fixed bug in `GraphML` reader that was not allowing `<edge>` elements to come before `<node>` elements as allowable by the GraphML specification.
* Added `VertexFeature.getCardinality`.
* Added `AdjacentToIncidentStrategy` which rewrites `out().count()` to `outE().count()` (and similar such patterns).
* `GryoPool` now takes a `Configuration` object which allows setting the size of the pool and the `IoRegistry` instance.
* Added `PersistResultGraphAware` interface which is used by `OutputFormats` to specify persistence possibilities for a Hadoop `GraphComputer`.
* `ElementIdStrategy` now allows the identifier property to be set directly (and not only by specifying `T.id`).
* Added sample configuration files for registering a `TraversalStrategy` in Gremlin Server.
* Added response status code for `NO_CONTENT` to represent output for a successful script execution without a result (e.g. an empty `Iterator`).
* Removed the notion of a "terminator" message from the Gremlin Server protocol - new response status code for `PARTIAL_CONTENT`.
* `Path` and `Step` labels are ordered by the order in which the respective `addLabel()` calls were made.
* A `Step` now has a `Set<String>` of labels. Updated `as()` to take a var args of labels.
* Dropped `BatchGraph` from the code base - it will be replaced by bulk loader functionality over OLAP.
* `TraversalSideEffects` now implements `Optional` semantics. Less code as Java8 provides the helper methods.
* `TraversalScriptSupplier` now takes an `Object` var args for setting `ScriptEngine` bindings if needed.
* `Compare` is now more lenient on `Number`-types.
* Removed `Compare.inside` and `Compare.outside` as they are not primitive comparators and should be composed from primitives.
* Introduced `P` (predicate) for cleaner looking `is()`, `has()`, and `where()` calls -- e.g. `has('age',eq(32))`.
* `GraphTraversalSource` is now the location for `withXXX()` operations. No longer do they exist at `GraphTraversal`.
* All `Traverser` objects now extend from `AbstractTraverser` or a child that ultimately extends from `AbstractTraverser`.
* OLTP `select()` now returns a list for traversals with duplicate labels (as this was a unintended side-effect of `SparsePath`).
* Removed the `SparsePath` optimization as it led to numerous corner-case inconsistencies.
* `VertexWritable` serializes and deserializes the `StarGraph` object -- no more intermediate `DetachedXXX` objects.
* Gremlin Server better supports the settings for the high and low watermark that will slow writes to clients that are lagging.
* Added `GraphReader.readObject()` and `GraphWriter.writeObject` abstractions for those implementations that can support them.
* Altered `GraphWriter.writeVertices()` method to take an `Iterator` of vertices rather than a `Traversal`.
* GraphSON format for output from `GraphWriter.writeVertex`, `GraphWriter.writeVertices`, and `GraphWriter.writeGraph` have all changed now that they use `StarGraph` serialization.
* Gryo format for output from `GraphWriter.writeVertex`, `GraphWriter.writeVertices`, and `GraphWriter.writeGraph` have all changed now that they use `StarGraph` serialization.
* Added read and write methods to `GraphReader` and `GraphWriter` for `Property` and `VertexProperty`.
* Reduced object creation in GraphSON during serialization.
* Moved `T` tokens to the `structure/` package as its more general than `process/`.
* `Attachable.attach()` now takes a `Method` to determine whether to attach via `GET`, `CREATE`, or `GET_OR_CREATE`.
* Decreased size of Gremlin Server `RequestMessage` and `ResponseMessage` serialization payloads and reduced object creation.
* `Graph.empty()` no longer required with the introduction of `ShellGraph` which is a placeholder for a graph class and computer.
* `VertexProperty.Cardinality` default is now vendor chosen. If the vendor has not preference, they should use `Cardinality.single`.
* `Messenger.receiveMessages()` no longer takes a `MessageScope` and thus, consistent behavior between message-passing and message-pulling systems.
* Changed the `gremlin.tests` environment variable for test filtering to the more standard convention of `GREMLIN_TESTS` and made it work for all test suites.
* Removed `back()`-step as `select()`-step provides the same behavior with more intelligent optimizations and `by()`-modulation.
* Removed `Graph.Helper` method annotation and related infrastructure in tests.
* Modified header of Gryo to be 16 bytes instead of 32 (and removed the version stamp).
* Removed the concept of handling version in Gryo via the builder as it wasn't really accomplishing the capability of ensuring backward compatibility.
* Moved `Exceptions.propertyRemovalNotSupported` from `Element` to `Property` for consistency.
* Provided a method for Gremlin Server to bind `TraversalSource` objects for use in scripts.
* Modified the reference implementation for dealing with "custom" identifier serialization in GraphSON - See `IoTest.CustomId` for the example.
* Modified `g.vertices/edges` and related methods and tests to support non-type specific querying (e.g. `g.V(1)` and `g.V(1L)` should both return the same result now).
* `TinkerGraph` supports an `IdManager` which helps enforce identifier types and improve flexibility in terms of how it will respond to queries around identifiers.
* `DetachedXXX` now uses the standard `structure/` exceptions for unsupported operations.
* Added private constructors to all `Exceptions` inner classes in the respective `structure/` interfaces.
* Re-introduced `ReferenceXXX` to ensure a smaller data footprint in OLAP situation (`DetachedXXX` uses too much data).
* `Attachable` now has a set of static exception messages in an `Exceptions` inner class.
* Added `StarGraph` which is a heap efficient representation of a vertex and its incident edges (useful for `GraphComputer` implementations).
* `TraverserSet` uses a `FastNoSuchElementException` on `remove()` for increased performance.
* Add `Profiling` interface to enable vendors to receive a `Step's MutableMetrics`.

=== TinkerPop 3.0.0.M8 (Release Date: April 6, 2015)

* Removed Neo4j-Gremlin from this distribution due to GPL licensing. Working with Neo4j team to reintroduce by M9.
* Altered structure of plugin directories for Gremlin Server and Gremlin Console to allow for the full `lib` directory with all dependencies and the lighter `plugin` directory which contains filtered dependencies given the path.
* Improved `OptOut` to allow for exclusion of a group of tests by specifying a base test class.
* `GraphComputerTest` is now Java8 specific and much easier to extend with new test cases.
* Merged the `gremlin-algorithm` module into `gremlin-test`.
* Removed `LambdaVertexProgram` and `LambdaMapReduce` as it will be one less thing to maintain.
* Gremlin Console accepts a `max-iteration` configuration via the standard `:set` command to limit result iteration.
* `Vertex.property()` default behavior is now `Cardinality.single`.
* Added `ElementIdStrategy` as a `TraversalStrategy`.
* Introduce `AbstractTransaction` to simplify implementation of standard transactional features for vendors.
* Added `EventStrategy` to generate `Graph` modification events to listeners.
* Added test to enforce return of an empty `Property` on `VertexProperty.property(k)` if no meta properties exist.
* Added methods to registered transaction completion listeners on `Transaction` and provided a default implementation.
* Fixed bug in Neo4j where return of an empty meta property was returning a `NullPointerException`.
* Refactored step API -- the TinkerPop3 steps are the foundation for any domain specific language (including graph).
* `MapReduce` now has `workerStart(Stage)` and `workerEnd(Stage)` methods with analagous semantics to `VertexProgram`.
* Hadoop-Gremlin `ObjectWritable` now leverages Kryo for data serialization.
* `GiraphGraphComputer` supports arbitrary objects as the vertex id -- previously, only long ids were supported.
* Added `VertexProgramPool` to support thread safe pooling of vertex programs for graph computers that provide threaded workers.
* Added `GryoPool` to support thread safe pooling of Gryo readers and writers.
* Added `TraversalSource` which contextualizes a traversal to a graph, DSL, execution engine, and runtime strategies.
* Added `AddVertexStep` (`addV`), `AddPropertyStep` (`property`), and changed `AddEdgeStep` to a map-step instead of a sideEffect-step.
* Added `compile` method to `GremlinExecutor` and related classes.
* Fixed bug in Gremlin Server that was generating extra response messages on script evaluation errors.
* Changed the `Memory` API to not return the mutated value on `or`, `and`, `incr` as it is too difficult to implement faithfully in a distributed system.
* Added `SparkGraphComputer` to Hadoop-Gremlin which uses Apache Spark as the underlying computing engine.
* Renamed "Gremlin Kryo" to "Gryo".
* Refactored `TinkerWorkerPool` to use `ExecutorService` so as to reuse threads when executing graph computer functions.
* Removed `Reducing.Reducer` and `ReducingStrategy`. Previous `Reducing` classes are now `MapReducer` classes.
* Refactored the "process" test suite to allow for better test configuration with respect to different `TraversalEngine` implementations.
* Added `hasNot(traversal)` which is a faster way of doing `has(traversal.count().is(0L))`.
* `TraversalStrategy.apply(traversal)` is the new method signature as the `TraversalEngine` can be retrieved from the `Traversal`.
* `TraversalEngine` is now an interface and provided to the traversal by the graph. `Graph` methods added to set the desired traversal engine to use.
* Added `count(local)`, `sum(local)`, `max(local)`, `min(local)`, `mean(local)`, `dedup(local)`, `sample(local)` and `range(local)` for operating on the local object (e.g. collection, map, etc.).
* `TraversalComparator` exists which allows for `order().by(outE().count(),decr)`.
* Added Apache Rat plugin to detect the proper inclusion of license headers in files.
* A `Traversal` now respects thread interruption during iteration, throwing a `TraversalInterruptionException` if it encounters interruption on the current thread.
* Apache refactoring: `com.tinkerpop` -> `org.apache.tinkerpop`.
* `Traversal` is now `Serializable` and with most queries no longer needing lambdas, Gremlin-Java works over the wire.
* Added `VertexProperty.Cardinality` with `list`, `set`, and `single`. No more `Vertex.singleProperty()` method.
* Added `RangeByIsCountStrategy` that adds a `RangeStep` in front of `.count().is(<predicate>, <value>)` to minimize the amount of fetched elements.
* Added `CoalesceStep` / `coalesce()` that emits the first traversal which emits at least one element.
* Added more syntactic sugar tricks to the Gremlin sugar plugin -- `&`, `|`, `select from`, `gt`, etc.
* `Traversal.Admin` is consistent internal to steps, traversals, strategies, etc. For the user, `Traversal` is all they see.
* `TraversalHolder` is now called `TraversalParent` with the child/parent terminology used throughout.
* Added `GroovyEnvironmentPerformanceSuite`.
* Provided more robust shutdown capabilities for the thread pools used in `GremlinExecutor`.
* A massive `process/` package reorganization -- class names are still the same, just in new packages.
* Bumped `neo4j-graph` to Neo4j 2.1.6.
* Bumped to Groovy 2.4.1.
* Added a new "performance" test suite for Gremlin Process.
* Steps now only operate with traversals -- no more lambdas. Lambda-> `Traversal` conversion utilities added.
* `SideEffectStep` always requires a `Consumer`. Steps that were consumer-less simply extends `AbstractStep`.
* Simplified the `Neo4jGraph` implementation by now allowing `cypher()` mid-traversal. Only available via `g.cypher()`.
* Moved `clock()` out of the Utility plugin. It is now available to both Groovy and Java.
* Changed the `OptOut` annotation to allow for ignoring an entire test case using a wildcard.
* Added `AndStep` and `OrStep` filters to support arbitrary conjunction of traversals.
* `__` is now a class with static `GraphTraversal` methods and thus `repeat(out())` is possible.
* Added `IsStep` / `.is()` that supports filtering scalar values.
* `Neo4jGraph` and `TinkerGraph` no longer create new `Feature` instances on each feature check.
* Added `Compare.inside` and `Compare.outside` for testing ranges. Removed `between()` as now its `has('age',inside,[10,30])`.
* `GraphTraversal.has()` no longer requires the element type to be cast in the traversal definition.
* Fixed a `ConcurrentModificationException` bug in TinkerGraph that occurred when doing full vertex/edge scans and removing elements along the way.
* Added `Scope.local` and `Scope.global` in support of `OrderLocalStep` and `OrderGlobalStep` via `order(scope)`.
* Added `Order.keyIncr`, `Order.keyDecr`, `Order.valueIncr`, and `Order.valueDecr` in support of `Map` sorting.
* Added `Order.shuffle` and removed `shuffle()` in favor of `order().by(shuffle)`.
* Changed `Order implements Comparator<Comparable>` to `Order implements Comparator<Object>` as its now generalized to multiple types of objects.
* The `maxContentLength` setting in Gremlin Server is now respected by the HTTP/REST Gremlin endpoint.
* Fixed resource leak in the HTTP/REST Gremlin endpoint of Gremlin Server.
* Refactored Gremlin Server `start` and `stop` functions to return `CompletableFuture`.
* HTTP REST error response JSON objects from Gremlin Server should no longer have issues with control characters, line feeds, etc.
* Added `MeanStep`, `mean()`, and `MeanNumber` for calculating number averages in a traversal.
* Greatly simplified all the traversal `MapReduce` implementations due to the introduction of `VertexTraversalSideEffects`.
* Added `VertexTraversalSideEffects` as a cheap, static way to get a sideEffect-view of a vertex in OLAP.
* Added `TraversalHelper.isLocalStarGraph()` which determines if a traversal is contained within the local star graph.
* Added `TraversalVerificationStrategy` to verify if the traversal can be executed on respective engine.
* Refactored `GraphTraversal.cap()` to `GraphTraversal.cap(String...)` to support multi-sideEffect grabs.
* Added GraphSON serialization for `Path`.
* Added `Traversal.Admin.getTraverserRequirements()` and removed `TraversalHelper.getTraverserRequirements(Traversal)`.
* `Traversal.equals()` is no longer computed by determining if the objects returned are equal.
* Altered messaging in Gremlin Console when using a remote that is not yet activated.
* Fixed potential for deadlock in Gremlin Driver when waiting for results from the server.
* Added the `useMapperFromGraph` serializer option to the Gremlin Server configuration file to allow auto-registration of serialization classes.
* Refactored Netty pipeline structure to not have a second "Gremlin" executor group and instead used a standard `ExecutorService`.
* Refactored the `GremlinExecutor` to take an optional transformation function so as to allow manipulation of results from `eval` in the same thread of execution.
* Fixed issue with the `HttpGremlinEndpointHandler` where requests were getting blocked when `keep-alive` was on.
* Added `MinStep` and `MaxStep` with respective `min()` and `max()`.
* `CountStep` and `SumStep` now extend `ReducingBarrierStep` and no longer are sideEffect steps.
* `SideEffectCapStep` now extends `SupplyingBarrier` and is much simpler than before.
* Added `SupplyingBarrier` which simply drains the traversal and emits the value of a provided supplier.
* Added `TraversalLambda` which implements function, predicate, and consumer over a provided traversal.
* Any non-core `Step` that takes a function or predicate can now take a traversal which maps to `traversal.next()` (function) and `traversal.hasNext()` (predicate).
* `CollectingBarrierStep` is no longer abstract and added `GraphTraversal.barrier()` which is analogous to `fold().unfold()`, though cheaper.
* Added `TraversalOptionHolder` for branching steps to index works with corresponding `GraphTraversal.option()`.
* `BranchStep` is now a proper generalization of `UnionStep` and `ChooseStep`.
* `SubgraphStep` has changed in support of in-traversal filtering and removing the need for path-based traversers.
* Added `HasTraversalStep` which takes an anonymous traversal to determine whether or not to filter the current object.
* Added `Traversal.Admin.getStartStep()` and `Traversal.Admin.getEndStep()`. Removed `TraversalHelper.getStart()` and `TraversalHelper.getEnd()`.
* Refactored `profile()` to use injected steps. `ProfileStep` can now be used without any special JVM command line parameters.
* Added `ReducingBarrierStep` which acts like `CollectingBarrierStep` but operates on a seed with a bi-function.
* Added a preprocessor for AsciiDocs. Documentation code examples are executed and the results are dynamically inserted into the doc file.
* `LocalStep` traversal is treated as a branch, not an isolated traversal. Moreover, moved `LocalStep` to `branch/`.
* Traversal strategies are now applied when the `TraversalVertexProgram` state is loaded, not when submitted. Less error prone as it guarantees strategy application.
* Reworked `TraversalHolder` where there are "local traversals" and "global traversals". Local traversals are not subject to OLAP message passing.
* Fixed a bug in `DedupStep` that made itself apparent in `DedupOptimizerStrategy`.
* Added `RepeatStep.RepeatEndStep` in order to reduce the complexity of the code on OLAP when the predicates are not at the start of `RepeatStep`.

=== TinkerPop 3.0.0.M7 (Release Date: January 19, 2015)

* Added `SideEffectRegistrar` interface and `SideEffectRegistrationStrategy` for allowing steps to register sideEffects at strategy application time.
* Renamed `Traverser.Admin.setFuture()` and `Traverser.Admin.getFuture()` to `setStepId()` and `getStepId()`, respectively.
* Added `TraversalMatrix` for random access to steps in a traversal by their step id. Used by `TraversalVertexProgram`.
* Added unique identifies to `Step` that are not the user provided labels. `Step.getLabel()` now returns an `Optional<String>`.
* Removed `UnionLinearStrategy`, `ChooseLinearStrategy`, and `RepeatLinearStrategy` as nested traversals are now natively supported in OLAP.
* Fixed `Neo4jGraph` around manual transaction behavior on `commit` and `rollback` such that they would throw exceptions if a transaction was not open.
* Redesigned the hidden step labeling mechanism so its consistent across a cluster, easier for rewrite strategies, and will enable nested OLAP traversals.
* `Traverser.incrLoops()` now takes a string step label to enable nested looping constructs (i.e. loop stacks).
* Added `Traversal.tryNext()` which returns an `Optional`, where the provided default method should be sufficient for all vendors.
* Removed `PathConsumer` in favor of `TraverserRequirement.PATH`-model via `Step.getRequirements()`.
* `Step.getRequirements()` returns a `Set<TraverserRequirement>` which is what is required of the `Traverser` by the `Step`.
* `Traverser` now extends `Cloneable` and `Traverser.clone()` is used to good effect in `Traverser.split()`.
* Added `AbstractTraverser` for which all traversers extend.
* Moved `Traversal.SideEffects` to `TraversalSideEffects` as sideEffects are not necessarily tied to the traversal.
* Removed `Graph.of()` for generating anonymous graph traversals -- replaced by `__`-model.
* Removed `Graph` being stored in `Traversal.SideEffects`. Too dangerous when moving between OLTP and OLAP and its limited uses were worked around easily.
* No need for `DefaultXXXGraphTraversal` unless the vendor is extending with new methods (e.g. `DefaultNeo4jGraphTraversal`).
* Reworked `TraversalStrategies` such that the are "emanating object class"-dependant, not `Traversal` dependent.
* Moved `Traverser.sideEffects()` to `Traverser.asAdmin().getSideEffects()`. Users should use `Traverser.sideEffects(key)` and `Traverser.sideEffects(key,value)`.
* Added `SerializationTest` to the `StructureStandardSuite` in `gremlin-test` which validates serialization at a lower level than `IoTest`.
* Removed `IntervalStep` and renamed `interval()` to `between()` which is simply an alias to a `has().has()` chain.
* Added `__` static interface which allows for `__.out().out()`-style construction of anonymous traversals (instead of `g.of()`).
* The only `GraphTraversal` steps that operate on `Traverser` are the base lambdas and `repeat()` (i.e. `emit()` and `until()`).
* Removed dependency on the `reflections` library in `gremlin-test` which removed the default implementation of `GraphProvider.getImplementations()` - vendors now need to implement this method themselves.
* Relaxed the `<S>` typing requirement for anonymous traversals when applied to `choose()`, `repeat()`, `union()`, etc.
* Removed `LoopStep` and `UntilStep` in favor of the new `RepeatStep` model of looping in Gremlin3.
* `BranchStep` is now exposed in `GraphTraversal` via `branch(function)`.
* `UnionStep` now implements `TraversalHolder`.
* Added `RepeatStep` as the new looping construct supporting do/while, while/do, and emit semantics.
* Moved `Traversal.sideEffects()` to `Traversal.Admin.getSideEffects()` as `cap()` should be used to access the sideEffect data of a traversal.
* Renamed vendor `XXXTraversal` to `XXXGraphTraversal` (interface) and `XXXGraphTraversal` to `DefaultXXXGraphTraversal` (implementation class).
* Modified packaging for console plugins to be more consistent by moving them to the `com.tinkerpop.gremlin.console.groovy.plugin` namespace.
* Removed all TinkerPop specific dependencies to Guava to avoid user version conflicts.
* Added support for `-e` (script file execution) and `-v` (version display) options on `gremlin.sh`.
* GraphSON supports the assignment of multiple custom serialization modules.
* `Traverser.get(stepLabel/sideEffectKey)` no longer exists. There now exists: `Traverser.path(stepLabel)` and `Traverser.sideEffects(sideEffectKey)`.
* `SimpleTraverser` now supports "path" but in a very loose, global cache way. Added `SparsePath` as a `Map`-backed `Path` implementation.
* Provided Neo4j multi-label support in Neo4j-Gremlin. Added three `Neo4jVertex`-specific methods: `addLabel()`, `removeLabel()`, `labels()`.
* Bumped to Groovy 2.3.9.
* Added `Graph.Io` interface which allows for simplified helper methods for end users and a way for vendors to override `GraphReader` and `GraphWriter` initial construction when custom serializers are needed.
* Removed methods from `GraphProvider` related to customizing serializers in `IoTest` from the test suite as the new `Graph.Io` interface now serves that purpose.
* Added `Neo4jGraph.checkElementsInTransaction(boolean)` which will (or not) verify whether elements retrieved via Neo4j global graph operations are transactionally consistent.
* Added `ScriptInputFormat` and `ScriptOutputFormat` to Hadoop-Gremlin for reading and writing a file according to an arbitrary parsing script.
* Added `TimeLimitStep.getTimedOut()` to determine if the step timed out or there were no more objects to process.
* `Graph.System` is now `Graph.Hidden` with "hidden" being the vendor namespace and the key prefix being `~`.
* Much better `toString()` handling in `Step` and `Traversal`.
* `ComparatorHolder<V>` interface returns a `List<Comparator<V>>` instead of a `Comparator<V>[]`.
* `T` now implements `Function<Element,Object>`.
* Added `ElementValueComparator` and `ElementFunctionComparator` in support of vendor introspection on `ComparatorHolder`-steps.
* Renamed `Comparing` marker interface to `ComparatorHolder`.
* `FunctionHolder` interface provides vendor introspection via `ElementValueFunction`.
* Removed `OrderByStep` as it is now just `order()` with a `by()`-based comparator.
* Added `SampleStep` (`sample()`) to allow for sampling the set of previous objects. Useful for doing random walks with `local()`.
* Renamed `random()` to `coin()` to better express that the filter is a random coin toss.
* Added `by()`-projection to modulate the meaning of post-processing steps like `aggregate()`, `groupCount()`, `path()`, `order()`, etc.
* Removed the `Strategy` interface and gave `StrategyGraph` direct access to the `GraphStrategy`.
* Added `Graph.strategy()` to help instantiate `StrategyGraph` instances.
* Modified the signature of all `GraphStrategy` methods to include an parameter that contains a reference to the "composing strategy".
* `PartitionStrategy` hides the specified partition key from view when iterating properties, keys, etc.
* Change construction of `GraphStrategy` implementations to be consistent with singleton instances and builder pattern.
* Added `Graph.Helper` annotation to "protected" certain default interface methods from implementation by vendors.
* Transaction retry functions now work with "manual" transactions.
* Improved error messaging when importing "legacy" GraphSON that was not generated with "extended" properties.
* Renamed "iterator" related methods in the `GraphStrategy` interface to be consistent with the method names they represent.
* `PropertyMapStep` (`valueMap()`) now takes a boolean to state if the tokens of the element are desired along with its properties.
* `HadoopGraph` now connected to the `StructureProcessSuite`.
* `HadoopGraph` no longer supports `Graph.Variables` as they were in-memory. A persistence mechanism can be introduced in the future.
* Hidden properties removed in favor of using `GraphStrategy` for such features.
* `Edge.iterators().vertexIterator(BOTH)` now guarantees `OUT` then `IN` vertex iterator order.
* `Graph.v(Object)` and `Graph.e(Object)` no longer exist. Instead, use `Graph.V(Object... ids)` and `Graph.E(Object... ids)`.
* Added `Graph.Iterators` to allow access to vertex and edge iterators based on element ids and bypassing `GraphTraversal`.
* Renamed `GraphStrategy` implementations to be less verbose - removed the word "Graph" from their names (e.g. `IdGraphStrategy` simply changed to `IdStrategy`).
* Removed `Step.NO_OBJECT` as the problem is solves can be solved with proper use of `flatMap` and `EmptyTraverser`.
* `Path` is now part of `GraphSerializer` and thus, not specific to a particular implementation of `Path`.
* Added messaging to show files being downloaded when using the Gremlin Server "install" command.
* Added test name and class arguments to the `GraphProvider.loadGraphWith` method.
* Merged `ReferencedXXX` and `DetachedXXX` so that all migration of graph element data is via `DetachedXXX`.
* Added `StaticVertexProgram` and `StaticMapReduce` which simply return `this` on `clone()`.
* `VertexProgram` and `MapReduce` now implement `Cloneable` and is used for fast copying across workers within the same machine.
* Added `TraversalHolder` interface which extends `PathConsumer` to determine recursively if nested traversals require path calculations turned on.
* Reworked how a `TraverserGenerator` is retrieved and utilized.
* Added `Traversal.toBulkSet()` to make getting resultant data more efficiently for traversals with repeated data.
* Provided a helper `LocalStep.isLocalStarGraph()` so `GraphComputer` implementers know the requisite data boundaries.
* Created `Traversal.Admin` to hide administrative methods. Added `Traversal.asAdmin()` to get at `Traversal.Admin`.
* Fixed up all `Step` cloning operations realizing that Java8 lambdas are always bound to the calling class (no delegates).
* Usage of `:remote close` without configured remotes shows a reasonable message rather than a stack trace.
* Provided `LocalStep` to signify that the internal traversal is locally bound to the incoming object.
* Failed script evaluation in Gremlin Server now triggers the cancel of the process attempting to timeout the script if it were to run too long.
* Greatly increased the speed of `ScriptEngineLambda` by making use of a static `ScriptEngine` cache.
* Fixed a general bug in all sideEffect using steps where the sideEffect should be accessed via the `Traverser` not `Traversal`.
* `GremlinPlugin` interface no longer has the `additionalDependencies` method - those dependencies are now defined by an entry in the manifest file for the jar called `Gremlin-Plugin-Dependencies`.
* Added `TinkerWorkerPool` which is used for resource efficient threading in `TinkerGraphComputer`.
* `MapReduce.createMapReduce(Configuration)` now exists and serves the same purpose as `VertexProgram.createVertexProgram(Configuration)`.
* Enabled SessionOps to be extended. Added eval handler hook.
* Setting a property with an unsupported data type throw `IllegalArgumentException` instead of `UnsupportedOperationException` as the operation is supported, but the argument is not.

=== TinkerPop 3.0.0.M6 (Release Date: December 2, 2014)

* `javatuples.Pair` avoided on `MapReduce` API in favor of a new `KeyValue` class.
* Renamed `Gremlin-Plugin` manifest entry for plugins to `Gremlin-Plugin-Paths`.
* Added `Gremlin-Plugin-Dependencies` manifest entry to list other dependencies that should be retrieved with a plugin jar.
* `Memory.Admin.asImmutable()` yields an immutable representation of the GraphComputer `Memory`.
* Fixed host selection in `gremlin-driver` by properly accounting for all hosts being marked unavailable at the instantiation of a `Client`.
* Removed Giraph-Gremlin in favor of new Hadoop-Gremlin with `GiraphGraphComputer` support. Future support for `MapReduceGraphComputer`.
* Greatly simplified the `InputFormat` and `OutputFormat` model for working with Giraph (and Hadoop).
* Added a serializer for `Property` for GraphSON correcting format of serialization of a single `Property` on an `Edge`.
* Fixed bug in Gremlin Console that prevented assignments to empty `List` objects.
* Added `VertexProgram.getMessageScopes()` to allow vendors to know which `MessageScopes` at a particular `Memory` state.
* Reduced the number of methods in `MessageScope.Local` as its up to vendors to inspect provided incident `Traversal` accordingly.
* Renamed `MessagesType` to `MessageScope` to make it less ambiguous regarding the class of the messages being sent.
* Changed the message type of `TraversalVertexProgram` to `TraverserSet` to support message combining.
* Added `VertexProgram.getMessageCombiner()` to support the combining of messages in route to a vertex.
* Reduced object creation in `TraversalVertexProgram` around vertex-local traversal sideEffects.
* Renamed `Traverser.Admin.makeChild()` and `Traverser.Admin.makeSibling()` to `Traverser.Admin.split()` to correspond with `merge()`.
* Added `Traverser.Admin.merge(Traverser)` method so that the merging algorithm is with the `Traverser`.
* Added `Operator` enum that contains sack-helpful `BinaryOperators`: sum, minus, mult, div, max, min, etc.
* Added `GraphTraversal.withSack()` and renamed `trackPaths()` and `with()` to `withPath()` and `withSideEffect()`, respectively.
* Added the "Gremlin Sacks" feature to allow a `Traverser` to carry local information along its walk.
* GraphSON format no longer makes use of `hiddens` JSON key. Its all just `properties`.
* Added `DoubleIterator` to make vendor implementations of `Edge.iterators().vertexIterator()` efficient.
* `PropertiesStep` is smart about hiddens vs. properties.
* `Element.iterators().hiddenProperties()` no longer exists. For vendors, simply provide an iterator of properties.
* `GIRAPH_GREMLIN_LIBS` supports colon separated directories for loading jars from multiple paths.
* Introduced method to control the location of dependencies dynamically loaded to the Gremlin Console as part of the `:install` command.
* Fixed problem with the Neo4j Gremlin Plugin not loading properly after Gremlin Console restart.
* Removed the "use" configuration from Gremlin Server.
* Moved `SugarGremlinPlugin` from `gremlin-console` to `gremlin-groovy` so that it could be shared with Gremlin Server.
* Fixed bug in serialization of `null` results returned to the Gremlin Console when serializing to strings.
* Moved the `GremlinPlugin` for `TinkerGraph` to `tinkergraph-gremlin` module (it is no longer in `gremlin-console`).
* Added a `plugin-info.txt` file to Gremlin Console `/ext/{module}` subdirectories to identify the module that was originally requested.
* Gremlin Server now allows for the explicit configuration of plugin activation.
* Refactored `GremlinPlugin` and `AbstractGremlinPlugin` to better account for plugins that run on the server and those that run in the console.
* Added a `plugins` configuration to Gremlin Server to control the plugins that are enabled on initialization.
* Added a builder option to `GremlinExecutor` to control the plugins that are enabled on initialization.
* Added `RemoteException` for usage with `RemoteAcceptor` implementations for the Gremlin Console so as to better standardize their development.
* Standardized all text being written to the Gremlin Console using starting upper case letter.
* Prevented error in the Console when `:submit` is called but no remotes were configured.
* Provided a way to clean the `grapes` directory as part of a standard build with `mvn clean install`.

=== TinkerPop 3.0.0.M5 (Release Date: November 7, 2014)

* Removed `PropertyFilterIterator` as using Java8 streams was just as efficient for the use case.
* Renamed `KryoWritable` to `GremlinWritable` as it is not necessarily Kryo that is the serialization mechanism.
* Fixed an input split bug in Giraph that was making it so that splits were not always at vertex boundaries.
* Fixed a combiner bug in `GirapGraphComputer`. Combiners were always calling `MapReduce.reduce()`, not `MapReduce.combine()`.
* Greatly simplified `SubgraphStrategy` by removing requirements for `Traversal` introspection.
* `StrategyWrappedGraph` mimics vendor use of `GraphStep` and `GraphTraversal` and no longer requires dynamic strategy application.
* `TraversalStrategies` make use of a dependency tree sorting algorithm to ensure proper sorts prior to application.
* `TraversalStrategies` are now immutable and are bound to the `Traversal` class.
* Fixed bug in Gephi Plugin that prevented it from communicating with the Gephi Streaming Server.
* Renamed `MessageType.XXX.to()` to `MessageType.XXX.of()` so it makes sense in both the sending and receiving context.
* Improved messaging with respect to tests that are ignored due to features to make it clear that those tests are not in error.
* Relaxed exception consistency checks in the test suite to only check that a thrown exception from an implementation extends the expected exception class (but no longer validates that it is the exact class or that the message text).
* `VertexProgram` now has `workerIterationStart()` and `workerIterationEnd()` to allow developers to control vertex split static data structures.
* `TraversalVertexProgram` startup time greatly reduced due to being smart about `loadState()` behavior.
* Gremlin Server sessions now allow serialization of results that were part of an open transaction.
* Refactor `OpProcessors` implementations in Gremlin Server for better reusability.
* `Vertex.iterators()` no longer have a `branchFactor`. This is now at the query language level with `localLimit()`.
* Added `limit(long)` and `localLimit(int,int)` which simply call the range equivalents with 0 as the low.
* Added `LocalRangeStep` which supports ranging the edges and properties of an element -- `localRange(int,int)`.
* `GraphTraversal.value(String)` no longer exists. Instead, use `GraphTraversal.values(String)`.
* `HiddenXXXStep` and `ValueXXXStep` no longer exist. `PropertyXXXStep` takes a `PropertyType` to denote value and hidden access.
* Added `PropertyType` to the structure-package which provide markers for denoting property types (vs. property classes).
* Renamed `setWorkingDirectory` to `workingDirectory` in the `KryoReader` builder.
* `Path.get(String)` returns the object if only one object is referenced by label, else it returns a `List` of referenced objects.
* Added overload to `GremlinKryo` to allow a serializer to be configured as a `Function<Kryo,Serializer>` to allow better flexibility in serializer creation.
* Added method to `GraphProvider` to allow implementers to provide a mechanism to convert GraphSON serialized identifiers back to custom identifiers as needed.
* Added methods to `GraphProvider` so that implementers could specify a custom built `GremlinKryo` class and/or `SimpleModule` class in case their implementation had custom classes to be serialized.
* Added `Traversal.forEachRemaining(class,consumer)` for those traversals whose end type is different from declared due to strategy rewriting.
* Removed `Traversal.forEach()` as traversal implements `Iterator` and users should use `forEachRemaining()`.
* `RangeStep` now has an inclusive low and an exclusive high -- a change from Gremlin2.
* `DriverGremlinPlugin` returns raw results with driver results available via the `result` variable.
* Removed test enforcement of `private` constructor for a `Graph` instance.
* `RemoteAcceptor` now supports `@` prefixed lines that will grab the script string from the Gremlin Console shell.
* Modified the signature of `Property.element()` to simply return `Element`
* Added `Reducing` marker and `ReducingStrategy` which supports reduction-functions as a final step in Gremlin OLAP (e.g. `fold()`).
* Once strategies are `complete()`, no more steps can be added to a `Traversal`.
* Renamed `Traversal.strategies()` to `Traversal.getStrategies()` as it is not a "query language"-method.
* Added test to enforce that a `label` on a `VertexProperty` is always set to the key of the owning property.
* Fixed bug with multi-property removal in `Neo4jGraph`.
* Bumped to Neo4j 2.1.5.
* Used standard `UUIDSerializer` from the `kryo-serializers` library for serialization of `UUID` objects.
* Changed GraphSON serialization to only use `iterators()` - there were still remnants of `Traversal` usage from previous refactoring.
* Added overload for `detach` method to allow for the `Element` to be detached as a "reference" only (i.e. without properties).
* Renamed `Item` in `gremlin-driver` to `Result`.
* Renamed `strategy` to `getStrategy` in `StrategyWrappedGraph`.
* Renamed `baseGraph` to `getBaseGraph` in `Neo4jGraph`.
* `Neo4jGraph` now returns an empty property `Vertex.property(k)` when the key is non-existent (a problem only visible when meta/multi property configuration was turned off).
* `Traversal.Strategies.apply()` now takes a `TraversalEngine`. Greatly simplifies strategy application for `STANDARD` or `COMPUTER`.
* Renamed `IdentityReductionStrategy` to `IdentityRemovalStrategy` for reasons of clarity.
* Added `ComparingRemovalStrategy` that removes `Comparing`-marked steps unless they are the end step of the traversal.
* `OrderStep` now works in OLAP, but only makes sense as a traversal end step.
* `MapReduce` API extended to include `getMapKeySort()` and `getReduceKeySort()` to sort outputs accordingly.
* Renamed `TraversalResultMapReduce` to `TraverserMapReduce`. Shorter and makes more sense.
* Improved build automation to package javadocs and asciidoc documentation in the distribution files.
* Improved build automation with a script to automatically bump release versions in the various files that needed it such as the `pom.xml` files.
* The identifier on `VertexProperty` is now read properly to those graphs that can support identifier assignment.
* `GraphSONReader.readGraph()` now properly reads vertex properties.
* Removed `Neo4jGraph.getCypher()` as users should use `Neo4jGraph.cypher()` and get back TinkerPop3 graph objects.
* `GiraphGraph.variables().getConfiguration()` is now replaced by `GiraphGraph.configuration()`.
* Added `Graph.configuration()` which returns the `Configuration` object of `Graph.open()`.
* Removed `TraverserTracker` as now there is only a `TraverserSet` for all halted traversers. A nice simplification of `TraversalVertexProgram`.
* Renamed `Traverser.isDone()` to `Traverser.isHalted()` and `DONE` to `HALT`. Consistent with automata terminology.
* Removed `PathTraverserExecutor` and `SimpleTraverserExecutor` as a single `TraverserExecutor` correctly executes both types of traversers.
* `TraversalVertexProgram` does "reflexive message passing" to reduce the total number of iterations required to execute a traversal.
* `MapReduce` no-argument constructors are private and thus, only for reflection and `loadState()` usage.
* MapReducers for `TraversalVertexProgram` are now smart about `with()` declared data structures.
* Updated `Traversal.SideEffects` to use "registered suppliers" and it now works accordingly in both OLTP and OLAP environments.
* Increased the speed of `FlatMapStep` by approximately 1.5x.

=== TinkerPop 3.0.0.M4 (Release Date: October 21, 2014)

* Added features for `VertexProperty` user supplied ids and related data types.
* Removed `SideEffectCap` marker interface as there is only one `SideEffectCapStep` and thus, `instanceof` is sufficient.
* `Path.getObjects()`/`Path.getLabels()` renamed to `Path.objects()`/`Path.labels()` to be in line with "query language" naming convention.
* Greatly simplified `GiraphInternalVertex` due to `Element.graph()` -- 1/2 the memory footprint and reduced construction time.
* Renamed `Property.getElement()` to `Property.element()` given the "query language" naming convention.
* `Element.graph()` added which returns the `Graph` that the element is contained within.
* Added tests for greater consistency around iterating hidden properties.
* Simplified `TraversalVertexProgram` where only a single `TraverserTracker` exists for both path- and simple-traversers.
* Fixed a major bug where `Arrays.binarySearch` was being used on an unsorted array in TinkerGraph and Neo4jGraph.
* Changed `ComputerResult.getXXX()` to `graph()` and `memory()` to be consistent with "query language" naming convention.
* `Traverser.getXXX()` changed to `loops()`, `bulk()`, `path()`, `sideEffects()` to be consistent with "query language" naming convention.
* Optimization to reduce the number of empty lists created due to no step class existing for respective `TraversalStrategy.apply()`.
* Added `CapTraversal` as a marker interface for the `cap()` method.
* Added `union()` with GraphComputer `UnionLinearStrategy`.
* `TimeLimitStep` was moved to `filter/` package. It was a mistake that it was in `sideEffect/`.
* Provided the configuration for generating both a "full" and "core" set of javadocs, where "full" represents all classes in all projects and "core" is the "user" subset.
* Validated bindings passed to Gremlin Server to ensure that they do not match the most common statically imported values.
* If no script engine name is provided to a `LambdaHolder` it is assumed to be Gremlin-Groovy.
* `MapEmitter` and `ReduceEmitter` have an `emit(value)` default method where the key is the `MapReduce.NullObject` singleton.
* `Traverser.Admin` now implements `Attachable` as the `Traversal.SideEffects` can be generated from the `Vertex`.
* Made a solid effort to ensure that all TinkerPop keys are `Graph.System` to leave `Graph.Key` for users.
* The `Graph.System` prefix is now `^` instead of `%&%`. Simpler and easier on the `toString()`-eyes.
* Added `Traversal.SideEffects.ifPresent(Consumer)` as a default helper method.
* Added `profile()`-step which provides detailed information about the performance of each step in a traversal.
* No more `CountCapStep` and `CountStep`, there is only `CountStep` and it is elegant.
* Created a `AbstractTraversalStrategy` with good `toString()`, `hasCode()`, and `equals()` implementations.
* Added `CountTraversal` as a marker-interface stating that the `Traversal` has a `count() -> Long` method.
* `Traversal` no longer has any step methods as its not required for DSL implementers to have "core steps."
* Added "linearization" strategy for `ChooseStep` so it is executed correctly on GraphComputer.
* Added `GraphTraversalStrategyRegistry` which has respective global strategies to make turning on/off strategies easier.
* Added a generic `BranchStep` to be used for re-writing "meta-steps" for execution on GraphComputer.
* Moved `JumpStep`, `UntilStep`, and `ChooseStep` to a new `branch/` package.
* Added test cases to the Structure Suite to enforce consistent operations of reading properties after removal of their owning `Element`.
* GraphSON format change for full `Graph` serialization - Graph variables are now serialized with the key "variables" as opposed to "properties".
* Relaxed `Graph.toString()` test requirements for implementers.
* Made the `toString` operations in `GraphStrategy` consistent.
* Added `VertexFeatures.supportsRemoveProperty`.
* Added `VertexPropertyFeatures.supportsRemoveProperty`.
* Added `EdgeFeatures.supportsRemoveProperty`.
* Added `VertexFeatures.supportsRemoveVertices`.
* Added `EdgeFeatures.supportsRemoveEdges`.
* Vendors should now get a clear error when mis-spelling something in an `@OptOut` (or more likely if a test name changes) and it now works all the test suites.
* All plugins now have a default prefix of "tinkerpop." as a namespace.
* `GraphComputer` now executes a `Set<MapReduce>` and `hashCode()`/`equals()` were implemented for existing `MapReduce` implementations.
* Changed `Contains.in/notin` to `Contains.within/without` as `in` is a reserved term in most languages (including Java and Groovy).
* Added helper methods for loading data into collections in `TraversalHelper`.
* Core `Traversal` methods are smart about bulking -- e.g. `iterate()`, `fill()`, `remove()`, etc.
* `GroupByStep` and `GroupByMapReduce` leverage `BulkSet` as the default group data structure.
* `Element.Iterator` has renamed methods so implementers can do `MyElement implements Element, Element.Iterators`.
* Renamed `MessageType.Global` and `MessageType.Local` creators from `of()` to `to()` as it makes more sense to send messages `to()`.
* With `Traverser.get/setBulk()` there is no need for a `TraverserMessage`. The `Traverser` is now the message in `TraversalVertexProgram`.
* Provided static `make()` methods for constructing `Path` implementations.
* Provided a more space/time efficient algorithm for `Path.isSimple()`.
* The `JumpStep` GraphComputer algorithm `Queue` is now a `TraverserSet`.
* `AggregateStep` and `StoreStep` now use `BulkSet` as their default backing `Collection` (much more space/time efficient).
* Added `BulkSet` which is like `TraverserSet` but for arbitrary objects (i.e. a weighted set).
* `UnrollJumpStrategy` is no longer a default strategy as it is less efficient with the inclusion of `TraverserSet`.
* Introduced `TraverserSet` with bulk updating capabilities. Like OLAP, OLTP looping is now linear space/time complexity.
* TinkerGraph's MapReduce framework is now thread safe with a parallel execution implementation.
* Added a default `Traverser.asAdmin()` method as a typecast convenience to `Traverser.Admin`.
* Renamed `Traverser.System` to `Traverser.Admin` as to not cause `java.lang.System` reference issues.
* Renamed `Memory.Administrative` to `Memory.Admin` to make it shorter and consistent with `Traverser.Admin`.
* Fixed a TinkerGraph bug around user supplied vertex property ids.
* Most `Step` classes are now defined as `public final class` to prevent inheritance.
* `ShuffleStep` now extends `BarrierStep` which enables semantically correct step-sideEffects.
* Leveraged `Traverser.getBulk()` consistently throughout all steps.

=== TinkerPop 3.0.0.M3 (Release Date: October 6, 2014)

* All `Step` fields are now `private`/`protected` with respective getters as currently needed and will be added to as needed.
* Gremlin Server no longer has the `traverse` operation as lambdas aren't really serialized.
* `Path` is now an interface with `ImmutablePath` and `MutablePath` as implementations (2x speedup on path calculations).
* `Traverser` now implements `Comparable`. If the underlying object doesn't implement `Comparable`, then a runtime exception.
* Added abstract `BarrierStep` which greatly simplifies implementing barriers like `AggregateStep`, `OrderStep`, etc.
* `SelectStep` is now intelligent about when to trigger path computations based on label selectors and barriers.
* `T` no longer has `eq`, `neq`, `lt`, `in`, etc. Renamed all respective enums and with `static import`, good in console (e.g. `Compare.eq`).
* Added `Order` enum which provides `Order.decr` and `Order.incr`.
* `Traverser.loops` and `Jump.loops` are now shorts (`32767` max-loops is probably sufficient for 99.9999% of use cases).
* `Traverser.bulk` exists which is how many instances does the traverser represent. For use in grouping with bulk computations.
* Greatly simplified sideEffect steps where there is no distinction between OLAP vs. OLTP (from the `Step` perspective).
* Removed the need for `Bulkable` and `VertexCentric` marker interfaces in process API.
* Renamed configuration parameters in Giraph-Gremlin to be consistent with a `giraph.gremlin`-prefix.
* Made it possible to pass a `ScriptEngine` name and string script in `TraversalVertexProgram` and `LambdaVertexProgram`.
* Made `TinkerGraph` a plugin for the Console as it is no longer a direct dependency in `gremlin-groovy`.
* Added features for supporting the addition of properties via `Element.property(String,Object)`.
* `GiraphGraph` OLTP tested against Gremlin-Java8 and Gremlin-Groovy -- OLAP tested against Gremlin-Groovy.
* `Neo4jGraph` is now tested against both Gremlin-Java8 and Gremlin-Groovy.
* Renamed the test cases in `ProcessTestSuite` to be consistent with other Gremlin language variants.
* Added a `gremlin-groovy-test` suite that can be used to validate implementations against the Groovy variant of Gremlin.
* `TinkerGraph` is no longer serializable, use a `GraphReader`/`GraphWriter` to serialize the graph data.
* Removed `implements Serializable` on numerous classes to ensure safety and proper usage of utilities for cloning.
* `Traversal` now implements `Cloneable` as this is the means that inter-JVM threads are able to get sibling `Traversals`.
* Created "integration" test for `Neo4jGraph` that runs the test suite with multi/meta property features turned off.
* Added `GraphStrategy` methods for `VertexProperty`.
* Converted the `id` data type from string to integer in the Grateful Dead sample data.
* Removed all notions of serializable lambdas as this is a misconception and should not be part of TinkerPop.
* Greatly simplified `TraversalVertexProgram` with three arguments: a `Traversal<Supplier>`, `Class<Traversal<Supplier>>`, or a script string with `ScriptEngine` name.
* Added `TraversalScript` interface with `GroovyTraversalScript` as an instance. To be used by OLAP engines and any language variant (e.g. gremlin-scala, gremlin-js, etc.).
* `UntilStep` now leverages `UnrollJumpStrategy` accordingly.
* Fixed a bug where the `toString()` of `Traversal` was being hijacked by `SugarGremlinPlugin`.
* Fixed compilation bug in `UntilStep` that is realized when used in multi-machine OLAP.
* Simplified `Enumerator` and implementations for `MatchStep`.

=== TinkerPop 3.0.0.M2 (Release Date: September 23, 2014)

* Added an exhaust `InnerJoinEnumerator` fix in `MatchStep` to get all solutions correctly.
* `Neo4jGraph` can be configured to allow or disallow meta- and multi-properties.
* Added `until()`-step as a simpler way to express while-do looping which compiles down to a `jump()`-step equivalent.
* Added "The Crew" (`CREW`) toy graph which contains multi-properties, meta-properties, graph variables, hiddens, etc.
* If the Giraph job fails, then the subsequent `MapReduce` jobs will not execute.
* Added `Graph.System` class which generates keys prefixed with `%&%` which is considered the vendor namespace and not allowed by users.
* Added `ReferencedVertex` (etc. for all graph object types) for lightweight message passing of graph object ids.
* `T.*` now has `label`, `id`, `key`, `value` and no longer are these `String` representations reserved in TinkerPop.
* `Traverser` now has a transient reference to `Traversal.SideEffects`.
* "Detached" classes are now tested by the standard test suite.
* Compartmentalized `Traverser` interface so there is now a `Traverser.System` sub-interface with methods that users shouldn't call.
* Added `OrderByStep` which orders `Elements` according to the value of a provided key.
* 2x speed increase on steps that rely heavily on `ExpandableStepIterator` with massive memory footprint reduction as well.
* Added `VertexProperty<V>` as the property type for vertices -- provides multi-properties and properties on properties for vertices.
* Changed `VertexProgram` such that `getElementComputeKeys()` is simply a `Set<String>`.
* Significant changes to the format of the `ResponseMessage` for Gremlin Server - these changes break existing clients.
* Close any open transactions on any configured `Graph` when a session in Gremlin Server is killed.
* Grateful Dead Graph now uses vertex labels instead of "type" properties.
* There is now a `GraphComputerStrategy` and `EngineDependent` marker interface to allow steps to decide their algorithm depending if they are OLAP or OLTP.
* A labeled step now stores its current traverser value in `Traversal.SideEffects` (no longer can sideEffectKeys and step labels be the same).
* `GraphFactory` support for opening a `Graph` with multiple `GraphStrategy` instances - if there are multiple strategies they are wrapped in order via `SequenceGraphStrategy`.
* The result type for result termination messages returned from Gremlin Server is now set to "no content".
* The `maxContentLength` setting for Gremlin Driver now blocks incoming frames that are too large.
* After initialization scripts are executed in Gremlin Server, the `Graph` instances are re-bound back to their global references, thus allowing `GraphStrategy` initialization or even dynamic `Graph` creation through scripts.
* Added "Modern" graph back which is basically the "Classic" graph with double values for the "weight" property on edges and non-default vertex labels.
* `Traversal.addStep()` is now hard typed so type casting isn't required and traversal APIs look clean.
* Changed the hidden key prefix from `%$%` to `~` in `Graph.Key.hide()`.
* Added `has(label,key,predicate,value)` to allow for `has('person','name','marko')`. Various overloaded methods provided.
* Update to traversal API where if a `SFunction<S,?>` was required, but can process a `Traverser<S>`, then the function is `SFunction<Traverser<S>,?>`.
* Added `WhereStep` as a way to further constrain `select()` and `match()`.
* Extensive work on `GiraphMemory` and its interaction with Giraph aggregators.
* If the input path of a `GiraphGraphComputer` does not exist, failure happens prior to job submission.
* `SugarPlugin` now has all inefficient methods and Gremlin-Groovy proper is only efficient Groovy techniques.
* Prevented concurrency problems by only modifying bindings within the same thread of execution in the `GremlinExecutor`.
* Calls to `use` on the `DependencyManager` now return the list of `GremlinPlugin` instances to initialize instead of just initializing them automatically because it causes problems with `ScriptEngine` setup if a plugin requires a script to be evaluated and a required dependency is not yet loaded.
* `Traversal.SideEffects` has `getGraph()`, `setGraph()`, and `removeGraph()` default helpers.
* `Traversal.Memory` -> `Traversal.SideEffects` and `GraphComputer.SideEffects` -> `GraphComputer.Memory`.
* `StrategyWrappedVertex` and `StrategyWrappedEdge` properly wrap `Element` objects returned from non-traversal based methods.
* Gremlin-Server now sends a single write with status 200 for Object and empty response messages.
* `GremlinGroovyScriptEngine` allows imports to re-import dependencies added via "use".
* Changed order in which the `GremlinExecutor` is initialized such that dependency loading via "use" are handled first which fixes problems with starting Gremlin Server with `gremlin-server-neo4j.yaml`.
* Corrected issues with the "branch factor" related traversals under `SubgraphStrategy`.  This change also altered the semantics of the `SubgraphStrategy` a bit as it became more restrictive around `Edge` inclusion (requires both vertices to be in the subgraph).
* The Gephi Plugin now visualizes traversals and has numerous configuration options.
* Added more specific features around the types of "identifiers" a graph can support.
* Added a new test graph called `MODERN` that is copy of the `CLASSIC` graph, but represents floats as doubles.  This graph will be the default graph for testing going forward.
* Fix bug in `Neo4jGraph` that was not processing multiple vertex labels properly when doing a `has()` step with `IN`.
* Changed semantics of `@LoadGraphWith` in gremlin-test to only refer to the ability of a test implementation to process the data types of the test graph (not to actually load it).
* `StartStep` is a `SideEffect` as it is a process to get data into the stream (like a keyboard) and more efficient as such.
* Greatly simplified the implementations of `Map`, `FlatMap`, `Filter`, and `SideEffect`.
* `Path` data structure changed to an ordered list of objects with each associated to a `Set<String>` of as-labels.
* All sideEffect-based steps no longer extend `FilterStep` with predicate equal true, but a more efficient `SideEffectStep`.
* `TreeStep` now has `TreeMapReduce` for executing on `GraphComputer`.
* `Neo4jTraversal.cypher()` is fluent throughout.
* Reverted back to TP2 model of `as()` referring to step names, not variable names of sideEffects.
* Updated `AddEdge`-step to support property key/value pairs for appending to newly created edges.
* Renamed `Graph.getFeatures()` to `Graph.features()` to be consistent with other API methods.
* `Vertex` and `Edge` now implement all `GraphTraversal` methods to ensure consistency throughout stack.
* `Neo4jTraversal` is auto-generated from `Neo4jTraversalStub` with technique generalizable to other vendors.
* Added test suite to ensure that all traversals are of the same type: `g.V`, `g.E`, `g.of()`, `v.identity()`, `e.identity()`, v-, e-methods.
* Giraph HDFS helpers now support `hdfs.mkdir(string)` and `local.mkdir(string)`
* Added `@OptIn` and `@OptOut` for implementers to specify on their `Graph` implementations for test compliance information.
* `GraphComputer` `Memory` now immutable after computation is complete.
* Dependency grabbing for plugins filter out slf4j logging dependencies so as to avoid multiple bindings with the standard TinkerPop distributions.
* Fixed `GiraphMemory` to be fully consistent with GraphComputer specification.
* Removed fatJar assembly from Giraph-Graph as it is no longed needed with distributed cache model.
* Reworked `GiraphRemoteAcceptor` to provide a `result` variable back to the console with `ComputerResult`.
* `VertexProgram` is no longer `Serializable` (use `loadState` and `storeState` for wire-propagation).
* Moved `GiraphGraph.getOutputGraph()` to `GiraphHelper`.
* Changed `GIRAPH_GREMLIN_HOME` to `GIRAPH_GREMLIN_LIB` to reference directory where jars are to be loaded.
* Updated README with release instructions.

=== TinkerPop 3.0.0.M1 (Release Date: August 12, 2014)

* First official release of TinkerPop3 and thus, no changes.
