Release Notes

jbmusso edited this page Jul 12, 2016 · 71 revisions

Attention: this Wiki hosts an outdated version of the TinkerPop framework and Gremlin language documentation.

Please visit the Apache TinkerPop website and latest documentation.

Blueprints: A Property Graph Model Interface

Blueprints 2.y.z

Version 2.6.0 (September 17, 2014)

  • Added the hasImplicitElements feature for use with SailGraph and others which return elements not explicitly created with addVertex or addEdge
  • Neo4j2Index has a new query method for raw Lucene queries.
  • Dependencies on Colt removed in favor of HPPC.
  • Bump to Sparksee 5.1.0

Version 2.5.0 (April 14, 2014)

  • Added the SailLoader utility, for bulk-loading RDF into GraphSail and other Sail impls
  • Moved to Sesame 2.7, with its new transaction model. Bumped SesameTools to 1.8 and Ripple to 1.1
  • Blueprints API now requires an IllegalStateException to be thrown if removeVertex on the Graph interface is called on vertex that is already removed
  • Add overload to that takes a Map for configuration
  • The elementClass argument on the KeyIndexableGraph methods cannot be null and must throw IllegalArgumentException if it is
  • Add TransactionGraphHelper with various strategies for transaction execution: FireAndForget, OneAndDone, DelayedRetry and ExponentialBackoff
  • Bumped Neo4j to 1.9.6
  • Fixed bug with Map and Float objects embedded in lists for GraphSON serialization in EXTENDED mode
  • Fixed a bug in KeyIndexableGraphHelper around transaction commits
  • Fixed bug in usage of GraphFactory in relation to Neo4jHA
  • Fixed a bug around accessing an incident vertex of an edge that is not in a valid partition in PartitionGraph
  • Added support for Neo4j 2.0.1 release in blueprints-neo4j2-graph package
  • Removed support for OrientDB as now that is maintained by Orient Technologies
  • GraphSON supports a “normalization” of output (like GraphML)
  • Ignore null property values to while writing to GraphSON (while Blueprints does not allow null property values to be set, that does not prevent graphs from returning them)
  • GraphML, GML, and GraphSON Writers don’t close streams internally when outputting a graph (it leaves it to the original creator of the stream)
  • GML Readers/Writers properly handles quotes within a property value.

Version 2.4.0 (August 4, 2013)

  • Disabled the unique-statements policy in GraphSail by default, improving performance
  • Updated KeyIndexableGraph test suite to ensure no requirement on returned Iterable type.
  • RexsteGraph properly supporting boolean data types.
  • Added a saveRDF() method to SailGraph
  • Added new edges-as-statements view style to PropertyGraphSail
  • QueryTestSuite broken up into GraphQueryTestSuite and VertexQueryTestSuite
  • Deprecated Feature.isRDFModel is now removed
  • Added ability for a GraphTest to have a graph specific test suite
  • A complete refactor of the id model in TestSuites (see GraphTest.convertId(), GraphTest.convertLabel())
  • Moved SailTokens out of blueprints-core and into blueprints-sail (SailGraphTest refactor)
  • Configurable storage for TinkerGraph: GraphML, GraphSON and GML
  • GraphChangedListener from EventGraph can mutate graph without concurrent modification exception
  • Scope of EventGraph base classes changed to public for those wanting to extend up on them.
  • Bumped Dex to 4.8.2
  • Support both byte and short data types in GraphSON.
  • Convert Array to ArrayList in Neo4jGraph when retrieving such property values
  • Bumped Neo4j to 1.9.2
  • Bumped OrientDB to 1.5.0
  • Added has(key) and hasNot(key) in Query API
  • Added has(key,predicate,value) in Query API
  • Deprecated Query.has(key,value,compare) in Query API
  • Added Predicate interface to support future compare-type operations
  • Ignore nulls property values in loading of GraphSON as graphs do not accept such values for element properties
  • Adding an edge with a null value results in IllegalArgumentException
  • Added GraphFactory support to allow for the creation of graphs via Apache Configuration
  • Added EdgeHelper.getOther() utility method
  • Added informative messages for some failure conditions in the test suite
  • RexsterGraph no longer supports Vertex Query by pushing the query down to Rexster (it uses the in-memory DefaultVertexQuery)

