http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a297b0dd/docs/src/reference/the-graph.asciidoc
----------------------------------------------------------------------
diff --cc docs/src/reference/the-graph.asciidoc
index 9bc5c65,339b392..1c8c2dc
--- a/docs/src/reference/the-graph.asciidoc
+++ b/docs/src/reference/the-graph.asciidoc
@@@ -612,9 -706,90 +602,8 @@@ IMPORTANT: When using the extended typ
  Gremlin Language Variants is dependent on the programming language, the 
driver and its serializers. These
  implementations are only required to support the core types and not the 
extended ones.
  
 -Here's the same previous example of GraphSON 1.0, but with GraphSON 2.0:
 -
 -[gremlin-groovy]
 -----
 -graph = TinkerFactory.createModern()
 -g = graph.traversal()
 -f = new ByteArrayOutputStream()
 -mapper = graph.io(graphson()).mapper().version(GraphSONVersion.V2_0).create()
 -graph.io(graphson()).writer().mapper(mapper).create().writeVertex(f, 
g.V(1).next(), BOTH)
 -f.close()
 -----
 -
 -Creating a GraphSON 2.0 mapper is done by calling 
`.version(GraphSONVersion.V2_0)` on the mapper builder. Here's is the
 -example output from the code above:
 -
 -[source, json]
 -----
 -{
 -    "@type": "g:Vertex",
 -    "@value": {
 -        "id": {
 -            "@type": "g:Int32",
 -            "@value": 1
 -        },
 -        "label": "person",
 -        "properties": {
 -            "name": [{
 -                "@type": "g:VertexProperty",
 -                "@value": {
 -                    "id": {
 -                        "@type": "g:Int64",
 -                        "@value": 0
 -                    },
 -                    "value": "marko",
 -                    "label": "name"
 -                }
 -            }],
 -            "uuid": [{
 -                "@type": "g:VertexProperty",
 -                "@value": {
 -                    "id": {
 -                        "@type": "g:Int64",
 -                        "@value": 12
 -                    },
 -                    "value": {
 -                        "@type": "g:UUID",
 -                        "@value": "829c7ddb-3831-4687-a872-e25201230cd3"
 -                    },
 -                    "label": "uuid"
 -                }
 -            }],
 -            "age": [{
 -                "@type": "g:VertexProperty",
 -                "@value": {
 -                    "id": {
 -                        "@type": "g:Int64",
 -                        "@value": 1
 -                    },
 -                    "value": {
 -                        "@type": "g:Int32",
 -                        "@value": 29
 -                    },
 -                    "label": "age"
 -                }
 -            }]
 -        }
 -    }
 -}
 -----
 -
 -Types can be disabled when creating a GraphSON 2.0 `Mapper` with:
 -
 -[source,groovy]
 -----
 -graph.io(graphson()).mapper().
 -      version(GraphSONVersion.V2_0).
 -      typeInfo(GraphSONMapper.TypeInfo.NO_TYPES).create()
 -----
 -
 -By disabling types, the JSON payload produced will lack the extra information 
that is written for types. Please note,
 -disabling types can be unsafe with regards to the written data in that types 
can be lost.
 -
  [[gryo-reader-writer]]
- Gryo Reader/Writer
- ~~~~~~~~~~~~~~~~~~
+ === Gryo Reader/Writer
  
  image:gremlin-kryo.png[width=400,float=left] 
link:https://github.com/EsotericSoftware/kryo[Kryo] is a popular
  serialization package for the JVM. Gremlin-Kryo is a binary `Graph` 
serialization format for use on the JVM by JVM

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a297b0dd/docs/src/reference/the-graphcomputer.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a297b0dd/docs/src/reference/the-traversal.asciidoc
----------------------------------------------------------------------
diff --cc docs/src/reference/the-traversal.asciidoc
index fcfe83e,167073a..de99b7f
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@@ -220,12 -211,9 +215,11 @@@ g.addE('knows').from(marko).to(peter) <
  <4> The newly created edge is a traversable object.
  <5> Two arbitrary bindings in a traversal can be joined `from()`->`to()`, 
where `id` can be provided for graphs that
  supports user provided ids.
 +<6> Add an edge between marko and peter given the directed (detached) vertex 
references.
 +<7> Add an edge between marko and peter given the directed (detached) vertex 
references.
  
  [[addvertex-step]]
