-
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
supportsmaxBarrierSize
for "lazy barrier," memory conservation. -
Scoping
now hasgetScope()
,setScope()
, andgetScopeKeys()
. -
ScopingStrategy
is smart aboutScope.global
settings based on traversal labels. -
Scope.global
andScope.local
both account for traversal side-effects. The distinction is between path and map. -
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 introduceCallbackRegistry
interface aroundEventStrategy
. -
Changed
onReadWrite
andonClose
ofAbstractTransaction
to be synchronized. -
Added
LabelP
to support index lookups andhas()
filtering onNeo4jGraph
multi-label vertices. -
AddEdgeStep
now supports bothScope.global
andScope.local
semantics. -
Added a fully defined set of
Graph.Feature
implementations toEmptyGraph
. -
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 whensupportsUserSuppliedIds
istrue
. -
Fixed a bug in
GraphTraversal.choose(predicate,trueTraversal,falseTraversal)
. -
Removed
MapTraversal
,MapTraverserTraversal
,FilterTraversal
, andFilterTraverserTraversal
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 allResultGraph
/Persist
combinations. -
GiraphGraphComputer no longer requires an extra iteration and MapReduce job to derive the full
Memory
result. -
SparkGraphComputer now supports
InputRDD
andOutputRDD
to allow vendors/users to use aSparkContext
to read/write the graph adjacency list. -
Added
Scoping.getScopeValueByKey()
method so all "selecting" steps use the same pattern for map, path, and sideEffect data retrieval.
-
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)
andhasNot(key)
are now aliases forwhere(values(key))
andwhere(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
andTailLocalStep
(tail()
) which gets objects from the end of the traversal stream. -
AndStep
andOrStep
are now simply markers whereWhereStep(a.and(b).and(c)...and(z))
is the compilation. -
Moved
Compare
,Contains
,Order
,Operator
, andP
toprocess/traversal
fromstructure/
as they are process-based objects. -
HasContainer
now usesP
predicate as helper methods and tests are more thorough onP
. -
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
toStringFactory
. -
Renamed JSON-related serializers for Gremlin Server to be more consistent with GraphSON naming.
-
Removed
HasTraversalStep
in favor of newP.traversal
model withHasStep
. -
Fixed bug in
WsGremlinTextRequestDecoder
where custom serializers from graphs were not being used. -
Added
AndP
which allows for theand()
-ing ofP
predicates. -
Order.opposite()
is nowreversed()
as that is aComparator
interface method with the same semantics. -
Compare/Contains/P.opposite()
are nownegate()
as that is aBiPredicate
interface method with the same semantics. -
has(traversal)
is replaced bywhere(traversal)
andhas(key,traversal)
.HasXXX
is always with respects to an element property. -
Added
TraversalScriptHelper
with static methods for dynamically creating aTraversal
from a JSR 223ScriptEngine
. -
Changed
SubgraphStrategy
to takeTraversal
rather thanPredicate
for filtering. -
Improved
SubgraphStrategy
to only modify theTraversal
if filtering was required. -
Improved logging of errors in the
HttpGremlinEndpointHandler
to include a stracktrace if one was present. -
Moved
AbstractGremlinSuite.GraphProviderClass
toorg.apache.tinkerpop.gremlin.GraphProviderClass
. -
Simplified the Gremlin-Groovy test suite where there is now no distinction between
STANDARD
andCOMPUTER
tests. -
VertexProgram
andMapReduce
now add aGraph
parameter toloadState(Graph, Configuration)
. -
Added
ScopingStrategy
which auto-scopesselect()
andwhere()
so the language looks clean. -
Added
Scoping
as a marker interface to state that a step desires a particularScope
. -
SelectStep
,SelectOneStep
, andWhereStep
support bothScope.local
andScope.global
forMap<String,Object>
orPath
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 rewritesoutE().inV()
,inE().outV()
andbothE().otherV()
toout()
,in()
andboth()
respectively. -
Renamed
ComparatorHolderRemovalStrategy
toOrderGlobalRemovalStrategy
as it now only applies toOrderGlobalStep
. -
Anonymous traversal no longer have
EmptyGraph
as their graph, but instead useOptional<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 aboutTraversalParent
andTraversalStrategies
. -
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 rewritesout().count()
tooutE().count()
(and similar such patterns). -
GryoPool
now takes aConfiguration
object which allows setting the size of the pool and theIoRegistry
instance. -
Added
PersistResultGraphAware
interface which is used byOutputFormats
to specify persistence possibilities for a HadoopGraphComputer
. -
ElementIdStrategy
now allows the identifier property to be set directly (and not only by specifyingT.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 emptyIterator
). -
Removed the notion of a "terminator" message from the Gremlin Server protocol - new response status code for
PARTIAL_CONTENT
. -
Path
andStep
labels are ordered by the order in which the respectiveaddLabel()
calls were made. -
A
Step
now has aSet<String>
of labels. Updatedas()
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 implementsOptional
semantics. Less code as Java8 provides the helper methods. -
TraversalScriptSupplier
now takes anObject
var args for settingScriptEngine
bindings if needed. -
Compare
is now more lenient onNumber
-types. -
Removed
Compare.inside
andCompare.outside
as they are not primitive comparators and should be composed from primitives. -
Introduced
P
(predicate) for cleaner lookingis()
,has()
, andwhere()
calls — e.g.has('age',eq(32))
. -
GraphTraversalSource
is now the location forwithXXX()
operations. No longer do they exist atGraphTraversal
. -
All
Traverser
objects now extend fromAbstractTraverser
or a child that ultimately extends fromAbstractTraverser
. -
OLTP
select()
now returns a list for traversals with duplicate labels (as this was a unintended side-effect ofSparsePath
). -
Removed the
SparsePath
optimization as it led to numerous corner-case inconsistencies. -
VertexWritable
serializes and deserializes theStarGraph
object — no more intermediateDetachedXXX
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()
andGraphWriter.writeObject
abstractions for those implementations that can support them. -
Altered
GraphWriter.writeVertices()
method to take anIterator
of vertices rather than aTraversal
. -
GraphSON format for output from
GraphWriter.writeVertex
,GraphWriter.writeVertices
, andGraphWriter.writeGraph
have all changed now that they useStarGraph
serialization. -
Gryo format for output from
GraphWriter.writeVertex
,GraphWriter.writeVertices
, andGraphWriter.writeGraph
have all changed now that they useStarGraph
serialization. -
Added read and write methods to
GraphReader
andGraphWriter
forProperty
andVertexProperty
. -
Reduced object creation in GraphSON during serialization.
-
Moved
T
tokens to thestructure/
package as its more general thanprocess/
. -
Attachable.attach()
now takes aMethod
to determine whether to attach viaGET
,CREATE
, orGET_OR_CREATE
. -
Decreased size of Gremlin Server
RequestMessage
andResponseMessage
serialization payloads and reduced object creation. -
Graph.empty()
no longer required with the introduction ofShellGraph
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 useCardinality.single
. -
Messenger.receiveMessages()
no longer takes aMessageScope
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 ofGREMLIN_TESTS
and made it work for all test suites. -
Removed
back()
-step asselect()
-step provides the same behavior with more intelligent optimizations andby()
-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
fromElement
toProperty
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)
andg.V(1L)
should both return the same result now). -
TinkerGraph
supports anIdManager
which helps enforce identifier types and improve flexibility in terms of how it will respond to queries around identifiers. -
DetachedXXX
now uses the standardstructure/
exceptions for unsupported operations. -
Added private constructors to all
Exceptions
inner classes in the respectivestructure/
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 anExceptions
inner class. -
Added
StarGraph
which is a heap efficient representation of a vertex and its incident edges (useful forGraphComputer
implementations). -
TraverserSet
uses aFastNoSuchElementException
onremove()
for increased performance. -
Add
Profiling
interface to enable vendors to receive aStep's MutableMetrics
.
-
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 lighterplugin
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 intogremlin-test
. -
Removed
LambdaVertexProgram
andLambdaMapReduce
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 nowCardinality.single
. -
Added
ElementIdStrategy
as aTraversalStrategy
. -
Introduce
AbstractTransaction
to simplify implementation of standard transactional features for vendors. -
Added
EventStrategy
to generateGraph
modification events to listeners. -
Added test to enforce return of an empty
Property
onVertexProperty.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 hasworkerStart(Stage)
andworkerEnd(Stage)
methods with analagous semantics toVertexProgram
. -
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 changedAddEdgeStep
to a map-step instead of a sideEffect-step. -
Added
compile
method toGremlinExecutor
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 onor
,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 useExecutorService
so as to reuse threads when executing graph computer functions. -
Removed
Reducing.Reducer
andReducingStrategy
. PreviousReducing
classes are nowMapReducer
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 doinghas(traversal.count().is(0L))
. -
TraversalStrategy.apply(traversal)
is the new method signature as theTraversalEngine
can be retrieved from theTraversal
. -
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)
andrange(local)
for operating on the local object (e.g. collection, map, etc.). -
TraversalComparator
exists which allows fororder().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 aTraversalInterruptionException
if it encounters interruption on the current thread. -
Apache refactoring:
com.tinkerpop
→org.apache.tinkerpop
. -
Traversal
is nowSerializable
and with most queries no longer needing lambdas, Gremlin-Java works over the wire. -
Added
VertexProperty.Cardinality
withlist
,set
, andsingle
. No moreVertex.singleProperty()
method. -
Added
RangeByIsCountStrategy
that adds aRangeStep
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 calledTraversalParent
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 aConsumer
. Steps that were consumer-less simply extendsAbstractStep
. -
Simplified the
Neo4jGraph
implementation by now allowingcypher()
mid-traversal. Only available viag.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
andOrStep
filters to support arbitrary conjunction of traversals. -
__
is now a class with staticGraphTraversal
methods and thusrepeat(out())
is possible. -
Added
IsStep
/.is()
that supports filtering scalar values. -
Neo4jGraph
andTinkerGraph
no longer create newFeature
instances on each feature check. -
Added
Compare.inside
andCompare.outside
for testing ranges. Removedbetween()
as now itshas('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
andScope.global
in support ofOrderLocalStep
andOrderGlobalStep
viaorder(scope)
. -
Added
Order.keyIncr
,Order.keyDecr
,Order.valueIncr
, andOrder.valueDecr
in support ofMap
sorting. -
Added
Order.shuffle
and removedshuffle()
in favor oforder().by(shuffle)
. -
Changed
Order implements Comparator<Comparable>
toOrder 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
andstop
functions to returnCompletableFuture
. -
HTTP REST error response JSON objects from Gremlin Server should no longer have issues with control characters, line feeds, etc.
-
Added
MeanStep
,mean()
, andMeanNumber
for calculating number averages in a traversal. -
Greatly simplified all the traversal
MapReduce
implementations due to the introduction ofVertexTraversalSideEffects
. -
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()
toGraphTraversal.cap(String...)
to support multi-sideEffect grabs. -
Added GraphSON serialization for
Path
. -
Added
Traversal.Admin.getTraverserRequirements()
and removedTraversalHelper.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 fromeval
in the same thread of execution. -
Fixed issue with the
HttpGremlinEndpointHandler
where requests were getting blocked whenkeep-alive
was on. -
Added
MinStep
andMaxStep
with respectivemin()
andmax()
. -
CountStep
andSumStep
now extendReducingBarrierStep
and no longer are sideEffect steps. -
SideEffectCapStep
now extendsSupplyingBarrier
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 totraversal.next()
(function) andtraversal.hasNext()
(predicate). -
CollectingBarrierStep
is no longer abstract and addedGraphTraversal.barrier()
which is analogous tofold().unfold()
, though cheaper. -
Added
TraversalOptionHolder
for branching steps to index works with correspondingGraphTraversal.option()
. -
BranchStep
is now a proper generalization ofUnionStep
andChooseStep
. -
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()
andTraversal.Admin.getEndStep()
. RemovedTraversalHelper.getStart()
andTraversalHelper.getEnd()
. -
Refactored
profile()
to use injected steps.ProfileStep
can now be used without any special JVM command line parameters. -
Added
ReducingBarrierStep
which acts likeCollectingBarrierStep
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, movedLocalStep
tobranch/
. -
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 inDedupOptimizerStrategy
. -
Added
RepeatStep.RepeatEndStep
in order to reduce the complexity of the code on OLAP when the predicates are not at the start ofRepeatStep
.
-
Added
SideEffectRegistrar
interface andSideEffectRegistrationStrategy
for allowing steps to register sideEffects at strategy application time. -
Renamed
Traverser.Admin.setFuture()
andTraverser.Admin.getFuture()
tosetStepId()
andgetStepId()
, respectively. -
Added
TraversalMatrix
for random access to steps in a traversal by their step id. Used byTraversalVertexProgram
. -
Added unique identifies to
Step
that are not the user provided labels.Step.getLabel()
now returns anOptional<String>
. -
Removed
UnionLinearStrategy
,ChooseLinearStrategy
, andRepeatLinearStrategy
as nested traversals are now natively supported in OLAP. -
Fixed
Neo4jGraph
around manual transaction behavior oncommit
androllback
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 anOptional
, where the provided default method should be sufficient for all vendors. -
Removed
PathConsumer
in favor ofTraverserRequirement.PATH
-model viaStep.getRequirements()
. -
Step.getRequirements()
returns aSet<TraverserRequirement>
which is what is required of theTraverser
by theStep
. -
Traverser
now extendsCloneable
andTraverser.clone()
is used to good effect inTraverser.split()
. -
Added
AbstractTraverser
for which all traversers extend. -
Moved
Traversal.SideEffects
toTraversalSideEffects
as sideEffects are not necessarily tied to the traversal. -
Removed
Graph.of()
for generating anonymous graph traversals — replaced by__
-model. -
Removed
Graph
being stored inTraversal.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, notTraversal
dependent. -
Moved
Traverser.sideEffects()
toTraverser.asAdmin().getSideEffects()
. Users should useTraverser.sideEffects(key)
andTraverser.sideEffects(key,value)
. -
Added
SerializationTest
to theStructureStandardSuite
ingremlin-test
which validates serialization at a lower level thanIoTest
. -
Removed
IntervalStep
and renamedinterval()
tobetween()
which is simply an alias to ahas().has()
chain. -
Added
__
static interface which allows for__.out().out()
-style construction of anonymous traversals (instead ofg.of()
). -
The only
GraphTraversal
steps that operate onTraverser
are the base lambdas andrepeat()
(i.e.emit()
anduntil()
). -
Removed dependency on the
reflections
library ingremlin-test
which removed the default implementation ofGraphProvider.getImplementations()
- vendors now need to implement this method themselves. -
Relaxed the
<S>
typing requirement for anonymous traversals when applied tochoose()
,repeat()
,union()
, etc. -
Removed
LoopStep
andUntilStep
in favor of the newRepeatStep
model of looping in Gremlin3. -
BranchStep
is now exposed inGraphTraversal
viabranch(function)
. -
UnionStep
now implementsTraversalHolder
. -
Added
RepeatStep
as the new looping construct supporting do/while, while/do, and emit semantics. -
Moved
Traversal.sideEffects()
toTraversal.Admin.getSideEffects()
ascap()
should be used to access the sideEffect data of a traversal. -
Renamed vendor
XXXTraversal
toXXXGraphTraversal
(interface) andXXXGraphTraversal
toDefaultXXXGraphTraversal
(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 ongremlin.sh
. -
GraphSON supports the assignment of multiple custom serialization modules.
-
Traverser.get(stepLabel/sideEffectKey)
no longer exists. There now exists:Traverser.path(stepLabel)
andTraverser.sideEffects(sideEffectKey)
. -
SimpleTraverser
now supports "path" but in a very loose, global cache way. AddedSparsePath
as aMap
-backedPath
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 overrideGraphReader
andGraphWriter
initial construction when custom serializers are needed. -
Removed methods from
GraphProvider
related to customizing serializers inIoTest
from the test suite as the newGraph.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
andScriptOutputFormat
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 nowGraph.Hidden
with "hidden" being the vendor namespace and the key prefix being~
. -
Much better
toString()
handling inStep
andTraversal
. -
ComparatorHolder<V>
interface returns aList<Comparator<V>>
instead of aComparator<V>[]
. -
T
now implementsFunction<Element,Object>
. -
Added
ElementValueComparator
andElementFunctionComparator
in support of vendor introspection onComparatorHolder
-steps. -
Renamed
Comparing
marker interface toComparatorHolder
. -
FunctionHolder
interface provides vendor introspection viaElementValueFunction
. -
Removed
OrderByStep
as it is now justorder()
with aby()
-based comparator. -
Added
SampleStep
(sample()
) to allow for sampling the set of previous objects. Useful for doing random walks withlocal()
. -
Renamed
random()
tocoin()
to better express that the filter is a random coin toss. -
Added
by()
-projection to modulate the meaning of post-processing steps likeaggregate()
,groupCount()
,path()
,order()
, etc. -
Removed the
Strategy
interface and gaveStrategyGraph
direct access to theGraphStrategy
. -
Added
Graph.strategy()
to help instantiateStrategyGraph
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 theStructureProcessSuite
. -
HadoopGraph
no longer supportsGraph.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 guaranteesOUT
thenIN
vertex iterator order. -
Graph.v(Object)
andGraph.e(Object)
no longer exist. Instead, useGraph.V(Object... ids)
andGraph.E(Object... ids)
. -
Added
Graph.Iterators
to allow access to vertex and edge iterators based on element ids and bypassingGraphTraversal
. -
Renamed
GraphStrategy
implementations to be less verbose - removed the word "Graph" from their names (e.g.IdGraphStrategy
simply changed toIdStrategy
). -
Removed
Step.NO_OBJECT
as the problem is solves can be solved with proper use offlatMap
andEmptyTraverser
. -
Path
is now part ofGraphSerializer
and thus, not specific to a particular implementation ofPath
. -
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
andDetachedXXX
so that all migration of graph element data is viaDetachedXXX
. -
Added
StaticVertexProgram
andStaticMapReduce
which simply returnthis
onclone()
. -
VertexProgram
andMapReduce
now implementCloneable
and is used for fast copying across workers within the same machine. -
Added
TraversalHolder
interface which extendsPathConsumer
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()
soGraphComputer
implementers know the requisite data boundaries. -
Created
Traversal.Admin
to hide administrative methods. AddedTraversal.asAdmin()
to get atTraversal.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 staticScriptEngine
cache. -
Fixed a general bug in all sideEffect using steps where the sideEffect should be accessed via the
Traverser
notTraversal
. -
GremlinPlugin
interface no longer has theadditionalDependencies
method - those dependencies are now defined by an entry in the manifest file for the jar calledGremlin-Plugin-Dependencies
. -
Added
TinkerWorkerPool
which is used for resource efficient threading inTinkerGraphComputer
. -
MapReduce.createMapReduce(Configuration)
now exists and serves the same purpose asVertexProgram.createVertexProgram(Configuration)
. -
Enabled SessionOps to be extended. Added eval handler hook.
-
Setting a property with an unsupported data type throw
IllegalArgumentException
instead ofUnsupportedOperationException
as the operation is supported, but the argument is not.
-
javatuples.Pair
avoided onMapReduce
API in favor of a newKeyValue
class. -
Renamed
Gremlin-Plugin
manifest entry for plugins toGremlin-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 GraphComputerMemory
. -
Fixed host selection in
gremlin-driver
by properly accounting for all hosts being marked unavailable at the instantiation of aClient
. -
Removed Giraph-Gremlin in favor of new Hadoop-Gremlin with
GiraphGraphComputer
support. Future support forMapReduceGraphComputer
. -
Greatly simplified the
InputFormat
andOutputFormat
model for working with Giraph (and Hadoop). -
Added a serializer for
Property
for GraphSON correcting format of serialization of a singleProperty
on anEdge
. -
Fixed bug in Gremlin Console that prevented assignments to empty
List
objects. -
Added
VertexProgram.getMessageScopes()
to allow vendors to know whichMessageScopes
at a particularMemory
state. -
Reduced the number of methods in
MessageScope.Local
as its up to vendors to inspect provided incidentTraversal
accordingly. -
Renamed
MessagesType
toMessageScope
to make it less ambiguous regarding the class of the messages being sent. -
Changed the message type of
TraversalVertexProgram
toTraverserSet
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()
andTraverser.Admin.makeSibling()
toTraverser.Admin.split()
to correspond withmerge()
. -
Added
Traverser.Admin.merge(Traverser)
method so that the merging algorithm is with theTraverser
. -
Added
Operator
enum that contains sack-helpfulBinaryOperators
: sum, minus, mult, div, max, min, etc. -
Added
GraphTraversal.withSack()
and renamedtrackPaths()
andwith()
towithPath()
andwithSideEffect()
, 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 justproperties
. -
Added
DoubleIterator
to make vendor implementations ofEdge.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
fromgremlin-console
togremlin-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
forTinkerGraph
totinkergraph-gremlin
module (it is no longer ingremlin-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
andAbstractGremlinPlugin
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 withRemoteAcceptor
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 withmvn clean install
.
-
Removed
PropertyFilterIterator
as using Java8 streams was just as efficient for the use case. -
Renamed
KryoWritable
toGremlinWritable
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 callingMapReduce.reduce()
, notMapReduce.combine()
. -
Greatly simplified
SubgraphStrategy
by removing requirements forTraversal
introspection. -
StrategyWrappedGraph
mimics vendor use ofGraphStep
andGraphTraversal
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 theTraversal
class. -
Fixed bug in Gephi Plugin that prevented it from communicating with the Gephi Streaming Server.
-
Renamed
MessageType.XXX.to()
toMessageType.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 hasworkerIterationStart()
andworkerIterationEnd()
to allow developers to control vertex split static data structures. -
TraversalVertexProgram
startup time greatly reduced due to being smart aboutloadState()
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 abranchFactor
. This is now at the query language level withlocalLimit()
. -
Added
limit(long)
andlocalLimit(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, useGraphTraversal.values(String)
. -
HiddenXXXStep
andValueXXXStep
no longer exist.PropertyXXXStep
takes aPropertyType
to denote value and hidden access. -
Added
PropertyType
to the structure-package which provide markers for denoting property types (vs. property classes). -
Renamed
setWorkingDirectory
toworkingDirectory
in theKryoReader
builder. -
Path.get(String)
returns the object if only one object is referenced by label, else it returns aList
of referenced objects. -
Added overload to
GremlinKryo
to allow a serializer to be configured as aFunction<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 builtGremlinKryo
class and/orSimpleModule
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 implementsIterator
and users should useforEachRemaining()
. -
RangeStep
now has an inclusive low and an exclusive high — a change from Gremlin2. -
DriverGremlinPlugin
returns raw results with driver results available via theresult
variable. -
Removed test enforcement of
private
constructor for aGraph
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 returnElement
-
Added
Reducing
marker andReducingStrategy
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 aTraversal
. -
Renamed
Traversal.strategies()
toTraversal.getStrategies()
as it is not a "query language"-method. -
Added test to enforce that a
label
on aVertexProperty
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 thekryo-serializers
library for serialization ofUUID
objects. -
Changed GraphSON serialization to only use
iterators()
- there were still remnants ofTraversal
usage from previous refactoring. -
Added overload for
detach
method to allow for theElement
to be detached as a "reference" only (i.e. without properties). -
Renamed
Item
ingremlin-driver
toResult
. -
Renamed
strategy
togetStrategy
inStrategyWrappedGraph
. -
Renamed
baseGraph
togetBaseGraph
inNeo4jGraph
. -
Neo4jGraph
now returns an empty propertyVertex.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 aTraversalEngine
. Greatly simplifies strategy application forSTANDARD
orCOMPUTER
. -
Renamed
IdentityReductionStrategy
toIdentityRemovalStrategy
for reasons of clarity. -
Added
ComparingRemovalStrategy
that removesComparing
-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 includegetMapKeySort()
andgetReduceKeySort()
to sort outputs accordingly. -
Renamed
TraversalResultMapReduce
toTraverserMapReduce
. 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 useNeo4jGraph.cypher()
and get back TinkerPop3 graph objects. -
GiraphGraph.variables().getConfiguration()
is now replaced byGiraphGraph.configuration()
. -
Added
Graph.configuration()
which returns theConfiguration
object ofGraph.open()
. -
Removed
TraverserTracker
as now there is only aTraverserSet
for all halted traversers. A nice simplification ofTraversalVertexProgram
. -
Renamed
Traverser.isDone()
toTraverser.isHalted()
andDONE
toHALT
. Consistent with automata terminology. -
Removed
PathTraverserExecutor
andSimpleTraverserExecutor
as a singleTraverserExecutor
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 andloadState()
usage. -
MapReducers for
TraversalVertexProgram
are now smart aboutwith()
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.
-
Added features for
VertexProperty
user supplied ids and related data types. -
Removed
SideEffectCap
marker interface as there is only oneSideEffectCapStep
and thus,instanceof
is sufficient. -
Path.getObjects()
/Path.getLabels()
renamed toPath.objects()
/Path.labels()
to be in line with "query language" naming convention. -
Greatly simplified
GiraphInternalVertex
due toElement.graph()
— 1/2 the memory footprint and reduced construction time. -
Renamed
Property.getElement()
toProperty.element()
given the "query language" naming convention. -
Element.graph()
added which returns theGraph
that the element is contained within. -
Added tests for greater consistency around iterating hidden properties.
-
Simplified
TraversalVertexProgram
where only a singleTraverserTracker
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()
tograph()
andmemory()
to be consistent with "query language" naming convention. -
Traverser.getXXX()
changed toloops()
,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 thecap()
method. -
Added
union()
with GraphComputerUnionLinearStrategy
. -
TimeLimitStep
was moved tofilter/
package. It was a mistake that it was insideEffect/
. -
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
andReduceEmitter
have anemit(value)
default method where the key is theMapReduce.NullObject
singleton. -
Traverser.Admin
now implementsAttachable
as theTraversal.SideEffects
can be generated from theVertex
. -
Made a solid effort to ensure that all TinkerPop keys are
Graph.System
to leaveGraph.Key
for users. -
The
Graph.System
prefix is now^
instead of%&%
. Simpler and easier on thetoString()
-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
andCountStep
, there is onlyCountStep
and it is elegant. -
Created a
AbstractTraversalStrategy
with goodtoString()
,hasCode()
, andequals()
implementations. -
Added
CountTraversal
as a marker-interface stating that theTraversal
has acount() -> 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
, andChooseStep
to a newbranch/
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 inGraphStrategy
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 aSet<MapReduce>
andhashCode()
/equals()
were implemented for existingMapReduce
implementations. -
Changed
Contains.in/notin
toContains.within/without
asin
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
andGroupByMapReduce
leverageBulkSet
as the default group data structure. -
Element.Iterator
has renamed methods so implementers can doMyElement implements Element, Element.Iterators
. -
Renamed
MessageType.Global
andMessageType.Local
creators fromof()
toto()
as it makes more sense to send messagesto()
. -
With
Traverser.get/setBulk()
there is no need for aTraverserMessage
. TheTraverser
is now the message inTraversalVertexProgram
. -
Provided static
make()
methods for constructingPath
implementations. -
Provided a more space/time efficient algorithm for
Path.isSimple()
. -
The
JumpStep
GraphComputer algorithmQueue
is now aTraverserSet
. -
AggregateStep
andStoreStep
now useBulkSet
as their default backingCollection
(much more space/time efficient). -
Added
BulkSet
which is likeTraverserSet
but for arbitrary objects (i.e. a weighted set). -
UnrollJumpStrategy
is no longer a default strategy as it is less efficient with the inclusion ofTraverserSet
. -
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 toTraverser.Admin
. -
Renamed
Traverser.System
toTraverser.Admin
as to not causejava.lang.System
reference issues. -
Renamed
Memory.Administrative
toMemory.Admin
to make it shorter and consistent withTraverser.Admin
. -
Fixed a TinkerGraph bug around user supplied vertex property ids.
-
Most
Step
classes are now defined aspublic final class
to prevent inheritance. -
ShuffleStep
now extendsBarrierStep
which enables semantically correct step-sideEffects. -
Leveraged
Traverser.getBulk()
consistently throughout all steps.
-
All
Step
fields are nowprivate
/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 withImmutablePath
andMutablePath
as implementations (2x speedup on path calculations). -
Traverser
now implementsComparable
. If the underlying object doesn’t implementComparable
, then a runtime exception. -
Added abstract
BarrierStep
which greatly simplifies implementing barriers likeAggregateStep
,OrderStep
, etc. -
SelectStep
is now intelligent about when to trigger path computations based on label selectors and barriers. -
T
no longer haseq
,neq
,lt
,in
, etc. Renamed all respective enums and withstatic import
, good in console (e.g.Compare.eq
). -
Added
Order
enum which providesOrder.decr
andOrder.incr
. -
Traverser.loops
andJump.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
andVertexCentric
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 inTraversalVertexProgram
andLambdaVertexProgram
. -
Made
TinkerGraph
a plugin for the Console as it is no longer a direct dependency ingremlin-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 aGraphReader
/GraphWriter
to serialize the graph data. -
Removed
implements Serializable
on numerous classes to ensure safety and proper usage of utilities for cloning. -
Traversal
now implementsCloneable
as this is the means that inter-JVM threads are able to get siblingTraversals
. -
Created "integration" test for
Neo4jGraph
that runs the test suite with multi/meta property features turned off. -
Added
GraphStrategy
methods forVertexProperty
. -
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: aTraversal<Supplier>
,Class<Traversal<Supplier>>
, or a script string withScriptEngine
name. -
Added
TraversalScript
interface withGroovyTraversalScript
as an instance. To be used by OLAP engines and any language variant (e.g. gremlin-scala, gremlin-js, etc.). -
UntilStep
now leveragesUnrollJumpStrategy
accordingly. -
Fixed a bug where the
toString()
ofTraversal
was being hijacked bySugarGremlinPlugin
. -
Fixed compilation bug in
UntilStep
that is realized when used in multi-machine OLAP. -
Simplified
Enumerator
and implementations forMatchStep
.
-
Added an exhaust
InnerJoinEnumerator
fix inMatchStep
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 ajump()
-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 haslabel
,id
,key
,value
and no longer are theseString
representations reserved in TinkerPop. -
Traverser
now has a transient reference toTraversal.SideEffects
. -
"Detached" classes are now tested by the standard test suite.
-
Compartmentalized
Traverser
interface so there is now aTraverser.System
sub-interface with methods that users shouldn’t call. -
Added
OrderByStep
which ordersElements
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 thatgetElementComputeKeys()
is simply aSet<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
andEngineDependent
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 aGraph
with multipleGraphStrategy
instances - if there are multiple strategies they are wrapped in order viaSequenceGraphStrategy
. -
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 allowingGraphStrategy
initialization or even dynamicGraph
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~
inGraph.Key.hide()
. -
Added
has(label,key,predicate,value)
to allow forhas('person','name','marko')
. Various overloaded methods provided. -
Update to traversal API where if a
SFunction<S,?>
was required, but can process aTraverser<S>
, then the function isSFunction<Traverser<S>,?>
. -
Added
WhereStep
as a way to further constrainselect()
andmatch()
. -
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 theDependencyManager
now return the list ofGremlinPlugin
instances to initialize instead of just initializing them automatically because it causes problems withScriptEngine
setup if a plugin requires a script to be evaluated and a required dependency is not yet loaded. -
Traversal.SideEffects
hasgetGraph()
,setGraph()
, andremoveGraph()
default helpers. -
Traversal.Memory
→Traversal.SideEffects
andGraphComputer.SideEffects
→GraphComputer.Memory
. -
StrategyWrappedVertex
andStrategyWrappedEdge
properly wrapElement
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 withgremlin-server-neo4j.yaml
. -
Corrected issues with the "branch factor" related traversals under
SubgraphStrategy
. This change also altered the semantics of theSubgraphStrategy
a bit as it became more restrictive aroundEdge
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 theCLASSIC
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 ahas()
step withIN
. -
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 aSideEffect
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
, andSideEffect
. -
Path
data structure changed to an ordered list of objects with each associated to aSet<String>
of as-labels. -
All sideEffect-based steps no longer extend
FilterStep
with predicate equal true, but a more efficientSideEffectStep
. -
TreeStep
now hasTreeMapReduce
for executing onGraphComputer
. -
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()
toGraph.features()
to be consistent with other API methods. -
Vertex
andEdge
now implement allGraphTraversal
methods to ensure consistency throughout stack. -
Neo4jTraversal
is auto-generated fromNeo4jTraversalStub
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)
andlocal.mkdir(string)
-
Added
@OptIn
and@OptOut
for implementers to specify on theirGraph
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 aresult
variable back to the console withComputerResult
. -
VertexProgram
is no longerSerializable
(useloadState
andstoreState
for wire-propagation). -
Moved
GiraphGraph.getOutputGraph()
toGiraphHelper
. -
Changed
GIRAPH_GREMLIN_HOME
toGIRAPH_GREMLIN_LIB
to reference directory where jars are to be loaded. -
Updated README with release instructions.