Version 2.3.0 (March 20, 2013)

  • Generalized IdGraph to selectively enable custom vertex or edge IDs
  • Stricter testing of property keys/value to ensure legal Blueprints values (no id, label, empty string, null)
  • Element.getProperty() API signature changed to support automatic typing to declared variable type
  • Moved PropertyGraphSail, which provides a dynamic RDF view of any Blueprints graph, from Tinkubator into blueprints-graph-sail
  • Bumped major versions of Ripple and SesameTools
  • Neo4jBatchGraph project moved to Neo4jGraph under com.tinkerpop.blueprints.impls.neo4j.batch
  • OrientBatchGraph moved to com.tinkerpop.blueprints.impls.orient.batch
  • Added GraphQuery in order to support intelligent indexing systems (Vertex.query() and Graph.query())
  • Refactoring of wrappers to ensure proper propagation of Graph reference
  • Fixed a ConcurrentModificationException in TinkerGraph
  • Element API changed to support Element.remove()
  • Vertex API changed to support Vertex.addEdge(String,Vertex)
  • Bumped to support Neo4j 1.9.M05
  • Improved transaction concurrency in DexGraph
  • Deprecated TransactionalGraph.stopTransaction() in favor of commit() and rollback()
  • Renamed ThreadedTransactionalGraph.startTransaction() to ThreadedTransactionalGraph.newTransaction()
  • Loosened restrictions on edge-indexing in GraphSail (though for some types of queries, exception thrown)
  • RestHelper in RexsterGraph packages is no longer publicly available
  • Added execute methods to RexsterGraph to allow execution of raw Gremlin scripts to the Gremlin Extension in Rexster
  • Include the original property value in property changed/removed events generated from EventGraph
  • Add the option for graph-specific index parameters on createKeyIndex method on KeyIndexableGraph
  • Fix bug in GraphMLReader where the reader ignored data type casting when the was different from the id in the key element
  • Upgraded to Jackson 2 for JSON processing in GraphSON

Version 2.2.0 (December 19, 2012)

  • Renamed GraphSail property default.namespace to default-namespace for compatibility with OrientDB
  • Removed the SailGraph constraint preventing traversal from literal vertices to non-literal resource vertices
  • Refactoring of GraphSONUtility and related reader/writer classes to improve performance and offer more control over how GraphSON is read and written
  • Added support for Compare.opposite() to get the inverse of a comparator
  • Added support for property inclusion and exclusion in the GraphMLReader/Writer
  • GMLWriter ignores any property keys that are not allowable by GML standards when the “strict” flag on the writer is set to true
  • OrientDB graph implementation supports passing class as an argument to the addVertex method.
  • Removed a class type check in KeyIndexableGraphTestSuite that unnecessarily assumes a specific implementation
  • Fixed a state bug in WrapperQuery
  • GraphJung implements JUNG’s DirectedGraph interface and did various small optimizations to implementation
  • Bumped to support Dex 4.7.0
  • Bumped to support Neo4j 1.9.M02
  • Bumped to support OrientDB 1.3.0
  • ExceptionFactory support for _ metadata properties
  • Added more constructors to Neo4jHaGraph
  • ReadOnlyGraph supports the non-mutating methods of KeyIndexableGraph.

