Skip to content

Latest commit

 

History

History
408 lines (392 loc) · 41.2 KB

CHANGELOG.asciidoc

File metadata and controls

408 lines (392 loc) · 41.2 KB

TinkerPop3 CHANGEGLOG

TinkerPop 3.0.0 (A Gremlin Rāga in 7/16 Time)

gremlin hindu

TinkerPop 3.0.0.M7 (Release Date: NOT OFFICIALLY RELEASED YET)

  • Added unique identifies to Step that are not the user provided labels. Step.getLabel() now returns an Optional<String>.

  • Removed UnionLinearStrategy, ChooseLinearStrategy, and RepeatLinearStrategy as nested traversals are now natively supported in OLAP.

  • Fixed Neo4jGraph around manual transaction behavior on commit and rollback such that they would throw exceptions if a transaction was not open.

  • Redesigned the hidden step labeling mechanism so its consistent across a cluster, easier for rewrite strategies, and will enable nested OLAP traversals.

  • Traverser.incrLoops() now takes a string step label to enable nested looping constructs (i.e. loop stacks).

  • Added Traversal.tryNext() which returns an Optional, where the provided default method should be sufficient for all vendors.

  • Removed PathConsumer in favor of TraverserRequirement.PATH-model via Step.getRequirements().

  • Step.getRequirements() returns a Set<TraverserRequirement> which is what is required of the Traverser by the Step.

  • Traverser now extends Cloneable and Traverser.clone() is used to good effect in Traverser.split().

  • Added AbstractTraverser for which all traversers extend.

  • Added TraverserSerializer for a generic way to detach and serialize a traverser.

  • Moved Traversal.SideEffects to TraversalSideEffects as sideEffects are not necessarily tied to the traversal.

  • Removed Graph.of() for generating anonymous graph traversals — replaced by __-model.

  • Removed Graph being stored in Traversal.SideEffects. Too dangerous when moving between OLTP and OLAP and its limited uses were worked around easily.

  • No need for DefaultXXXGraphTraversal unless the vendor is extending with new methods (e.g. DefaultNeo4jGraphTraversal).

  • Reworked TraversalStrategies such that the are "emanating object class"-dependant, not Traversal dependent.

  • Moved Traverser.sideEffects() to Traverser.asAdmin().getSideEffects(). Users should use Traverser.sideEffects(key) and Traverser.sideEffects(key,value).

  • Added SerializationTest to the StructureStandardSuite in gremlin-test which validates serialization at a lower level than IoTest.

  • Removed IntervalStep and renamed interval() to between() which is simply an alias to a has().has() chain.

  • Added AnonymousGraphTraversal.Tokens.__ which allows for __.out().out()-style construction of anonymous traversals (instead of g.of()).

  • The only GraphTraversal steps that operate on Traverser are the base lambdas and repeat() (i.e. emit() and until()).

  • Removed dependency on the reflections library in gremlin-test which removed the default implementation of GraphProvider.getImplementations() - vendors now need to implement this method themselves.

  • Relaxed the <S> typing requirement for anonymous traversals when applied to choose(), repeat(), union(), etc.

  • Removed LoopStep and UntilStep in favor of the new RepeatStep model of looping in Gremlin3.

  • BranchStep is now exposed in GraphTraversal via branch(function).

  • UnionStep now implements TraversalHolder.

  • Added RepeatStep as the new looping construct supporting do/while, while/do, and emit semantics.

  • Moved Traversal.sideEffects() to Traversal.Admin.getSideEffects() as cap() should be used to access the sideEffect data of a traversal.

  • Renamed vendor XXXTraversal to XXXGraphTraversal (interface) and XXXGraphTraversal to DefaultXXXGraphTraversal (implementation class).

  • Modified packaging for console plugins to be more consistent by moving them to the com.tinkerpop.gremlin.console.groovy.plugin namespace.

  • Removed all TinkerPop specific dependencies to Guava to avoid user version conflicts.

  • Added support for -e (script file execution) and -v (version display) options on gremlin.sh.

  • GraphSON supports the assignment of multiple custom serialization modules.

  • Traverser.get(stepLabel/sideEffectKey) no longer exists. There now exists: Traverser.path(stepLabel) and Traverser.sideEffects(sideEffectKey).

  • SimpleTraverser now supports "path" but in a very loose, global cache way. Added SparsePath as a Map-backed Path implementation.

  • Provided Neo4j multi-label support in Neo4j-Gremlin. Added three Neo4jVertex-specific methods: addLabel(), removeLabel(), labels().

  • Removed TraverserSourceStrategy as it is no longer required.

  • TraverserSource is now only a marker interface with "on first" within the TraverserSource 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 override GraphReader and GraphWriter initial construction when custom serializers are needed.

  • Removed methods from GraphProvider related to customizing serializers in IoTest from the test suite as the new Graph.Io interface now serves that purpose.

  • Added Neo4jGraph.checkElementsInTransaction(boolean) which will (or not) verify whether elements retrieved via Neo4j global graph operations are transactionally consistent.

  • Added ScriptInputFormat and ScriptOutputFormat to Hadoop-Gremlin for reading and writing a file according to an arbitrary parsing script.

  • Added TimeLimitStep.getTimedOut() to determine if the step timed out or there were no more objects to process.

  • Graph.System is now Graph.Hidden with "hidden" being the vendor namespace and the key prefix being ~.

  • Much better toString() handling in Step and Traversal.

  • ComparatorHolder<V> interface returns a List<Comparator<V>> instead of a Comparator<V>[].

  • T now implements Function<Element,Object>.

  • Added ElementValueComparator and ElementFunctionComparator in support of vendor introspection on ComparatorHolder-steps.

  • Renamed Comparing marker interface to ComparatorHolder.

  • FunctionHolder interface provides vendor introspection via ElementValueFunction.

  • Removed OrderByStep as it is now just order() with a by()-based comparator.

  • Added SampleStep (sample()) to allow for sampling the set of previous objects. Useful for doing random walks with local().

  • Renamed random() to coin() to better express that the filter is a random coin toss.

  • Added by()-projection to modulate the meaning of post-processing steps like aggregate(), groupCount(), path(), order(), etc.

  • Removed the Strategy interface and gave StrategyGraph direct access to the GraphStrategy.

  • Added Graph.strategy() to help instantiate StrategyGraph instances.

  • Modified the signature of all GraphStrategy methods to include an parameter that contains a reference to the "composing strategy".

  • PartitionStrategy hides the specified partition key from view when iterating properties, keys, etc.

  • Change construction of GraphStrategy implementations to be consistent with singleton instances and builder pattern.

  • Added Graph.Helper annotation to "protected" certain default interface methods from implementation by vendors.

  • Transaction retry functions now work with "manual" transactions.

  • Improved error messaging when importing "legacy" GraphSON that was not generated with "extended" properties.

  • Renamed "iterator" related methods in the GraphStrategy interface to be consistent with the method names they represent.

  • PropertyMapStep (valueMap()) now takes a boolean to state if the tokens of the element are desired along with its properties.

  • HadoopGraph now connected to the StructureProcessSuite.

  • HadoopGraph no longer supports Graph.Variables as they were in-memory. A persistence mechanism can be introduced in the future.

  • Hidden properties removed in favor of using GraphStrategy for such features.

  • Edge.iterators().vertexIterator(BOTH) now guarantees OUT then IN vertex iterator order.

  • Graph.v(Object) and Graph.e(Object) no longer exist. Instead, use Graph.V(Object... ids) and Graph.E(Object... ids).

  • Added Graph.Iterators to allow access to vertex and edge iterators based on element ids and bypassing GraphTraversal.

  • Renamed GraphStrategy implementations to be less verbose - removed the word "Graph" from their names (e.g. IdGraphStrategy simply changed to IdStrategy).

  • Removed Step.NO_OBJECT as the problem is solves can be solved with proper use of flatMap and EmptyTraverser.

  • Path is now part of GraphSerializer and thus, not specific to a particular implementation of Path.

  • Added messaging to show files being downloaded when using the Gremlin Server "install" command.

  • Added test name and class arguments to the GraphProvider.loadGraphWith method.

  • Merged ReferencedXXX and DetachedXXX so that all migration of graph element data is via DetachedXXX.

  • Added StaticVertexProgram and StaticMapReduce which simply return this on clone().

  • VertexProgram and MapReduce now implement Cloneable and is used for fast copying across workers within the same machine.

  • Added TraversalHolder interface which extends PathConsumer to determine recursively if nested traversals require path calculations turned on.

  • Reworked how a TraverserGenerator is retrieved and utilized.

  • Added Traversal.toBulkSet() to make getting resultant data more efficiently for traversals with repeated data.

  • Provided a helper LocalStep.isLocalStarGraph() so GraphComputer implementers know the requisite data boundaries.

  • Created Traversal.Admin to hide administrative methods. Added Traversal.asAdmin() to get at Traversal.Admin.

  • Fixed up all Step cloning operations realizing that Java8 lambdas are always bound to the calling class (no delegates).

  • Usage of :remote close without configured remotes shows a reasonable message rather than a stack trace.

  • Provided LocalStep to signify that the internal traversal is locally bound to the incoming object.

  • Failed script evaluation in Gremlin Server now triggers the cancel of the process attempting to timeout the script if it were to run too long.

  • Greatly increased the speed of ScriptEngineLambda by making use of a static ScriptEngine cache.

  • Fixed a general bug in all sideEffect using steps where the sideEffect should be accessed via the Traverser not Traversal.

  • GremlinPlugin interface no longer has the additionalDependencies method - those dependencies are now defined by an entry in the manifest file for the jar called Gremlin-Plugin-Dependencies.

  • Added TinkerWorkerPool which is used for resource efficient threading in TinkerGraphComputer.

  • MapReduce.createMapReduce(Configuration) now exists and serves the same purpose as VertexProgram.createVertexProgram(Configuration).

  • Enabled SessionOps to be extended. Added eval handler hook.

  • Setting a property with an unsupported data type throw IllegalArgumentException instead of UnsupportedOperationException as the operation is supported, but the argument is not.

