-
Added
RepeatUnrollStrategy
to linearize arepeat()
-traversal if loop amount is known at compile time. -
Fixed a bug in
BranchStep
around child integration duringclone()
. -
Fixed a bug in
AbstractStep
around label set cloning. -
Added
TraversalStrategyPerformanceTest
for verifying the performance gains of optimization-based traversal strategies. -
TraversalExplanation.prettyPrint()
exists which provides word wrapping and GremlinConsole is smart to use console width to controltoString()
. -
TraversalOpProcessor
(RemoteConnection
) usesHaltedTraverserStrategy
metadata to determine detachment procedure prior to returning results. -
Allow DFS paths in
HADOOP_GREMLIN_LIBS
. -
Added a safer serializer infrastructure for use with
SparkGraphComputer
that usesKryoSerializer
and the newGryoRegistrator
. -
Added
HaltedTraverserStrategy
to allow users to get back different element detachments in OLAP. -
Fixed a
NullPointerException
bug around nestedgroup()
-steps in OLAP. -
Fixed a severe bug around halted traversers in a multi-job OLAP traversal chain.
-
Ensure a separation of
GraphComputer
andVertexProgram
configurations inSparkGraphComputer
andGiraphGraphComputer
. -
PeerPressureVertexProgram
now supports dynamic initial vote strength calculations. -
Added
EmptyMemory
for ease of use when no memory exists. -
Updated
VertexComputing.generateProgram()
API to includeMemory
. (breaking) -
ImmutablePath.TailPath
is now serializable likeImmutablePath
. -
Added
ConfigurationCompilerProvider
which allows fine-grained control of some of the internalGremlinGroovyScriptEngine
settings at the Groovy compilation level. -
Intoduced the
application/vnd.gremlin-v1.0+gryo-lite
serialization type to Gremlin Server which users "reference" elements rather than "detached". -
GryoMapper
allows overrides of existing serializers on calls toaddCustom
on the builder. -
Added a traversal style guide to the recipes cookbook.
-
Fixed a bug in master-traversal traverser propagation.
-
Added useful methods for custom
VertexPrograms
to be used withprogram()
-step. -
Increased the test coverage around traverser propagation within a multi-job OLAP traversal.
-
Added tests to validate the status of a transaction immediately following calls to close.
-
Added tests to ensure that threaded transactions cannot be re-used.
-
GraphFilter
helper methods are now more intelligent when determining edge direction/label legality. -
Added
GraphFilterStrategy
to automatically constructGraphFilters
via traversal introspection in OLAP. -
Updated the Gephi Plugin to support Gephi 0.9.x.
-
Increased the testing and scope of
TraversalHelper.isLocalStarGraph()
. -
Changed signature of
get_g_VXlistXv1_v2_v3XX_name
andget_g_VXlistX1_2_3XX_name
ofVertexTest
to take arguments for theTraversal
to be constructed by extending classes. -
Added
VertexProgramInterceptor
interface as a general pattern forGraphComputer
providers to use for bypassingGraphComputer
semantics where appropriate. -
Added
SparkStarBarrierInterceptor
that uses Spark DSL for local star graph traversals that end with aReducingBarrierStep
. -
Added
SparkInterceptorStrategy
which identifies which interceptor to use (if any) given the submittedVertexProgram
. -
Added
SparkSingleIterationStrategy
that does not partition nor cache the graph RDD if the traversal does not message pass. -
Added more helper methods to
TraversalHelper
for handling scoped traversal children. -
Deprecated all "performance" tests based on "JUnit Benchmarks".
-
SparkGraphComputer
no longer shuffles empty views or empty outgoing messages in order to save time and space. -
TraversalVertexProgram
no longer maintains empty halted traverser properties in order to save space. -
Added
List<P<V>>
constructors toConnectiveP
,AndP
, andOrP
for ease of use. -
Added support for interactive (
-i
) and execute (-e
) modes for Gremlin Console. -
Displayed line numbers for script execution failures of
-e
and-i
. -
Improved messaging around script execution errors in Gremlin Console.
-
Added "help" support to Gremlin Console with the
-h
flag. -
Added options to better control verbosity of Gremlin Console output with
-Q
,-V
and-D
. -
Deprecated the
ScriptExecutor
- the-e
option togremlin.sh
is now handled byConsole
. -
Traversal
now allows cancellation withThread.interrupt()
. -
Added a Gremlin language variant tutorial teaching people how to embed Gremlin in a host programming language.
This release also includes changes from 3.1.2-incubating.
-
Bumped to Neo4j 2.3.3.
-
Renamed variable
local
tofs
inHadoopGremlinPlugin
to avoid a naming conflict withScope.local
. (breaking) -
Added
GraphTraversal.optional()
which will use the inner traversal if it returns results, else it won’t. -
GroupStep
andGroupSideEffectStep
make use of mid-traversal reducers to limit memory consumption in OLAP. -
Added
GraphTraversal.program(VertexProgram)
to allow arbitrary user vertex programs in OLAP. -
Added
GraphTraversal.project()
for creating aMap<String,E>
given the current traverser and an arbitrary number ofby()
-modulators. -
HADOOP_GREMLIN_LIBS
can now reference a directory in HDFS and will be used if the directory does not exist locally. -
Added
gremlin-benchmark
module with JMH benchmarking base classes that can be used for further benchmark development. -
TraversalStrategies.GlobalCache
supports bothGraph
andGraphComputer
strategy registrations. -
select("a","b").by("name").by("age")
-style traversals now work in OLAP with newPathProcessorStrategy
. -
DedupGlobalStep
can now handle star-boundby()
-modulators and scoped keys onGraphComputer
. -
Added
Computer
which is a builder forGraphComputers
that is serializable. -
PersistedOutputRDD
now implementsPersistResultGraphAware
and thus, no more unneeded warnings when using it. -
Renamed
StandardTraversalMetrics
toDefaultTraversalMetrics
given theDefaultXXX
-convention throughout. (breaking) -
Bumped to Apache Hadoop 2.7.2.
-
Fixed a bug around profiling and nested traversals.
-
Added
gremlin.hadoop.defaultGraphComputer
so users can usegraph.compute()
withHadoopGraph
. -
Added
gremlin.hadoop.graphReader
andgremlin.hadoop.graphWriter
which can handledXXXFormats
andXXXRDDs
. -
Deprecated
gremlin.hadoop.graphInputFormat
,gremlin.hadoop.graphOutputFormat
,gremlin.spark.graphInputRDD
, andgremlin.spark.graphOutputRDD
. -
If no configuration is provided to
HadoopPools
it uses the default configuration to create a pool once and only once per JVM. -
Implemented
RemoteGraph
,RemoteConnection
, andRemoteStrategy
. -
Added validation to
GryoMapper
Kryo identifiers before construction to prevent accidental duplicates. -
Added
GraphStep.addIds()
which is useful forHasContainer
"fold ins." -
Added a static
GraphStep.processHashContainerIds()
helper for handling id-basedHasContainers
. -
GraphStep
implementations should haveg.V().hasId(x)
andg.V(x)
compile equivalently. (breaking) -
Optimized
ExpandableStepIterator
with simpler logic and increased the likelihood of bulking. -
Optimized
TraverserRequirement
calculations. -
Step.addStart()
andStep.addStarts()
now takeTraverser.Admin<S>
andTraverser.Admin<S>
, respectively. (breaking) -
Step.processNextStart()
andStep.next()
now returnTraverser.Admin<E>
. (breaking) -
Traversal.addTraverserRequirement()
method removed. (breaking) -
Fixed a
hashCode()
bug inOrderGlobalStep
andOrderLocalStep
. -
Added
OrderLimitStrategy
which will ensure that partitions are limited before being merged in OLAP. -
ComparatorHolder
now separates the traversal from the comparator. (breaking) -
Bumped to Apache Spark 1.6.1.
-
If no Spark serializer is provided then
GryoSerializer
is the default, notJavaSerializer
. -
Added
Operator.sumLong
as a optimized binary operator intended to be used byMemory
reducers that know they are dealing with longs. -
Traversers from
ComputerResultStep
are no longer attached. Attaching is only used in TinkerPop’s test suite viaSystem.getProperties()
. -
Fixed a
hashCode()
/equals()
bug inMessageScope
. -
Fixed a severe
Traversal
cloning issue that caused inconsistentTraversalSideEffects
. -
TraversalSideEffects
remain consistent and usable across multiple chained OLAP jobs. -
Added
MemoryTraversalSideEffects
which wrapsMemory
in aTraversalSideEffects
for use in OLAP. -
TraversalSideEffects
are now fully functional in OLAP save that an accurate global view is possible at the start of an iteration (not during). -
Updated the
TraversalSideEffects
API to support registered reducers and updatedget()
-semantics. (breaking) -
Split existing
profile()
intoProfileStep
andProfileSideEffectStep
. -
The
profile()
-step acts like a reducing barrier and emitsTraversalMetrics
without the need forcap()
. (breaking) -
Added
LocalBarrier
interface to allow traversers to remain distributed during an iteration so as to reduce cluster traffic. -
Added
NoOpBarrierStep
as aLocalBarrier
implementation ofLambdaCollectingBarrierStep(noOp)
. -
AggregateStep
implementsLocalBarrier
and thus, doesn’t needlessly communicate its barrier traversers. -
Fixed an OLAP-based
Barrier
synchronization bug. -
Fixed a semantic bug in
BranchStep
(and inheriting steps) where barriers reacted locally. (breaking) -
Added
MemoryComputeKey
for specification ofMemory
keys inVertexProgram
. (breaking) -
Added
VertexComputeKey
for specification of vertex compute properties inVertexProgram
. (breaking) -
Added
and
,or
, andaddAll
toOperator
. -
Memory
API changed to support setting and adding values for reduction. (breaking) -
Memory
keys can be marked as broadcast and only those values are sent to workers on each iterator. -
Memory
keys can be marked transient and thus deleted at the end of the OLAP job. -
Vertex compute keys can be marked transient and thus deleted at the end of the OLAP job.
-
VertexProgram
API changed to supportMemoryComputeKey
andVertexComputeKey
. (breaking) -
TraversalVertexProgram
able to execute OLAP and OLTP traversal sections dynamically within the same job. -
Removed
FinalGet
interface as all post processing of reductions should be handled by the reducing step explicitly. (breaking) -
Simplified all
SupplyingBarrierStep
implementations as they no longer requireMapReduce
in OLAP. -
Simplified all
CollectingBarrierStep
implementations as they no longer requireMapReduce
in OLAP. -
Simplified all
ReducingBarrierStep
implementations as they no longer requireMapReduce
in OLAP. -
All steps in OLAP that used
MapReduce
now useMemory
to do their reductions which expands the list of legal traversals. -
GroupStep
simplified withGroupHelper.GroupMap
no longer being needed. Related to the removal ofFinalGet
. -
OLAP side-effects that are no longer generated by
MapReduce
are simply stored inComputerResult.Memory
w/ no disk persistence needed. (breaking) -
Added
Generate
step interface which states that there could be a final generating phase to a side-effect or reduction (e.g.GroupStep
). -
Barrier
step interface is now the means by which non-parallel steps communicate with their counterparts in OLAP. -
Added
MemoryComputing
step interface which states that the step usesMemoryComputeKeys
for its computation in OLAP. -
Added
PeerPressureVertexProgramStep
andGraphTraversal.peerPressure()
. -
Added
PureTraversal
for handling pure and compiled versions of aTraversal
. Useful in OLAP. -
Added
ScriptTraversal
which allows for delayed compilation of script-basedTraversals
. -
Simplified
VertexProgram
implementations with aPureTraversal
-model and deprecatedConfigurationTraversal
. -
Simplified script-based
Traversals
viaScriptTraversal
and deprecatedTraversalScriptFunction
andTraversalScriptHelper
. -
Added
TimesModulating
interface which allows theStep
to decide how atimes()
-modulation should be handled. -
Added
ByModulating
interface which allows theStep
to decide how aby()
-modulation should be handled. (breaking) -
Simplified the
by()
-modulation patterns ofOrderGlobalStep
andOrderLocalStep
. -
Added
GraphComputerTest.shouldSupportPreExistingComputeKeys()
to ensure existing compute keys are "revived." (breaking) -
Added
GraphComputerTest.shouldSupportJobChaining()
to ensure OLAP jobs can be linearly chained. (breaking) -
Fixed a bug in both
SparkGraphComputer
andGiraphGraphComputer
regarding source data access in job chains. -
Expanded job chaining test coverage for
GraphComputer
providers. -
Added
TraversalHelper.onGraphComputer(traversal)
. -
MapReduce.map()
no longer has a default implementation. This method must be implemented. (breaking) -
TraversalVertexProgram
can work without aGraphStep
start. -
Added
PageRankVertexProgramStep
andGraphTraversal.pageRank()
. -
Added
TraversalVertexProgramStep
to support OLAP traversal job chaining. -
Added
VertexProgramStrategy
which compiles multiple OLAP jobs into a single traversal. -
Simplified the comparator model in
OrderGlobalStep
andOrderLocalStep
. -
Refactored
TraversalSource
model to allow fluent-method construction ofTraversalSources
. -
Deprecated the concept of a
TraversalSource.Builder
. -
Removed the concept of a
TraversalEngine
. AllTraversal
modulations are now mediated byTraversalStrategies
. (breaking) -
Added
SideEffectStrategy
for registering sideEffects in a spawnedTraversal
. -
Added
SackStrategy
for registering a sack for a spawnedTraversal
. -
Added
RequirementsStrategy
andRequirementsStep
for adding dynamicTraverserRequirements
to aTraversal
. -
Removed
EngineDependentStrategy
. -
Renamed step interface
EngineDependent
toGraphComputing
with methodonGraphComputer()
. (breaking) -
Cleaned up various
TraversalStrategy
tests now thatTraversalEngine
no longer exists. -
Added
GraphFilter
to support filtering out vertices and edges that won’t be touched by an OLAP job. -
Added
GraphComputer.vertices()
andGraphComputer.edges()
forGraphFilter
construction. (breaking) -
SparkGraphComputer
,GiraphGraphComputer
, andTinkerGraphComputer
all supportGraphFilter
. -
Added
GraphComputerTest.shouldSupportGraphFilter()
which verifies all filtered graphs have the same topology. -
Added
GraphFilterAware
interface tohadoop-gremlin/
which tells the OLAP engine that theInputFormat
handles filtering. -
GryoInputFormat
andScriptInputFormat
implementGraphFilterAware
. -
Added
GraphFilterInputFormat
which handles graph filtering forInputFormats
that are notGraphFilterAware
. -
Fixed a bug in
TraversalHelper.isLocalStarGraph()
which allowed certain illegal traversals to pass. -
Added
TraversalHelper.isLocalProperties()
to verify that the traversal does not touch incident edges. -
GraphReader
I/O interface now hasOptional<Vertex> readGraph(InputStream, GraphFilter)
. DefaultUnsupportedOperationException
. -
GryoReader
does not materialize edges that will be filtered out and this greatly reduces GC and load times. -
Created custom
Serializers
forSparkGraphComputer
message-passing classes which reduce graph sizes significantly.
-
TINKERPOP-951 Barrier steps provide unexpected results in Gremlin OLAP
-
TINKERPOP-1057 GroupSideEffectStep doesn’t use provided maps
-
TINKERPOP-1103 Two objects fighting for local variable name in Gremlin Console (breaking)
-
TINKERPOP-1149 TraversalXXXSteps Aren’t Providing SideEffects
-
TINKERPOP-1181 select(Column) should not use a LambdaMapStep
-
TINKERPOP-1188 Semantics of BarrierSteps in TraversalParent global traversals is wrong. (breaking)
-
TINKERPOP-1194 explain() seems broken
-
TINKERPOP-1217 Repeated Logging of "The HadoopPools has not been initialized, using the default pool"
-
TINKERPOP-570 [Proposal] Provide support for OLAP to OLTP to OLAP to OLTP
-
TINKERPOP-575 Implement RemoteGraph
-
TINKERPOP-813 [Proposal] Make the Gremlin Graph Traversal Machine and Instruction Set Explicit
-
TINKERPOP-872 Remove GroupCountStep in favor of new Reduce-based GroupStep
-
TINKERPOP-890 Remove the concept of branch/ package. (breaking)
-
TINKERPOP-958 Improve usability of .profile() step.
-
TINKERPOP-962 Provide "vertex query" selectivity when importing data in OLAP. (breaking)
-
TINKERPOP-968 Add first class support for an optional traversal
-
TINKERPOP-971 TraversalSource should be fluent like GraphComputer (breaking)
-
TINKERPOP-1016 Replace junit-benchmarks with JMH
-
TINKERPOP-1021 Deprecate Order.valueIncr, Order.valueDecr, Order.keyIncr, and Order.keyDecr (breaking)
-
TINKERPOP-1032 Clean up the conf/hadoop configurations
-
TINKERPOP-1034 Bump to support Spark 1.5.2
-
TINKERPOP-1069 Support Spark 1.6.0
-
TINKERPOP-1082 INPUT_RDD and INPUT_FORMAT are bad, we should just have one key.
-
TINKERPOP-1112 Create GryoSerializers for the Spark Payload classes.
-
TINKERPOP-1121 FileSystemStorage needs to be smart about /.
-
TINKERPOP-1132 Messenger.receiveMessages() Iterator should .remove().
-
TINKERPOP-1140 TraversalVertexProgramStep in support of OLAP/OLTP conversions.
-
TINKERPOP-1153 Add ByModulating and TimesModulating interfaces.
-
TINKERPOP-1154 Create a ScriptTraversal which is Serializable and auto-compiles.
-
TINKERPOP-1162 Add VertexProgram.getTransientComputeKeys() for removing scratch-data. (breaking)
-
TINKERPOP-1163 GraphComputer’s can have TraversalStrategies.
-
TINKERPOP-1164 ReducingBarriersSteps should use ComputerMemory, not MapReduce.
-
TINKERPOP-1166 Add Memory.reduce() as option to Memory implementations. (breaking)
-
TINKERPOP-1173 If no Serializer is provided in Configuration, use GryoSerializer by default (Spark)
-
TINKERPOP-1180 Add more optimized binary operators to Operator.
-
TINKERPOP-1192 TraversalSideEffects should support registered reducers (binary operators).
-
TINKERPOP-1193 Add a LocalBarrier interface.
-
TINKERPOP-1199 Use "MicroMetrics" as the mutator of the TraversalMetrics.
-
TINKERPOP-1206 ExpandableIterator can take a full TraverserSet at once — Barriers.
-
TINKERPOP-1209 ComparatorHolder should returns a Pair<Traversal,Comparator>. (breaking)
-
TINKERPOP-1210 Provide an OrderLimitStep as an optimization.
-
TINKERPOP-1219 Create a test case that ensures the provider’s compilation of g.V(x) and g.V().hasId(x) is identical (breaking)
-
TINKERPOP-1222 Allow default GraphComputer configuration
-
TINKERPOP-1223 Allow jars in gremlin.distributedJars to be read from HDFS
-
TINKERPOP-1225 Do a "rolling reduce" for GroupXXXStep in OLAP.
-
TINKERPOP-1227 Add Metrics for the TraversalOpProcessor
-
TINKERPOP-1234 program() step that takes arbitrary vertex programs
-
TINKERPOP-1236 SelectDenormalizationStrategy for select().by(starGraph) in OLAP.
-
TINKERPOP-1237 ProjectMap: For the Love of Die Faterland
-
TINKERPOP-1238 Re-use Client instances in RemoteGraph tests
-
Avoid hamcrest conflict by using mockito-core instead of mockito-all dependency in
gremlin-test
. -
Fixed bug in
SubgraphStrategy
where step labels were not being propogated properly to new steps injected by the strategy. -
Defaulted to
Edge.DEFAULT
if no edge label was supplied in GraphML. -
Fixed bug in
IoGraphTest
causing IllegalArgumentException: URI is not hierarchical error for external graph implementations. -
Improved
TinkerGraph
performance when iterating vertices and edges. -
Fixed a bug where timeout functions provided to the
GremlinExecutor
were not executing in the same thread as the script evaluation. -
Optimized a few special cases in
RangeByIsCountStrategy
. -
Named the thread pool used by Gremlin Server sessions: "gremlin-server-session-$n".
-
Fixed a bug in
BulkSet.equals()
which made itself apparent when usingstore()
andaggregate()
with labeledcap()
. -
Fixed a bug where
Result.one()
could potentially block indefinitely under certain circumstances. -
Ensured that all asserts of vertex and edge counts were being applied properly in the test suite.
-
Fixed bug in
gremlin-driver
where certain channel-level errors would not allow the driver to reconnect. -
SubgraphStep
now consults the parent graph features to determine cardinality of a property. -
Use of
Ctrl-C
in Gremlin Console now triggers closing of open remotes. -
Bumped SLF4J to 1.7.21 as previous versions suffered from a memory leak.
-
Fixed a bug in
Neo4jGraphStepStrategy
where it wasn’t defined properly as aProviderOptimizationStrategy
. -
Renamed
AndTest.get_g_V_andXhasXage_gt_27X__outE_count_gt_2X_name
toget_g_V_andXhasXage_gt_27X__outE_count_gte_2X_name
to match the traversal being tested. -
Fixed a self-loop bug in
StarGraph
. -
Added configuration option for disabling
:remote
timeout with:remote config timeout none
. -
Added
init-tp-spark.sh
to Gremlin Console binary distribution. -
Fixed bug where use of
:x
in a Gremlin Console initialization script would generate a stack trace. -
Added configuration options to Gremlin Driver and Server to override the SSL configuration with an
SslContext
. -
Added driver configuration settings for SSL:
keyCertChainFile
,keyFile
andkeyPassword
. -
Fixed bug where transaction managed sessions were not properly rolling back transactions for exceptions encountered during script evaluation.
-
Fixed bug in
:uninstall
command if the default/ext
directory was not used. -
Added support to Gremlin Driver to allow either plain text or GSSAPI SASL authentication allowing the client to pass the SASL mechanism in the request.
-
Improved dryRun functionality for the docs processor. It’s now possible to dry run (or full run) only specific files.
-
Added precompile of
ScriptInputFormat
scripts toScriptRecordReader
to improve performance.
-
Fixed two
NullPointerException
-potential situations inObjectWritable
. -
Provided Docker script that allows the execution of several build tasks within a Docker container.
-
Added a per-request
scriptEvaluationTimeout
option to the Gremlin Server protocol. -
Changed
DriverRemoteAcceptor
to send scripts as multi-line. -
Fixed a bug in
gremlin-driver
where connections were not returning to the pool after many consecutive errors. -
Fixed a bug where
tree()
did not serialize into GraphSON. -
Bumped to SLF4j 1.7.19.
-
Bumped to Apache Hadoop 2.7.2.
-
Fixed a bug in
gremlin-driver
where a really fast call to get aFuture
to wait for a result might not register an error raised from the server. -
Fixed a severe bug where
LP_O_OB_P_S_SE_SL_Traverser
was not registered withGryoMapper
. -
The future from
GremlinExecutor.eval()
is completed after the entire evaluation lifecyle is completed. -
Spark
Memory
usescollect().iterator()
instead oftoLocalIterator()
to reduce noise in Spark UI. -
Added the
:remote console
option which flips the Gremlin Console into a remote-only mode where all script evaluation is routed to the currently configured remote, which removes the need to use the:>
command. -
Added
allowRemoteConsole()
to theRemoteAcceptor
interface. -
The
:remote
fortinkerpop.server
now includes an option to establish the connection as a "session". -
Provided an implementation for calls to
SessionedClient.alias()
, which formerly threw anUnsupportedOperationException
. -
Bumped to commons-collections 3.2.2.
-
Fixed a bug where
OrderGlobalStep
andOrderLocalStep
were not incorporating their children’s traverser requirements. -
Fixed a compilation bug in
TraversalExplanation
. -
Fixed bug where a session explicitly closed was being closed again by session expiration.
-
Improved the recovery options for
gremlin-driver
after failed requests to Gremlin Server. -
Added
maxWaitForSessionClose
to the settings forgremlin-driver
. -
Bumped to Netty 4.0.34.Final.
-
Added "interpreter mode" for the
ScriptEngine
and Gremlin Server which allows variables defined withdef
or a type to be recognized as "global". -
Bumped to Apache Groovy 2.4.6.
-
Added the
gremlin-archetype-server
archetype that demonstrates -
Added the
gremlin-archetype-tinkergraph
archetype that demonstrates a basic project that uses TinkerGraph. -
Added
gremlin-archetype
module to house TinkerPop "examples". -
Fixed a condition where
ConnectionPool
initialization in the driver would present aNullPointerException
on initialization if there were errors constructing the pool in full. -
Fixed a bug in the round-robin load balancing strategy in the driver would waste requests potentially sending messages to dead hosts.
-
Added new Provider Documentation book - content for this book was extracted from the reference documentation.
-
Fixed a bug where multiple "close" requests were being sent by the driver on
Client.close()
. -
Fixed an
Property
attach bug that shows up in serialization-basedGraphComputer
implementations. -
Fixed a pom.xml bug where Gremlin Console/Server were not pulling the latest Neo4j 2.3.2.
-
Fixed bug in "round robin" load balancing in
gremlin-driver
where requests were wrongly being sent to the same host. -
Prevented the spawning of unneeded reconnect tasks in
gremlin-driver
when a host goes offline. -
Fixed bug preventing
gremlin-driver
from reconnecting to Gremlin Server when it was restarted. -
Better handled errors that occurred on commits and serialization in Gremlin Server to first break the result iteration loop and to ensure commit errors were reported to the client.
-
Added GraphSON serializers for the
java.time.*
classes. -
Improved the logging of the Gremlin Server REST endpoint as it pertained to script execution failures.
-
TraversalExplanation
is nowSerializable
and compatible with GraphSON and Gryo serialization. -
Fixed a problem with global bindings in Gremlin Server which weren’t properly designed to handle concurrent modification.
-
Deprecated
ScriptElementFactory
and made the localStarGraph
globally available forScriptInputFormat
'sparse()
method. -
Improved reusability of unique test directory creation in
/target
forAbstractGraphProvider
, which was formerly only available to Neo4j, by addingmakeTestDirectory()
. -
Optimized memory-usage in
TraversalVertexProgram
. -
Graph
instances are not merely "closed" at the end of tests, they are "cleared" viaGraphProvider.clear()
, which should in turn cleans up old data for an implementation. -
Expanded the Gremlin Server protocol to allow for transaction management on in-session requests and updated the
gremlin-driver
to take advantage of that. -
Greatly reduced the amount of objects required in OLAP for the
ReducingBarrierStep
steps. -
Improved messages for the different distinct "timeouts" that a user can encounter with Gremlin Server.
-
TINKERPOP-1041 StructureStandardTestSuite has file I/O issues on Windows
-
TINKERPOP-1105 SparkGraphComputer / Null Pointer Exceptions for properties traversals
-
TINKERPOP-1106 Errors on commit in Gremlin Server don’t register as exception on driver
-
TINKERPOP-1125 RoundRobin load balancing always uses the second Host when size = 2
-
TINKERPOP-1126 A single Host spawns many reconnect tasks
-
TINKERPOP-1127 client fails to reconnect to restarted server
-
TINKERPOP-1146 IoTest are not clearing the db after the test run
-
TINKERPOP-1148 ConcurrentModificationException with bindings in Gremlin Server
-
TINKERPOP-1150 Update pom file dependencies to work with Neo4j 2.3.2
-
TINKERPOP-1159 Client sends multiple session close messages per host
-
TINKERPOP-1168 Switch plugins in docs preprocessor
-
TINKERPOP-1172 Reconnect to Gremlin Server previously marked as dead
-
TINKERPOP-1175 Anonymous traversals can’t be explained
-
TINKERPOP-1184 Sessions not being closed properly
-
TINKERPOP-1216 OrderStep or O_Traverser is broken
-
TINKERPOP-1239 Excessive continual failure for requests can cause TimeoutException in driver
-
TINKERPOP-1245 Gremlin shell starts incorrectly on OS X due to awk difference
-
TINKERPOP-1251 NPE in ObjectWritable.toString
-
TINKERPOP-1252 Failed Neo4j transaction can leave Neo4jTransaction in inconsistent state
-
TINKERPOP-732 gremlin-server GraphSON serializer issue with tree()
-
TINKERPOP-916 Develop a better "simple" driver for testing and example purposes
-
TINKERPOP-937 Extract the implementations sections of the primary documentation to its own book
-
TINKERPOP-956 Connection errors tend to force a complete close of the channel
-
TINKERPOP-1039 Enable auto-commit for session’d requests.
-
TINKERPOP-1068 Bump to support jbcrypt-0.4m.jar
-
TINKERPOP-1080 Bump Netty version - 4.0.34.Final
-
TINKERPOP-1085 Establish TinkerPop "example" projects
-
TINKERPOP-1096 Support aliasing for sessions in Gremlin Server
-
TINKERPOP-1097 Gremlin Console supporting sessions
-
TINKERPOP-1107 Provide a way to support global variables with sandboxing enabled
-
TINKERPOP-1109 Make Gremlin Console better suited for system level installs
-
TINKERPOP-1131 TraversalVertexProgram traverser management is inefficient memory-wise.
-
TINKERPOP-1135 Improve GraphSON representation of java.time.* classes
-
TINKERPOP-1137 Deprecate ScriptElementFactory and make star graph globally available
-
TINKERPOP-1138 Improve messaging on server timeouts
-
TINKERPOP-1147 Add serialization for TraversalExplanation
-
TINKERPOP-1160 Add timeout configuration for time to wait for connection close
-
TINKERPOP-1165 Tooling Support: Compile with -parameters
-
TINKERPOP-1176 Bump Groovy version - 2.4.6
-
TINKERPOP-1177 Improve documentation around Spark’s storage levels
-
TINKERPOP-1197 Document Gremlin Server available metrics
-
TINKERPOP-1198 Bump commons-collections to 3.2.2
-
TINKERPOP-1213 missing docs for has(label, key, value)
-
TINKERPOP-1218 Usage of toLocalIterator Produces large amount of Spark Jobs
-
Made
GryoRecordReader
more robust to 0 byte record splits. -
Fixed a constructor/serialization bug in
LP_O_OB_S_SE_SL_Traverser
. -
Added a lazy iterator, memory safe implementation of MapReduce to
SparkGraphComputer
. -
Added
MapReduce.combine()
support toSparkGraphComputer
. -
Bumped to Neo4j 2.3.2.
-
Fixed Java comparator contract issue around
Order.shuffle
. -
Optimized a very inefficient implementation of
SampleLocalStep
. -
Reduced the complexity and execution time of all
AbstractLambdaTraversal
instances. -
DefaultTraversal
has a well definedhashCode()
andequals()
. -
Added serializers to Gryo for
java.time
related classes. -
Integrated
NumberHelper
inSackFunctions
. -
Deprecated
VertexPropertyFeatures.supportsAddProperty()
which effectively was a duplicate ofVertexFeatures.supportsMetaProperties
. -
The Spark persistence
StorageLevel
can now be set for both job graphs andPersistedOutputRDD
data. -
Added to the list of "invalid binding keys" allowed by Gremlin Server to cover the private fields of
T
which get exposed in theScriptEngine
on static imports. -
Added
BulkDumperVertexProgram
that allows to dump a whole graph in any of the supported IO formats (GraphSON, Gryo, Script). -
Fixed a bug around duration calculations of
cap()
-step during profiling. -
It is possible to completely avoid using HDFS with Spark if
PersistedInputRDD
andPersistedOutpuRDD
are leveraged. -
InputRDD
andOutputRDD
can now process both graphs and memory (i.e. sideEffects). -
Removed Groovy specific meta-programming overloads for handling Hadoop
FileSystem
(instead, its all accessible viaFileSystemStorage
). -
Added
FileSystemStorage
andSparkContextStorage
which both implement the newStorage
API. -
Added
Storage
to the gremlin-core io-package which providers can implement to allow conventional access to data sources (e.g.ls()
,rm()
,cp()
, etc.). -
Bumped to Spark 1.5.2.
-
Bumped to Groovy 2.4.5.
-
Added
--noClean
option inbin/process-docs.sh
to prevent the script from cleaning Grapes and HDFS. -
Execute the
LifeCycle.beforeEval()
in the same thread thateval()
is executed in forGremlinExecutor
. -
Improved error handling of Gremlin Console initialization scripts to better separate errors in initialization script I/O versus execution of the script itself.
-
Fixed a bug in
Graph.OptOut
when trying to opt-out of certain test cases with themethod
property set to "*". -
Added another
BulkLoader
implementation (OneTimeBulkLoader
) that doesn’t store temporary properties in the target graph. -
Added option to allow for a custom
ClassResolver
to be assigned to aGryoMapper
instance. -
Fixed a
SparkGraphComputer
sorting bug in MapReduce that occurred when there was more than one partition. -
Added
strictTransactionManagement
to the Gremlin Server settings to indicate that thealiases
parameter must be passed on requests and that transaction management will be scoped to the graphs provided in that argument. -
Fixed a
NullPointerException
bug inPeerPressureVertexProgram
that occurred when an adjacency traversal was not provided. -
Standardized "test data directories" across all tests as generated by
TestHelper
. -
Fixed a bug in Gremlin Server where error messages were not always being passed back in the
statusMessage
field of theResponseMessage
. -
Added validation for parameter
bindings
to ensure that keys wereString
values. -
Improved Transaction Management consistency in Gremlin Server.
-
Added
FileSandboxExtension
which takes a configuration file to white list methods and classes that can be used inScriptEngine
execution. -
Deprecated
SandboxExtension
andSimpleSandboxExtension
in favor ofAbstractSandboxExtension
which provides better abstractions for those writing sandboxes. -
Fixed a long standing "view merge" issue requiring
reduceByKey()
on input data to Spark. It is no longer required. -
Added
Spark
static object to allow "file system" control of persisted RDDs in Spark. -
Added a Spark "job server" to ensure that persisted RDDs are not garbage collected by Spark.
-
Improved logging control during builds with Maven.
-
Fixed settings that weren’t being passed to the the Gremlin Driver
Cluster
through configuration file. -
Column
now implementsFunction
. The modulatorby(valueDecr)
can be replaced byby(values,decr)
and thus, projection and order are separated. -
Added
InputRDDFormat
which wraps anInputRDD
to make it accessible to Hadoop and not just Spark. -
Added
AbstractSparkTest
which handles closingSparkContext
instances between tests now that we support persisted contexts. -
Fixed a serialization bug in
GryoSerializer
that made it difficult for graph providers to yieldInputRDDs
forSparkGraphComputer
. -
SparkGraphComputer
is now tested against Gryo, GraphSON, andInputRDD
data sources. -
HadoopElementIterator
(for Hadoop-Gremlin OLTP) now works for anyInputFormat
, not justFileInputFormats
. -
Added
Traverser.Admin.getTags()
which are used to mark branches in a traversal (useful inmatch()
and related future steps). -
Fixed the
Future
model forGiraphGraphComputer
andSparkGraphComputer
so that class loaders are preserved. -
Added support for arbitrary vertex ID types in
BulkLoaderVertexProgram
. -
Deprecated
credentialsDbLocation
fromSimpleAuthenticator
in Gremlin Server. -
TinkerGraph
has "native" serialization in GraphSON, which enables it to be a return value from Gremlin Server. -
Improved the ability to embed Gremlin Server by providing a way to get the
ServerGremlinExecutor
and improve reusability ofAbstractEvalOpProcessor
and related classes. -
Added
Authenticator.newSaslNegotiator(InetAddress)
and deprecated the zero-arg version of that method. -
ProfileStep
is now available off ofTraversal
viaprofile()
. To be consistent withTraversal.explain()
. -
If no comparator is provided to
order()
,Order.incr
is assumed (previously, an exception occurred). -
Fixed various Gremlin-Groovy tests that assumed
toString()
-able ids. -
Split TinkerPop documentation into different directories.
-
Added
explain()
-step which yields aTraversalExplanation
with a prettytoString()
detailing the compilation process. -
Fixed a traversal strategy ordering bug in
AdjacentToIncidentStrategy
andIncidentToAdjacentStrategy
. -
Made a number of changes to improve traversal startup and execution performance.
-
Added support for gremlin.tinkergraph.graphLocation to accept a fully qualified class name that implements
Io.Builder
interface.
-
TINKERPOP-763 IsStep broken when profiling is enabled.
-
TINKERPOP-972 Cluster::close does not shut down its executor
-
TINKERPOP-973 BLVP shouldn’t clear configuration properties
-
TINKERPOP-976 Fail earlier if invalid version is supplied in validate-distribution.sh
-
TINKERPOP-977 Dead link to traversal javadocs
-
TINKERPOP-979 ComputerVerificationStrategy not picking up Order local traversal
-
TINKERPOP-985 shouldPersistDataOnClose makes incorrect feature check
-
TINKERPOP-990 Mixed types in VertexPropertyTest
-
TINKERPOP-993 cyclicPath is not(simplePath)
-
TINKERPOP-997 FeatureRequirementSet.SIMPLE should not require multi-property (breaking)
-
TINKERPOP-1000 GremlinGroovyScriptEngineOverGraphTest failures
-
TINKERPOP-1001 SugarLoaderPerformanceTest contains hardcoded vertex ids
-
TINKERPOP-1002 Should rollback transaction after catching on close
-
TINKERPOP-1006 Random error during builds: shouldReloadClassLoaderWhileDoingEvalInSeparateThread()
-
TINKERPOP-1011 HadoopGraph can’t re-attach when the InputFormat is not a FileInputFormat
-
TINKERPOP-1012 BulkLoaderVertexProgram shouldn’t assume vertex IDs of type Long
-
TINKERPOP-1025 Solve SparkContext Persistence Issues with BulkLoaderVertexProgram
-
TINKERPOP-1027 Merge view prior to writing graphRDD to output format/rdd
-
TINKERPOP-1036 Support self-looping edges in IO
-
TINKERPOP-1052 @Graph.OptOut causes Exception during Suite setup
-
TINKERPOP-1060 LambdaRestrictionStrategy too restrictive
-
TINKERPOP-1075 Profile duration of cap step seems broken.
-
TINKERPOP-1083 Traversal needs a hashCode() and equals() definition.
-
TINKERPOP-1089 Order.shuffle implementation is too fragile
-
TINKERPOP-1119 LP_O_OB_S_SE_SL_Traverser doesn’t have a protected constructor().
-
TINKERPOP-320 BulkDumperVertexProgram
-
TINKERPOP-379 MessageScope.Local.setStaticMessage(M msg)
-
TINKERPOP-824 Do we need runtime BigDecimal in more places?
-
TINKERPOP-859 Provide a more general way to set log levels in plugins
-
TINKERPOP-860 Bindings applied to the PluginAcceptor should appear to Gremlin Server
-
TINKERPOP-886 Allow any GraphReader/Writer to be persistence engine for TinkerGraph
-
TINKERPOP-891 Re-examine Sandboxing Abstractions
-
TINKERPOP-912 Improve the ability to embed Gremlin Server with Channelizer injection
-
TINKERPOP-928 Use directories to separate different books
-
TINKERPOP-930 Tie Alias to Transaction Manager in Gremlin Server
-
TINKERPOP-938 Add a "clear SNAPSHOT jars" section to the process-docs.sh.
-
TINKERPOP-941 Improve error message for wrong order().by() arguments
-
TINKERPOP-943 Warn if Gremlin Server is running prior to generating docs
-
TINKERPOP-945 Exceptions should allow me to include root cause if/when available
-
TINKERPOP-952 Include Cardinality.list example in VertexProperty section of main docs.
-
TINKERPOP-954 Consistent test directory usage
-
TINKERPOP-957 Improve speed of addV()
-
TINKERPOP-964 Test XXXGraphComputer on a Hadoop2 cluster (non-pseudocluster).
-
TINKERPOP-970 ProfileStep should be off Traversal, not GraphTraversal
-
TINKERPOP-978 Native TinkerGraph Serializers for GraphSON
-
TINKERPOP-981 Deprecate support for credentialsDbLocation in Gremlin Server Config
-
TINKERPOP-982 valuesDecr, valuesIncr, keysDecr, and valuesDecr is lame.
-
TINKERPOP-983 Provide a way to track open Graph instances in tests
-
TINKERPOP-984 Use GraphProvider for id conversion in Groovy Environment test suite
-
TINKERPOP-987 Use tinkerpop.apache.org URL in all documentation and homepage
-
TINKERPOP-988 SparkGraphComputer.submit shouldn’t use ForkJoinPool.commonPool
-
TINKERPOP-992 Better support for schema driven Graphs in IO related tests
-
TINKERPOP-994 Driver using deprecated Rebindings Still
-
TINKERPOP-995 Add Authenticator.newSaslNegotiator(InetAddress)
-
TINKERPOP-996 Please delete old releases from mirroring system
-
TINKERPOP-998 Deprecate VertexPropertyFeatures.FEATURE_ADD_PROPERTY
-
TINKERPOP-1009 Add a CAUTION to documentation about HadoopGraph and getting back elements
-
TINKERPOP-1013 Traverser tags as a safer way of using path labels
-
TINKERPOP-1018 Allow setting for maxContentLength to be set from yaml in driver
-
TINKERPOP-1019 Convert println in test to SLF4j
-
TINKERPOP-1022 Automatically warm up ops handlers
-
TINKERPOP-1023 Add a spark variable in SparkGremlinPlugin like we do hdfs for HadoopGremlinPlugin
-
TINKERPOP-1026 BVLP should store vertex IDs as String
-
TINKERPOP-1033 Store sideEffects as a persisted RDD
-
TINKERPOP-1035 Better Consistency in Gremlin Server Transaction Management
-
TINKERPOP-1045 Client-Side Hangs when attempting to access a HashMap with Keys of type Integer
-
TINKERPOP-1047 TinkerGraph GraphSON storage format broken
-
TINKERPOP-1051 Add note in best practice docs about gremlin server heap setting
-
TINKERPOP-1055 Gremlin Console FileNotFoundException can be misleading
-
TINKERPOP-1062 Make LifeCycle beforeEval execute in same thread as eval operation
-
TINKERPOP-1064 Allow a ClassResolver to be added to GryoMapper construction
-
TINKERPOP-1065 Fix some typos and clarify some wording in the TinkerPop documentation
-
TINKERPOP-1066 Add ioRegistries configuration to GraphSON MessageSerializer
-
TINKERPOP-1067 Update Groovy to 2.4.5
-
TINKERPOP-1072 Allow the user to set persistence options using StorageLevel.valueOf()
-
TINKERPOP-1073 HadoopGraph toString() is weird for Spark PersitedRDD data.
-
TINKERPOP-1086 Include gryo serializers for java.time related classes
-
TINKERPOP-1087 Add has()/order() to FilterRankStrategy
-
TINKERPOP-1093 Add Spark init.sh script and update dev documentation.
-
TINKERPOP-1100 Look deeply into adding combine()-support in Spark MapReduce.
-
TINKERPOP-1117 InputFormatRDD.readGraphRDD requires a valid gremlin.hadoop.inputLocation, breaking InputFormats (Cassandra, HBase) that don’t need one
This release also includes changes from 3.0.1-incubating and 3.0.2-incubating.
-
Fixed bug in Gryo and GraphSON (with embedded types) serialization for serialization of results returned from
Map.entrySet()
. -
Transaction
settings foronReadWrite
andonClose
are nowThreadLocal
in nature of standard transactions. -
Optimized
BulkLoaderVertexProgram
. It now usesEventStrategy
to monitor what the underlyingBulkLoader
implementation does (e.g. whether it creates a new vertex or returns an existing). -
Integrated
NumberHelper
inSumStep
,MinStep
,MaxStep
andMeanStep
(local and global step variants). -
Gremlin Console remoting to Gremlin Server now supports a configuration option for assigning aliases.
-
CountMatchAlgorithm
, in OLAP, now biases traversal selection towards those traversals that start at the current traverser location to reduce message passing. -
Fixed a file stream bug in Hadoop OLTP that showed up if the streamed file was more than 2G of data.
-
Added the ability to set thread local properties in
SparkGraphComputer
when using a persistent context. -
Bumped to Neo4j 2.3.0.
-
Deprecated "rebindings" as an argument to Gremlin Server and replaced it with "aliases".
-
Added
PersistedInputRDD
andPersistedOutputRDD
which enablesSparkGraphComputer
to store the graph RDD in the context between jobs (no HDFS serialization required). -
Renamed the
public static String
configuration variable names of TinkerGraph (deprecated old variables). -
Added
GraphComputer.configure(key,value)
to allow engine-specific configurations. -
GraphStep
is no longer in thesideEffect
-package and is now inmap
-package (breaking change). -
Added support for mid-traversal
V()
-steps (GraphStep
semantics updated). -
Fixed
Number
handling inOperator
enums. Prior this change a lot of operations on mixedNumber
types returned a wrong result (wrong data type). -
Fixed a bug in Gremlin Server/Driver serializer where empty buffers were getting returned in certain cases.
-
Renamed
ConjunctionX
toConnectiveX
because "conjunction" is assumed "and" (disjunction "or"), where "connective" is the parent concept. -
Removed
PathIdentityStep
as it was a hack that is now solved byTraversal.Admin.addTraverserRequirement()
. -
Added
Traversal.Admin.addTraverserRequirement()
to allow a traversal strategy or source to add requirements (not only step determined anymore). -
Added
TraverserRequirement.ONE_BULK
to state the traverser does not handle bulk. -
Added
GraphTraversalSource.withBulk(boolean)
to enabled users to compute only usingbulk=1
. -
Gremlin Server supports Netty native transport on linux.
-
Removed the need for
GFunction
(etc.) closure wrappers in Gremlin-Groovy asas Function
can be used to convert closures accordingly. -
Added
SelectColumnStep
(select(keys)
andselect(values)
). DeprecatedmapKeys()
andmapValues()
. -
Renamed
gremlin.hadoop.graphInputRDD
andgremlin.hadoop.graphOutputRDD
togremlin.spark.graphInputRDD
andgremlin.spark.graphOutputRDD
, respectively. -
Fixed a bug in
FoldStep
around bulking. This could be a breaking change, but it is the correct semantics. -
Previous
group()
-behavior steps are accessible via the deprecatedgroupV3d0()
-steps. -
GroupStep
andGroupSideEffectStep
now do lazy reductions to reduce memory footprint. Breaking change forgroup()
semantics. -
Added
GroupStepHelper
with various static methods and classes that are used by bothGroupStep
andGroupSideEffectStep
. -
Added
BarrierStep
interface withprocessAllStarts()
method which process all starts up to yielding the barrier result. -
Fixed a severe threading issue in
TinkerGraphComputer
. -
The location of the jars in HDFS is now
hadoop-gremlin-x.y.z-libs
to ensure multiple TinkerPop versions don’t clash. -
GiraphGraphComputer
will only upload the jars to HDFS if it doesn’t already exist (to help speed up startup time). -
GiraphGraphComputer.workers()
is smart about using threads and machines to load balance TinkerPop workers across cluster. -
GraphComputer.workers(int)
allows the user to programmatically set the number of workers to spawn. -
Added
GryoSerializer
as the new recommended SparkSerializer
. HandlesGraph
andGryoMapper
registries. -
GryoPool
now makes use ofGryoPool.Builder
for its construction. -
Bumped to Apache Hadoop 2.7.1.
-
Bumped to Apache Giraph 1.1.0.
-
Bumped to Apache Spark 1.5.1.
-
Split Hadoop-Gremlin apart such there is now
hadoop-gremlin
,spark-gremlin
, andgiraph-gremlin
(and respectiveGremlinPlugins
). -
Added
LambdaCollectingBarrierStep
which generalizesNoOpBarrierStep
and allows forbarrier(normSack)
-type operations. -
Fixed bugs in the Gremlin Server’s NIO protocol both on the server and driver side.
-
Added
Path.popEquals(Pop,Object)
to check for path equality based onPop
(useful forTraverserRequirement.LABELED_PATH
). -
Added
Operator.assign
to allow setting a direct value. -
Operator
is now aBinaryOperator<Object>
with appropriate typecasting for respective number operators. -
Simplified
SackValueStep
so it now supports bothsack(function)
and sack(function).by(). Deprecated `sack(function,string)
. -
Added
Parameters
object to allow for the parameters of a step to be retrieved at runtime via a traversal. -
Redesigned (though backwards compatible)
AddEdgeStep
,AddVertexStep
, andAddPropertyStep
(and respectiveGraphTraversal
API). -
Added
GraphTraversalSource.inject()
so users can spawn a traverser with non-graph objects. -
GraphStep
can now take a single argumentCollection
which is either elements or element ids (i.e.g.V([1,2,3])
is supported now). -
Added
LoopsStep
to make the loop counter accessible withinrepeat()
,until()
andemit()
. -
Gephi Plugin no longer requires manual insert of
store
steps to visualize a traversal. -
Added a
TinkerIoRegistry
that registers a custom serializer for Gryo that will serialize an entireTinkerGraph
instance. -
Added configuration options to Gephi Plugin for setting the size of nodes visualized.
-
Replaced
DedupBijectionStrategy
with the more effectiveFilterRankingStrategy
. -
ComputerAwareSteps
must not only handle step ids, but also step labels. -
Renamed
B_O_P_SE_SL_Traverser
toB_LP_O_P_SE_SL_Traverser
as it now supportsTraverserRequirement.LABELED_PATH
. -
Added
B_LP_O_S_SE_SL_Traverser
in support ofTraverserRequirement.LABELED_PATH
. -
Added
TraverserRequirement.LABELED_PATH
which only generates path data for steps that are labeled (greatly increases the likelihood of bulking). -
Fixed a bug in
Path
usage that required an API update:Path.addLabel()
is nowPath.extend(Set<String>)
andTraverser.addLabels(Set<String>)
. -
Made
Path
iterable, so that it can beunfold()
'ed and used by local steps likemin(local)
,max(local)
, etc. -
WhereTraversalStep
andWherePredicateStep
are now the only "special"Scoping
steps afterMatchStartStep
inmatch()
.
-
TINKERPOP-774 order / dedup issues
-
TINKERPOP-799 [Proposal] with()-modulator for stream level variable binding.
-
TINKERPOP-801 groupCount() fails for vertices (elements?) (using Spark)
-
TINKERPOP-811 AddPropertyStepTest fails "all of a sudden"
-
TINKERPOP-823 addV() broken for multi-value properties
-
TINKERPOP-843 Misspecified HADOOP_GREMLIN_LIBS generates NullPointerException
-
TINKERPOP-857 Add GraphComputer.config(key,value)
-
TINKERPOP-895 Use "as BinaryOperator" and remove GBinaryOperator
-
TINKERPOP-903 Fix empty buffer return upon buffer capacity exceeded
-
TINKERPOP-910 In session transaction opened from sessionless request
-
TINKERPOP-918 ComputerVerificationStrategy is too restrictive
-
TINKERPOP-926 Renamed TinkerGraph public statics to common pattern used for other statics.
-
TINKERPOP-948 AbstractGremlinProcessTest.checkMap not asserted in GroupTest
-
TINKERPOP-953 Artifact equality is not evaluating properly
-
TINKERPOP-955 HashMap$Node not serializable
-
TINKERPOP-297 Ensure Consistent Behavior Over Deleted Elements (breaking)
-
TINKERPOP-333 Support VertexProperty in PartitionStrategy
-
TINKERPOP-391 More fluency in GraphComputer for parameterization.
-
TINKERPOP-616 Use Spark 1.3.0 in Hadoop-Gremlin.
-
TINKERPOP-624 Passing Detached/Referenced to Graph.vertices/edge()
-
TINKERPOP-680 Configurable Channelizer for Gremlin Driver
-
TINKERPOP-728 Improve Remote Graph Object Treatment in Console
-
TINKERPOP-756 Provide a strict parsing option for GraphMLReader
-
TINKERPOP-760 Make loop counter accessible within repeat()
-
TINKERPOP-762 Allow mid-traversal V() (and E())
-
TINKERPOP-765 Decompose AbstractTransaction for different transactional contexts (breaking)
-
TINKERPOP-767 Path should play well with "local" steps.
-
TINKERPOP-768 MatchStep in OLAP should be smart about current vertex.
-
TINKERPOP-769 Make the introduction of the TP3 docs story better.
-
TINKERPOP-772 TraverserRequirement.LABELED_PATH
-
TINKERPOP-796 Support merge binary operator for Gremlin sacks (breaking)
-
TINKERPOP-798 [Proposal] Rename mapKeys()/mapValues() to select(keys) and select(values).
-
TINKERPOP-802 Provide sack(object) so that the sack can be directly set.
-
TINKERPOP-803 A better solution to g.V(someCollection.toArray())
-
TINKERPOP-805 Enforce AutoCloseable Semantics on Transaction (breaking)
-
TINKERPOP-821 Improve testing around TraversalHelper around recursive methods
-
TINKERPOP-825 [Proposal] SetBulkStep (sideEffectStep)
-
TINKERPOP-826 OneToManyBarrierStrategy
-
TINKERPOP-827 Add a console session to the PageRank section of the docs.
-
TINKERPOP-829 TinkerGraphComputer should support the user specified thread/worker count.
-
TINKERPOP-835 Shade Jackson Dependencies (breaking)
-
TINKERPOP-836 Support Hadoop2 in place of Hadoop1
-
TINKERPOP-850 Reduce Graph.addVertex overload ambiguity (breaking)
-
TINKERPOP-851 GroupCountStep needs a by() for the count.
-
TINKERPOP-861 Solve "The Number Problem" for Operator (and follow on operators)
-
TINKERPOP-863 [Proposal] Turn off bulking — or is there something more general? (hope not).
-
TINKERPOP-866 GroupStep and Traversal-Based Reductions (breaking)
-
TINKERPOP-868 Allow Spark Gremlin Computer to Reuse Spark Contexts
-
TINKERPOP-874 Rename Gremlin-Spark properties using gremlin.spark prefix. (breaking)
-
TINKERPOP-876 Rename VendorOptimizationStrategy XXXOptimizationStrategy (breaking)
-
TINKERPOP-879 Remove deprecated promoteBindings from GremlinExecutor (breaking)
-
TINKERPOP-885 Change Transaction.onReadWrite() to be a ThreadLocal setting (breaking)
-
TINKERPOP-888 GraphTraversal.property overloads (breaking)
-
TINKERPOP-896 Simplify the {{withSack}} methods of {{GraphTraversalSource}}. (breaking)
-
TINKERPOP-897 Remove deprecated GSupplier, GFunction, GConsumer, etc. methods. (breaking)
-
TINKERPOP-898 Rename ConjuctionP and ConjuctionStep to ConnectiveP and ConnectiveStep (breaking)
-
TINKERPOP-899 Bump to the latest version of Neo4j.
-
TINKERPOP-900 Provide by(object) which compiles to by(constant(object))
-
TINKERPOP-901 Option for use of Netty epoll on Linux to reduce GC pressure
-
TINKERPOP-904 BulkLoaderVertexProgram optimizations
-
TINKERPOP-905 Harden time oriented tests in ResultQueueTest
-
TINKERPOP-907 getters for RepeatStep.untilTraversal and RepeatStep.emitTraversal
-
TINKERPOP-908 Use line breaks in documentation
-
TINKERPOP-909 Improve steps that handle numeric data
-
TINKERPOP-911 Allow setting Thread Specific Spark JobGroup/Custom Properties based on hadoop conf
-
TINKERPOP-913 Rename Gremlin Server arguments rebinding to alias
-
TINKERPOP-914 DriverRemoteAcceptor in Gremlin Console supports aliases
-
TINKERPOP-917 Add HadoopGraph.open(String)
-
TINKERPOP-922 Add a book for Developer Documentation
-
TINKERPOP-923 Add a book for Tutorials
-
TINKERPOP-925 Use persisted SparkContext to persist an RDD across Spark jobs.
-
TINKERPOP-931 Make it possible to extend the core OpProcessor implementations
-
TINKERPOP-933 Improve release process to get files named properly
-
TINKERPOP-935 Add missing "close" operation to the session opProcessor docs
-
Cleaned up
ext/
directory when plugin installation fails forgremlin-server
andgremlin-console
. -
Fixed issues in
gremlin-server
when configured for HTTP basic authentication. -
Made
BulkLoaderVertexProgram
work for any persistent TP3-supporting graph (input and output). -
TreeSideEffectStep
now implementsPathProcessor
which fixed aComputerVerificationStrategy
issue. -
Added a shell script that verifies source and binary distributions.
-
Fixed a bulk related bug in
GroupStep
when used onGraphComputer
(OLAP). -
Gremlin Server binary distribution now packages
tinkergraph-gremlin
andgremlin-groovy
as plugins to be consistent with Gremlin Console’s packaging. -
The
RepeatStep
clauses (until()
,emit()
,repeat()
) can only be set at most one time in order to prevent user confusion. -
Fixed a
clone()
bug inRepeatStep
,TreeStep
,GroupCountStep
,GroupStep
, andTraversalRing
. -
Fixed a thread context bug in
TinkerGraphComputer
. -
Fixed issues with the
gremlin-driver
related to hanging connections in certain conditions. -
TinkerGraph now has an option for persistence where the data is saved on
close()
and, if present, loaded onopen()
. -
Added an overload for
GremlinExecutor.eval()
that takes aLifecycle
object to override some default settings fromGremlinExecutor.Builder
. -
Improved session closing for transactional graphs during shutdown of Gremlin Server.
-
Fixed id parameter used in tests for
GroovyStoreTest
andGroovyRepeatTest
to not be treated as an embedded string. -
GraphStep
will convert anyVertex
orEdge
ids to their idObject
prior to submission toGraphComputer
(OLAP).
-
TINKERPOP-814 ConnectionPool can fill with dead Connections
-
TINKERPOP-816 Gryo deserialization of error response with null message causes NPE and protocol desync
-
TINKERPOP-817 Gryo serialization of large responses fails and causes protocol desync
-
TINKERPOP-840 TreeTest Is not being ignored via ComputerVerificationStrategy
-
TINKERPOP-849 gremlin-server doesn’t close sessions on close opcode
-
TINKERPOP-855 sasl authentication type error due to Json format
-
TINKERPOP-865 Errors with HTTP REST basic auth
-
TINKERPOP-867 TinkerGraphProvider does not initialize temp dir
-
TINKERPOP-870 Rebound client requires a connection to occur on the underlying client.
-
TINKERPOP-877 Driver hangs if SSL enabled on server but not on client
-
TINKERPOP-828 TinkerGraph can supportPersistence(), should we allow it.
-
TINKERPOP-830 process-docs.sh introduces extra white space dependent on console width
-
TINKERPOP-839 Docs should have a ${version.number} under the logo.
-
TINKERPOP-852 A shell script that validates the distribution artifacts at release time
-
TINKERPOP-853 TinkerPop Logo in JavaDoc index.html
-
TINKERPOP-858 Cleanup after failed :install
-
Compare
now usesBigDecimal
internally to ensure that precision is not lost on standard number comparisons. -
Renamed
ComputerVerificationStrategy
toVerificationStrategy
so all the verification strategies can use it. -
Added
StandardVerificationStrategy
that throws exceptions for illegal traversal patterns on the standard engine (which extends toGraphComputer
). -
Added
GraphFeatures.supportsConcurrentAccess()
to allowsGraph
implementations to signify if multiple instances can access the same data. -
Clarified semantics of
Transaction.close()
in unit tests - now refers only to closing the current transaction in the current thread. -
Neo4jGraph
no longer usesOptOut
onTransactionTest.shouldRollbackOnCloseWhenConfigured
(formerlyshouldRollbackOnShutdownWhenConfigured
) -
Gremlin Server initialization scripts can now return a
Map
of values that will become global bindings for the server. -
Introduced the
--dryRun
option to the document generation process which ignores actual script execution in the Gremlin Console. -
Fixed bug in
EventStrategy
around property changed events when callingproperty
without cardinality or meta-property values. -
Improved support for the
Accept
header for REST-based requests in Gremlin Server. -
GraphFactory
now allows specification of the class to use to instantiate theGraph
through theGraphFactoryClass
annotation. -
Added
wrapAdjacencyList
andunwrapAdjacencyList
options toGraphSONWriter
andGraphSONReader
respectively, thus allowing valid JSON to be written/read if the user desires. -
Added Gremlin Server/Driver authentication support via SASL.
-
Added Basic HTTP authentication support for REST in Gremlin Server.
-
Added Gremlin Server plugin to help with "credential graph" management (used in conjunction with authentication features of Gremlin Server).
-
Added "secure" Gremlin Server/Driver example configuration files.
-
Adjusted configuration for javadoc generation to eliminate error messages.
-
Removed "reserved" graph concept names from tests (e.g. "label", "edge", "value") to support the convention of avoiding these strings for property names.
-
Introduced
GraphProvider.Descriptor
which annotates aGraphProvider
implementation to describe whatGraphComputer
implementation will be used. -
Modified
OptOut
to include acomputers
attribute which allows theGraph
to opt-out of computer-based tests for specific computation engines. -
Added a
SandboxExtension
that can be plugged intoTypeCheckedCustomizerProvider
andCompileStaticCustomizerProvider
to control classes and methods that can be used in theGremlinGroovyScriptEngine
. -
Added a number of new
ImportCustomizerProvider
implementations such as,TimedInterruptCustomizerProvider
,TypeCheckedCustomizerProvider
and others. -
Refactored
GremlinGroovyScriptEngine
to make more general use ofImportCustomizerProvider
implementations. -
Removed
SecurityCustomizerProvider
class and the "sandbox" configuration on theScriptEngines
class - this was an experimental feature and not meant for public use. -
Removed dependency on
groovy-sandbox
from thegremlin-groovy
module.
-
TINKERPOP-770 Exception while AddPropertyStep tries to detach vertex property
-
TINKERPOP-780 Use of fold() in repeat()
-
TINKERPOP-782 map(Traversal) should declare requirements of child
-
TINKERPOP-785 Gremlin Server Not Properly Reporting Port Conflict
-
TINKERPOP-792 select at start of match traversal on Map can fail
-
TINKERPOP-794 IncidentToAdjecentStrategy malfunction
-
TINKERPOP-804 Failed installing neo4j-gremlin extension on Windows 7
-
TINKERPOP-822 Neo4j GraphStep with element arguments ignores has (breaking)
-
TINKERPOP-576 Gremlin Server Authentication
-
TINKERPOP-582 Remove Groovy Sandbox Dependency
-
TINKERPOP-610 General graph concept names in test schema
-
TINKERPOP-656 IoRegistry Chaining
-
TINKERPOP-690 Be able to OPT_OUT for Standard, but not Computer (breaking)
-
TINKERPOP-699 GraphSON writeGraph not producing valid json object
-
TINKERPOP-750 Compare should not have special case for Number
-
TINKERPOP-752 Make Gremlin Server Better Respect ACCEPT
-
TINKERPOP-764 Unify semantics of Transaction.close() in tests and documentation (breaking)
-
TINKERPOP-771 IoRegistry Instantiation With GryoPool
-
TINKERPOP-778 Support GraphFactory location via annotation.
-
TINKERPOP-791 Document rules for committers
-
TINKERPOP-797 order() seems to only like List? (breaking)
-
TINKERPOP-808 TraversalComparator.comparator needs a getter
-
Modified the
GremlinExecutor
to catchThrowable
as opposed toException
so as to properly handleError
based exceptions. -
Modified the
GremlinGroovyScriptEngine
compilation configuration to prevent inappropriate script evaluation timeouts on standalone functions. -
Added a custom configuration for "timed interrupt" in the
ScriptEngines
instantiation of theGremlinGroovyScriptEngine
. -
Added
mapKeys()
(MapKeyStep
) andmapValues()
(MapValueStep
) to get the keys and values of a map, respectively. -
select()
no longer supports empty arguments. The user must specify the keys they are selecting. -
MatchStep
andmatch()
no longer have a "start label" parameter — it is computed if the incoming traverser does not have requisite labels. -
Turned transactional testing back on in Gremlin Server using Neo4j.
-
Renamed
Transaction.create()
toTransaction.createThreadedTx()
. -
Added
TraversalParent.removeGlobalChild()
andTraversalParent.removeLocalChild()
. -
Added a
clear
option to the Gephi Plugin to empty the Gephi workspace. -
Refactored
ResultSet
and related classes to stop polling for results. -
AbstractStep
now guarantees that bulk-less and null-valued traversers are never propagated. -
Added
dedup(string...)
which allows for the deduplication of a stream based on unique scope values. -
Fixed multiple bugs in the Gephi Plugin related to refactoring of traversal side-effects.
-
Split
WhereStep
intoWherePredicateStep
andWhereTraversalStep
to simplify internals. -
Prevent the driver from attempting to reconnect on a dead host if the
Cluster.close()
method has been called. -
Renamed the "deactivate" option on
:plugin
command to "unuse" to be symmetric with the "use" option. -
Added
Traversal.toStream()
to turn theTraversal<S,E>
into aStream<E>
. -
Added
Scoping.Variable
enum ofSTART
andEND
which allows theScoping
step to specify where its bindings are. -
ComputerVerificationStrategy
is smart about not allowingWhereXXXStep
with a start-variable to run in OLAP as it selects the value from the path. -
Rewrote
MatchStep
where it now works onGraphComputer
, solves more patterns, provides plugable execution plans, supports nested AND/OR,not()
-patterns, etc. -
Renamed
Graphs
in Gremlin Server toGraphManager
. -
Fixed bug in Gremlin Driver where client-side serialization errors would not bubble up properly.
-
Fixed problem in Gremlin Server to ensure that a final
SUCCESS
orNO_CONTENT
message assured that the transaction was successful in sessionless requests. -
Arrow keys for cycling through command history now work in Gremlin Console when being used on Windows.
-
Added
NotStep
andnot(traversal)
for not’ing a traversal (integrates likeConjunctionStep
). -
Removed
TraversalP
. Traversals andP
-predicates are completely separate concepts. -
has(key,traversal)
is now an alias forfilter(__.values(key).traversal)
usingTraversalFilterStep
. -
Simplified
SubgraphStrategy
by usingTraversalFilterStep
instead of the more complexWhereStep
. -
Added
TraversalMapStep
,TraversalFlatMapStep
,TraversalFilterStep
, andTraversalSideEffectStep
which all leverage an internal traversal. -
Added
Path.get(pop,label)
as default helpers inPath
. -
Added
Pop.first
,Pop.last
, andPop.all
as enums for getting single items from a collection or a list of said items. -
Changed
GremlinServer.start()
to return aCompletableFuture
that contains the constructedServerGremlinExecutor
. -
Restructured
IoTest
breaking it up into smaller and more logically grouped test cases. -
Gremlin Server
Settings
now has sensible defaults thus allowing the server to be started with no additional configuration. -
Fixed garbled characters in Gremlin Console that notably showed up in
:help
-
Replaced dependency on
groovy-all
with individual Groovy dependencies as needed. -
Bumped
org.gperfutils:gbench
to the0.4.3
and a version explicitly compatible with Groovy 2.4.x. -
Renamed
KeyStep
toPropertyKeyStep
to be consistent withPropertyValueStep
. -
Added
Gremlin-Lib-Paths
to modify paths in pluginlib
directory. -
Modified the capabilities of
Gremlin-Plugin-Paths
to delete paths that have no value on the right-hand-side of the equals sign. -
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 hasgetScopeKeys()
to get the keys desired by the scoping step. -
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
is now aScoping
step. -
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.getScopeValue()
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.