| //// |
| 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.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-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-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. |
| * Intoduced 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. |