TinkerPop 3.0.0.M6 (Release Date: December 2, 2014)

  • javatuples.Pair avoided on MapReduce API in favor of a new KeyValue class.

  • Renamed Gremlin-Plugin manifest entry for plugins to Gremlin-Plugin-Paths.

  • Added Gremlin-Plugin-Dependencies manifest entry to list other dependencies that should be retrieved with a plugin jar.

  • Memory.Admin.asImmutable() yields an immutable representation of the GraphComputer Memory.

  • Fixed host selection in gremlin-driver by properly accounting for all hosts being marked unavailable at the instantiation of a Client.

  • Removed Giraph-Gremlin in favor of new Hadoop-Gremlin with GiraphGraphComputer support. Future support for MapReduceGraphComputer.

  • Greatly simplified the InputFormat and OutputFormat model for working with Giraph (and Hadoop).

  • Added a serializer for Property for GraphSON correcting format of serialization of a single Property on an Edge.

  • Fixed bug in Gremlin Console that prevented assignments to empty List objects.

  • Added VertexProgram.getMessageScopes() to allow vendors to know which MessageScopes at a particular Memory state.

  • Reduced the number of methods in MessageScope.Local as its up to vendors to inspect provided incident Traversal accordingly.

  • Renamed MessagesType to MessageScope to make it less ambiguous regarding the class of the messages being sent.

  • Changed the message type of TraversalVertexProgram to TraverserSet to support message combining.

  • Added VertexProgram.getMessageCombiner() to support the combining of messages in route to a vertex.

  • Reduced object creation in TraversalVertexProgram around vertex-local traversal sideEffects.

  • Renamed Traverser.Admin.makeChild() and Traverser.Admin.makeSibling() to Traverser.Admin.split() to correspond with merge().

  • Added Traverser.Admin.merge(Traverser) method so that the merging algorithm is with the Traverser.

  • Added Operator enum that contains sack-helpful BinaryOperators: sum, minus, mult, div, max, min, etc.

  • Added GraphTraversal.withSack() and renamed trackPaths() and with() to withPath() and withSideEffect(), respectively.

  • Added the "Gremlin Sacks" feature to allow a Traverser to carry local information along its walk.

  • GraphSON format no longer makes use of hiddens JSON key. Its all just properties.

  • Added DoubleIterator to make vendor implementations of Edge.iterators().vertexIterator() efficient.

  • PropertiesStep is smart about hiddens vs. properties.

  • Element.iterators().hiddenProperties() no longer exists. For vendors, simply provide an iterator of properties.

  • GIRAPH_GREMLIN_LIBS supports colon separated directories for loading jars from multiple paths.

  • Introduced method to control the location of dependencies dynamically loaded to the Gremlin Console as part of the :install command.

  • Fixed problem with the Neo4j Gremlin Plugin not loading properly after Gremlin Console restart.

  • Removed the "use" configuration from Gremlin Server.

  • Moved SugarGremlinPlugin from gremlin-console to gremlin-groovy so that it could be shared with Gremlin Server.

  • Fixed bug in serialization of null results returned to the Gremlin Console when serializing to strings.

  • Moved the GremlinPlugin for TinkerGraph to tinkergraph-gremlin module (it is no longer in gremlin-console).

  • Added a plugin-info.txt file to Gremlin Console /ext/{module} subdirectories to identify the module that was originally requested.

  • Gremlin Server now allows for the explicit configuration of plugin activation.

  • Refactored GremlinPlugin and AbstractGremlinPlugin to better account for plugins that run on the server and those that run in the console.

  • Added a plugins configuration to Gremlin Server to control the plugins that are enabled on initialization.

  • Added a builder option to GremlinExecutor to control the plugins that are enabled on initialization.

  • Added RemoteException for usage with RemoteAcceptor implementations for the Gremlin Console so as to better standardize their development.

  • Standardized all text being written to the Gremlin Console using starting upper case letter.

  • Prevented error in the Console when :submit is called but no remotes were configured.

  • Provided a way to clean the grapes directory as part of a standard build with mvn clean install.

