ArangoDB 2.0.6

ArangoDB 2.0.6 is available for download. It contains the following additions:

v2.0.6 (2014-04-22)

* fixed issue #835: arangosh doesn't show correct database name

* Fixed a caching problem in IE JS Shell

* added cancelation for async jobs

* upgraded to new gyp for V8

* new Windows installer

* fixed cluster authentication front-end issues for Firefox and IE, there are
  still problems with Chrome

* fixed AQL optimizer bug

* fixed front-end issues

* added password change dialog

You can either download the new version from our web-site or use your favourite package manager.

Posted in General | Leave a comment

ArangoDB 1.4.15

We have released a maintenance release of ArangoDB 1.4.

* bugfix for AQL query optimiser
  the following type of query was too eagerly optimised, leading to errors in code-generation:
      LET a = (FOR i IN [] RETURN i) LET b = (FOR i IN [] RETURN i) RETURN 1
  the problem occurred when both lists in the subqueries were empty. In this case invalid code
  was generated and the query couldn't be executed.

You can download it from or use your package manager.

Posted in Releases | Leave a comment

Heartbleeding Windows

I assume you all heard about the Heartbleed Bug in OpenSSL. ArangoDB uses the system OpenSSL under linux and Mac OS. If you update your version to 1.0.1g or better, everything is fine.

However, the Windows contains static version of OpenSSL. So in case you want to use ArangoDB with HTTPS, you should update your ArangoDB version. The current installer for 1.4.14 and 2.0.2 contains the OpenSSL 1.0.1g.

Posted in General | Leave a comment

ArangoDB 2.0.2

We have released a bug-fix release for ArangoDB 2.0.

v2.0.2 (2014-04-06)

* during cluster startup, do not log (somewhat expected) connection errors with
  log level error, but with log level info

* fixed dashboard modals

* fixed connection check for cluster planning front end: firefox does 
  not support async:false

* document how to persist a cluster plan in order to relaunch an existing
  cluster later

* added REST API method HTTP GET `/_api/job/job-id` to query the status of an
  async job without potentially fetching it from the list of done jobs

* fixed non-intuitive behaviour in jobs API: previously, querying the status
  of an async job via the API HTTP PUT `/_api/job/job-id` removed a currently 
  executing async job from the list of queryable jobs on the server.
  Now, when querying the result of an async job that is still executing, 
  the job is kept in the list of queryable jobs so its result can be fetched
  by a subsequent request.

* improve documentation of db._create and explain the rules and
  limitations following from the choice of shardKeys for sharded
  collections with more than one shard
Posted in General, Releases | Leave a comment

ArangoDB 1.4.14

A maintenance release of ArangoDB 1.4 is now available for download.

v1.4.14 (2014-04-05)

* fixed race conditions during shape / attribute insertion

  A race condition could have led to spurios `cannot find attribute #xx` or
  `cannot find shape #xx` (where xx is a number) warning messages being logged 
  by the server. This happened when a new attribute was inserted and at the same 
  time was queried by another thread.

  Also fixed a race condition that may have occurred when a thread tried to
  access the shapes / attributes hash tables while they were resized. In this
  cases, the shape / attribute may have been hashed to a wrong slot.

* fixed a memory barrier / cpu synchronisation problem with libev, affecting
  Windows with Visual Studio 2013 (probably earlier versions are affected, too)
  The issue is described in detail here:

Posted in Releases | Leave a comment

ArangoDB 2.0.1

We have just release 2.0.1, which is bug-fix release for 2.0.

v2.0.1 (2014-03-31)

* make ArangoDB not send back a `WWW-Authenticate` header to a client in case the
  client sends the `X-Omit-WWW-Authenticate` HTTP header.

  This is done to prevent browsers from showing their built-in HTTP authentication 
  dialog for AJAX requests that require authentication.
  ArangoDB will still return an HTTP 401 (Unauthorized) if the request doesn't
  contain valid credentials, but it will omit the `WWW-Authenticate` header, 
  allowing clients to bypass the browser's authentication dialog.

* fixed isses in arango-dfdb:

  the dfdb was not able to unload certain system collections, so these couldn't be
  inspected with the dfdb sometimes. Additionally, it did not truncate corrupt
  markers from datafiles under some circumstances

* added `changePassword` attribute for users

* fixed non-working "save" button in collection edit view of web interface
  clicking the save button did nothing. one had to press enter in one of the input
  fields to send modified form data

* fixed V8 compile error on MacOS X

* prevent `body length: -9223372036854775808` being logged in development mode for
  some Foxx HTTP responses

* fixed several bugs in web interface dashboard

* fixed issue #783: coffee script not working in manifest file

* fixed issue #781: Cant save current query from AQL editor ui

* bumped version in `X-Arango-Version` compatibility header sent by arangosh and other
  client tools from `1.5` to `2.0`.

* fixed startup options for arango-dfdb, added details option for arango-dfdb

* fixed display of missing error messages and codes in arangosh

* when creating a collection via the web interface, the collection type was always 
  "document", regardless of the user's choice
Posted in General, Releases | Leave a comment

Ashikawa::Core 0.10 released

We just released version 0.10 of the low-level ArangoDB Ruby driver Ashikawa::Core. It supports both ArangoDB 1.4 and 2.0. For more details see the release notes.

We’re also working on the first version of Guacamole: It is an ODM for Rails and is based upon Ashikawa::Core.

Posted in Releases, ruby | Leave a comment

ArangoDB Sharding Release 2.0.0 RC1

Sharding has come to ArangoDB. We are proud to announce the release candidate of ArangoDB 2.0.0.