Version 2.1.0 (August 4, 2012)

  • Enable tests for KeyIndexableGraph under RexsterGraph. Issue with casting index values resolved.
  • Optimized the pom.xml for both the parent and child projects
  • Added Travis continuous integration support
  • Made OrientGraph and Neo4jGraph Element constructors public
  • Provided a method to turn on/off Neo4jGraph transaction consistency checking. Default behavior being native Neo4j.
  • Removed TransactionalGraph.startTransaction() as transactions are auto-started
  • Bumped to support Dex 4.6.0
  • Bumped to support Neo4j 1.8.M06
  • An Element can not have a property key that is the empty string
  • Update RexsterGraph to utilize Vertex Query API of Rexster.
  • Renaming of GraphSONFactory to GraphSONUtility and various method renaming within that class.
  • Fixed an iterable consistency issue in Neo4jGraph
  • Removed unneeded Exception catching in both Neo4jGraph and OrientGraph
  • Bumped to support Orient 1.1.0

Version 2.0.0 (May 23, 2012)

  • Added a var args based ElementHelper.setProperties() method
  • Added GML Reader/Writer utility
  • Bumped to support Neo4j 1.8.M02
  • RexsterGraph supports Rexster Authentication
  • Neo4jElement will accept a Collection as a property (as long as all items within it are of the same data type), internally converting it to an array for storage in Neo4j
  • Fixed a couple of API naming convention errors in PartitionGraph
  • Updated core Vertex API to support the notion of ‘push down predicates’ (lower level element filtering)
  • Added internal support for Neo4j’s Node var args of RelationshipTypes
  • Speed improvements to the much used MultiIterable
  • Removed CloseableSequence and replaced with CloseableIterable (now real Java Iterable semantics respected)
  • Redesign to IndexableGraph where AutomaticIndex no longer exists as is default
  • Introduced new interface called KeyIndexedGraph for basic key/value property indexing
  • Reduce the number of vertices/edges created in various test suites to speed up testing
  • Added Features so developers can learn about the various quirks of any Graph implementation
  • Support for Neo4j’s native automatic indices in Neo4jGraph
  • Support for Neo4j’s native automatic indices in Neo4jBatchGraph
  • Added ExceptionFactory so all exceptions have the same message and type amongst graph implementations
  • Removed superfluous util packages on all Graph implementations
  • EventGraph wrapper set now includes EventTransactionalGraph which will fire queued sets of events in conjunction with successful commits to the graph.
  • Added IdGraph to support the user defined ids for those Graphs that ignore user supplied ids
  • Added ThreadTransactionalGraph to support multiple threads within a single transaction
  • Changed the Vertex API to only have three methods: getEdges(), getVertices(), and query()
  • Bumped to support OrientDB 1.0.1
  • Added BatchGraph to support bulk loading of data

Blueprints 1.x

Version 1.2 (Blue Sky — February 28, 2012)

  • Fixed Neo4jGraph index object caching bug which was made salient with multiple threads
  • Fixed SailGraph to now commit transactions on shutdown
  • Updated Neo4jGraph to use GlobalGraphOperations methods for getAllNodes() and getAllRelationships()
  • Bumped to support Neo4j 1.6.1
  • Fixed “fresh”-constructor bug in Neo4jGraph
  • Added method support for named graphs in SailGraph
  • Fixed named graph bug in SailGraph
  • Neo4jBatchGraph now has nearly analogous behavior to any IndexableGraph except for the ability to delete
  • Fixed issue with Neo4j’s native automatic index and Neo4jGraph.dropIndex()
  • Added PartitionGraph utility to allow for graph partitions
  • Renamed packages where there is now and util.wrappers for I/O and wrapper-based utilities
  • Added support for index parameters in IndexableGraph (provided as optional parameters, thus backwards compatible)
  • Optimized how TinkerGraph stores its vertices’ edges in memory (grouping on label)

