Friday, September 7, 2012

Neo4j 1.8.RC1 - Really Careful #ftw

As we prepare the Neo4j 1.8 series for General Availability, we’re moving to an RC model of finalizing production ready software. RC of course stands for Really Careful.

Resisting Changes


Every line of code that is committed to github is greeted with exhaustive continuous testing, earning the developer either a deep-fried twinkie or pickled herring – the reward/punishment is flipped depending on the resident country.

For milestone releases, great care is used to QA the packaged artifacts. Download, install, start/stop, go through the motions of normal use, throw sample applications against it, compare benchmarks, try out language bindings. Yet, we haven’t been entirely comfortable going directly from a milestone to general availability, because the milestone often will have introduced new features and possible breaking changes.

Now, we’re adopting a formal Release Candidate strategy: a feature complete release built from a frozen code base which will only accept bug fixes. An RC could be the GA, but introduces a longer public review before getting the final stamp of approval.

Respond Critically

Here’s where you come in: download Neo4j 1.8.RC1 and use it for your development and testing in anticipation of the GA. Please, let us know immediately about any critical concerns which would stop you from putting this candidate into production.

Read the Changes

Wait. There are changes? Yes, a collection of fixes, as noted in the change log:

Kernel:

  • Removed contention around allocating and moving persistence windows so that a thread won't need to await another thread doing this refresh, instead just continue knowing that the windows will be optimally placed in a very near future.
  • Removed contention around translating a key (as String) into the ID by using copy-on-write map instead of a concurrent hash map. Used in property key as well as relationship type translation.
  • Fix for Node/Relationship#getPropertyValues() sometimes returning null values from the iterator.


Server:

  • Upgraded Jackson JAXRS to version 1.9.7
  • Keeping the Cypher execution engine between calls makes it possible to re-use execution plans
  • added User-Agent header tracking to udc to determine rest-driver usage


Cypher:

  • Removed the /../ literal for regular expressions. Now a normal string literal is used instead
  • Concatenation handles types better
  • Changed how the graph-matching module is used, to make it safe for concurrent use
  • Better type error messages
  • Renamed iterable to collection
  • Fixed #795: so that WITH keeps parameters also for empty aggregation results
  • Fixed #772: Creating nodes/relationships goes before SET, so SET can run on already created elements
  • Added error when using != instead of <>
  • Fixed #787: Issue when comparing array properties with literal collections
  • Fixed #751: Better error message for some type errors
  • Fixed #818: Problem where properties could only have scalar values (they can be arrays as well)
  • Fixed #834: Gives relevant syntax exception when properties are entered in MATCH



Get Neo4j 1.8.RC1

Neo4j 1.8.RC1 is available for:

Be safe out there. Oh, and if out there happens to be the San Francisco bay area at the beginning of November, join us at GraphConnect.

Always,
Andreas

1 comment:

Unknown said...

Hi,

Only issue with this, is the root api response.

https://groups.google.com/forum/?fromgroups=#!topic/neo4j/urwPOW5bLDQ

We should have a standard format to support version comparison.

e.g. 1.8.RC1 Maps to 1.8.0.8. I think the root api response should show 1.8.0.8 and not 1.8.RC1.

{
"extensions" : {
"CypherPlugin" : {
"execute_query" : "http://localhost:20001/db/data/ext/CypherPlugin/graphdb/execute_query"
},
"GremlinPlugin" : {
"execute_script" : "http://localhost:20001/db/data/ext/GremlinPlugin/graphdb/execute_script"
}
},
"node" : "http://localhost:20001/db/data/node",
"reference_node" : "http://localhost:20001/db/data/node/0",
"node_index" : "http://localhost:20001/db/data/index/node",
"relationship_index" : "http://localhost:20001/db/data/index/relationship",
"extensions_info" : "http://localhost:20001/db/data/ext",
"relationship_types" : "http://localhost:20001/db/data/relationship/types",
"batch" : "http://localhost:20001/db/data/batch",
"cypher" : "http://localhost:20001/db/data/cypher",
"neo4j_version" : "1.8.RC1"
}

Romiko