The ArangoDB 2 is API downward compatible to ArangoDB 1.4. ArangoDB 2 can be used as standalone or distributed system. You can use the same packages / binaries for a stadalone and a sharding setup. See “setup cluster” for how to enable the cluster features of ArangoDB 2 and how to distribute your data to many servers.

Please note that the datafiles are not compatible. ArangoDB 2 will convert these files to a newer format. If you only want to play with the new sharding features, make sure that you use a separate database directory.

Where to go next?

- a general introduction
- how set up a distributed cluster
- more in-depth information
- coming soon: guidelines for API implementors

Posted in Releases | 6 Comments

ArangoDB 1.4.11

We have released a bug-fix release for ArangoDB 1.4. As it is carnival, we skipped 1.4.10 and moved directly to 1.4.11. Please note that we are also preparing the ArangoDB 2.0 release. Therefore it is important to use the

zypper install arangodb=1.4.11

(or whatever package manager you use) with an explicit version.

v1.4.11 (2014-02-27)

* added SHORTEST_PATH AQL function 

  this calculates the shortest paths between two vertices, using the Dijkstra
  algorithm, employing a min-heap

  By default, ArangoDB does not know the distance between any two vertices and
  will use a default distance of 1. A custom distance function can be registered
  as an AQL user function to make the distance calculation use any document 
  attributes or custom logic:

      RETURN SHORTEST_PATH(cities, motorways, "cities/CGN", "cities/MUC", "outbound", {
        paths: true,
        distance: "myfunctions::citydistance"

      // using the following custom distance function
      var aqlfunctions = require("org/arangodb/aql/functions");
      aqlfunctions.register("myfunctions::distance", function (config, vertex1, vertex2, edge) { 
        return Math.sqrt(Math.pow(vertex1.x - vertex2.x) + Math.pow(vertex1.y - vertex2.y));
      }, false);

* fixed bug in Graph.pathTo function

* fixed small memleak in AQL optimiser
* fixed access to potentially uninitialised variable when collection had a cap constraint

v1.4.10 (2014-02-21)

* fixed graph constructor to allow graph with some parameter to be used

* added node.js "events" and "stream"

* updated npm packages

* added loading of .json file

* Fixed http return code in graph api with waitForSync parameter.

* Fixed documentation in graph, simple and index api.

* removed 2 tests due to change in ruby library.

* issue #756: set access-control-expose-headers on CORS response
  the following headers are now whitelisted by ArangoDB in CORS responses:
  - etag
  - content-encoding
  - content-length
  - location
  - x-arango-errors
  - x-arango-async-id
Posted in General | Leave a comment

ArangoDB 1.4.9

A bug-fix release is available

v1.4.9 (2014-02-07)

* return a document's current etag in response header for HTTP HEAD requests on
  documents that return an HTTP 412 (precondition failed) error. This allows
  retrieving the document's current revision easily.

* added AQL function `SKIPLIST` to directly access skiplist indexes from AQL
  This is a shortcut method to use a skiplist index for retrieving specific documents in 
  indexed order. The function capability is rather limited, but it may be used
  for several cases to speed up queries. The documents are returned in index order if
  only one condition is used.

      /* return all documents with mycollection.created > 12345678 */
      FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ]] })
        RETURN doc

      /* return first document with mycollection.created > 12345678 */
      FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ]] }, 0, 1)
        RETURN doc

      /* return all documents with mycollection.created between 12345678 and 123456790 */
      FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ], [ '<=', 123456790 ]] })
        RETURN doc

      /* return all documents with mycollection.a equal 1 and .b equal 2 */
      FOR doc IN SKIPLIST(mycollection, { a: [[ '==', 1 ]], b: [[ '==', 2 ]] })
        RETURN doc

  The function requires a skiplist index with the exact same attributes to 
  be present on the specified colelction. All attributes present in the skiplist
  index must be specified in the conditions specified for the `SKIPLIST` function.
  Attribute declaration order is important, too: attributes must be specified in the 
  same order in the condition as they have been declared in the skiplist index.

* added command-line option `--server.disable-authentication-unix-sockets`
  with this option, authentication can be disabled for all requests coming
  in via UNIX domain sockets, enabling clients located on the same host as
  the ArangoDB server to connect without authentication.
  Other connections (e.g. TCP/IP) are not affected by this option.
  The default value for this option is `false`.
  Note: this option is only supported on platforms that support Unix domain

* fail if invalid `strategy`, `order` or `itemOrder` attribute values
  are passed to the AQL TRAVERSAL function. Omitting these attributes 
  is not considered an error, but specifying an invalid value for any
  of these attributes will make an AQL query fail.

* call global arangod instance destructor on shutdown

* issue #755: TRAVERSAL does not use strategy, order and itemOrder options

  these options were not honored when configuring a traversal via the AQL
  TRAVERSAL function. Now, these options are used if specified.

* allow vertex and edge filtering with user-defined functions in TRAVERSAL,

      // using user-defined AQL functions for edge and vertex filtering
      RETURN TRAVERSAL(friends, friendrelations, "friends/john", "outbound", {
        followEdges: "myfunctions::checkedge",
        filterVertices: "myfunctions::checkvertex"

      // using the following custom filter functions
      var aqlfunctions = require("org/arangodb/aql/functions");
      aqlfunctions.register("myfunctions::checkedge", function (config, vertex, edge, path) { 
        return (edge.type !== 'dislikes'); // don't follow these edges
      }, false);

      aqlfunctions.register("myfunctions::checkvertex", function (config, vertex, path) { 
        if (vertex.isDeleted || ! vertex.isActive) {
          return [ "prune", "exclude" ]; // exclude these and don't follow them
        return [ ]; // include everything else
      }, false);

* issue #748: add vertex filtering to AQL's TRAVERSAL[_TREE]() function
Posted in Releases | Leave a comment