- AddVertex Step
- ~~~~~~~~~~~~~~
+ === AddVertex Step
  
  The `addV()`-step is used to add vertices to the graph (*map*/*sideEffect*). 
For every incoming object, a vertex is
  created. Moreover, `GraphTraversalSource` maintains an `addV()` method.
@@@ -1317,10 -1269,9 +1274,9 @@@ g.V().hasLabel('person')
  An option to a <<branch-step,`branch()`>> or <<choose-step,`choose()`>>.
  
  [[optional-step]]
- Optional Step
- ~~~~~~~~~~~~~
+ === Optional Step
  
 -The `optional()`-step (*map*) returns the result of the specified traversal 
if it yields a result else it returns the calling
 +The `optional()`-step (*branch/flatMap*) returns the result of the specified 
traversal if it yields a result else it returns the calling
  element, i.e. the `identity()`.
  
  [gremlin-groovy,modern]
@@@ -2120,38 -2053,8 +2058,36 @@@ g.V('A').as('a')
  <3> Traverse all acyclic 3-hop paths starting from vertex `A` and from there 
again all 3-hop paths. The second path may
  cross the vertices from the first path.
  
 +[[skip-step]]
- Skip Step
- ~~~~~~~~~
++=== Skip Step
 +
 +The `skip()`-step is analogous to <<range-step,`range()`-step>> save that the 
higher end range is set to -1.
 +
 +[gremlin-groovy,modern]
 +----
 +g.V().values('age').order()
 +g.V().values('age').order().skip(2)
 +g.V().values('age').order().range(2, -1)
 +----
 +
 +The `skip()`-step can also be applied with `Scope.local`, in which case it 
operates on the incoming collection.
 +
 +[gremlin-groovy,modern]
 +----
 +g.V().hasLabel('person').filter(outE('created')).as('p'). <1>
 +  map(out('created').values('name').fold()).
 +  project('person','primary','other').
 +    by(select('p').by('name')).
 +    by(limit(local, 1)). <2>
 +    by(skip(local, 1)) <3>
 +----
 +
 +<1> For each person who created something...
 +<2> ...select the first project (random order) as `primary` and...
 +<3> ...select all other projects as `other`.
 +
  [[store-step]]
- Store Step
- ~~~~~~~~~~
+ === Store Step
  
  When link:http://en.wikipedia.org/wiki/Lazy_evaluation[lazy] aggregation is 
needed, `store()`-step (*sideEffect*)
  should be used over <<aggregate-step,`aggregate()`>>. The two steps differ in 
that `store()` does not block and only

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a297b0dd/docs/src/tutorials/getting-started/index.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a297b0dd/docs/src/tutorials/gremlin-language-variants/index.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a297b0dd/docs/src/upgrade/index.asciidoc
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a297b0dd/docs/src/upgrade/release-3.2.x-incubating.asciidoc
----------------------------------------------------------------------
diff --cc docs/src/upgrade/release-3.2.x-incubating.asciidoc
index b331d83,d578c2d..920a699
--- a/docs/src/upgrade/release-3.2.x-incubating.asciidoc
+++ b/docs/src/upgrade/release-3.2.x-incubating.asciidoc
@@@ -145,11 -132,20 +132,9 @@@ See: link:https://issues.apache.org/jir
  
  Please see the 
link:https://github.com/apache/tinkerpop/blob/3.2.5/CHANGELOG.asciidoc#release-3-2-5[changelog]
 for a complete list of all the modifications that are part of this release.
  
- Upgrading for Users
- ~~~~~~~~~~~~~~~~~~~
+ === Upgrading for Users
  
- DSL Support
- ^^^^^^^^^^^
 -==== GraphSON Path Serialization
 -
 -Serialization of `Path` with GraphSON was inconsistent with Gryo in that all 
the properties on any elements of
 -the `Path` were being included. With Gryo that, correctly, was not happening 
as that could be extraordinarily
 -expensive. GraphSON serialization has now been modified to properly not 
include properties. That change can cause
 -breaks in application code if that application code tries to access 
properties on elements in a `Path` as they
 -will no longer be there. Applications that require the properties will need 
to alter their Gremlin to better
 -restrict the data they want to retrieve.
 -
 -See: link:https://issues.apache.org/jira/browse/TINKERPOP-1676[TINKERPOP-1676]
 -
+ ==== DSL Support
  
  It has always been possible to construct Domain Specific Languages (DSLs) 
with Gremlin, but the approach has required
  a somewhat deep understanding of the TinkerPop code base and it is not 
something that has had a recommeded method
@@@ -169,20 -165,7 +154,18 @@@ social.persons().where(createdAtLeast(2
  See: link:https://issues.apache.org/jira/browse/TINKERPOP-786[TINKERPOP-786],
  link:http://tinkerpop.apache.org/docs/3.2.5/reference/#dsl[Reference 
Documentation]
  
- GraphSON Path Serialization
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== GraphSON Path Serialization
 +
 +Serialization of `Path` with GraphSON was inconsistent with Gryo in that all 
the properties on any elements of
 +the `Path` were being included. With Gryo that, correctly, was not happening 
as that could be extraordinarily
 +expensive. GraphSON serialization has now been modified to properly not 
include properties. That change can cause
 +breaks in application code if that application code tries to access 
properties on elements in a `Path` as they
 +will no longer be there. Applications that require the properties will need 
to alter their Gremlin to better
 +restrict the data they want to retrieve.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1676[TINKERPOP-1676]
 +
- Authentication Configuration
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ ==== Authentication Configuration
  
  The server settings previously used `authentication.className` to set an 
authenticator for the the two provided
  authentication handler and channelizer classes to use. This has been 
deprecated in favor of `authentication.authenticator`.
@@@ -959,13 -888,7 +888,11 @@@ link:https://issues.apache.org/jira/bro
  
link:http://tinkerpop.apache.org/docs/3.2.2/reference/#console-preferences[Reference
 Documentation -
  Console Preferences]
  
- REST API Renamed to HTTP API
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== REST API Renamed to HTTP API
 +This is only a rename to clarify the design of the API. There is no change to 
the API itself.
 +
 +
- Upgrading for Providers
- ~~~~~~~~~~~~~~~~~~~~~~~
+ === Upgrading for Providers
  
  IMPORTANT: It is recommended that providers also review all the upgrade 
instructions specified for users. Many of the
  changes there may prove important for the provider's implementation.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a297b0dd/docs/src/upgrade/release-3.3.x.asciidoc
----------------------------------------------------------------------
diff --cc docs/src/upgrade/release-3.3.x.asciidoc
index 1c404c3,0000000..fa50d47
mode 100644,000000..100644
--- a/docs/src/upgrade/release-3.3.x.asciidoc
+++ b/docs/src/upgrade/release-3.3.x.asciidoc
@@@ -1,651 -1,0 +1,615 @@@
 +////
 +Licensed to the Apache Software Foundation (ASF) under one or more
 +contributor license agreements.  See the NOTICE file distributed with
 +this work for additional information regarding copyright ownership.
 +The ASF licenses this file to You under the Apache License, Version 2.0
 +(the "License"); you may not use this file except in compliance with
 +the License.  You may obtain a copy of the License at
 +
 +  http://www.apache.org/licenses/LICENSE-2.0
 +
 +Unless required by applicable law or agreed to in writing, software
 +distributed under the License is distributed on an "AS IS" BASIS,
 +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 +See the License for the specific language governing permissions and
 +limitations under the License.
 +////
 +
- TinkerPop 3.3.0
- ===============
++= TinkerPop 3.3.0
 +
 
+image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/images/gremlin-mozart.png[width=225]
 +
 +*Gremlin Symphony #40 in G Minor*
 +
- TinkerPop 3.3.1
- ---------------
++== TinkerPop 3.3.1
 +
 +*Release Date: NOT OFFICIALLY RELEASED YET*
 +
 +Please see the 
link:https://github.com/apache/tinkerpop/blob/3.3.1/CHANGELOG.asciidoc#release-3-3-1[changelog]
 for a complete list of all the modifications that are part of this release.
 +
- Upgrading for Users
- ~~~~~~~~~~~~~~~~~~~
++=== Upgrading for Users
 +
- PageRankVertexProgram
- ^^^^^^^^^^^^^^^^^^^^^
++==== PageRankVertexProgram
 +
 +There were two major bugs in the way in which PageRank was being calculated 
in `PageRankVertexProgram`. First, teleportation
 +energy was not being distributed correctly amongst the vertices at each 
round. Second, terminal vertices (i.e. vertices
 +with no outgoing edges) did not have their full gathered energy distributed 
via teleportation.
 +
 +For users upgrading, note that while the relative rank orders will remain 
"the same," the actual PageRank values will differ
 +from prior TinkerPop versions.
 +
 +```
 +VERTEX  iGRAPH    TINKERPOP
 +marko   0.1119788 0.11375485828040575
 +vadas   0.1370267 0.14598540145985406
 +lop     0.2665600 0.30472082661863686
 +josh    0.1620746 0.14598540145985406
 +ripple  0.2103812 0.1757986539008437
 +peter   0.1119788 0.11375485828040575
 +```
 +
 +Normalization preserved through computation:
 +
 +```
 +0.11375485828040575 +
 +0.14598540145985406 +
 +0.30472082661863686 +
 +0.14598540145985406 +
 +0.1757986539008437 +
 +0.11375485828040575
 +==>1.00000000000000018
 +```
 +
 +Two other additions to `PageRankVertexProgram` were provided as well.
 +
 +1. It now calculates the vertex count and thus, no longer requires the user 
to specify the vertex count.
 +2. It now allows the user to leverage an epsilon-based convergence instead of 
having to specify the number of iterations to execute.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1783[TINKERPOP-1783]
 +
- IO Defaults
- ^^^^^^^^^^^
++==== IO Defaults
 +
 +While 3.3.0 released Gryo 3.0 and GraphSON 3.0 and these versions were 
defaulted in a number of places, it seems that
 +some key defaults were missed. Specifically, calls to `Graph.io(graphson())` 
and `Graph.io(gryo())` were still using
 +the old versions. The defaults have now been changed to ensure 3.0 is 
properly referenced in those cases.
 +
- Upgrade Neo4j
- ^^^^^^^^^^^^^
++==== Upgrade Neo4j
 +
 +See Neo4j's link:https://neo4j.com/guides/upgrade/[3.2 Upgrade FAQ] for a 
complete guide on how to upgrade from the previous 2.3.3 version. Also note 
that many of the configuration settings have 
link:https://neo4j.com/developer/kb/manually-migrating-configuration-settings-from-neo4j-2x-to-neo4j-3x/[changed
 from neo4j 2x to 3x]
 +
 +In particular, these properties referenced in TinkerPop documentation and 
configuration were renamed:
 +
 +[width="100%",cols="2",options="header"]
 +|=========================================================
 +|Neo4j 2.3 (TinkerPop \<= 3.3.0) |Neo4j 3.2 (TinkerPop 3.3.1)
 +|node_auto_indexing |dbms.auto_index.nodes.enabled
 +|relationship_auto_indexing |dbms.auto_index.relationships.enabled
 +|ha.cluster_server |ha.host.coordination
 +|ha.server |ha.host.data
 +|=========================================================
 +
 +
- Upgrading for Providers
- ~~~~~~~~~~~~~~~~~~~~~~~
++=== Upgrading for Providers
 +
 +IMPORTANT: It is recommended that providers also review all the upgrade 
instructions specified for users. Many of the
 +changes there may prove important for the provider's implementation.
 +
- Graph Database Providers
- ^^^^^^^^^^^^^^^^^^^^^^^^
++==== Graph Database Providers
 +
- IO Version Check
- ++++++++++++++++
++===== IO Version Check
 +
 +In the `Graph.io()` method, providers are to bootstrap the `Io` instance 
returned with their own custom serializers
 +typically provided through a custom `IoRegistry` instance. Prior to this 
change it was not possible to easily determine
 +the version of `Io` that was expected (nor was it especially necessary as 
TinkerPop didn't have breaking format changes
 +between versions). As of 3.3.0 however, there could be IO test 
incompatibilities for some providers who need to
 +register a different `IoRegistry` instance depending on the version the user 
wants.
 +
 +To allow for that check, the `Io` interface now has the following method:
 +
 +[source,java]
 +----
 +public <V> boolean requiresVersion(final V version);
 +----
 +
 +which allows the graph provider to check if a specific `GryoVersion` or 
`GraphSONVersion` is required. Using that
 +information, the provider could then assign the right `IoRegistry` to match 
that.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1767[TINKERPOP-1767]
 +
 +
- TinkerPop 3.3.0
- ---------------
++== TinkerPop 3.3.0
 +
 +*Release Date: August 21, 2017*
 +
 +Please see the 
link:https://github.com/apache/tinkerpop/blob/3.3.0/CHANGELOG.asciidoc#release-3-3-0[changelog]
 for a complete list of all the modifications that are part of this release.
 +
- Upgrading for Users
- ~~~~~~~~~~~~~~~~~~~
++=== Upgrading for Users
 +
- Packaged Data Files
- ^^^^^^^^^^^^^^^^^^^
++==== Packaged Data Files
 +
 +TinkerPop has always packaged sample graphs with its zip distributions. As of 
3.3.0, the distributions will only
 +include Gryo 3.0, GraphSON 3.0 and GraphML (which is unversioned) files. 
Other versions are not included, but could
 +obviously be generated using the IO API directly.
 +
- GraphTraversal Has-Methods Re-Organized
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== GraphTraversal Has-Methods Re-Organized
 +
 +`GraphTraversal.hasXXX()`, where `XXX` is `Id`, `Label`, `Key`, `Value`, was 
faulty in that they relied on calling an
 +intermediate method for flattening `Object[]` arguments and thus, yielding a 
non 1-to-1 correspondence between `GraphTraversal`
 +and `Bytecode`. This has been remedied. Most users will not notice this 
change. Perhaps only some users that may use
 +Java reflection over `GraphTraversal` might have a simple problem.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1520[TINKERPOP-1520]
 +
- Changes to IO
- ^^^^^^^^^^^^^
++==== Changes to IO
 +
- Gryo 3.0
- ++++++++
++===== Gryo 3.0
 +
 +With Gryo, TinkerPop skips version 2.0 and goes right to 3.0 (to maintain 
better parity with GraphSON versioning).
 +Gryo 3.0 fixes a number of inconsistencies with Gryo 1.0 and hopefully marks 
a point where Gryo is better versioned
 +over time. Gryo 3.0 is not compatible with Gryo 1.0 and is now the default 
version of Gryo exposed by TinkerPop in
 +Gremlin Server and IO.
 +
 +It isn't hard to switch back to use of Gryo 1.0 if necessary. Here is the 
approach for writing an entire graph:
 +
 +[source,java]
 +----
 +Graph graph = TinkerFactory.createModern();
 +GryoMapper mapper = 
graph.io(IoCore.gryo()).mapper().version(GryoVersion.V1_0).create()
 +try (OutputStream os = new FileOutputStream("tinkerpop-modern.json")) {
 +    graph.io(IoCore.gryo()).writer().mapper(mapper).create().writeGraph(os, 
graph)
 +}
 +
 +final Graph newGraph = TinkerGraph.open();
 +try (InputStream stream = new FileInputStream("tinkerpop-modern.json")) {
 +    
newGraph.io(IoCore.gryo()).reader().mapper(mapper).create().readGraph(stream, 
newGraph);
 +}
 +----
 +
 +Gremlin Server configurations don't include Gryo 1.0 by default:
 +
 +[source,yaml]
 +----
 +serializers:
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { 
ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}    
         # application/vnd.gremlin-v3.0+gryo
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { 
serializeResultToString: true }}                                                
                       # application/vnd.gremlin-v3.0+gryo-stringd
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: 
{ ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}    
     # application/json
 +----
 +
 +but adding an entry as follows will add it back:
 +
 +[source,yaml]
 +----
 +serializers:
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { 
ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}    
         # application/vnd.gremlin-v1.0+gryo
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { 
ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}    
         # application/vnd.gremlin-v3.0+gryo
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { 
serializeResultToString: true }}                                                
                       # application/vnd.gremlin-v3.0+gryo-stringd
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: 
{ ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}    
     # application/json
 +----
 +
 +To use Gryo 1.0 with the Java driver, just specify the 1.0 serializer 
directly:
 +
 +[source,java]
 +----
 +GryoMapper.Builder builder = GryoMapper.build().
 +        version(GryoVersion.V1_0).
 +        addRegistry(TinkerIoRegistryV1d0.instance());
 +Cluster cluster = 
Cluster.build().serializer(GryoMessageSerializerV1d0(builder));
 +----
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1698[TINKERPOP-1698]
 +
- GraphSON 3.0
- ++++++++++++
++===== GraphSON 3.0
 +
 +GraphSON 3.0 finishes what GraphSON 2.0 began by taking the extra step to 
include the following types: `g:Map`,
 +`g:List` and `g:Set`. With these types it is now possible to get expected 
Gremlin results in GLVs just as one would
 +if using Java. This is especially true of the `g:Map` type, which allows 
non-string keys values, something not allowed
 +in regular JSON maps. This allows for common traversals like 
`g.V().groupCount()` to work, where the traversal groups
 +on a `Vertex` or some other complex object.
 +
 +Note that GraphSON 3.0 does not have an option to be without types. This was 
a feature of 1.0 and 2.0, but it is no
 +longer supported. There is little point to such a feature as we see more 
movement toward GLVs, which require types,
 +and less usage of scripts with custom parsing of results.
 +
 +Both TinkerGraph and Gremlin Server have been defaulted to work with GraphSON 
3.0. For TinkerGraph this means that
 +the following commands:
 +
 +[source,java]
 +----
 +Graph graph = TinkerFactory.createModern();
 +graph.io(IoCore.graphson()).writeGraph("tinkerpop-modern.json");
 +
 +final Graph newGraph = TinkerGraph.open();
 +newGraph.io(IoCore.graphson()).readGraph("tinkerpop-modern.json");
 +----
 +
 +will write and read GraphSON 3.0 format rather than 1.0. To use 1.0 (or 2.0 
for that matter) format simply set the
 +`version()` on the appropriate builder methods:
 +
 +[source,java]
 +----
 +Graph graph = TinkerFactory.createModern();
 +GraphSONMapper mapper = 
graph.io(IoCore.graphson()).mapper().version(GraphSONVersion.V1_0).create()
 +try (OutputStream os = new FileOutputStream("tinkerpop-modern.json")) {
 +    
graph.io(IoCore.graphson()).writer().mapper(mapper).create().writeGraph(os, 
graph)
 +}
 +
 +final Graph newGraph = TinkerGraph.open();
 +try (InputStream stream = new FileInputStream("tinkerpop-modern.json")) {
 +    
newGraph.io(IoCore.graphson()).reader().mapper(mapper).create().readGraph(stream,
 newGraph);
 +}
 +----
 +
 +For Gremlin Server, this change means that the `application/json` mime type 
no longer returns GraphSON 1.0 without
 +type embedding. Instead, Gremlin Server will return GraphSON 3.0 with partial 
types enabled (i.e. which is equivalent
 +to `application/vnd.gremlin-v3.0+json`). The `serializers` section the sample 
Gremlin Server YAML files now typically
 +look like this:
 +
 +[source,yaml]
 +----
 +serializers:
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { 
ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}    
         # application/vnd.gremlin-v3.0+gryo
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { 
serializeResultToString: true }}                                                
                       # application/vnd.gremlin-v3.0+gryo-stringd
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: 
{ ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}    
     # application/json
 +----
 +
 +It is possible to bring back the original configuration for 
`application/json` by changing the last entry as follows:
 +
 +[source,yaml]
 +----
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { 
ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3d0] }}    
         # application/vnd.gremlin-v3.0+gryo
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { 
serializeResultToString: true }}                                                
                       # application/vnd.gremlin-v3.0+gryo-stringd
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: 
{ ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0]  }}   
     # application/json
 +----
 +
 +See: 
link:https://issues.apache.org/jira/browse/TINKERPOP-1414[TINKERPOP-1414],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1427[TINKERPOP-1427],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1574[TINKERPOP-1574]
 +
- Graphite and Ganglia
- ^^^^^^^^^^^^^^^^^^^^
++==== Graphite and Ganglia
 +
 +Graphite and Ganglia are no longer packaged with the Gremlin Server 
distribution. They are considered optional
 +dependencies and therefore must be installed manually by the user.
 +
 +See: 
link:https://issues.apache.org/jira/browse/TINKERPOP-1550[TINKERPOP-1550],
 +link:http://tinkerpop.apache.org/docs/3.3.0/reference/#metrics[Reference 
Documentation - Metrics]
 +
- SelectStep Defaults to Pop.last
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== SelectStep Defaults to Pop.last
 +
 +`SelectStep` and `SelectOneStep` (`select()`) are the only `Scoping` steps 
that default to `Pop.mixed` as their labeled path
 +selection criteria. All other steps, like `match()`, `where()` and `dedup()`, 
use `Pop.last`. In order to better enable optimizations
 +around total `Pop.last` traversals, the `select()`-steps now default to 
`Pop.last`. Most users will not notice a difference as
 +it is rare for repeated labels to be used in practice. However, formal 
backwards compatibility is possible as outlined below.
 +
 +Assuming that `x` is not a `Pop` argument:
 +
 +1. Change all `select(x,y,z)` calls to `selectV3d2(x,y,z)` calls.
 +2. Change all `select(x,y,z)`-step calls to `select(Pop.mixed,x,y,z)`.
 +
 +If an explicit `Pop` argument is provided, then no changes are required.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1541[TINKERPOP-1541]
 +
- OptionalStep and Side-Effects
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== OptionalStep and Side-Effects
 +
 +The `optional()`-step was previously implemented using `ChooseStep`. However, 
if the optional branch contained side-effects,
 +then unexpected behaviors can emerge. Thus, a potential backwards 
compatibility issue arises if side-effects were being
 +used in `optional()`. However, the behavior would be unpredictable so this 
backwards incompatibility is desirable.
 +
 +See link:https://issues.apache.org/jira/browse/TINKERPOP-1506[TINKERPOP-1506]
 +
- Gremlin Console Initialization
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== Gremlin Console Initialization
 +
 +It is no longer possible to intialize the Gremlin Console with a script 
without use of `-e`. In other words, prior
 +versions allowed:
 +
 +[source,text]
 +bin/gremlin.sh gremlin.groovy
 +
 +Such a command must now be written as:
 +
 +[source,text]
 +bin/gremlin.sh -i gremlin.groovy
 +
 +See: 
link:https://issues.apache.org/jira/browse/TINKERPOP-1283[TINKERPOP-1283],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1651[TINKERPOP-1651]
 +
- GraphTraversal valueMap() Signature Updated
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== GraphTraversal valueMap() Signature Updated
 +
 +`GraphTraversal.valueMap(includeTokens,propertyKeys...)` now returns a 
`Map<Object,E>` to account for the presence of `T.id` or `T.label` if you pass 
`true` to it.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1283[TINKERPOP-1483]
 +
- HADOOP_GREMLIN_LIBS and Spark
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== HADOOP_GREMLIN_LIBS and Spark
 +
 +The TinkerPop reference documentation has always mentioned that the 
`gremlin-spark` `/lib` directory needed to be
 +added to `HADOOP_GREMLIN_LIBS` environment variable. In reality, that was not 
truly necessary. With Spark 1.x having
 +`gremlin-spark` in `HADOOP_GREMLIN_LIBS` hasn't been a problem, but Spark 2.0 
introduces a check for duplicate jars
 +on the path which will cause job initialization to fail. As a result, going 
forward with TinkerPop 3.3.0, the
 +`gremlin-spark` `lib` directory should not be included in 
`HADOOP_GREMLIN_LIBS`.
 +
- Deprecation Removal
- ^^^^^^^^^^^^^^^^^^^
++==== Deprecation Removal
 +
 +The following deprecated classes, methods or fields have been removed in this 
version:
 +
 +* `giraph-gremlin`
 +** `org.apache.tinkerpop.gremlin.giraph.groovy.plugin.GiraphGremlinPlugin`
 +* `gremlin-console`
 +** `org.apache.tinkerpop.gremlin.console.Console(String)`
 +** `org.apache.tinkerpop.gremlin.console.ConsoleImportCustomizerProvider`
 +** `org.apache.tinkerpop.gremlin.console.plugin.*`
 +** `org.apache.tinkerpop.gremlin.console.groovy.plugin.DriverGremlinPlugin`
 +** `org.apache.tinkerpop.gremlin.console.groovy.plugin.DriverRemoteAcceptor`
 +** `org.apache.tinkerpop.gremlin.console.groovy.plugin.GephiGremlinPlugin`
 +** `org.apache.tinkerpop.gremlin.console.groovy.plugin.UtilitiesGremlinPlugin`
 +* `gremlin-core`
 +** `org.apache.tinkerpop.gremlin.jsr223.CoreGremlinModule`
 +** `org.apache.tinkerpop.gremlin.jsr223.CoreGremlinPlugin#INSTANCE`
 +** `org.apache.tinkerpop.gremlin.jsr223.GremlinModule`
 +** 
`org.apache.tinkerpop.gremlin.jsr223.SingleGremlinScriptEngineManager#getInstance()`
 +** 
`org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngineManager#addModule(GremlinModule)`
 +** `org.apache.tinkerpop.gremlin.jsr223.console.PluginAcceptor`
 +** `org.apache.tinkerpop.gremlin.process.traversal.TraversalSource.Builder`
 +** `org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP(P...)`
 +** `org.apache.tinkerpop.gremlin.process.traversal.util.AndP(P...)`
 +** `org.apache.tinkerpop.gremlin.process.traversal.util.OrP(P...)`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.util.TraversalScriptFunction`
 +** `org.apache.tinkerpop.gremlin.process.traversal.util.TraversalScriptHelper`
 +** `org.apache.tinkerpop.gremlin.process.traversal.Order.keyIncr`
 +** `org.apache.tinkerpop.gremlin.process.traversal.Order.valueIncr`
 +** `org.apache.tinkerpop.gremlin.process.traversal.Order.keyDecr`
 +** `org.apache.tinkerpop.gremlin.process.traversal.Order.valueIncr`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.GraphTraversal.mapKeys()`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.GraphTraversal.mapValues()`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal#addV(Object...)`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal#addE(Direction,
 String, String, Object...)`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal#addOutE(String,
 String, Object...)`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal#addInV(String,
 String, Object...)`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal#selectV3d2()`
 +** `org.apache.tinkerpop.gremlin.process.traversal.Bindings()`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource#withBindings(Bindings)`
 +** `org.apache.tinkerpop.gremlin.structure.Transaction.submit(Function)`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal#sack(BiFunction,String)`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.LazyBarrierStrategy`
 +** `org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects` 
(various methods)
 +** 
`org.apache.tinkerpop.gremlin.process.computer.traversal.step.VertexComputing#generateComputer(Graph)`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal#groupV3d0(String)`
 +** 
`org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal#groupV3d0()`
 +** 
`org.apache.tinkerpop.gremlin.structure.Graph.Features.VertexPropertyFeatures#supportsAddProperty()`
 +** 
`org.apache.tinkerpop.gremlin.structure.Graph.Features.VertexPropertyFeatures#FEATURE_ADD_PROPERTY`
 +** 
`org.apache.tinkerpop.gremlin.structure.Graph.OptIn#SUITE_GROOVY_PROCESS_STANDARD`
 +** 
`org.apache.tinkerpop.gremlin.structure.Graph.OptIn#SUITE_GROOVY_PROCESS_COMPUTER`
 +** 
`org.apache.tinkerpop.gremlin.structure.Graph.OptIn#SUITE_GROOVY_ENVIRONMENT`
 +** 
`org.apache.tinkerpop.gremlin.structure.Graph.OptIn#SUITE_GROOVY_ENVIRONMENT_INTEGRATE`
 +** `org.apache.tinkerpop.gremlin.structure.io.Io.Builder#registry(IoRegistry)`
 +** 
`org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper.Builder#embedTypes(boolean)`
 +** `org.apache.tinkerpop.gremlin.structure.Transaction.submit(Function)`
 +** 
`org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge(Object,String,Map,Pair,Pair)`
 +** `org.apache.tinkerpop.gremlin.util.CoreImports`
 +** `org.apache.tinkerpop.gremlin.util.ScriptEngineCache`
 +** `org.apache.tinkerpop.gremlin.process.computer.util.ConfigurationTraversal`
 +* `gremlin-driver`
 +** 
`org.apache.tinkerpop.gremlin.driver.Cluster$Builder#reconnectIntialDelay(int)`
 +** 
`org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0(GryoMapper)`
 +** 
`org.apache.tinkerpop.gremlin.driver.ser.AbstractGraphSONMessageSerializerV2d0#TOKEN_USE_MAPPER_FROM_GRAPH`
 +** 
`org.apache.tinkerpop.gremlin.driver.ser.AbstractGryoSONMessageSerializerV2d0#TOKEN_USE_MAPPER_FROM_GRAPH`
 +* `gremlin-groovy`
 +** `org.apache.tinkerpop.gremlin.groovy.AbstractImportCustomizerProvider`
 +** `org.apache.tinkerpop.gremlin.groovy.CompilerCustomizerProvider`
 +** `org.apache.tinkerpop.gremlin.groovy.DefaultImportCustomizerProvider`
 +** `org.apache.tinkerpop.gremlin.groovy.EmptyImportCustomizerProvider`
 +** `org.apache.tinkerpop.gremlin.groovy.ImportCustomizerProvider`
 +** `org.apache.tinkerpop.gremlin.groovy.NoImportCustomizerProvider`
 +** `org.apache.tinkerpop.gremlin.groovy.engine.ConcurrentBindings`
 +** 
`org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor#build(String,List,List,List,Map)`
 +** 
`org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor#getScriptEngines()`
 +** 
`org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor#getGlobalBindings()`
 +** 
`org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.Builder#enabledPlugins(Set)`
 +** 
`org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.Builder#addEngineSettings(String,List,List,List,Map)`
 +** 
`org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.Builder#engineSettings(Map)`
 +** 
`org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.Builder#use(List)`
 +** `org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines`
 +** `org.apache.tinkerpop.gremlin.groovy.function.*`
 +** `org.apache.tinkerpop.gremlin.groovy.plugin.*`
 +** `org.apache.tinkerpop.gremlin.groovy.plugin.credential.*`
 +** `org.apache.tinkerpop.gremlin.groovy.jsr223.DependencyManager`
 +** 
`org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine(ImportCustomizerProvider)`
 +** 
`org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine(CompilerCustomizerProvider)`
 +** 
`org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine#plugins()`
 +** `org.apache.tinkerpop.gremlin.groovy.jsr223.ScriptExecutor`
 +** `org.apache.tinkerpop.gremlin.groovy.jsr223.ScriptEnginePluginAcceptor`
 +** `org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.SandboxExtension`
 +** `org.apache.tinkerpop.gremlin.groovy.jsr223.customizer.*`
 +** 
`org.apache.tinkerpop.gremlin.groovy.util.DependencyGrabber#deleteDependenciesFromPath(org.apache.tinkerpop.gremlin.groovy.plugin.Artifact)`
 +** 
`org.apache.tinkerpop.gremlin.groovy.util.DependencyGrabber#copyDependenciesToPath(org.apache.tinkerpop.gremlin.groovy.plugin.Artifact)`
 +* `gremlin-python`
 +** `org.apache.tinkerpop.gremlin.python.jsr223.GremlinJythonScriptEngine#()`
 +* `gremlin-server`
 +** `org.apache.tinkerpop.gremlin.server.GremlinServer(ServerGremlinExecutor)`
 +** `org.apache.tinkerpop.gremlin.server.Settings#plugins`
 +** 
`org.apache.tinkerpop.gremlin.server.auth.AllowAllAuthenticator.newSaslNegotiator()`
 +** 
`org.apache.tinkerpop.gremlin.server.auth.Authenticator.newSaslNegotiator()`
 +** 
`org.apache.tinkerpop.gremlin.server.auth.Krb5Authenticator.newSaslNegotiator()`
 +** 
`org.apache.tinkerpop.gremlin.server.auth.SimpleAuthenticator.newSaslNegotiator()`
 +** `org.apache.tinkerpop.gremlin.server.handler.IteratorHandler`
 +** `org.apache.tinkerpop.gremlin.server.handler.NioGremlinResponseEncoder`
 +** `org.apache.tinkerpop.gremlin.server.handler.WsGremlinResponseEncoder`
 +** `org.apache.tinkerpop.gremlin.server.handler.OpSelectorHandler.errorMeter`
 +** `org.apache.tinkerpop.gremlin.server.op.control.*`
 +** `org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor.errorMeter`
 +** 
`org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor.validBindingName`
 +** `org.apache.tinkerpop.gremlin.server.op.session.Session.kill()`
 +** `org.apache.tinkerpop.gremlin.server.op.session.Session.manualkill()`
 +* `hadoop-gremlin`
 +** 
`org.apache.tinkerpop.gremlin.hadoop.Constants#GREMLIN_HADOOP_GRAPH_INPUT_FORMAT`
 +** 
`org.apache.tinkerpop.gremlin.hadoop.Constants#GREMLIN_HADOOP_GRAPH_OUTPUT_FORMAT`
 +** 
`org.apache.tinkerpop.gremlin.hadoop.Constants#GREMLIN_HADOOP_GRAPH_INPUT_FORMAT_HAS_EDGES`
 +** 
`org.apache.tinkerpop.gremlin.hadoop.Constants#GREMLIN_HADOOP_GRAPH_OUTPUT_FORMAT_HAS_EDGES`
 +** 
`org.apache.tinkerpop.gremlin.hadoop.Constants#GREMLIN_SPARK_GRAPH_INPUT_RDD`
 +** 
`org.apache.tinkerpop.gremlin.hadoop.Constants#GREMLIN_SPARK_GRAPH_OUTPUT_RDD`
 +* `spark-gremlin`
 +** `org.apache.tinkerpop.gremlin.spark.groovy.plugin.SparkGremlinPlugin`
 +* `tinkergraph-gremlin`
 +** 
`org.apache.tinkerpop.gremlin.tinkergraph.groovy.plugin.TinkerGraphGremlinPlugin`
 +** `org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph#CONFIG_*`
 +** `org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistry`
 +** 
`org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0#getInstance()`
 +** 
`org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0#getInstance()`
 +
 +Please see the javadoc deprecation notes or upgrade documentation specific to 
when the deprecation took place to
 +understand how to resolve this breaking change.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-832[TINKERPOP-832],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-833[TINKERPOP-833],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-834[TINKERPOP-834],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-999[TINKERPOP-999],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1010[TINKERPOP-1010],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1028[TINKERPOP-1028],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1040[TINKERPOP-1040],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1046[TINKERPOP-1046],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1049[TINKERPOP-1049],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1142[TINKERPOP-1142],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1169[TINKERPOP-1169],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1171[TINKERPOP-1171],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1275[TINKERPOP-1275],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1283[TINKERPOP-1283],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1289[TINKERPOP-1289],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1291[TINKERPOP-1291],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1420[TINKERPOP-1420],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1421[TINKERPOP-1421],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1465[TINKERPOP-1465],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1481[TINKERPOP-1481],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1526[TINKERPOP-1526],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1603[TINKERPOP-1603],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1612[TINKERPOP-1612],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1622[TINKERPOP-1622],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1651[TINKERPOP-1651],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1694[TINKERPOP-1694],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1700[TINKERPOP-1700],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1706[TINKERPOP-1706],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1721[TINKERPOP-1721],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1719[TINKERPOP-1719],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1720[TINKERPOP-1720],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-880[TINKERPOP-880],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1170[TINKERPOP-1170],
 +link:https://issues.apache.org/jira/browse/TINKERPOP-1729[TINKERPOP-1729]
 +
- Gremlin-server.sh and Init Scripts
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== Gremlin-server.sh and Init Scripts
 +
 +`gremlin-server.sh` is now also an init script and can no longer be started 
without parameters. To start it in the
 +foreground with defaults like previous usage, please use the `console` 
parameter. Also, `gremlin-server.sh` will
 +continue to start in the foreground when provided a yaml configuration file.
 +
 +How to install as a service has been added to the 
link:http://tinkerpop.apache.org/docs/3.3.0/reference/#_as_a_service[Reference 
Documentation - As A Service].
 +
 +The switch name has changed for installing dependencies. `-i` has been 
deprecated and replaced by `install`.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-980[TINKERPOP-980], 
link:http://tinkerpop.apache.org/docs/3.3.0/reference/#_configuring_2[Reference 
Documentation - Server Configuration].
 +
- Removal of useMapperFromGraph
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== Removal of useMapperFromGraph
 +
 +The `userMapperFromGraph` serialization configuration option was used to 
allow the IO configurations of a specific
 +graph to be assigned to a specific serializer. This feature has been removed 
completely now. Please use the
 +`ioRegistries` configuration option to add one or more specific `Graph` 
serialization capabilities to a serializer.
 +
 +[source,yaml]
 +----
 +serializers:
 +  - { className: 
org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { 
ioRegistries: 
[org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1d0] }}    
        # application/vnd.gremlin-v1.0+gryo
 +----
 +
 +see: link:https://issues.apache.org/jira/browse/TINKERPOP-1699[TINKERPOP-1699]
 +
- Gremlin-server.bat
- ^^^^^^^^^^^^^^^^^^
++==== Gremlin-server.bat
 +
 +The switch name has changed for installing dependencies. `-i` has been 
deprecated and replaced by `install`.
 +
- SparkGraphComputer GryoRegistrator
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
++==== SparkGraphComputer GryoRegistrator
 +
 +Historically, `SparkGraphComputer` has  used `GryoSerializer` to handle the 
serialization of objects in Spark. The reason
 +this exists is because TinkerPop uses a shaded version of Kryo and thus, 
couldn't use the standard `KryoSerializer`-model
 +provided by Spark. However, a "shim model" was created which allows for the 
shaded and unshaded versions of Kryo to
 +interact with one another. To this end, `KryoSerializer` can now be used with 
a `GryoRegistrator`. The properties file
 +for a `SparkGraphComputer` now looks as follows:
 +
 +```
 +spark.serializer=org.apache.spark.serializer.KryoSerializer
 
+spark.kryo.registrator=org.apache.tinkerpop.gremlin.spark.structure.io.gryo.GryoRegistrator
 +```
 +
 +If the old `GryoSerializer` model is desired, then the properties file should 
simply look as before:
 +
 +```
 
+spark.serializer=org.apache.tinkerpop.gremlin.spark.structure.io.gryo.GryoSerializer
 +```
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1389
 +
- ScriptInputFormat
- ^^^^^^^^^^^^^^^^^
++==== ScriptInputFormat
 +
 +The API for the script provided to a `ScriptInputFormat` has changed 
slightly. The signature for `parse(line, factory)`
 +is now simply `parse(line)`. The inclusion of `factory` was deprecated in 
3.1.2. Instead of using the {{factory}} to
 +get the {{StarGraph}} there is a {{graph}} variable in the glocal context of 
the script. Simply use that directly in
 +the script.
 +
 +See: 
link:https://issues.apache.org/jira/browse/TINKERPOP-1137[TINKERPOP-1137],
 
+link:http://tinkerpop.apache.org/docs/3.3.0-SNAPSHOT/reference/#script-io-format[Reference
 Documentation - Script I/O Format]
 +
- Upgrading for Providers
- ~~~~~~~~~~~~~~~~~~~~~~~
++=== Upgrading for Providers
 +
 +IMPORTANT: It is recommended that providers also review all the upgrade 
instructions specified for users. Many of the
 +changes there may prove important for the provider's implementation.
 +
- Graph System Providers
- ^^^^^^^^^^^^^^^^^^^^^^
++==== Graph System Providers
 +
- GremlnPlugin
- ++++++++++++
++===== GremlnPlugin
 +
 +The previously deprecated `GremlinPlugin` system has been removed. The old 
`GremlinPlugin` interface formerly resided
 +in the `org.apache.tinkerpop.gremlin.groovy.plugin` package of 
`gremlin-groovy`. This interface was replaced by an
 +interface of the same name in 3.2.4, which now resides in the 
`org.apache.tinkerpop.gremlin.jsr223` package in
 +`gremlin-core`. Obviously, existing plugins will need to be updated to use 
this new interface.
 +
 +The plugin model has changed slightly to be more generic and not specifically 
bound to Groovy based script engines.
 +Under the new model, the plugin simply returns `Customizer` instances that 
can be applied generically to any
 +`ScriptEngine` or specifically to a particular `ScriptEngine`. More details 
can be found in the
 
+link:http://tinkerpop.apache.org/docs/x.y.z/dev/provider/#gremlin-plugins[Provider
 Documentation]
 +
- Graph Database Providers
- ^^^^^^^^^^^^^^^^^^^^^^^^
++==== Graph Database Providers
 +
- Test Suite Removal
- ++++++++++++++++++
++===== Test Suite Removal
 +
 +A number of test suites that were previously deprecated have been removed 
which should reduce the burden on graph
 +providers who are implementing TinkerPop. Test suites related to perfrmance 
based on `junit-benchmarks` have been
 +removed as have the suites in `gremlin-groovy-test` (in fact, this entire 
module has been removed). Specifically,
 +providers should be concerned with breaking changes related to the removal of:
 +
 +* `StructurePerformanceSuite`
 +* `ProcessPerformanceSuite`
 +* `GroovyEnvironmentPerformanceSuite`
 +* `GroovyProcessStandardSuite`
 +* `GroovyProcessComputerSuite`
 +* `GroovyEnvironmentSuite`
 +* `GroovyEnvironmentIntegrateSuite`
 +
 +Those graph providers who relied on these tests should simply remove them 
from their respective test suites. Beware of
 +`OptOut` annotations that reference tests in these suites as test failure 
will occur if those references are not
 +removed.
 +
 +See: 
link:https://issues.apache.org/jira/browse/TINKERPOP-1235[TINKERPOP-1235], 
link:https://issues.apache.org/jira/browse/TINKERPOP-1612[TINKERPOP-1612]
 +
- TransactionException
- ++++++++++++++++++++
++===== TransactionException
 +
 +The `AbstractTransaction.TransactionException` class is now just 
`TransactionException` which extends `RuntimeExcetpion`
 +rather than `Exception`. Providers should consider using this exception to 
wrap their own on calls to
 +`Transaction.commit()` or `Transaction.rollback()`. By throwing this 
exception, the TinkerPop stack can better respond
 +to transaction problems and it allows for more common, generalized error 
handling for users.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1004[TINKERPOP-1004]
 +
- Driver Providers
- ^^^^^^^^^^^^^^^^
++==== Driver Providers
 +
- SASL Byte Array
- +++++++++++++++
++===== SASL Byte Array
 +
 +Gremlin Server no longer supports accepting a byte array for the value passed 
to the "sasl" parameter in
 +authentication messages. It only accepts a Base64 encoded string.
 +
 +See: link:https://issues.apache.org/jira/browse/TINKERPOP-1603[TINKERPOP-1603]

Reply via email to