-
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. -
Added
TraverserSerializer
for a generic way to detach and serialize a traverser. -
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
AnonymousGraphTraversal.Tokens.__
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()
. -
Removed
TraverserSourceStrategy
as it is no longer required. -
TraverserSource
is now only a marker interface with "on first" within theTraverserSource
step are traversers generated. -
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. -
Add 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. -
Prevent 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.
-
Add more specific features around the types of "identifiers" a graph can support.
-
Add 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.