| //// |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| //// |
| == TinkerPop 3.2.0 (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 <<./changelog-3.1.x.asciidoc#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 <<./changelog-3.1.x.asciidoc#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 <<./changelog-3.1.x.asciidoc#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 <<./changelog-3.1.x.asciidoc#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 <<./changelog-3.1.x.asciidoc#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 <<./changelog-3.1.x.asciidoc#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 <<./changelog-3.1.x.asciidoc#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 |