TinkerPop 3.0.0.M5 (Release Date: November 7, 2014)

  • Removed PropertyFilterIterator as using Java8 streams was just as efficient for the use case.

  • Renamed KryoWritable to GremlinWritable as it is not necessarily Kryo that is the serialization mechanism.

  • Fixed an input split bug in Giraph that was making it so that splits were not always at vertex boundaries.

  • Fixed a combiner bug in GirapGraphComputer. Combiners were always calling MapReduce.reduce(), not MapReduce.combine().

  • Greatly simplified SubgraphStrategy by removing requirements for Traversal introspection.

  • StrategyWrappedGraph mimics vendor use of GraphStep and GraphTraversal and no longer requires dynamic strategy application.

  • TraversalStrategies make use of a dependency tree sorting algorithm to ensure proper sorts prior to application.

  • TraversalStrategies are now immutable and are bound to the Traversal class.

  • Fixed bug in Gephi Plugin that prevented it from communicating with the Gephi Streaming Server.

  • Renamed MessageType.XXX.to() to MessageType.XXX.of() so it makes sense in both the sending and receiving context.

  • Improved messaging with respect to tests that are ignored due to features to make it clear that those tests are not in error.

  • Relaxed exception consistency checks in the test suite to only check that a thrown exception from an implementation extends the expected exception class (but no longer validates that it is the exact class or that the message text).

  • VertexProgram now has workerIterationStart() and workerIterationEnd() to allow developers to control vertex split static data structures.

  • TraversalVertexProgram startup time greatly reduced due to being smart about loadState() behavior.

  • Gremlin Server sessions now allow serialization of results that were part of an open transaction.

  • Refactor OpProcessors implementations in Gremlin Server for better reusability.

  • Vertex.iterators() no longer have a branchFactor. This is now at the query language level with localLimit().

  • Added limit(long) and localLimit(int,int) which simply call the range equivalents with 0 as the low.

  • Added LocalRangeStep which supports ranging the edges and properties of an element — localRange(int,int).

  • GraphTraversal.value(String) no longer exists. Instead, use GraphTraversal.values(String).

  • HiddenXXXStep and ValueXXXStep no longer exist. PropertyXXXStep takes a PropertyType to denote value and hidden access.

  • Added PropertyType to the structure-package which provide markers for denoting property types (vs. property classes).

  • Renamed setWorkingDirectory to workingDirectory in the KryoReader builder.

  • Path.get(String) returns the object if only one object is referenced by label, else it returns a List of referenced objects.

  • Added overload to GremlinKryo to allow a serializer to be configured as a Function<Kryo,Serializer> to allow better flexibility in serializer creation.

  • Added method to GraphProvider to allow implementers to provide a mechanism to convert GraphSON serialized identifiers back to custom identifiers as needed.

  • Added methods to GraphProvider so that implementers could specify a custom built GremlinKryo class and/or SimpleModule class in case their implementation had custom classes to be serialized.

  • Added Traversal.forEachRemaining(class,consumer) for those traversals whose end type is different from declared due to strategy rewriting.

  • Removed Traversal.forEach() as traversal implements Iterator and users should use forEachRemaining().

  • RangeStep now has an inclusive low and an exclusive high — a change from Gremlin2.

  • DriverGremlinPlugin returns raw results with driver results available via the result variable.

  • Removed test enforcement of private constructor for a Graph instance.

  • RemoteAcceptor now supports @ prefixed lines that will grab the script string from the Gremlin Console shell.

  • Modified the signature of Property.element() to simply return Element

  • Added Reducing marker and ReducingStrategy which supports reduction-functions as a final step in Gremlin OLAP (e.g. fold()).

  • Once strategies are complete(), no more steps can be added to a Traversal.

  • Renamed Traversal.strategies() to Traversal.getStrategies() as it is not a "query language"-method.

  • Added test to enforce that a label on a VertexProperty is always set to the key of the owning property.

  • Fixed bug with multi-property removal in Neo4jGraph.

  • Bumped to Neo4j 2.1.5.

  • Used standard UUIDSerializer from the kryo-serializers library for serialization of UUID objects.

  • Changed GraphSON serialization to only use iterators() - there were still remnants of Traversal usage from previous refactoring.

  • Added overload for detach method to allow for the Element to be detached as a "reference" only (i.e. without properties).

  • Renamed Item in gremlin-driver to Result.

  • Renamed strategy to getStrategy in StrategyWrappedGraph.

  • Renamed baseGraph to getBaseGraph in Neo4jGraph.

  • Neo4jGraph now returns an empty property Vertex.property(k) when the key is non-existent (a problem only visible when meta/multi property configuration was turned off).

  • Traversal.Strategies.apply() now takes a TraversalEngine. Greatly simplifies strategy application for STANDARD or COMPUTER.

  • Renamed IdentityReductionStrategy to IdentityRemovalStrategy for reasons of clarity.

  • Added ComparingRemovalStrategy that removes Comparing-marked steps unless they are the end step of the traversal.

  • OrderStep now works in OLAP, but only makes sense as a traversal end step.

  • MapReduce API extended to include getMapKeySort() and getReduceKeySort() to sort outputs accordingly.

  • Renamed TraversalResultMapReduce to TraverserMapReduce. Shorter and makes more sense.

  • Improved build automation to package javadocs and asciidoc documentation in the distribution files.

  • Improved build automation with a script to automatically bump release versions in the various files that needed it such as the pom.xml files.

  • The identifier on VertexProperty is now read properly to those graphs that can support identifier assignment.

  • GraphSONReader.readGraph() now properly reads vertex properties.

  • Removed Neo4jGraph.getCypher() as users should use Neo4jGraph.cypher() and get back TinkerPop3 graph objects.

  • GiraphGraph.variables().getConfiguration() is now replaced by GiraphGraph.configuration().

  • Added Graph.configuration() which returns the Configuration object of Graph.open().

  • Removed TraverserTracker as now there is only a TraverserSet for all halted traversers. A nice simplification of TraversalVertexProgram.

  • Renamed Traverser.isDone() to Traverser.isHalted() and DONE to HALT. Consistent with automata terminology.

  • Removed PathTraverserExecutor and SimpleTraverserExecutor as a single TraverserExecutor correctly executes both types of traversers.

  • TraversalVertexProgram does "reflexive message passing" to reduce the total number of iterations required to execute a traversal.

  • MapReduce no-argument constructors are private and thus, only for reflection and loadState() usage.

  • MapReducers for TraversalVertexProgram are now smart about with() declared data structures.

  • Updated Traversal.SideEffects to use "registered suppliers" and it now works accordingly in both OLTP and OLAP environments.

  • Increased the speed of FlatMapStep by approximately 1.5x.

