This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit b840d22c8965652598f278c00511527c9f88f7f0 Author: Stephen Mallette <[email protected]> AuthorDate: Thu Jul 16 15:39:20 2026 -0400 Add See links to 4.0.0-beta.3 upgrade sections Links each section to its reference documentation, pinned to 4.0.0. Assisted-by: Claude Code:claude-opus-4-8 --- docs/src/upgrade/release-4.x.x.asciidoc | 40 +++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/docs/src/upgrade/release-4.x.x.asciidoc b/docs/src/upgrade/release-4.x.x.asciidoc index 8ef445cb7a..ee752ef5e4 100644 --- a/docs/src/upgrade/release-4.x.x.asciidoc +++ b/docs/src/upgrade/release-4.x.x.asciidoc @@ -84,11 +84,13 @@ NOTE: The traversal-based form of `match` (e.g. `g.V().match(as("a").out().as("b TinkerPop 4.0.0 and will be removed in a future release. Users should migrate to the new `match(String)` API. TinkerPop ships a reference GQL engine for `match()` via the optional `gql-gremlin` module. The engine implements the -link:https://tinkerpop.apache.org/docs/x.y.z/reference/#tinkergql[TinkerGQL] dialect — a deliberate minimal subset of +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#tinkergql[TinkerGQL] dialect — a deliberate minimal subset of ISO GQL `MATCH` syntax — and works against any `Graph` implementation through a thin set of default interface methods. TinkerGraph uses it out of the box with no configuration required. Graph providers that want to offer TinkerGQL support can add the `gql-gremlin` dependency and register `GqlDeclarativeMatchStrategy` as described in the -link:https://tinkerpop.apache.org/docs/x.y.z/dev/provider/#tinkerpop-providers-tinkergql[provider documentation]. +link:https://tinkerpop.apache.org/docs/4.0.0/dev/provider/#tinkerpop-providers-tinkergql[provider documentation]. + +See: link:https://tinkerpop.apache.org/docs/4.0.0/reference/#match-step[match()], link:https://tinkerpop.apache.org/docs/4.0.0/reference/#tinkergql[TinkerGQL] ==== Multi-Label Support @@ -157,6 +159,10 @@ gremlin> gml.V().has('name','marko').valueMap(true) ==>{id=0, label=[manager, person, employee], name=[marko]} ``` +See: link:https://issues.apache.org/jira/browse/TINKERPOP-3261[TINKERPOP-3261], +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#tinkergraph-multi-label[Multi-Label], link:https://tinkerpop.apache.org/docs/4.0.0/reference/#labels-step[labels()], +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#the-zoo-toy-graph[The Zoo] + ==== Transactions TinkerPop 4.0 brings a set of related transaction changes across the drivers and embedded graphs: explicit remote @@ -222,7 +228,7 @@ and does not throw. Instead it returns a `TraversalSource` bound to the existing replaces the previous behavior where opening an already-open transaction threw an exception, so review and remove any code that catches or relies on a second open failing. For the semantics of `begin()` and how it interacts with `AUTO`/`MANUAL` transactions, see the -link:https://tinkerpop.apache.org/docs/x.y.z/reference/#transactions[Traversal Transactions] reference documentation. +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#transactions[Traversal Transactions] reference documentation. See: link:https://issues.apache.org/jira/browse/TINKERPOP-3252[TINKERPOP-3252] @@ -386,6 +392,8 @@ This is a breaking change with no backward-compatible alias. The old `evaluation Driver and server should be upgraded together. A driver sending the old `evaluationTimeout` field to a 4.x server has that field silently ignored and falls back to the server's default timeout, as with any unrecognized request argument. +See: link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-server[Gremlin Server] + ==== Java Runtime Upgrade TinkerPop 4.0 raises the minimum Java version from 11 to 17 for both building and running, and adds support for running @@ -428,9 +436,13 @@ that return interceptors and can be registered alongside custom ones. For full details on the interceptor API for each language variant, refer to the RequestInterceptor section in each GLV's documentation in the -link:https://tinkerpop.apache.org/docs/x.y.z/reference/#gremlin-drivers-variants[Gremlin Drivers and Variants] +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-drivers-variants[Gremlin Drivers and Variants] reference. +See: link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-java-interceptors[Java], link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-python-interceptors[Python], +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-javascript-interceptors[JavaScript], link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-dotnet-interceptors[.NET], +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-go-interceptors[Go] + ==== Inconfigurable Request Serialization TinkerPop 3.x drivers used a single serializer configuration (for example, `serializer` in the Java driver or @@ -443,7 +455,7 @@ deserialization. Applications that require a different request body encoding, such as GraphBinary for a server that expects it, can register a request interceptor that serializes the `RequestMessage` and replaces the body and `Content-Type` header. See the RequestInterceptor section for each GLV in the -link:https://tinkerpop.apache.org/docs/x.y.z/reference/#gremlin-drivers-variants[Gremlin Drivers and Variants] +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-drivers-variants[Gremlin Drivers and Variants] reference. See: link:https://issues.apache.org/jira/browse/TINKERPOP-3250[TINKERPOP-3250] @@ -620,6 +632,8 @@ Connection(url, traversal_source, executor, pool, Custom transport implementations are no longer supported. The driver uses `AiohttpHTTPTransport` directly. +See: link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-python[Gremlin-Python] + ==== Removal of sparql-gremlin The `sparql-gremlin` module has been removed following a prolonged period of inactivity. There is currently no direct @@ -723,6 +737,9 @@ try { The traversal API is not affected — `Next()`, `ToList()`, etc. still throw `ResponseException` directly since they block on the async stream internally. +See: link:https://tinkerpop.apache.org/docs/4.0.0/reference/#connecting-via-http[Connecting via HTTP], +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-drivers-variants[Gremlin Drivers and Variants] + ==== More Secure Gremlin Server Previous versions of Gremlin Server relied on a Gremlin-flavored Groovy `ScriptEngine` for basic server initialization, @@ -895,6 +912,10 @@ The leading-underscore restriction on `GValue` names that was present in 3.8.0 h beginning with `_` are now accepted in Java and across all language variants. The only remaining constraints are that a `GValue` may not wrap another `GValue`, and (in the non-Java drivers) its name may not be null. +See: link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-java-gvalue[Java], link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-python-gvalue[Python], +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-javascript-gvalue[JavaScript], link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-dotnet-gvalue[.NET], +link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-go-gvalue[Go] + ==== JavaScript Typed Numeric Wrappers JavaScript has a single `Number` type (IEEE 754 double) which loses the distinction between Gremlin numeric types like @@ -942,6 +963,8 @@ unwrap(toInt(29)); // 29 unwrap('hello'); // 'hello' ---- +See: link:https://tinkerpop.apache.org/docs/4.0.0/reference/#gremlin-javascript-numeric-types[Numeric Types] + ==== Provider Defined Types Graph providers may now expose custom types as Provider Defined Types (PDT) (replacing the old `CustomTypeSerializer` @@ -961,6 +984,9 @@ PDTs come in two flavors: *Composite* (a type name plus a map of fields, for str name plus a single opaque string value, for types expressible as a single stringified value). The gremlin-lang grammar supports both forms via the `PDT("name",[map])` and `PDT("name","value")` literals respectively. +See: link:https://tinkerpop.apache.org/docs/4.0.0/dev/provider/#provider-defined-types[Provider Defined Types], +link:https://tinkerpop.apache.org/docs/4.0.0/dev/provider/#primitive-provider-defined-types[Primitive Provider Defined Types] + ==== Tree No Longer Extends HashMap @@ -1116,7 +1142,7 @@ GLVs: interceptors receive a mutable HTTP request object, can modify headers/bod the request body to JSON after all interceptors have run. For the full specification of how interceptors should behave, see the -link:https://tinkerpop.apache.org/docs/x.y.z/dev/provider/#_http_request_interceptor[HTTP Request Interceptor] +link:https://tinkerpop.apache.org/docs/4.0.0/dev/provider/#_http_request_interceptor[HTTP Request Interceptor] section in the provider documentation. ===== match() Support @@ -1150,7 +1176,7 @@ first use and caches them for the lifetime of the graph, sharing the planner's q traversals. Optional performance hints are available via `countVerticesByLabel()`, `countEdgesByLabel()`, and `Graph.Index`. See `GqlMatchStep` and `GqlDeclarativeMatchStrategy` in `gql-gremlin` for the complete reference implementation, and the -link:https://tinkerpop.apache.org/docs/x.y.z/dev/provider/#tinkerpop-providers-tinkergql[provider documentation] +link:https://tinkerpop.apache.org/docs/4.0.0/dev/provider/#tinkerpop-providers-tinkergql[provider documentation] for wiring instructions. == TinkerPop 4.0.0-beta.2
