ArangoDB v1.4.0-alpha1 Release Notes

Release Date: 2013-08-02 // about 12 years ago
    • โž• added replication. check online manual for details.

    • โž• added server startup options --server.disable-replication-logger and --server.disable-replication-applier

    • โœ‚ removed action deployment tool, this now handled with Foxx and its manager or by kaerus node utility

    • ๐Ÿ›  fixed a server crash when using byExample / firstExample inside a transaction and the collection contained a usable hash/skiplist index for the example

    • defineHttp now only expects a single context

    • โž• added collection detail dialog (web interface)

    Shows collection properties, figures (datafiles, journals, attributes, etc.) and indexes.

    • โž• added documents filter (web interface)

    Allows searching for documents based on attribute values. One or many filter conditions can be defined, using comparison operators such as '==', '<=', etc.

    • ๐Ÿ‘Œ improved AQL editor (web interface)

    Editor supports keyboard shortcuts (Submit, Undo, Redo, Select). Editor allows saving and reusing of user-defined queries. Added example queries to AQL editor. Added comment button.

    • โž• added document import (web interface)

    Allows upload of JSON-data from files. Files must have an extension of .json.

    • โž• added dashboard (web interface)

    Shows the status of replication and multiple system charts, e.g. Virtual Memory Size, Request Time, HTTP Connections etc.

    • โž• added API method /_api/graph to query all graphs with all properties.

    • โž• added example queries in web interface AQL editor

    • โž• added arango.reconnect() method for arangosh to dynamically switch server or user name

    • โž• added AQL range operator ..

    The .. operator can be used to easily iterate over a sequence of numeric values. It will produce a list of values in the defined range, with both bounding values included.

    Example:

      2010..2013
    

    will produce the following result:

      [ 2010, 2011, 2012, 2013 ]
    
    • โž• added AQL RANGE function

    • โž• added collection.first(count) and collection.last(count) document access functions

    These functions allow accessing the first or last n documents in a collection. The order is determined by document insertion/update time.

    • โž• added AQL INTERSECTION function

    • INCOMPATIBLE CHANGE: changed AQL user function namespace resolution operator from : to ::

    AQL user-defined functions were introduced in ArangoDB 1.3, and the namespace resolution operator for them was the single colon (:). A function call looked like this:

      RETURN mygroup:myfunc()
    

    The single colon caused an ambiguity in the AQL grammar, making it indistinguishable from named attributes or the ternary operator in some cases, e.g.

      { mygroup:myfunc ? mygroup:myfunc }
    

    The change of the namespace resolution operator from : to :: fixes this ambiguity.

    Existing user functions in the database will be automatically fixed when starting ArangoDB 1.4 with the --upgrade option. However, queries using user-defined functions need to be adjusted on the client side to use the new operator.

    • ๐Ÿ‘ allow multiple AQL LET declarations separated by comma, e.g. LET a = 1, b = 2, c = 3

    • more useful AQL error messages

    The error position (line/column) is more clearly indicated for parse errors. Additionally, if a query references a collection that cannot be found, the error message will give a hint on the collection name

    • ๐Ÿ”„ changed return value for AQL DOCUMENT function in case document is not found

    Previously, when the AQL DOCUMENT function was called with the id of a document and the document could not be found, it returned undefined. This value is not part of the JSON type system and this has caused some problems. Starting with ArangoDB 1.4, the DOCUMENT function will return null if the document looked for cannot be found.

    In case the function is called with a list of documents, it will continue to return all found documents, and will not return null for non-found documents. This has not changed.

    • โž• added single line comments for AQL

    Single line comments can be started with a double forward slash: //. They end at the end of the line, or the end of the query string, whichever is first.

    • ๐Ÿ›  fixed documentation issues #567, #568, #571.

    • โž• added collection.checksum() method to calculate CRC checksums for collections

    This can be used to

    • check if data in a collection has changed
    • compare the contents of two collections on different ArangoDB instances

      • issue #565: add description line to aal.listAvailable()
      • ๐Ÿ›  fixed several out-of-memory situations when double freeing or invalid memory accesses could happen
      • less msyncing during the creation of collections

    This is achieved by not syncing the initial (standard) markers in shapes collections. After all standard markers are written, the shapes collection will get synced.

    • ๐ŸŒฒ renamed command-line option --log.filter to --log.source-filter to avoid misunderstandings

    • ๐ŸŒฒ introduced new command-line option --log.content-filter to optionally restrict logging to just specific log messages (containing the filter string, case-sensitive).

    For example, to filter on just log entries which contain ArangoDB, use:

      --log.content-filter "ArangoDB"
    
    • โž• added optional command-line option --log.requests-file to log incoming HTTP requests to a file.

    When used, all HTTP requests will be logged to the specified file, containing the client IP address, HTTP method, requests URL, HTTP response code, and size of the response body.

    • โž• added a signal handler for SIGUSR1 signal:

    when ArangoDB receives this signal, it will respond all further incoming requests with an HTTP 503 (Service Unavailable) error. This will be the case until another SIGUSR1 signal is caught. This will make ArangoDB start serving requests regularly again. Note: this is not implemented on Windows.

    • limited maximum request URI length to 16384 bytes:

    Incoming requests with longer request URIs will be responded to with an HTTP 414 (Request-URI Too Long) error.

    • require version 1.0 or 1.1 in HTTP version signature of requests sent by clients:

    Clients sending requests with a non-HTTP 1.0 or non-HTTP 1.1 version number will be served with an HTTP 505 (HTTP Version Not Supported) error.

    • โšก๏ธ updated manual on indexes:

    using system attributes such as _id, _key, _from, _to, _rev in indexes is disallowed and will be rejected by the server. This was the case since ArangoDB 1.3, but was not properly documented.

    • 0๏ธโƒฃ issue #563: can aal become a default object?

    aal is now a prefab object in arangosh

    • prevent certain system collections from being renamed, dropped, or even unloaded.

    Which restrictions there are for which system collections may vary from release to release, but users should in general not try to modify system collections directly anyway.

    Note: there are no such restrictions for user-created collections.

    • ๐Ÿ“š issue #559: added Foxx documentation to user manual

    • โž• added server startup option --server.authenticate-system-only. This option can be used to restrict the need for HTTP authentication to internal functionality and APIs, such as /_api/* and /_admin/*. Setting this option to true will thus force authentication for the ArangoDB APIs and the web interface, but allow unauthenticated requests for other URLs (including user defined actions and Foxx applications). The default value of this option is false, meaning that if authentication is turned on, authentication is still required for all incoming requests. Only by setting the option to true this restriction is lifted and authentication becomes required for URLs starting with /_ only.

    Please note that authentication still needs to be enabled regularly by setting the --server.disable-authentication parameter to false. Otherwise no authentication will be required for any URLs as before.

    • protect collections against unloading when there are still document barriers around.

    • extended cap constraints to optionally limit the active data size in a collection to a specific number of bytes.

    The arguments for creating a cap constraint are now: collection.ensureCapConstraint(<count>, <byteSize>);

    It is supported to specify just a count as in ArangoDB 1.3 and before, to specify just a fileSize, or both. The first met constraint will trigger the automated document removal.

    • โž• added db._exists(doc) and collection.exists(doc) for easy document existence checks

    • โž• added API /_api/current-database to retrieve information about the database the client is currently connected to (note: the API /_api/current-database has been removed in the meantime. The functionality is accessible via /_api/database/current now).

    • ensure a proper order of tick values in datafiles/journals/compactors. any new files written will have the _tick values of their markers in order. for older files, there are edge cases at the beginning and end of the datafiles when _tick values are not properly in order.

    • prevent caching of static pages in PathHandler. whenever a static page is requested that is served by the general PathHandler, the server will respond to HTTP GET requests with a "Cache-Control: max-age=86400" header.

    • โž• added "doCompact" attribute when creating collections and to collection.properties(). The attribute controls whether collection datafiles are compacted.

    • ๐Ÿ”„ changed the HTTP return code from 400 to 404 for some cases when there is a referral to a non-existing collection or document.

    • introduced error code 1909 too many iterations that is thrown when graph traversals hit the maxIterations threshold.

    • optionally limit traversals to a certain number of iterations the limitation can be achieved via the traversal API by setting the maxIterations attribute, and also via the AQL TRAVERSAL and TRAVERSAL_TREE functions by setting the same attribute. If traversals are not limited by the end user, a server-defined limit for maxIterations may be used to prevent server-side traversals from running endlessly.

    • โž• added graph traversal API at /_api/traversal

    • โž• added "API" link in web interface, pointing to REST API generated with Swagger

    • ๐Ÿšš moved "About" link in web interface into "links" menu

    • ๐Ÿ‘ allow incremental access to the documents in a collection from out of AQL this allows reading documents from a collection chunks when a full collection scan is required. memory usage might be must lower in this case and queries might finish earlier if there is an additional LIMIT statement

    • ๐Ÿ”„ changed AQL COLLECT to use a stable sort, so any previous SORT order is preserved

    • ๐ŸŒ issue #547: Javascript error in the web interface

    • ๐Ÿ‘ issue #550: Make AQL graph functions support key in addition to id

    • issue #526: Unable to escape when an errorneous command is entered into the js shell

    • issue #523: Graph and vertex methods for the javascript api

    • issue #517: Foxx: Route parameters with capital letters fail

    • issue #512: Binded Parameters for LIMIT