Version 1.1 (Blueberry — December 7, 2011)

  • Fixed index consistency issue in OrientGraph
  • Added Neo4jHaGraph allowing a more direct way to utilize Neo4j High Availability mode
  • General API consistency improvements
    • Graphs attempt to create directories structures for graph persistence
    • GetVertex/Edge throw IllegalArgumentException if passed a null identifier as a parameter
    • GetVertex/Edge return null if the element cannot be found, if the identifier does not match the expected format of the underlying graph database or if the underlying graph database throws exceptions during the lookup
  • RexsterGraph utilizes the application/vnd.rexster.typed+json custom mime type
  • The EventGraph.addEdge() method now properly fires the onEdgeAdded event with improved test cases
  • Added WrappedGraph as a template for how to build stackable graph implementations
  • Added SparqlRepositorySailGraph to support a Graph representation of any SPARQL endpoint
  • Renamed GraphJSONxxx to GraphSONxxx to promote as standardized JSON graph format
  • Bumped to support OrientDB 1.0rc7
  • Bumped to support Neo4j 1.5

Version 1.0 (Blueprints — September 18, 2011)

  • Bumped to support Neo4j 1.5.M01
  • Bumped to support OrientDB 1.0rc5
  • RexsterGraph uses the actual count REST API instead of pulling back all results first and checking size
  • GraphJSONReader and GraphJSONWriter utility classes
  • Updated TransactionalGraph API to support transaction buffers
    • Removed TransactionalGraphHelper.CommitManager as it is no longer relevant
    • Changed TransactionalGraph.close() to Conclusion.SUCCESS any open transactions
  • Fixed a ConcurrentModificationException in TinkerGraph and added respective test cases for all graphs
  • Added StringFactory.graphString() for a unified String representation of a Blueprints graph
  • Added Neo4jBatchGraph to support bulk inserting of graph data into a Neo4j instance

Blueprints 0.x

Version 0.9 (Marvin — August 1, 2011)

  • Updated Vertex API to have getOutEdges(String...) and getInEdges(String...)
  • Updated TinkerGraph to be ConcurrentModificationException safe
  • Bumped to support Neo4j 1.4
  • Bumped to support OrientDB 1.0rc4
  • IndexableGraph.getIndex() now return null for non-existent indices instead of RuntimeException
  • Added support for statement deduplication (now the default) in GraphSail
  • Refactored GraphMLReader and GraphMLWriter to use a more typical pattern for readers and writers (rather than continuing to overload inputGraph() and outputGraph()). Added normalizing functionality to GraphMLWriter, enabling graph versioning
  • Changed the property graph schema of GraphSail to more closely resemble the SailGraph schema
  • Extended GraphSail to support Sesame-style inferencing
  • SailGraph dangling connection issue fixed
  • Updated Index.toString() to make it more readable and compact
  • Updated graph.getVertex/Edge(null) to ensure that null is returned

Version 0.8 (Winnie — June 15, 2011)

  • Added EventGraph implementation
  • RexsterGraph improvements
    • Use of POST for REST Service Requests
    • Better implementation URL encoding
  • Change JSON library from json-simple to jettison to be more in line with the rest of the TinkerPop stack.
  • A more robust implementation of the TransactionalGraph implementation for Neo4jGraph, OrientGraph, and SailGraph.
  • Bumped to Neo4j 1.4.M04
  • Bumped to Orient 1.0rc2-SNAPSHOT
  • Bumped to Sail 2.4.0

Version 0.7 (Patrick — May 8, 2011)

  • Updated RexsterGraph to work with latest Rexster REST API changes
  • Bumped to Neo4j 1.4.M01
  • Bumped to OrientDB 1.0rc1
  • Bumped to Sail 2.3.3

Version 0.6 (Oscar — April 4, 2011)

  • Refactored to create a Maven multiproject with one module per major Blueprints component
  • Added DexGraph implementation (Sparsity Technologies)
  • Bumped to OrientDB 1.0rc1-SNAPSHOT
  • Bumped to Neo4j 1.3M05
  • Fixed equals() and hashCode() bug in ReadOnlyGraph
  • Bumped to supporting JUNG 2.0.1
  • Added Index.count() method to Blueprints core API.