TinkerPop 3.0.0.M4 (Release Date: October 21, 2014)

  • Added features for VertexProperty user supplied ids and related data types.

  • Removed SideEffectCap marker interface as there is only one SideEffectCapStep and thus, instanceof is sufficient.

  • Path.getObjects()/Path.getLabels() renamed to Path.objects()/Path.labels() to be in line with "query language" naming convention.

  • Greatly simplified GiraphInternalVertex due to Element.graph() — 1/2 the memory footprint and reduced construction time.

  • Renamed Property.getElement() to Property.element() given the "query language" naming convention.

  • Element.graph() added which returns the Graph that the element is contained within.

  • Added tests for greater consistency around iterating hidden properties.

  • Simplified TraversalVertexProgram where only a single TraverserTracker exists for both path- and simple-traversers.

  • Fixed a major bug where Arrays.binarySearch was being used on an unsorted array in TinkerGraph and Neo4jGraph.

  • Changed ComputerResult.getXXX() to graph() and memory() to be consistent with "query language" naming convention.

  • Traverser.getXXX() changed to loops(), bulk(), path(), sideEffects() to be consistent with "query language" naming convention.

  • Optimization to reduce the number of empty lists created due to no step class existing for respective TraversalStrategy.apply().

  • Added CapTraversal as a marker interface for the cap() method.

  • Added union() with GraphComputer UnionLinearStrategy.

  • TimeLimitStep was moved to filter/ package. It was a mistake that it was in sideEffect/.

  • Provided the configuration for generating both a "full" and "core" set of javadocs, where "full" represents all classes in all projects and "core" is the "user" subset.

  • Validated bindings passed to Gremlin Server to ensure that they do not match the most common statically imported values.

  • If no script engine name is provided to a LambdaHolder it is assumed to be Gremlin-Groovy.

  • MapEmitter and ReduceEmitter have an emit(value) default method where the key is the MapReduce.NullObject singleton.

  • Traverser.Admin now implements Attachable as the Traversal.SideEffects can be generated from the Vertex.

  • Made a solid effort to ensure that all TinkerPop keys are Graph.System to leave Graph.Key for users.

  • The Graph.System prefix is now ^ instead of %&%. Simpler and easier on the toString()-eyes.

  • Added Traversal.SideEffects.ifPresent(Consumer) as a default helper method.

  • Added profile()-step which provides detailed information about the performance of each step in a traversal.

  • No more CountCapStep and CountStep, there is only CountStep and it is elegant.

  • Created a AbstractTraversalStrategy with good toString(), hasCode(), and equals() implementations.

  • Added CountTraversal as a marker-interface stating that the Traversal has a count() -> Long method.

  • Traversal no longer has any step methods as its not required for DSL implementers to have "core steps."

  • Added "linearization" strategy for ChooseStep so it is executed correctly on GraphComputer.

  • Added ``GraphTraversalStrategyRegistry` which has respective global strategies to make turning on/off strategies easier.

  • Added a generic BranchStep to be used for re-writing "meta-steps" for execution on GraphComputer.

  • Moved JumpStep, UntilStep, and ChooseStep to a new branch/ package.

  • Added test cases to the Structure Suite to enforce consistent operations of reading properties after removal of their owning Element.

  • GraphSON format change for full Graph serialization - Graph variables are now serialized with the key "variables" as opposed to "properties".

  • Relaxed Graph.toString() test requirements for implementers.

  • Made the toString operations in GraphStrategy consistent.

  • Added VertexFeatures.supportsRemoveProperty.

  • Added VertexPropertyFeatures.supportsRemoveProperty.

  • Added EdgeFeatures.supportsRemoveProperty.

  • Added VertexFeatures.supportsRemoveVertices.

  • Added EdgeFeatures.supportsRemoveEdges.

  • Vendors should now get a clear error when mis-spelling something in an @OptOut (or more likely if a test name changes) and it now works all the test suites.

  • All plugins now have a default prefix of "tinkerpop." as a namespace.

  • GraphComputer now executes a Set<MapReduce> and hashCode()/equals() were implemented for existing MapReduce implementations.

  • Changed Contains.in/notin to Contains.within/without as in is a reserved term in most languages (including Java and Groovy).

  • Added helper methods for loading data into collections in TraversalHelper.

  • Core Traversal methods are smart about bulking — e.g. iterate(), fill(), remove(), etc.

  • GroupByStep and GroupByMapReduce leverage BulkSet as the default group data structure.

  • Element.Iterator has renamed methods so implementers can do MyElement implements Element, Element.Iterators.

  • Renamed MessageType.Global and MessageType.Local creators from of() to to() as it makes more sense to send messages to().

  • With Traverser.get/setBulk() there is no need for a TraverserMessage. The Traverser is now the message in TraversalVertexProgram.

  • Provided static make() methods for constructing Path implementations.

  • Provided a more space/time efficient algorithm for Path.isSimple().

  • The JumpStep GraphComputer algorithm Queue is now a TraverserSet.

  • AggregateStep and StoreStep now use BulkSet as their default backing Collection (much more space/time efficient).

  • Added BulkSet which is like TraverserSet but for arbitrary objects (i.e. a weighted set).

  • UnrollJumpStrategy is no longer a default strategy as it is less efficient with the inclusion of TraverserSet.

  • Introduced TraverserSet with bulk updating capabilities. Like OLAP, OLTP looping is now linear space/time complexity.

  • TinkerGraph’s MapReduce framework is now thread safe with a parallel execution implementation.

  • Added a default Traverser.asAdmin() method as a typecast convenience to Traverser.Admin.

  • Renamed Traverser.System to Traverser.Admin as to not cause java.lang.System reference issues.

  • Renamed Memory.Administrative to Memory.Admin to make it shorter and consistent with Traverser.Admin.

  • Fixed a TinkerGraph bug around user supplied vertex property ids.

  • Most Step classes are now defined as public final class to prevent inheritance.

  • ShuffleStep now extends BarrierStep which enables semantically correct step-sideEffects.

  • Leveraged Traverser.getBulk() consistently throughout all steps.

TinkerPop 3.0.0.M3 (Release Date: October 6, 2014)

  • All Step fields are now private/protected with respective getters as currently needed and will be added to as needed.

  • Gremlin Server no longer has the traverse operation as lambdas aren’t really serialized.

  • Path is now an interface with ImmutablePath and MutablePath as implementations (2x speedup on path calculations).

  • Traverser now implements Comparable. If the underlying object doesn’t implement Comparable, then a runtime exception.

  • Added abstract BarrierStep which greatly simplifies implementing barriers like AggregateStep, OrderStep, etc.

  • SelectStep is now intelligent about when to trigger path computations based on label selectors and barriers.

  • T no longer has eq, neq, lt, in, etc. Renamed all respective enums and with static import, good in console (e.g. Compare.eq).

  • Added Order enum which provides Order.decr and Order.incr.

  • Traverser.loops and Jump.loops are now shorts (32767 max-loops is probably sufficient for 99.9999% of use cases).

  • Traverser.bulk exists which is how many instances does the traverser represent. For use in grouping with bulk computations.

  • Greatly simplified sideEffect steps where there is no distinction between OLAP vs. OLTP (from the Step perspective).

  • Removed the need for Bulkable and VertexCentric marker interfaces in process API.

  • Renamed configuration parameters in Giraph-Gremlin to be consistent with a giraph.gremlin-prefix.

  • Made it possible to pass a ScriptEngine name and string script in TraversalVertexProgram and LambdaVertexProgram.

  • Made TinkerGraph a plugin for the Console as it is no longer a direct dependency in gremlin-groovy.

  • Added features for supporting the addition of properties via Element.property(String,Object).

  • GiraphGraph OLTP tested against Gremlin-Java8 and Gremlin-Groovy — OLAP tested against Gremlin-Groovy.

  • Neo4jGraph is now tested against both Gremlin-Java8 and Gremlin-Groovy.

  • Renamed the test cases in ProcessTestSuite to be consistent with other Gremlin language variants.

  • 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 a GraphReader/GraphWriter to serialize the graph data.

  • Removed implements Serializable on numerous classes to ensure safety and proper usage of utilities for cloning.

  • Traversal now implements Cloneable as this is the means that inter-JVM threads are able to get sibling Traversals.

  • Created "integration" test for Neo4jGraph that runs the test suite with multi/meta property features turned off.

  • Added GraphStrategy methods for VertexProperty.

  • Converted the id data type from string to integer in the Grateful Dead sample data.

  • Removed all notions of serializable lambdas as this is a misconception and should not be part of TinkerPop.

  • Greatly simplified TraversalVertexProgram with three arguments: a Traversal<Supplier>, Class<Traversal<Supplier>>, or a script string with ScriptEngine name.

  • Added TraversalScript interface with GroovyTraversalScript as an instance. To be used by OLAP engines and any language variant (e.g. gremlin-scala, gremlin-js, etc.).

  • UntilStep now leverages UnrollJumpStrategy accordingly.

  • Fixed a bug where the toString() of Traversal was being hijacked by SugarGremlinPlugin.

  • Fixed compilation bug in UntilStep that is realized when used in multi-machine OLAP.

  • Simplified Enumerator and implementations for MatchStep.

TinkerPop 3.0.0.M2 (Release Date: September 23, 2014)

  • Added an exhaust InnerJoinEnumerator fix in MatchStep to get all solutions correctly.

  • Neo4jGraph can be configured to allow or disallow meta- and multi-properties.

  • Added until()-step as a simpler way to express while-do looping which compiles down to a jump()-step equivalent.

  • Added "The Crew" (CREW) toy graph which contains multi-properties, meta-properties, graph variables, hiddens, etc.

  • If the Giraph job fails, then the subsequent MapReduce jobs will not execute.

  • Added Graph.System class which generates keys prefixed with %&% which is considered the vendor namespace and not allowed by users.

  • Added ReferencedVertex (etc. for all graph object types) for lightweight message passing of graph object ids.

  • T.* now has label, id, key, value and no longer are these String representations reserved in TinkerPop.

  • Traverser now has a transient reference to Traversal.SideEffects.

  • "Detached" classes are now tested by the standard test suite.

  • Compartmentalized Traverser interface so there is now a Traverser.System sub-interface with methods that users shouldn’t call.

  • Added OrderByStep which orders Elements according to the value of a provided key.

  • 2x speed increase on steps that rely heavily on ExpandableStepIterator with massive memory footprint reduction as well.

  • Added VertexProperty<V> as the property type for vertices — provides multi-properties and properties on properties for vertices.

  • Changed VertexProgram such that getElementComputeKeys() is simply a Set<String>.

  • Significant changes to the format of the ResponseMessage for Gremlin Server - these changes break existing clients.

  • Close any open transactions on any configured Graph when a session in Gremlin Server is killed.

  • Grateful Dead Graph now uses vertex labels instead of "type" properties.

  • There is now a GraphComputerStrategy and EngineDependent marker interface to allow steps to decide their algorithm depending if they are OLAP or OLTP.

  • A labeled step now stores its current traverser value in Traversal.SideEffects (no longer can sideEffectKeys and step labels be the same).

  • GraphFactory support for opening a Graph with multiple GraphStrategy instances - if there are multiple strategies they are wrapped in order via SequenceGraphStrategy.

  • The result type for result termination messages returned from Gremlin Server is now set to "no content".

  • The maxContentLength setting for Gremlin Driver now blocks incoming frames that are too large.

  • After initialization scripts are executed in Gremlin Server, the Graph instances are re-bound back to their global references, thus allowing GraphStrategy initialization or even dynamic Graph creation through scripts.

  • Added "Modern" graph back which is basically the "Classic" graph with double values for the "weight" property on edges and non-default vertex labels.

  • Traversal.addStep() is now hard typed so type casting isn’t required and traversal APIs look clean.

  • Changed the hidden key prefix from %$% to ~ in Graph.Key.hide().

  • Added has(label,key,predicate,value) to allow for has('person','name','marko'). Various overloaded methods provided.

  • Update to traversal API where if a SFunction<S,?> was required, but can process a Traverser<S>, then the function is SFunction<Traverser<S>,?>.

  • Added WhereStep as a way to further constrain select() and match().

  • Extensive work on GiraphMemory and its interaction with Giraph aggregators.

  • If the input path of a GiraphGraphComputer does not exist, failure happens prior to job submission.

  • SugarPlugin now has all inefficient methods and Gremlin-Groovy proper is only efficient Groovy techniques.

  • Prevent concurrency problems by only modifying bindings within the same thread of execution in the GremlinExecutor.

  • Calls to use on the DependencyManager now return the list of GremlinPlugin instances to initialize instead of just initializing them automatically because it causes problems with ScriptEngine setup if a plugin requires a script to be evaluated and a required dependency is not yet loaded.

  • Traversal.SideEffects has getGraph(), setGraph(), and removeGraph() default helpers.

  • Traversal.MemoryTraversal.SideEffects and GraphComputer.SideEffectsGraphComputer.Memory.

  • StrategyWrappedVertex and StrategyWrappedEdge properly wrap Element objects returned from non-traversal based methods.

  • Gremlin-Server now sends a single write with status 200 for Object and empty response messages.

  • GremlinGroovyScriptEngine allows imports to re-import dependencies added via "use".

  • Changed order in which the GremlinExecutor is initialized such that dependency loading via "use" are handled first which fixes problems with starting Gremlin Server with gremlin-server-neo4j.yaml.

  • Corrected issues with the "branch factor" related traversals under SubgraphStrategy. This change also altered the semantics of the SubgraphStrategy a bit as it became more restrictive around Edge inclusion (requires both vertices to be in the subgraph).

  • The Gephi Plugin now visualizes traversals and has numerous configuration options.

  • Add more specific features around the types of "identifiers" a graph can support.

  • Add a new test graph called MODERN that is copy of the CLASSIC graph, but represents floats as doubles. This graph will be the default graph for testing going forward.

  • Fix bug in Neo4jGraph that was not processing multiple vertex labels properly when doing a has() step with IN.

  • Changed semantics of @LoadGraphWith in gremlin-test to only refer to the ability of a test implementation to process the data types of the test graph (not to actually load it).

  • StartStep is a SideEffect as it is a process to get data into the stream (like a keyboard) and more efficient as such.

  • Greatly simplified the implementations of Map, FlatMap, Filter, and SideEffect.

  • Path data structure changed to an ordered list of objects with each associated to a Set<String> of as-labels.

  • All sideEffect-based steps no longer extend FilterStep with predicate equal true, but a more efficient SideEffectStep.

  • TreeStep now has TreeMapReduce for executing on GraphComputer.

  • Neo4jTraversal.cypher() is fluent throughout.

  • Reverted back to TP2 model of as() referring to step names, not variable names of sideEffects.

  • Updated AddEdge-step to support property key/value pairs for appending to newly created edges.

  • Renamed Graph.getFeatures() to Graph.features() to be consistent with other API methods.

  • Vertex and Edge now implement all GraphTraversal methods to ensure consistency throughout stack.

  • Neo4jTraversal is auto-generated from Neo4jTraversalStub with technique generalizable to other vendors.

  • Added test suite to ensure that all traversals are of the same type: g.V, g.E, g.of(), v.identity(), e.identity(), v-, e-methods.

  • Giraph HDFS helpers now support hdfs.mkdir(string) and local.mkdir(string)

  • Added @OptIn and @OptOut for implementers to specify on their Graph implementations for test compliance information.

  • GraphComputer Memory now immutable after computation is complete.

  • Dependency grabbing for plugins filter out slf4j logging dependencies so as to avoid multiple bindings with the standard TinkerPop distributions.

  • Fixed GiraphMemory to be fully consistent with GraphComputer specification.

  • Removed fatJar assembly from Giraph-Graph as it is no longed needed with distributed cache model.

  • Reworked GiraphRemoteAcceptor to provide a result variable back to the console with ComputerResult.

  • VertexProgram is no longer Serializable (use loadState and storeState for wire-propagation).

  • Moved GiraphGraph.getOutputGraph() to GiraphHelper.

  • Changed GIRAPH_GREMLIN_HOME to GIRAPH_GREMLIN_LIB to reference directory where jars are to be loaded.

  • Updated README with release instructions.

TinkerPop 3.0.0.M1 (Release Date: August 12, 2014)

  • First official release of TinkerPop3 and thus, no changes.