Version 0.5 (Scooby — March 2, 2011)

  • Updated index model
    • Changed the API and semantics of AutomaticIndex
    • Changed the API of IndexableGraph
  • Fixed index related bug in RexsterGraph
  • Added numerous utilities to util package
    • Added support for bulk processing with CommitManager
  • Added UTF-8 writer to GraphMLWriter
  • Updates to OrientGraph implementation
  • Fixed bug in Neo4jGraph index loader
  • Added toString() method to indices
  • Added experimental Lucene query syntax support for Neo4jGraph
  • Bumped version support to Neo4j 1.3.M03
  • Added performance benchmark for Neo4j GraphDatabaseService vs. Blueprints Neo4jGraph
  • Added performance benchmark for OrientDB OGraphDatabase vs. Blueprints OrientGraph
  • Added Vertex.getOutEdges(String label) and Vertex.getInEdges(String label)
  • Rewrote OrientDB implementation from scratch (significant reduction in code) (Luca)
  • Added ReadOnlyGraph and ReadOnlyIndexableGraph to prevent graph mutations

Version 0.4 (Elmo — January 22, 2011)

  • Added support for Neo4j 1.2
  • Added edge label indexing to AutomaticIndex
  • Added concept of “ouplementation”
    • Repackaged JUNG ouplementation as GraphJung
    • Added Sail ouplementation as GraphSail
  • Created util utility package
    • Repackaged GraphML library in util.graphml

Version 0.3 (Smurf — December 14, 2010)

  • Moved to graphdb-deps-* database dependency management model
    • Neo4j 1.2.M05
    • OrientDB
    • Sail 2.3.1
    • Rexster 0.1
  • Removed object document model to focus Blueprints specifically on property graphs
    • Removed support for TinkerDoc, MongoDB, and CouchDB
  • OrientGraph now implements TransactionalGraph interface
  • Many updates to TransactionalGraphTestSuite
    • Large transactions now tested
    • Added timing tests to all tests
  • Updated Index semantics where get() no elements returns an empty iterator, not null
  • Updated the toString() method of TinkerGraph to display both vertex and edge counts
  • Added support for multiple indices
    • Added IndexableGraph, Index, and AutomaticIndex interfaces
    • Added numerous test cases to the test suite
  • Updated GraphMLReader
    • More efficient implementation
    • Can specify ids and labels through _id and _label data properties
  • Added GraphMigrator to stream the data in one graph to another
  • Added RexsterGraph to connect to remote graphs over HTTP-REST
  • Added JavaDoc to all property graph model interfaces

Version 0.2 (Kermit — September 22, 2010)

  • Removed Blueprints Pipes BETA and put it into a separate project
  • Neo4jGraph constructor can be passed in a Neo4j properties map
  • Neo4jGraph constructor can be passed in a live GraphDatabaseService
  • Updated GraphMLWriter to write all vertices and then all edges
  • Added RDF load functionality to SailGraph
  • Added SPARQL functionality to SailGraph
  • Fixed sever GraphMLReader bug
  • Added OrientDB (OrientGraph) as a property graph implementation
  • Added support for Graph.getEdge(Object id)
  • Added support for kind in the Sail implementation of Blueprints
  • Made iterating edges in SailGraph faster and more memory efficient
  • Support for transactions through TransactionalGraph

Version 0.1.1 (Bob the Builder — March 7, 2010)

  • Added Blueprints Pipes BETA to the distribution
  • Changed all the OpenRDF Sesame dependencies to version 2.3.1
  • Added performance timing printouts to model test cases
  • Neo4j dependency was changed for 1.0-rc to 1.0
  • Added object document interfaces
  • Added TinkerDoc implementation of the object document interfaces
  • Added MongoDB implementation of the object document interfaces

Version 0.1 (Bob the Builder — February 9, 2010)

  • Initial release providing the property graph model
  • Code originally packaged with Gremlin