From c1995cbb8a444c04471977524c0b8047ad9582dc Mon Sep 17 00:00:00 2001 From: Max Neunhoeffer Date: Wed, 2 Mar 2016 15:02:02 +0100 Subject: [PATCH 1/2] Add debian folder to Installation. --- Installation/debian/arangodb-client.install | 7 + Installation/debian/arangodb.dirs | 3 + Installation/debian/arangodb.init | 119 + Installation/debian/arangodb.install | 6 + Installation/debian/arangodb.postinst | 29 + Installation/debian/arangodb.postrm | 12 + Installation/debian/arangodb.preinst | 11 + Installation/debian/arangodb.prerm | 4 + Installation/debian/changelog | 5228 +++++++++++++++++++ Installation/debian/compat | 1 + Installation/debian/control | 47 + Installation/debian/copyright | 14 + Installation/debian/rules | 141 + 13 files changed, 5622 insertions(+) create mode 100644 Installation/debian/arangodb-client.install create mode 100644 Installation/debian/arangodb.dirs create mode 100755 Installation/debian/arangodb.init create mode 100644 Installation/debian/arangodb.install create mode 100755 Installation/debian/arangodb.postinst create mode 100755 Installation/debian/arangodb.postrm create mode 100755 Installation/debian/arangodb.preinst create mode 100755 Installation/debian/arangodb.prerm create mode 100644 Installation/debian/changelog create mode 100644 Installation/debian/compat create mode 100644 Installation/debian/control create mode 100644 Installation/debian/copyright create mode 100755 Installation/debian/rules diff --git a/Installation/debian/arangodb-client.install b/Installation/debian/arangodb-client.install new file mode 100644 index 0000000000..e1600e0ecb --- /dev/null +++ b/Installation/debian/arangodb-client.install @@ -0,0 +1,7 @@ +etc/arangodb/arangosh.conf +etc/arangodb/foxx-manager.conf +usr/bin/arangosh +usr/bin/foxx-manager +usr/share/arangodb/js/common +usr/share/arangodb/js/client +usr/share/arangodb/js/node diff --git a/Installation/debian/arangodb.dirs b/Installation/debian/arangodb.dirs new file mode 100644 index 0000000000..4f4faef1da --- /dev/null +++ b/Installation/debian/arangodb.dirs @@ -0,0 +1,3 @@ +/var/lib/arangodb +/var/lib/arangodb-apps +/var/log/arangodb diff --git a/Installation/debian/arangodb.init b/Installation/debian/arangodb.init new file mode 100755 index 0000000000..1f87ffe5fc --- /dev/null +++ b/Installation/debian/arangodb.init @@ -0,0 +1,119 @@ +#!/bin/sh + +### BEGIN INIT INFO +# Provides: arangodb +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: arangodb +# Description: arango database server +### END INIT INFO + +. /lib/lsb/init-functions + +PATH=/bin:/usr/bin:/sbin:/usr/sbin +DAEMON=/usr/sbin/arangod +DESC="arango database server" +NAME="arangod" +PIDDIR=/var/run/arangodb +PIDFILE=/var/run/arangodb/arangod.pid +CONF=/etc/arangodb/arangod.conf + +test -x $DAEMON || exit 0 + +if [ `id -u` -ne 0 ]; then + echo "You need root privileges to run this script" + exit 1 +fi + +start () { + [ -d $PIDDIR ] || mkdir $PIDDIR || exit 1 + + ( cd /var/log/arangodb && chown -R arangodb:arangodb . ) || exit 1 + ( cd /var/lib/arangodb && chown -R arangodb:arangodb . ) || exit 1 + ( cd /var/lib/arangodb-apps && chown -R arangodb:arangodb . ) || exit 1 + ( cd $PIDDIR && chown arangodb:arangodb . ) || exit 1 + + if [ "$1" = "--upgrade" ]; then + $DAEMON -c $CONF --uid arangodb --gid arangodb --no-server $@ + RETVAL=$? + log_end_msg $RETVAL + else + $DAEMON -c $CONF --uid arangodb --gid arangodb --no-server --log.tty "" --check-version + RETVAL=$? + + if [ "$RETVAL" -eq 0 ]; then + $DAEMON -c $CONF --uid arangodb --gid arangodb --pid-file "$PIDFILE" --temp-path "/var/tmp/arangod" --log.tty "" --supervisor $@ + RETVAL=$? + log_end_msg $RETVAL + else + log_failure_msg "database version check failed, maybe need to run 'upgrade'?" + fi + fi + + return $RETVAL +} + +case "$1" in + start) + log_daemon_msg "Starting $DESC" "$NAME" + + start + exit $? + ;; + + stop) + log_daemon_msg "Stopping $DESC" "$NAME" + + start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE --exec $DAEMON + RETVAL=$? + log_end_msg $RETVAL + + log_daemon_msg "Waiting for shutdown" "" + + c=0 + + while test -f $PIDFILE -a $c -lt 30 && ps --pid `cat $PIDFILE` > /dev/null; do + log_progress_msg "." + sleep 2 + c=`expr $c + 1` + done + + log_progress_msg "done" + log_end_msg 0 + + rm -f $PIDFILE + exit $RETVAL + ;; + + restart) + $0 stop + sleep 3 + $0 start + exit $? + ;; + + force-reload) + $0 restart + exit $? + ;; + + status) + status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $? + ;; + + upgrade) + log_daemon_msg "Upgrading $DESC" "$NAME" + + start --upgrade + exit $? + ;; + + *) + log_success_msg "Usage: /etc/init.d/arangodb {start|stop|restart|force-reload|status|upgrade}" + exit 1 + ;; +esac + +exit 0 diff --git a/Installation/debian/arangodb.install b/Installation/debian/arangodb.install new file mode 100644 index 0000000000..314309d8af --- /dev/null +++ b/Installation/debian/arangodb.install @@ -0,0 +1,6 @@ +etc/arangodb +usr/bin +usr/sbin +usr/lib +usr/share/arangodb +usr/share/man diff --git a/Installation/debian/arangodb.postinst b/Installation/debian/arangodb.postinst new file mode 100755 index 0000000000..b8f6dcf223 --- /dev/null +++ b/Installation/debian/arangodb.postinst @@ -0,0 +1,29 @@ +#!/bin/sh +set -e + +#DEBHELPER# + +echo " +ArangoDB 2 (http://www.arangodb.org) + A multi-purpose open-source database with a flexible data model for documents, + graphs, and key-values. + +First Steps with ArangoDB: + http:/www.arangodb.org/quickstart + +Upgrading ArangoDB: + http://www.arangodb.org/manuals/current/Upgrading.html + +Upgrading ArangoDB database files: + > /etc/init.d/arangodb upgrade + +Configuration file: + /etc/arangodb/arangod.conf + +Start ArangoDB shell client: + > /usr/bin/arangosh + +Start ArangoDB service: + > /etc/init.d/arangodb start +" + diff --git a/Installation/debian/arangodb.postrm b/Installation/debian/arangodb.postrm new file mode 100755 index 0000000000..b37ebab647 --- /dev/null +++ b/Installation/debian/arangodb.postrm @@ -0,0 +1,12 @@ +#!/bin/sh +set -e + +#DEBHELPER# + +if [ purge = "$1" ]; then + rm -rf /usr/share/arangodb/js/apps + rm -rf /var/log/arangodb + rm -rf /var/lib/arangodb + rm -rf /var/lib/arangodb-apps + rm -rf /var/run/arangodb +fi diff --git a/Installation/debian/arangodb.preinst b/Installation/debian/arangodb.preinst new file mode 100755 index 0000000000..b782f26bab --- /dev/null +++ b/Installation/debian/arangodb.preinst @@ -0,0 +1,11 @@ +#!/bin/sh +set -e + +getent group arangodb >/dev/null || groupadd -r arangodb +getent passwd arangodb >/dev/null || useradd -r -g arangodb -d /usr/share/arangodb -s /bin/false -c "ArangoDB Application User" arangodb + +install -o arangodb -g arangodb -m 755 -d /var/lib/arangodb +install -o arangodb -g arangodb -m 755 -d /var/lib/arangodb-apps +install -o arangodb -g arangodb -m 755 -d /var/log/arangodb + +#DEBHELPER# diff --git a/Installation/debian/arangodb.prerm b/Installation/debian/arangodb.prerm new file mode 100755 index 0000000000..6060c4fb6b --- /dev/null +++ b/Installation/debian/arangodb.prerm @@ -0,0 +1,4 @@ +#!/bin/sh +set -e + +#DEBHELPER# diff --git a/Installation/debian/changelog b/Installation/debian/changelog new file mode 100644 index 0000000000..9ad86f7f61 --- /dev/null +++ b/Installation/debian/changelog @@ -0,0 +1,5228 @@ +arangodb (2.5.1-1.1) stable; urgency=low + + * Changed to Version 2.5.1 + + * added option `--database.ignore-logfile-errors` + + This option controls how collection datafiles with a CRC mismatch are treated. + + If set to `false`, CRC mismatch errors in collection datafiles will lead + to a collection not being loaded at all. If a collection needs to be loaded + during WAL recovery, the WAL recovery will also abort (if not forced with + `--wal.ignore-recovery-errors true`). Setting this flag to `false` protects + users from unintentionally using a collection with corrupted datafiles, from + which only a subset of the original data can be recovered. + + If set to `true`, CRC mismatch errors in collection datafiles will lead to + the datafile being partially loaded. All data up to until the mismatch will + be loaded. This will enable users to continue with a collection datafiles + that are corrupted, but will result in only a partial load of the data. + The WAL recovery will still abort when encountering a collection with a + corrupted datafile, at least if `--wal.ignore-recovery-errors` is not set to + `true`. + + The default value is *true*, so for collections with corrupted datafiles + there might be partial data loads once the WAL recovery has finished. If + the WAL recovery will need to load a collection with a corrupted datafile, + it will still stop when using the default values. + + * INCOMPATIBLE CHANGE: + + make the arangod server refuse to start if during startup it finds a non-readable + `parameter.json` file for a database or a collection. + + Stopping the startup process in this case requires manual intervention (fixing + the unreadable files), but prevents follow-up errors due to ignored databases or + collections from happening. + + * datafiles and `parameter.json` files written by arangod are now created with read and write + privileges for the arangod process user, and with read and write prileges for the arangod + process group. + + Previously, these files were created with user read and write permissions only. + + * INCOMPATIBLE CHANGE: + + abort WAL recovery if one of the collection's datafiles cannot be opened + + * INCOMPATIBLE CHANGE: + + never try to raise the privileges after dropping them, this can lead to a race condition while + running the recovery + + If you require to run ArangoDB on a port lower than 1024, you must run ArangoDB as root. + + * fixed inefficiencies in `remove` methods of general-graph module + + * added option `--database.slow-query-threshold` for controlling the default AQL slow query + threshold value on server start + + * add system error strings for windows on many places + + * rework service startup so we anounce 'RUNNING' only when we're finished starting. + + * use the windows eventlog for FATAL and ERROR - log messages + + * fix service handling in NSIS windows installer, specify human readable name + + * add the ICU_DATA environment variable to the fatal error messages + + * fixed issue #1265: arangod crashed with SIGSEGV + + * fixed issue #1241: Wildcards in examples + + + + -- ArangoDB Maintainer Fri, 20 Mar 2015 00:36:29 +0100 + +arangodb (2.5.0-1.1) stable; urgency=low + + * Changed to Version 2.5.0 + + * installer fixes for Windows + + * fix for downloading Foxx + + + + -- ArangoDB Maintainer Tue, 10 Mar 2015 16:59:45 +0100 + +arangodb (2.5.0b4-1.1) stable; urgency=low + + * Changed to Version 2.5.0-beta4 + + * fixed issue #1247: debian init script problems + + + + -- ArangoDB Maintainer Thu, 05 Mar 2015 16:30:45 +0100 + +arangodb (2.5.0b3-1.1) stable; urgency=low + + * Changed to Version 2.5.0-beta3 + + * fix windows install path calculation in arango + + * fix windows logging of long strings + + * fix possible undefinedness of const strings in windows + + + + -- ArangoDB Maintainer Fri, 27 Feb 2015 18:36:49 +0100 + +arangodb (2.5.0b2-1.1) stable; urgency=low + + * Changed to Version 2.5.0-beta2 + + * fixed issue #1230: API: document/col-name/_key and cursor return different floats + + * front-end: dashboard tries not to (re)load statistics if user has no access + + * V8: Upgrade to version 3.31.74.1 + + * etcd: Upgrade to version 2.0 - This requires go 1.3 to compile at least. + + * refuse to startup if ICU wasn't initialized, this will i.e. prevent errors from being printed, + and libraries from being loaded. + + * front-end: unwanted removal of index table header after creating new index + + * fixed issue #1248: chrome: applications filtering not working + + * fixed issue #1198: queries remain in aql editor (front-end) if you navigate through different tabs + + * Simplify usage of Foxx + + Thanks to our user feedback we learned that Foxx is a powerful, yet rather complicated concept. + With this release we tried to make it less complicated while keeping all its strength. + That includes a rewrite of the documentation as well as some code changes as listed below: + + * Moved Foxx applications to a different folder. + + The naming convention now is: /_db///APP + Before it was: /databases//: + This caused some trouble as apps where cached based on name and version and updates did not apply. + Hence the path on filesystem and the app's access URL had no relation to one another. + Now the path on filesystem is identical to the URL (except for slashes and the appended APP) + + * Rewrite of Foxx routing + + The routing of Foxx has been exposed to major internal changes we adjusted because of user feedback. + This allows us to set the development mode per mountpoint without having to change pathes and hold + apps at seperate locations. + + * Foxx Development mode + + The development mode used until 2.4 is gone. It has been replaced by a much more mature version. + This includes the deprecation of the javascript.dev-app-path parameter, which is useless since 2.5. + Instead of having two separate app directories for production and development, apps now reside in + one place, which is used for production as well as for development. + Apps can still be put into development mode, changing their behavior compared to production mode. + Development mode apps are still reread from disk at every request, and still they ship more debug + output. + + This change has also made the startup options `--javascript.frontend-development-mode` and + `--javascript.dev-app-path` obsolete. The former option will not have any effect when set, and the + latter option is only read and used during the upgrade to 2.5 and does not have any effects later. + + * Foxx install process + + Installing Foxx apps has been a two step process: import them into ArangoDB and mount them at a + specific mountpoint. These operations have been joined together. You can install an app at one + mountpoint, that's it. No fetch, mount, unmount, purge cycle anymore. The commands have been + simplified to just: + + * install: get your Foxx app up and running + * uninstall: shut it down and erase it from disk + + * Foxx error output + + Until 2.4 the errors produced by Foxx were not optimal. Often, the error message was just + `unable to parse manifest` and contained only an internal stack trace. + In 2.5 we made major improvements there, including a much more finegrained error output that + helps you debug your Foxx apps. The error message printed is now much closer to its source and + should help you track it down. + + Also we added the default handlers for unhandled errors in Foxx apps: + + * You will get a nice internal error page whenever your Foxx app is called but was not installed + due to any error + * You will get a proper error message when having an uncaught error appears in any app route + + In production mode the messages above will NOT contain any information about your Foxx internals + and are safe to be exposed to third party users. + In development mode the messages above will contain the stacktrace (if available), making it easier for + your in-house devs to track down errors in the application. + + * added `console` object to Foxx apps. All Foxx apps now have a console object implementing + the familiar Console API in their global scope, which can be used to log diagnostic + messages to the database. + + * added `org/arangodb/request` module, which provides a simple API for making HTTP requests + to external services. + + * added optimizer rule `propagate-constant-attributes` + + This rule will look inside `FILTER` conditions for constant value equality comparisons, + and insert the constant values in other places in `FILTER`s. For example, the rule will + insert `42` instead of `i.value` in the second `FILTER` of the following query: + + FOR i IN c1 FOR j IN c2 FILTER i.value == 42 FILTER j.value == i.value RETURN 1 + + * added `filtered` value to AQL query execution statistics + + This value indicates how many documents were filtered by `FilterNode`s in the AQL query. + Note that `IndexRangeNode`s can also filter documents by selecting only the required ranges + from the index. The `filtered` value will not include the work done by `IndexRangeNode`s, + but only the work performed by `FilterNode`s. + + * added support for sparse hash and skiplist indexes + + Hash and skiplist indexes can optionally be made sparse. Sparse indexes exclude documents + in which at least one of the index attributes is either not set or has a value of `null`. + + As such documents are excluded from sparse indexes, they may contain fewer documents than + their non-sparse counterparts. This enables faster indexing and can lead to reduced memory + usage in case the indexed attribute does occur only in some, but not all documents of the + collection. Sparse indexes will also reduce the number of collisions in non-unique hash + indexes in case non-existing or optional attributes are indexed. + + In order to create a sparse index, an object with the attribute `sparse` can be added to + the index creation commands: + + db.collection.ensureHashIndex(attributeName, { sparse: true }); + db.collection.ensureHashIndex(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName1, attributeName2, { sparse: true }); + + db.collection.ensureSkiplist(attributeName, { sparse: true }); + db.collection.ensureSkiplist(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName1, attributeName2, { sparse: true }); + + Note that in place of the above specialized index creation commands, it is recommended to use + the more general index creation command `ensureIndex`: + + ```js + db.collection.ensureIndex({ type: "hash", sparse: true, unique: true, fields: [ attributeName ] }); + db.collection.ensureIndex({ type: "skiplist", sparse: false, unique: false, fields: [ "a", "b" ] }); + ``` + + When not explicitly set, the `sparse` attribute defaults to `false` for new indexes. + + This causes a change in behavior when creating a unique hash index without specifying the + sparse flag: in 2.4, unique hash indexes were implicitly sparse, always excluding `null` values. + There was no option to control this behavior, and sparsity was neither supported for non-unique + hash indexes nor skiplists in 2.4. This implicit sparsity of unique hash indexes was considered + an inconsistency, and therefore the behavior was cleaned up in 2.5. As of 2.5, indexes will + only be created sparse if sparsity is explicitly requested. Existing unique hash indexes from 2.4 + or before will automatically be migrated so they are still sparse after the upgrade to 2.5. + + Geo indexes are implicitly sparse, meaning documents without the indexed location attribute or + containing invalid location coordinate values will be excluded from the index automatically. This + is also a change when compared to pre-2.5 behavior, when documents with missing or invalid + coordinate values may have caused errors on insertion when the geo index' `unique` flag was set + and its `ignoreNull` flag was not. + + This was confusing and has been rectified in 2.5. The method `ensureGeoConstaint()` now does the + same as `ensureGeoIndex()`. Furthermore, the attributes `constraint`, `unique`, `ignoreNull` and + `sparse` flags are now completely ignored when creating geo indexes. + + The same is true for fulltext indexes. There is no need to specify non-uniqueness or sparsity for + geo or fulltext indexes. They will always be non-unique and sparse. + + As sparse indexes may exclude some documents, they cannot be used for every type of query. + Sparse hash indexes cannot be used to find documents for which at least one of the indexed + attributes has a value of `null`. For example, the following AQL query cannot use a sparse + index, even if one was created on attribute `attr`: + + FOR doc In collection + FILTER doc.attr == null + RETURN doc + + If the lookup value is non-constant, a sparse index may or may not be used, depending on + the other types of conditions in the query. If the optimizer can safely determine that + the lookup value cannot be `null`, a sparse index may be used. When uncertain, the optimizer + will not make use of a sparse index in a query in order to produce correct results. + + For example, the following queries cannot use a sparse index on `attr` because the optimizer + will not know beforehand whether the comparsion values for `doc.attr` will include `null`: + + FOR doc In collection + FILTER doc.attr == SOME_FUNCTION(...) + RETURN doc + + FOR other IN otherCollection + FOR doc In collection + FILTER doc.attr == other.attr + RETURN doc + + Sparse skiplist indexes can be used for sorting if the optimizer can safely detect that the + index range does not include `null` for any of the index attributes. + + * inspection of AQL data-modification queries will now detect if the data-modification part + of the query can run in lockstep with the data retrieval part of the query, or if the data + retrieval part must be executed before the data modification can start. + + Executing the two in lockstep allows using much smaller buffers for intermediate results + and starts the actual data-modification operations much earlier than if the two phases + were executed seperately. + + * Allow dynamic attribute names in AQL object literals + + This allows using arbitrary expressions to construct attribute names in object + literals specified in AQL queries. To disambiguate expressions and other unquoted + attribute names, dynamic attribute names need to be enclosed in brackets (`[` and `]`). + Example: + + FOR i IN 1..100 + RETURN { [ CONCAT('value-of-', i) ] : i } + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case a non-sorted + index (e.g. a hash index) is used for only equality lookups and all sort attributes + are covered by the index. + + Example that does not require an extra sort (needs hash index on `value`): + + FOR doc IN collection FILTER doc.value == 1 SORT doc.value RETURN doc + + Another example that does not require an extra sort (with hash index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 && doc.value2 == 2 SORT doc.value1, doc.value2 RETURN doc + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case the sort critieria + excludes the left-most index attributes, but the left-most index attributes are used + by the index for equality-only lookups. + + Example that can use the index for sorting (needs skiplist index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 SORT doc.value2 RETURN doc + + * added selectivity estimates for primary index, edge index, and hash index + + The selectivity estimates are returned by the `GET /_api/index` REST API method + in a sub-attribute `selectivityEstimate` for each index that supports it. This + attribute will be omitted for indexes that do not provide selectivity estimates. + If provided, the selectivity estimate will be a numeric value between 0 and 1. + + Selectivity estimates will also be reported in the result of `collection.getIndexes()` + for all indexes that support this. If no selectivity estimate can be determined for + an index, the attribute `selectivityEstimate` will be omitted here, too. + + The web interface also shows selectivity estimates for each index that supports this. + + Currently the following index types can provide selectivity estimates: + - primary index + - edge index + - hash index (unique and non-unique) + + No selectivity estimates will be provided when running in cluster mode. + + * fixed issue #1226: arangod log issues + + * added additional logger if arangod is started in foreground mode on a tty + + * added AQL optimizer rule "move-calculations-down" + + * use exclusive native SRWLocks on Windows instead of native mutexes + + * added AQL functions MD5, SHA1, and RANDOM_TOKEN. + + * reduced number of string allocations when parsing certain AQL queries + + parsing numbers (integers or doubles) does not require a string allocation + per number anymore + + * RequestContext#bodyParam now accepts arbitrary joi schemas and rejects invalid (but well-formed) request bodies. + + * enforce that AQL user functions are wrapped inside JavaScript function () declarations + + AQL user functions were always expected to be wrapped inside a JavaScript function, but previously + this was not enforced when registering a user function. Enforcing the AQL user functions to be contained + inside functions prevents functions from doing some unexpected things that may have led to undefined + behavior. + + * Windows service uninstalling: only remove service if it points to the currently running binary, + or --force was specified. + + * Windows (debug only): print stacktraces on crash and run minidump + + * Windows (cygwin): if you run arangosh in a cygwin shell or via ssh we will detect this and use + the appropriate output functions. + + * Windows: improve process management + + * fix ipv6 reverse ip lookups - so far we only did ipv4 addresses. + + * improve join documentation, add outer join example + + * run jslint for unit tests too, to prevent "memory leaks" by global js objects with native code. + + * fix error logging for exceptions - we wouldn't log the exception message itself so far. + + * improve error reporting in the http client (windows & *nix) + + * improve error reports in cluster + + * Standard Errors can now contain custom messages. + + + + -- ArangoDB Maintainer Tue, 24 Feb 2015 23:30:19 +0100 + +arangodb (2.5.0b1-1.1) stable; urgency=low + + * Changed to Version 2.5.0-beta1 + + * front-end: dashboard tries not to (re)load statistics if user has no access + + * V8: Upgrade to version 3.31.74.1 + + * etcd: Upgrade to version 2.0 - This requires go 1.3 to compile at least. + + * refuse to startup if ICU wasn't initialized, this will i.e. prevent errors from being printed, + and libraries from being loaded. + + * front-end: unwanted removal of index table header after creating new index + + * fixed issue #1248: chrome: applications filtering not working + + * fixed issue #1198: queries remain in aql editor (front-end) if you navigate through different tabs + + * Simplify usage of Foxx + + Thanks to our user feedback we learned that Foxx is a powerful, yet rather complicated concept. + With this release we tried to make it less complicated while keeping all its strength. + That includes a rewrite of the documentation as well as some code changes as listed below: + + * Moved Foxx applications to a different folder. + + The naming convention now is: /_db///APP + Before it was: /databases//: + This caused some trouble as apps where cached based on name and version and updates did not apply. + Hence the path on filesystem and the app's access URL had no relation to one another. + Now the path on filesystem is identical to the URL (except for slashes and the appended APP) + + * Rewrite of Foxx routing + + The routing of Foxx has been exposed to major internal changes we adjusted because of user feedback. + This allows us to set the development mode per mountpoint without having to change pathes and hold + apps at seperate locations. + + * Foxx Development mode + + The development mode used until 2.4 is gone. It has been replaced by a much more mature version. + This includes the deprecation of the javascript.dev-app-path parameter, which is useless since 2.5. + Instead of having two separate app directories for production and development, apps now reside in + one place, which is used for production as well as for development. + Apps can still be put into development mode, changing their behavior compared to production mode. + Development mode apps are still reread from disk at every request, and still they ship more debug + output. + + This change has also made the startup options `--javascript.frontend-development-mode` and + `--javascript.dev-app-path` obsolete. The former option will not have any effect when set, and the + latter option is only read and used during the upgrade to 2.5 and does not have any effects later. + + * Foxx install process + + Installing Foxx apps has been a two step process: import them into ArangoDB and mount them at a + specific mountpoint. These operations have been joined together. You can install an app at one + mountpoint, that's it. No fetch, mount, unmount, purge cycle anymore. The commands have been + simplified to just: + + * install: get your Foxx app up and running + * uninstall: shut it down and erase it from disk + + * Foxx error output + + Until 2.4 the errors produced by Foxx were not optimal. Often, the error message was just + `unable to parse manifest` and contained only an internal stack trace. + In 2.5 we made major improvements there, including a much more finegrained error output that + helps you debug your Foxx apps. The error message printed is now much closer to its source and + should help you track it down. + + Also we added the default handlers for unhandled errors in Foxx apps: + + * You will get a nice internal error page whenever your Foxx app is called but was not installed + due to any error + * You will get a proper error message when having an uncaught error appears in any app route + + In production mode the messages above will NOT contain any information about your Foxx internals + and are safe to be exposed to third party users. + In development mode the messages above will contain the stacktrace (if available), making it easier for + your in-house devs to track down errors in the application. + + * added `console` object to Foxx apps. All Foxx apps now have a console object implementing + the familiar Console API in their global scope, which can be used to log diagnostic + messages to the database. + + * added `org/arangodb/request` module, which provides a simple API for making HTTP requests + to external services. + + * added optimizer rule `propagate-constant-attributes` + + This rule will look inside `FILTER` conditions for constant value equality comparisons, + and insert the constant values in other places in `FILTER`s. For example, the rule will + insert `42` instead of `i.value` in the second `FILTER` of the following query: + + FOR i IN c1 FOR j IN c2 FILTER i.value == 42 FILTER j.value == i.value RETURN 1 + + * added `filtered` value to AQL query execution statistics + + This value indicates how many documents were filtered by `FilterNode`s in the AQL query. + Note that `IndexRangeNode`s can also filter documents by selecting only the required ranges + from the index. The `filtered` value will not include the work done by `IndexRangeNode`s, + but only the work performed by `FilterNode`s. + + * added support for sparse hash and skiplist indexes + + Hash and skiplist indexes can optionally be made sparse. Sparse indexes exclude documents + in which at least one of the index attributes is either not set or has a value of `null`. + + As such documents are excluded from sparse indexes, they may contain fewer documents than + their non-sparse counterparts. This enables faster indexing and can lead to reduced memory + usage in case the indexed attribute does occur only in some, but not all documents of the + collection. Sparse indexes will also reduce the number of collisions in non-unique hash + indexes in case non-existing or optional attributes are indexed. + + In order to create a sparse index, an object with the attribute `sparse` can be added to + the index creation commands: + + db.collection.ensureHashIndex(attributeName, { sparse: true }); + db.collection.ensureHashIndex(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName1, attributeName2, { sparse: true }); + + db.collection.ensureSkiplist(attributeName, { sparse: true }); + db.collection.ensureSkiplist(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName1, attributeName2, { sparse: true }); + + Note that in place of the above specialized index creation commands, it is recommended to use + the more general index creation command `ensureIndex`: + + ```js + db.collection.ensureIndex({ type: "hash", sparse: true, unique: true, fields: [ attributeName ] }); + db.collection.ensureIndex({ type: "skiplist", sparse: false, unique: false, fields: [ "a", "b" ] }); + ``` + + When not explicitly set, the `sparse` attribute defaults to `false` for new indexes. + + This causes a change in behavior when creating a unique hash index without specifying the + sparse flag: in 2.4, unique hash indexes were implicitly sparse, always excluding `null` values. + There was no option to control this behavior, and sparsity was neither supported for non-unique + hash indexes nor skiplists in 2.4. This implicit sparsity of unique hash indexes was considered + an inconsistency, and therefore the behavior was cleaned up in 2.5. As of 2.5, indexes will + only be created sparse if sparsity is explicitly requested. Existing unique hash indexes from 2.4 + or before will automatically be migrated so they are still sparse after the upgrade to 2.5. + + Geo indexes are implicitly sparse, meaning documents without the indexed location attribute or + containing invalid location coordinate values will be excluded from the index automatically. This + is also a change when compared to pre-2.5 behavior, when documents with missing or invalid + coordinate values may have caused errors on insertion when the geo index' `unique` flag was set + and its `ignoreNull` flag was not. + + This was confusing and has been rectified in 2.5. The method `ensureGeoConstaint()` now does the + same as `ensureGeoIndex()`. Furthermore, the attributes `constraint`, `unique`, `ignoreNull` and + `sparse` flags are now completely ignored when creating geo indexes. + + The same is true for fulltext indexes. There is no need to specify non-uniqueness or sparsity for + geo or fulltext indexes. They will always be non-unique and sparse. + + As sparse indexes may exclude some documents, they cannot be used for every type of query. + Sparse hash indexes cannot be used to find documents for which at least one of the indexed + attributes has a value of `null`. For example, the following AQL query cannot use a sparse + index, even if one was created on attribute `attr`: + + FOR doc In collection + FILTER doc.attr == null + RETURN doc + + If the lookup value is non-constant, a sparse index may or may not be used, depending on + the other types of conditions in the query. If the optimizer can safely determine that + the lookup value cannot be `null`, a sparse index may be used. When uncertain, the optimizer + will not make use of a sparse index in a query in order to produce correct results. + + For example, the following queries cannot use a sparse index on `attr` because the optimizer + will not know beforehand whether the comparsion values for `doc.attr` will include `null`: + + FOR doc In collection + FILTER doc.attr == SOME_FUNCTION(...) + RETURN doc + + FOR other IN otherCollection + FOR doc In collection + FILTER doc.attr == other.attr + RETURN doc + + Sparse skiplist indexes can be used for sorting if the optimizer can safely detect that the + index range does not include `null` for any of the index attributes. + + * inspection of AQL data-modification queries will now detect if the data-modification part + of the query can run in lockstep with the data retrieval part of the query, or if the data + retrieval part must be executed before the data modification can start. + + Executing the two in lockstep allows using much smaller buffers for intermediate results + and starts the actual data-modification operations much earlier than if the two phases + were executed seperately. + + * Allow dynamic attribute names in AQL object literals + + This allows using arbitrary expressions to construct attribute names in object + literals specified in AQL queries. To disambiguate expressions and other unquoted + attribute names, dynamic attribute names need to be enclosed in brackets (`[` and `]`). + Example: + + FOR i IN 1..100 + RETURN { [ CONCAT('value-of-', i) ] : i } + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case a non-sorted + index (e.g. a hash index) is used for only equality lookups and all sort attributes + are covered by the index. + + Example that does not require an extra sort (needs hash index on `value`): + + FOR doc IN collection FILTER doc.value == 1 SORT doc.value RETURN doc + + Another example that does not require an extra sort (with hash index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 && doc.value2 == 2 SORT doc.value1, doc.value2 RETURN doc + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case the sort critieria + excludes the left-most index attributes, but the left-most index attributes are used + by the index for equality-only lookups. + + Example that can use the index for sorting (needs skiplist index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 SORT doc.value2 RETURN doc + + * added selectivity estimates for primary index, edge index, and hash index + + The selectivity estimates are returned by the `GET /_api/index` REST API method + in a sub-attribute `selectivityEstimate` for each index that supports it. This + attribute will be omitted for indexes that do not provide selectivity estimates. + If provided, the selectivity estimate will be a numeric value between 0 and 1. + + Selectivity estimates will also be reported in the result of `collection.getIndexes()` + for all indexes that support this. If no selectivity estimate can be determined for + an index, the attribute `selectivityEstimate` will be omitted here, too. + + The web interface also shows selectivity estimates for each index that supports this. + + Currently the following index types can provide selectivity estimates: + - primary index + - edge index + - hash index (unique and non-unique) + + No selectivity estimates will be provided when running in cluster mode. + + * fixed issue #1226: arangod log issues + + * added additional logger if arangod is started in foreground mode on a tty + + * added AQL optimizer rule "move-calculations-down" + + * use exclusive native SRWLocks on Windows instead of native mutexes + + * added AQL functions MD5, SHA1, and RANDOM_TOKEN. + + * reduced number of string allocations when parsing certain AQL queries + + parsing numbers (integers or doubles) does not require a string allocation + per number anymore + + * RequestContext#bodyParam now accepts arbitrary joi schemas and rejects invalid (but well-formed) request bodies. + + * enforce that AQL user functions are wrapped inside JavaScript function () declarations + + AQL user functions were always expected to be wrapped inside a JavaScript function, but previously + this was not enforced when registering a user function. Enforcing the AQL user functions to be contained + inside functions prevents functions from doing some unexpected things that may have led to undefined + behavior. + + * Windows service uninstalling: only remove service if it points to the currently running binary, + or --force was specified. + + * Windows (debug only): print stacktraces on crash and run minidump + + * Windows (cygwin): if you run arangosh in a cygwin shell or via ssh we will detect this and use + the appropriate output functions. + + * Windows: improve process management + + * fix ipv6 reverse ip lookups - so far we only did ipv4 addresses. + + * improve join documentation, add outer join example + + * run jslint for unit tests too, to prevent "memory leaks" by global js objects with native code. + + * fix error logging for exceptions - we wouldn't log the exception message itself so far. + + * improve error reporting in the http client (windows & *nix) + + * improve error reports in cluster + + * Standard Errors can now contain custom messages. + + + + -- ArangoDB Maintainer Mon, 23 Feb 2015 16:19:21 +0100 + +arangodb (2.5.0a8-1.1) stable; urgency=low + + * Changed to Version 2.5.0-alpha8 + + * front-end: dashboard tries not to (re)load statistics if user has no access + + * V8: Upgrade to version 3.31.74.1 + + * etcd: Upgrade to version 2.0 - This requires go 1.3 to compile at least. + + * refuse to startup if ICU wasn't initialized, this will i.e. prevent errors from being printed, + and libraries from being loaded. + + * front-end: unwanted removal of index table header after creating new index + + * fixed issue #1248: chrome: applications filtering not working + + * fixed issue #1198: queries remain in aql editor (front-end) if you navigate through different tabs + + * Simplify usage of Foxx + + Thanks to our user feedback we learned that Foxx is a powerful, yet rather complicated concept. + With this release we tried to make it less complicated while keeping all its strength. + That includes a rewrite of the documentation as well as some code changes as listed below: + + * Moved Foxx applications to a different folder. + + The naming convention now is: /_db///APP + Before it was: /databases//: + This caused some trouble as apps where cached based on name and version and updates did not apply. + Hence the path on filesystem and the app's access URL had no relation to one another. + Now the path on filesystem is identical to the URL (except for slashes and the appended APP) + + * Rewrite of Foxx routing + + The routing of Foxx has been exposed to major internal changes we adjusted because of user feedback. + This allows us to set the development mode per mountpoint without having to change pathes and hold + apps at seperate locations. + + * Foxx Development mode + + The development mode used until 2.4 is gone. It has been replaced by a much more mature version. + This includes the deprecation of the javascript.dev-app-path parameter, which is useless since 2.5. + Instead of having two separate app directories for production and development, apps now reside in + one place, which is used for production as well as for development. + Apps can still be put into development mode, changing their behavior compared to production mode. + Development mode apps are still reread from disk at every request, and still they ship more debug + output. + + This change has also made the startup options `--javascript.frontend-development-mode` and + `--javascript.dev-app-path` obsolete. The former option will not have any effect when set, and the + latter option is only read and used during the upgrade to 2.5 and does not have any effects later. + + * Foxx install process + + Installing Foxx apps has been a two step process: import them into ArangoDB and mount them at a + specific mountpoint. These operations have been joined together. You can install an app at one + mountpoint, that's it. No fetch, mount, unmount, purge cycle anymore. The commands have been + simplified to just: + + * install: get your Foxx app up and running + * uninstall: shut it down and erase it from disk + + * Foxx error output + + Until 2.4 the errors produced by Foxx were not optimal. Often, the error message was just + `unable to parse manifest` and contained only an internal stack trace. + In 2.5 we made major improvements there, including a much more finegrained error output that + helps you debug your Foxx apps. The error message printed is now much closer to its source and + should help you track it down. + + Also we added the default handlers for unhandled errors in Foxx apps: + + * You will get a nice internal error page whenever your Foxx app is called but was not installed + due to any error + * You will get a proper error message when having an uncaught error appears in any app route + + In production mode the messages above will NOT contain any information about your Foxx internals + and are safe to be exposed to third party users. + In development mode the messages above will contain the stacktrace (if available), making it easier for + your in-house devs to track down errors in the application. + + * added `console` object to Foxx apps. All Foxx apps now have a console object implementing + the familiar Console API in their global scope, which can be used to log diagnostic + messages to the database. + + * added `org/arangodb/request` module, which provides a simple API for making HTTP requests + to external services. + + * added optimizer rule `propagate-constant-attributes` + + This rule will look inside `FILTER` conditions for constant value equality comparisons, + and insert the constant values in other places in `FILTER`s. For example, the rule will + insert `42` instead of `i.value` in the second `FILTER` of the following query: + + FOR i IN c1 FOR j IN c2 FILTER i.value == 42 FILTER j.value == i.value RETURN 1 + + * added `filtered` value to AQL query execution statistics + + This value indicates how many documents were filtered by `FilterNode`s in the AQL query. + Note that `IndexRangeNode`s can also filter documents by selecting only the required ranges + from the index. The `filtered` value will not include the work done by `IndexRangeNode`s, + but only the work performed by `FilterNode`s. + + * added support for sparse hash and skiplist indexes + + Hash and skiplist indexes can optionally be made sparse. Sparse indexes exclude documents + in which at least one of the index attributes is either not set or has a value of `null`. + + As such documents are excluded from sparse indexes, they may contain fewer documents than + their non-sparse counterparts. This enables faster indexing and can lead to reduced memory + usage in case the indexed attribute does occur only in some, but not all documents of the + collection. Sparse indexes will also reduce the number of collisions in non-unique hash + indexes in case non-existing or optional attributes are indexed. + + In order to create a sparse index, an object with the attribute `sparse` can be added to + the index creation commands: + + db.collection.ensureHashIndex(attributeName, { sparse: true }); + db.collection.ensureHashIndex(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName1, attributeName2, { sparse: true }); + + db.collection.ensureSkiplist(attributeName, { sparse: true }); + db.collection.ensureSkiplist(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName1, attributeName2, { sparse: true }); + + Note that in place of the above specialized index creation commands, it is recommended to use + the more general index creation command `ensureIndex`: + + ```js + db.collection.ensureIndex({ type: "hash", sparse: true, unique: true, fields: [ attributeName ] }); + db.collection.ensureIndex({ type: "skiplist", sparse: false, unique: false, fields: [ "a", "b" ] }); + ``` + + When not explicitly set, the `sparse` attribute defaults to `false` for new indexes. + + This causes a change in behavior when creating a unique hash index without specifying the + sparse flag: in 2.4, unique hash indexes were implicitly sparse, always excluding `null` values. + There was no option to control this behavior, and sparsity was neither supported for non-unique + hash indexes nor skiplists in 2.4. This implicit sparsity of unique hash indexes was considered + an inconsistency, and therefore the behavior was cleaned up in 2.5. As of 2.5, indexes will + only be created sparse if sparsity is explicitly requested. Existing unique hash indexes from 2.4 + or before will automatically be migrated so they are still sparse after the upgrade to 2.5. + + Geo indexes are implicitly sparse, meaning documents without the indexed location attribute or + containing invalid location coordinate values will be excluded from the index automatically. This + is also a change when compared to pre-2.5 behavior, when documents with missing or invalid + coordinate values may have caused errors on insertion when the geo index' `unique` flag was set + and its `ignoreNull` flag was not. + + This was confusing and has been rectified in 2.5. The method `ensureGeoConstaint()` now does the + same as `ensureGeoIndex()`. Furthermore, the attributes `constraint`, `unique`, `ignoreNull` and + `sparse` flags are now completely ignored when creating geo indexes. + + The same is true for fulltext indexes. There is no need to specify non-uniqueness or sparsity for + geo or fulltext indexes. They will always be non-unique and sparse. + + As sparse indexes may exclude some documents, they cannot be used for every type of query. + Sparse hash indexes cannot be used to find documents for which at least one of the indexed + attributes has a value of `null`. For example, the following AQL query cannot use a sparse + index, even if one was created on attribute `attr`: + + FOR doc In collection + FILTER doc.attr == null + RETURN doc + + If the lookup value is non-constant, a sparse index may or may not be used, depending on + the other types of conditions in the query. If the optimizer can safely determine that + the lookup value cannot be `null`, a sparse index may be used. When uncertain, the optimizer + will not make use of a sparse index in a query in order to produce correct results. + + For example, the following queries cannot use a sparse index on `attr` because the optimizer + will not know beforehand whether the comparsion values for `doc.attr` will include `null`: + + FOR doc In collection + FILTER doc.attr == SOME_FUNCTION(...) + RETURN doc + + FOR other IN otherCollection + FOR doc In collection + FILTER doc.attr == other.attr + RETURN doc + + Sparse skiplist indexes can be used for sorting if the optimizer can safely detect that the + index range does not include `null` for any of the index attributes. + + * inspection of AQL data-modification queries will now detect if the data-modification part + of the query can run in lockstep with the data retrieval part of the query, or if the data + retrieval part must be executed before the data modification can start. + + Executing the two in lockstep allows using much smaller buffers for intermediate results + and starts the actual data-modification operations much earlier than if the two phases + were executed seperately. + + * Allow dynamic attribute names in AQL object literals + + This allows using arbitrary expressions to construct attribute names in object + literals specified in AQL queries. To disambiguate expressions and other unquoted + attribute names, dynamic attribute names need to be enclosed in brackets (`[` and `]`). + Example: + + FOR i IN 1..100 + RETURN { [ CONCAT('value-of-', i) ] : i } + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case a non-sorted + index (e.g. a hash index) is used for only equality lookups and all sort attributes + are covered by the index. + + Example that does not require an extra sort (needs hash index on `value`): + + FOR doc IN collection FILTER doc.value == 1 SORT doc.value RETURN doc + + Another example that does not require an extra sort (with hash index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 && doc.value2 == 2 SORT doc.value1, doc.value2 RETURN doc + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case the sort critieria + excludes the left-most index attributes, but the left-most index attributes are used + by the index for equality-only lookups. + + Example that can use the index for sorting (needs skiplist index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 SORT doc.value2 RETURN doc + + * added selectivity estimates for primary index, edge index, and hash index + + The selectivity estimates are returned by the `GET /_api/index` REST API method + in a sub-attribute `selectivityEstimate` for each index that supports it. This + attribute will be omitted for indexes that do not provide selectivity estimates. + If provided, the selectivity estimate will be a numeric value between 0 and 1. + + Selectivity estimates will also be reported in the result of `collection.getIndexes()` + for all indexes that support this. If no selectivity estimate can be determined for + an index, the attribute `selectivityEstimate` will be omitted here, too. + + The web interface also shows selectivity estimates for each index that supports this. + + Currently the following index types can provide selectivity estimates: + - primary index + - edge index + - hash index (unique and non-unique) + + No selectivity estimates will be provided when running in cluster mode. + + * fixed issue #1226: arangod log issues + + * added additional logger if arangod is started in foreground mode on a tty + + * added AQL optimizer rule "move-calculations-down" + + * use exclusive native SRWLocks on Windows instead of native mutexes + + * added AQL functions MD5, SHA1, and RANDOM_TOKEN. + + * reduced number of string allocations when parsing certain AQL queries + + parsing numbers (integers or doubles) does not require a string allocation + per number anymore + + * RequestContext#bodyParam now accepts arbitrary joi schemas and rejects invalid (but well-formed) request bodies. + + * enforce that AQL user functions are wrapped inside JavaScript function () declarations + + AQL user functions were always expected to be wrapped inside a JavaScript function, but previously + this was not enforced when registering a user function. Enforcing the AQL user functions to be contained + inside functions prevents functions from doing some unexpected things that may have led to undefined + behavior. + + * Windows service uninstalling: only remove service if it points to the currently running binary, + or --force was specified. + + * Windows (debug only): print stacktraces on crash and run minidump + + * Windows (cygwin): if you run arangosh in a cygwin shell or via ssh we will detect this and use + the appropriate output functions. + + * Windows: improve process management + + * fix ipv6 reverse ip lookups - so far we only did ipv4 addresses. + + * improve join documentation, add outer join example + + * run jslint for unit tests too, to prevent "memory leaks" by global js objects with native code. + + * fix error logging for exceptions - we wouldn't log the exception message itself so far. + + * improve error reporting in the http client (windows & *nix) + + * improve error reports in cluster + + * Standard Errors can now contain custom messages. + + + + -- ArangoDB Maintainer Fri, 20 Feb 2015 14:16:23 +0100 + +arangodb (2.5.0a4-1.1) stable; urgency=low + + * Changed to Version 2.5.0-alpha4 + + * front-end: unwanted removal of index table header after creating new index + + * fixed issue #1248: chrome: applications filtering not working + + * fixed issue #1198: queries remain in aql editor (front-end) if you navigate through different tabs + + * Simplify usage of Foxx + + Thanks to our user feedback we learned that Foxx is a powerful, yet rather complicated concept. + With this release we tried to make it less complicated while keeping all its strength. + That includes a rewrite of the documentation as well as some code changes as listed below: + + * Moved Foxx applications to a different folder. + + The naming convention now is: /_db///APP + Before it was: /databases//: + This caused some trouble as apps where cached based on name and version and updates did not apply. + Hence the path on filesystem and the app's access URL had no relation to one another. + Now the path on filesystem is identical to the URL (except for slashes and the appended APP) + + * Rewrite of Foxx routing + + The routing of Foxx has been exposed to major internal changes we adjusted because of user feedback. + This allows us to set the development mode per mountpoint without having to change pathes and hold + apps at seperate locations. + + * Foxx Development mode + + The development mode used until 2.4 is gone. It has been replaced by a much more mature version. + This includes the deprecation of the javascript.dev-app-path parameter, which is useless since 2.5. + Instead of having two separate app directories for production and development, apps now reside in + one place, which is used for production as well as for development. + Apps can still be put into development mode, changing their behavior compared to production mode. + Development mode apps are still reread from disk at every request, and still they ship more debug + output. + + * Foxx install process + + Installing Foxx apps has been a two step process: import them into ArangoDB and mount them at a + specific mountpoint. These operations have been joined together. You can install an app at one + mountpoint, that's it. No fetch, mount, unmount, purge cycle anymore. The commands have been + simplified to just: + + * install: get your Foxx app up and running + * uninstall: shut it down and erase it from disk + + * Foxx error output + + Until 2.4 the errors produced by Foxx were not optimal. Often, the error message was just + `unable to parse manifest` and contained only an internal stack trace. + In 2.5 we made major improvements there, including a much more finegrained error output that + helps you debug your Foxx apps. The error message printed is now much closer to its source and + should help you track it down. + + Also we added the default handlers for unhandled errors in Foxx apps: + + * You will get a nice internal error page whenever your Foxx app is called but was not installed + due to any error + * You will get a proper error message when having an uncaught error appears in any app route + + In production mode the messages above will NOT contain any information about your Foxx internals + and are safe to be exposed to third party users. + In development mode the messages above will contain the stacktrace (if available), making it easier for + your in-house devs to track down errors in the application. + + * added `console` object to Foxx apps. All Foxx apps now have a console object implementing + the familiar Console API in their global scope, which can be used to log diagnostic + messages to the database. + + * added `org/arangodb/request` module, which provides a simple API for making HTTP requests + to external services. + + * added optimizer rule `propagate-constant-attributes` + + This rule will look inside `FILTER` conditions for constant value equality comparisons, + and insert the constant values in other places in `FILTER`s. For example, the rule will + insert `42` instead of `i.value` in the second `FILTER` of the following query: + + FOR i IN c1 FOR j IN c2 FILTER i.value == 42 FILTER j.value == i.value RETURN 1 + + * added `filtered` value to AQL query execution statistics + + This value indicates how many documents were filtered by `FilterNode`s in the AQL query. + Note that `IndexRangeNode`s can also filter documents by selecting only the required ranges + from the index. The `filtered` value will not include the work done by `IndexRangeNode`s, + but only the work performed by `FilterNode`s. + + * added support for sparse hash and skiplist indexes + + Hash and skiplist indexes can optionally be made sparse. Sparse indexes exclude documents + in which at least one of the index attributes is either not set or has a value of `null`. + + As such documents are excluded from sparse indexes, they may contain fewer documents than + their non-sparse counterparts. This enables faster indexing and can lead to reduced memory + usage in case the indexed attribute does occur only in some, but not all documents of the + collection. Sparse indexes will also reduce the number of collisions in non-unique hash + indexes in case non-existing or optional attributes are indexed. + + In order to create a sparse index, an object with the attribute `sparse` can be added to + the index creation commands: + + db.collection.ensureHashIndex(attributeName, { sparse: true }); + db.collection.ensureHashIndex(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName1, attributeName2, { sparse: true }); + + db.collection.ensureSkiplist(attributeName, { sparse: true }); + db.collection.ensureSkiplist(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName1, attributeName2, { sparse: true }); + + When not explicitly set, the `sparse` attribute defaults to `false` for new indexes. + + This causes a change in behavior when creating a unique hash index without specifying the + sparse flag: in 2.4, unique hash indexes were implicitly sparse, always excluding `null` values. + There was no option to control this behavior, and sparsity was neither supported for non-unique + hash indexes nor skiplists in 2.4. This implicit sparsity of unique hash indexes was considered + an inconsistency, and therefore the behavior was cleaned up in 2.5. As of 2.5, indexes will + only be created sparse if sparsity is explicitly requested. Existing unique hash indexes from 2.4 + or before will automatically be migrated so they are still sparse after the upgrade to 2.5. + + Indexes other than hash and skiplist do not support sparsity. + + As sparse indexes may exclude some documents, they cannot be used for every type of query. + Sparse hash indexes cannot be used to find documents for which at least one of the indexed + attributes has a value of `null`. For example, the following AQL query cannot use a sparse + index, even if one was created on attribute `attr`: + + FOR doc In collection + FILTER doc.attr == null + RETURN doc + + If the lookup value is non-constant, a sparse index may or may not be used, depending on + the other types of conditions in the query. If the optimizer can safely determine that + the lookup value cannot be `null`, a sparse index may be used. When uncertain, the optimizer + will not make use of a sparse index in a query in order to produce correct results. + + For example, the following queries cannot use a sparse index on `attr` because the optimizer + will not know beforehand whether the comparsion values for `doc.attr` will include `null`: + + FOR doc In collection + FILTER doc.attr == SOME_FUNCTION(...) + RETURN doc + + FOR other IN otherCollection + FOR doc In collection + FILTER doc.attr == other.attr + RETURN doc + + Sparse skiplist indexes can be used for sorting if the optimizer can safely detect that the + index range does not include `null` for any of the index attributes. + + * inspection of AQL data-modification queries will now detect if the data-modification part + of the query can run in lockstep with the data retrieval part of the query, or if the data + retrieval part must be executed before the data modification can start. + + Executing the two in lockstep allows using much smaller buffers for intermediate results + and starts the actual data-modification operations much earlier than if the two phases + were executed seperately. + + * Allow dynamic attribute names in AQL object literals + + This allows using arbitrary expressions to construct attribute names in object + literals specified in AQL queries. To disambiguate expressions and other unquoted + attribute names, dynamic attribute names need to be enclosed in brackets (`[` and `]`). + Example: + + FOR i IN 1..100 + RETURN { [ CONCAT('value-of-', i) ] : i } + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case a non-sorted + index (e.g. a hash index) is used for only equality lookups and all sort attributes + are covered by the index. + + Example that does not require an extra sort (needs hash index on `value`): + + FOR doc IN collection FILTER doc.value == 1 SORT doc.value RETURN doc + + Another example that does not require an extra sort (with hash index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 && doc.value2 == 2 SORT doc.value1, doc.value2 RETURN doc + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case the sort critieria + excludes the left-most index attributes, but the left-most index attributes are used + by the index for equality-only lookups. + + Example that can use the index for sorting (needs skiplist index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 SORT doc.value2 RETURN doc + + * added selectivity estimates for primary index, edge index, and hash index + + The selectivity estimates are returned by the `GET /_api/index` REST API method + in a sub-attribute `selectivityEstimate` for each index that supports it. This + attribute will be omitted for indexes that do not provide selectivity estimates. + If provided, the selectivity estimate will be a numeric value between 0 and 1. + + Selectivity estimates will also be reported in the result of `collection.getIndexes()` + for all indexes that support this. If no selectivity estimate can be determined for + an index, the attribute `selectivityEstimate` will be omitted here, too. + + The web interface also shows selectivity estimates for each index that supports this. + + Currently the following index types can provide selectivity estimates: + - primary index + - edge index + - hash index (unique and non-unique) + + No selectivity estimates will be provided when running in cluster mode. + + * fixed issue #1226: arangod log issues + + * added additional logger if arangod is started in foreground mode on a tty + + * added AQL optimizer rule "move-calculations-down" + + * use exclusive native SRWLocks on Windows instead of native mutexes + + * added AQL functions MD5, SHA1, and RANDOM_TOKEN. + + * reduced number of string allocations when parsing certain AQL queries + + parsing numbers (integers or doubles) does not require a string allocation + per number anymore + + * RequestContext#bodyParam now accepts arbitrary joi schemas and rejects invalid (but well-formed) request bodies. + + * enforce that AQL user functions are wrapped inside JavaScript function () declarations + + AQL user functions were always expected to be wrapped inside a JavaScript function, but previously + this was not enforced when registering a user function. Enforcing the AQL user functions to be contained + inside functions prevents functions from doing some unexpected things that may have led to undefined + behavior. + + + + -- ArangoDB Maintainer Tue, 17 Feb 2015 21:16:18 +0100 + +arangodb (2.5.0a3-1.1) stable; urgency=low + + * Changed to Version 2.5.0-alpha3 + + * added optimizer rule `propagate-constant-attributes` + + This rule will look inside `FILTER` conditions for constant value equality comparisons, + and insert the constant values in other places in `FILTER`s. For example, the rule will + insert `42` instead of `i.value` in the second `FILTER` of the following query: + + FOR i IN c1 FOR j IN c2 FILTER i.value == 42 FILTER j.value == i.value RETURN 1 + + * added `filtered` value to AQL query execution statistics + + This value indicates how many documents were filtered by `FilterNode`s in the AQL query. + Note that `IndexRangeNode`s can also filter documents by selecting only the required ranges + from the index. The `filtered` value will not include the work done by `IndexRangeNode`s, + but only the work performed by `FilterNode`s. + + * added support for sparse hash and skiplist indexes + + Hash and skiplist indexes can optionally be made sparse. Sparse indexes exclude documents + in which at least one of the index attributes is either not set or has a value of `null`. + + As such documents are excluded from sparse indexes, they may contain fewer documents than + their non-sparse counterparts. This enables faster indexing and can lead to reduced memory + usage in case the indexed attribute does occur only in some, but not all documents of the + collection. Sparse indexes will also reduce the number of collisions in non-unique hash + indexes in case non-existing or optional attributes are indexed. + + In order to create a sparse index, an object with the attribute `sparse` can be added to + the index creation commands: + + db.collection.ensureHashIndex(attributeName, { sparse: true }); + db.collection.ensureHashIndex(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName, { sparse: true }); + db.collection.ensureUniqueConstraint(attributeName1, attributeName2, { sparse: true }); + + db.collection.ensureSkiplist(attributeName, { sparse: true }); + db.collection.ensureSkiplist(attributeName1, attributeName2, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName, { sparse: true }); + db.collection.ensureUniqueSkiplist(attributeName1, attributeName2, { sparse: true }); + + When not explicitly set, the `sparse` attribute defaults to `false` for new indexes. + Other indexes than hash and skiplist do not support sparsity. + + As sparse indexes may exclude some documents from the collection, they cannot be used for + all types of queries. Sparse hash indexes cannot be used to find documents for which at + least one of the indexed attributes has a value of `null`. For example, the following AQL + query cannot use a sparse index, even if one was created on attribute `attr`: + + FOR doc In collection + FILTER doc.attr == null + RETURN doc + + If the lookup value is non-constant, a sparse index may or may not be used, depending on + the other types of conditions in the query. If the optimizer can safely determine that + the lookup value cannot be `null`, a sparse index may be used. When uncertain, the optimizer + will not make use of a sparse index in a query in order to produce correct results. + + For example, the following queries cannot use a sparse index on `attr` because the optimizer + will not know beforehand whether the comparsion values for `doc.attr` will include `null`: + + FOR doc In collection + FILTER doc.attr == SOME_FUNCTION(...) + RETURN doc + + FOR other IN otherCollection + FOR doc In collection + FILTER doc.attr == other.attr + RETURN doc + + Sparse skiplist indexes can be used for sorting if the optimizer can safely detect that the + index range does not include `null` for any of the index attributes. + + * inspection of AQL data-modification queries will now detect if the data-modification part + of the query can run in lockstep with the data retrieval part of the query, or if the data + retrieval part must be executed before the data modification can start. + + Executing the two in lockstep allows using much smaller buffers for intermediate results + and starts the actual data-modification operations much earlier than if the two phases + were executed seperately. + + * Allow dynamic attribute names in AQL object literals + + This allows using arbitrary expressions to construct attribute names in object + literals specified in AQL queries. To disambiguate expressions and other unquoted + attribute names, dynamic attribute names need to be enclosed in brackets (`[` and `]`). + Example: + + FOR i IN 1..100 + RETURN { [ CONCAT('value-of-', i) ] : i } + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case a non-sorted + index (e.g. a hash index) is used for only equality lookups and all sort attributes + are covered by the index. + + Example that does not require an extra sort (needs hash index on `value`): + + FOR doc IN collection FILTER doc.value == 1 SORT doc.value RETURN doc + + Another example that does not require an extra sort (with hash index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 && doc.value2 == 2 SORT doc.value1, doc.value2 RETURN doc + + * make AQL optimizer rule "use-index-for-sort" remove sort also in case the sort critieria + excludes the left-most index attributes, but the left-most index attributes are used + by the index for equality-only lookups. + + Example that can use the index for sorting (needs skiplist index on `value1`, `value2`): + + FOR doc IN collection FILTER doc.value1 == 1 SORT doc.value2 RETURN doc + + * added selectivity estimates for primary index, edge index, and hash index + + The selectivity estimates are returned by the `GET /_api/index` REST API method + in a sub-attribute `selectivityEstimate` for each index that supports it. This + attribute will be omitted for indexes that do not provide selectivity estimates. + If provided, the selectivity estimate will be a numeric value between 0 and 1. + + Selectivity estimates will also be reported in the result of `collection.getIndexes()` + for all indexes that support this. If no selectivity estimate can be determined for + an index, the attribute `selectivityEstimate` will be omitted here, too. + + The web interface also shows selectivity estimates for each index that supports this. + + Currently the following index types can provide selectivity estimates: + - primary index + - edge index + - hash index (unique and non-unique) + + No selectivity estimates will be provided when running in cluster mode. + + * fixed issue #1226: arangod log issues + + * added additional logger if arangod is started in foreground mode on a tty + + * added AQL optimizer rule "move-calculations-down" + + * use exclusive native SRWLocks on Windows instead of native mutexes + + * added AQL functions MD5, SHA1, and RANDOM_TOKEN. + + * reduced number of string allocations when parsing certain AQL queries + + parsing numbers (integers or doubles) does not require a string allocation + per number anymore + + * RequestContext#bodyParam now accepts arbitrary joi schemas and rejects invalid (but well-formed) request bodies. + + * enforce that AQL user functions are wrapped inside JavaScript function () declarations + + AQL user functions were always expected to be wrapped inside a JavaScript function, but previously + this was not enforced when registering a user function. Enforcing the AQL user functions to be contained + inside functions prevents functions from doing some unexpected things that may have led to undefined + behavior. + + + + -- ArangoDB Maintainer Mon, 16 Feb 2015 13:36:48 +0100 + +arangodb (2.4.3-1.1) stable; urgency=low + + * Changed to Version 2.4.3 + + * fix multi-threading with openssl when running under Windows + + * fix timeout on socket operations when running under Windows + + * Fixed an error in Foxx routing which caused some apps that worked in 2.4.1 to fail with status 500: `undefined is not a function` errors in 2.4.2 + This error was occurring due to seldom internal rerouting introduced by the malformed application handler. + + + + -- ArangoDB Maintainer Fri, 06 Feb 2015 12:06:18 +0100 + +arangodb (2.4.2-1.1) stable; urgency=low + + * Changed to Version 2.4.2 + + * added custom visitor functionality for AQL traversals + + This allows more complex result processing in traversals triggered by AQL. A few examples + are shown in [this article](http://jsteemann.github.io/blog/2015/01/28/using-custom-visitors-in-aql-graph-traversals/). + + * improved number of results estimated for nodes of type EnumerateListNode and SubqueryNode + in AQL explain output + + * added AQL explain helper to explain arbitrary AQL queries + + The helper function prints the query execution plan and the indexes to be used in the + query. It can be invoked from the ArangoShell or the web interface as follows: + + require("org/arangodb/aql/explainer").explain(query); + + * enable use of indexes for certain AQL conditions with non-equality predicates, in + case the condition(s) also refer to indexed attributes + + The following queries will now be able to use indexes: + + FILTER a.indexed == ... && a.indexed != ... + FILTER a.indexed == ... && a.nonIndexed != ... + FILTER a.indexed == ... && ! (a.indexed == ...) + FILTER a.indexed == ... && ! (a.nonIndexed == ...) + FILTER a.indexed == ... && ! (a.indexed != ...) + FILTER a.indexed == ... && ! (a.nonIndexed != ...) + FILTER (a.indexed == ... && a.nonIndexed == ...) || (a.indexed == ... && a.nonIndexed == ...) + FILTER (a.indexed == ... && a.nonIndexed != ...) || (a.indexed == ... && a.nonIndexed != ...) + + * Fixed spuriously occurring "collection not found" errors when running queries on local + collections on a cluster DB server + + * Fixed upload of Foxx applications to the server for apps exceeding approx. 1 MB zipped. + + * Malformed Foxx applications will now return a more useful error when any route is requested. + + In Production a Foxx app mounted on /app will display an html page on /app/* stating a 503 Service temporarily not available. + It will not state any information about your Application. + Before it was a 404 Not Found without any information and not distinguishable from a correct not found on your route. + + In Development Mode the html page also contains information about the error occured. + + * Unhandled errors thrown in Foxx routes are now handled by the Foxx framework itself. + + In Production the route will return a status 500 with a body {error: "Error statement"}. + In Development the route will return a status 500 with a body {error: "Error statement", stack: "..."} + + Before, it was status 500 with a plain text stack including ArangoDB internal routing information. + + * The Applications tab in web interface will now request development apps more often. + So if you have a fixed a syntax error in your app it should always be visible after reload. + + + + -- ArangoDB Maintainer Fri, 30 Jan 2015 19:09:36 +0100 + +arangodb (2.4.1-1.1) stable; urgency=low + + * Changed to Version 2.4.1 + + * improved WAL recovery output + + * fixed certain OR optimizations in AQL optimizer + + * better diagnostics for arangoimp + + * fixed invalid result of HTTP REST API method `/_admin/foxx/rescan` + + * fixed possible segmentation fault when passing a Buffer object into a V8 function + as a parameter + + * updated AQB module to 1.8.0. + + + + -- ArangoDB Maintainer Mon, 19 Jan 2015 19:25:56 +0100 + +arangodb (2.4.0-1.1) stable; urgency=low + + * Changed to Version 2.4.0 + + * fixed V8 integration-related crashes + + * make `fs.move(src, dest)` also fail when both `src` and `dest` are + existing directories. This ensures the same behavior of the move operation + on different platforms. + + * fixed AQL insert operation for multi-shard collections in cluster + + * added optional return value for AQL data-modification queries. + This allows returning the documents inserted, removed or updated with the query, e.g. + + FOR doc IN docs REMOVE doc._key IN docs LET removed = OLD RETURN removed + FOR doc IN docs INSERT { } IN docs LET inserted = NEW RETURN inserted + FOR doc IN docs UPDATE doc._key WITH { } IN docs LET previous = OLD RETURN previous + FOR doc IN docs UPDATE doc._key WITH { } IN docs LET updated = NEW RETURN updated + + The variables `OLD` and `NEW` are automatically available when a `REMOVE`, `INSERT`, + `UPDATE` or `REPLACE` statement is immediately followed by a `LET` statement. + Note that the `LET` and `RETURN` statements in data-modification queries are not as + flexible as the general versions of `LET` and `RETURN`. When returning documents from + data-modification operations, only a single variable can be assigned using `LET`, and + the assignment can only be either `OLD` or `NEW`, but not an arbitrary expression. The + `RETURN` statement also allows using the just-created variable only, and no arbitrary + expressions. + + + + -- ArangoDB Maintainer Tue, 13 Jan 2015 00:53:47 +0100 + +arangodb (2.4.0b1-1.1) stable; urgency=low + + * Changed to Version 2.4.0-beta1 + + * fixed superstates in FoxxGenerator + + * fixed issue #1065: Aardvark: added creation of documents and edges with _key property + + * fixed issue #1198: Aardvark: current aql editor query is now cached + + * Upgraded V8 version from 3.16.14 to 3.29.59 + + * Added Foxx generator for building Hypermedia APIs + + A more detailed description is [here](https://www.arangodb.com/2014/12/08/building-hypermedia-apis-foxxgenerator) + + * New `Applications` tab in web interface: + + The `applications` tab got a complete redesign. + It will now only show applications that are currently running on ArangoDB. + For a selected application, a new detailed view has been created. + This view provides a better overview of the app: + * author + * license + * version + * contributors + * download links + * API documentation + + To install a new application, a new dialogue is now available. + It provides the features already available in the console application `foxx-manager` plus some more: + * install an application from Github + * install an application from a zip file + * install an application from ArangoDB's application store + * create a new application from scratch: this feature uses a generator to + create a Foxx application with pre-defined CRUD methods for a given list + of collections. The generated Foxx app can either be downloaded as a zip file or + be installed on the server. Starting with a new Foxx app has never been easier. + + * fixed issue #1102: Aardvark: Layout bug in documents overview + + The documents overview was entirely destroyed in some situations on Firefox. + We replaced the plugin we used there. + + * fixed issue #1168: Aardvark: pagination buttons jumping + + * fixed issue #1161: Aardvark: Click on Import JSON imports previously uploaded file + + * removed configure options `--enable-all-in-one-v8`, `--enable-all-in-one-icu`, + and `--enable-all-in-one-libev`. + + * global internal rename to fix naming incompatibilities with JSON: + + Internal functions with names containing `array` have been renamed to `object`, + internal functions with names containing `list` have been renamed to `array`. + The renaming was mainly done in the C++ parts. The documentation has also been + adjusted so that the correct JSON type names are used in most places. + + The change also led to the addition of a few function aliases in AQL: + + * `TO_LIST` now is an alias of the new `TO_ARRAY` + * `IS_LIST` now is an alias of the new `IS_ARRAY` + * `IS_DOCUMENT` now is an alias of the new `IS_OBJECT` + + The changed also renamed the option `mergeArrays` to `mergeObjects` for AQL + data-modification query options and HTTP document modification API + + * AQL: added optimizer rule "remove-filter-covered-by-index" + + This rule removes FilterNodes and CalculationNodes from an execution plan if the + filter is already covered by a previous IndexRangeNode. Removing the CalculationNode + and the FilterNode will speed up query execution because the query requires less + computation. + + * AQL: added optimizer rule "remove-sort-rand" + + This rule removes a `SORT RAND()` expression from a query and moves the random + iteration into the appropriate `EnumerateCollectionNode`. This is more efficient + than individually enumerating and then sorting randomly. + + * AQL: range optimizations for IN and OR + + This change enables usage of indexes for several additional cases. Filters containing + the `IN` operator can now make use of indexes, and multiple OR- or AND-combined filter + conditions can now also use indexes if the filters are accessing the same indexed + attribute. + + Here are a few examples of queries that can now use indexes but couldn't before: + + FOR doc IN collection + FILTER doc.indexedAttribute == 1 || doc.indexedAttribute > 99 + RETURN doc + + FOR doc IN collection + FILTER doc.indexedAttribute IN [ 3, 42 ] || doc.indexedAttribute > 99 + RETURN doc + + FOR doc IN collection + FILTER (doc.indexedAttribute > 2 && doc.indexedAttribute < 10) || + (doc.indexedAttribute > 23 && doc.indexedAttribute < 42) + RETURN doc + + * fixed issue #500: AQL parentheses issue + + This change allows passing subqueries as AQL function parameters without using + duplicate brackets (e.g. `FUNC(query)` instead of `FUNC((query))` + + * added optional `COUNT` clause to AQL `COLLECT` + + This allows more efficient group count calculation queries, e.g. + + FOR doc IN collection + COLLECT age = doc.age WITH COUNT INTO length + RETURN { age: age, count: length } + + A count-only query is also possible: + + FOR doc IN collection + COLLECT WITH COUNT INTO length + RETURN length + + * fixed missing makeDirectory when fetching a Foxx application from a zip file + + * fixed issue #1134: Change the default endpoint to localhost + + This change will modify the IP address ArangoDB listens on to 127.0.0.1 by default. + This will make new ArangoDB installations unaccessible from clients other than + localhost unless changed. This is a security feature. + + To make ArangoDB accessible from any client, change the server's configuration + (`--server.endpoint`) to either `tcp://0.0.0.0:8529` or the server's publicly + + -- ArangoDB Maintainer Fri, 26 Dec 2014 13:54:35 +0100 + +arangodb (2.4.0a7-1.1) stable; urgency=low + + * Changed to Version 2.4.0-alpha7 + + * fixed superstates in FoxxGenerator + + * fixed issue #1065: Aardvark: added creation of documents and edges with _key property + + * fixed issue #1198: Aardvark: current aql editor query is now cached + + * Upgraded V8 version from 3.16.14 to 3.29.59 + + * Added Foxx generator for building Hypermedia APIs + + A more detailed description is [here](https://www.arangodb.com/2014/12/08/building-hypermedia-apis-foxxgenerator) + + * New `Applications` tab in web interface: + + The `applications` tab got a complete redesign. + It will now only show applications that are currently running on ArangoDB. + For a selected application, a new detailed view has been created. + This view provides a better overview of the app: + * author + * license + * version + * contributors + * download links + * API documentation + + To install a new application, a new dialogue is now available. + It provides the features already available in the console application `foxx-manager` plus some more: + * install an application from Github + * install an application from a zip file + * install an application from ArangoDB's application store + * create a new application from scratch: this feature uses a generator to + create a Foxx application with pre-defined CRUD methods for a given list + of collections. The generated Foxx app can either be downloaded as a zip file or + be installed on the server. Starting with a new Foxx app has never been easier. + + * fixed issue #1102: Aardvark: Layout bug in documents overview + + The documents overview was entirely destroyed in some situations on Firefox. + We replaced the plugin we used there. + + * fixed issue #1168: Aardvark: pagination buttons jumping + + * fixed issue #1161: Aardvark: Click on Import JSON imports previously uploaded file + + * removed configure options `--enable-all-in-one-v8`, `--enable-all-in-one-icu`, + and `--enable-all-in-one-libev`. + + * global internal rename to fix naming incompatibilities with JSON: + + Internal functions with names containing `array` have been renamed to `object`, + internal functions with names containing `list` have been renamed to `array`. + The renaming was mainly done in the C++ parts. The documentation has also been + adjusted so that the correct JSON type names are used in most places. + + The change also led to the addition of a few function aliases in AQL: + + * `TO_LIST` now is an alias of the new `TO_ARRAY` + * `IS_LIST` now is an alias of the new `IS_ARRAY` + * `IS_DOCUMENT` now is an alias of the new `IS_OBJECT` + + The changed also renamed the option `mergeArrays` to `mergeObjects` for AQL + data-modification query options and HTTP document modification API + + * AQL: added optimizer rule "remove-filter-covered-by-index" + + This rule removes FilterNodes and CalculationNodes from an execution plan if the + filter is already covered by a previous IndexRangeNode. Removing the CalculationNode + and the FilterNode will speed up query execution because the query requires less + computation. + + * AQL: added optimizer rule "remove-sort-rand" + + This rule removes a `SORT RAND()` expression from a query and moves the random + iteration into the appropriate `EnumerateCollectionNode`. This is more efficient + than individually enumerating and then sorting randomly. + + * AQL: range optimizations for IN and OR + + This change enables usage of indexes for several additional cases. Filters containing + the `IN` operator can now make use of indexes, and multiple OR- or AND-combined filter + conditions can now also use indexes if the filters are accessing the same indexed + attribute. + + Here are a few examples of queries that can now use indexes but couldn't before: + + FOR doc IN collection + FILTER doc.indexedAttribute == 1 || doc.indexedAttribute > 99 + RETURN doc + + FOR doc IN collection + FILTER doc.indexedAttribute IN [ 3, 42 ] || doc.indexedAttribute > 99 + RETURN doc + + FOR doc IN collection + FILTER (doc.indexedAttribute > 2 && doc.indexedAttribute < 10) || + (doc.indexedAttribute > 23 && doc.indexedAttribute < 42) + RETURN doc + + * fixed issue #500: AQL parentheses issue + + This change allows passing subqueries as AQL function parameters without using + duplicate brackets (e.g. `FUNC(query)` instead of `FUNC((query))` + + * added optional `COUNT` clause to AQL `COLLECT` + + This allows more efficient group count calculation queries, e.g. + + FOR doc IN collection + COLLECT age = doc.age WITH COUNT INTO length + RETURN { age: age, count: length } + + A count-only query is also possible: + + FOR doc IN collection + COLLECT WITH COUNT INTO length + RETURN length + + * fixed missing makeDirectory when fetching a Foxx application from a zip file + + * fixed issue #1134: Change the default endpoint to localhost + + This change will modify the IP address ArangoDB listens on to 127.0.0.1 by default. + This will make new ArangoDB installations unaccessible from clients other than + localhost unless changed. This is a security feature. + + To make ArangoDB accessible from any client, change the server's configuration + (`--server.endpoint`) to either `tcp://0.0.0.0:8529` or the server's publicly + + -- ArangoDB Maintainer Thu, 25 Dec 2014 10:36:12 +0100 + +arangodb (2.4.0a6-1.1) stable; urgency=low + + * Changed to Version 2.4.0-alpha6 + + * fixed superstates in FoxxGenerator + + * Upgraded V8 version from 3.16.14 to 3.29.59 + + * Added Foxx generator for building Hypermedia APIs + + A more detailed description is [here](https://www.arangodb.com/2014/12/08/building-hypermedia-apis-foxxgenerator) + + * New `Applications` tab in web interface: + + The `applications` tab got a complete redesign. + It will now only show applications that are currently running on ArangoDB. + For a selected application, a new detailed view has been created. + This view provides a better overview of the app: + * author + * license + * version + * contributors + * download links + * API documentation + + To install a new application, a new dialogue is now available. + It provides the features already available in the console application `foxx-manager` plus some more: + * install an application from Github + * install an application from a zip file + * install an application from ArangoDB's application store + * create a new application from scratch: this feature uses a generator to + create a Foxx application with pre-defined CRUD methods for a given list + of collections. The generated Foxx app can either be downloaded as a zip file or + be installed on the server. Starting with a new Foxx app has never been easier. + + * fixed issue #1102: Aardvark: Layout bug in documents overview + + The documents overview was entirely destroyed in some situations on Firefox. + We replaced the plugin we used there. + + * fixed issue #1168: Aardvark: pagination buttons jumping + + * fixed issue #1161: Aardvark: Click on Import JSON imports previously uploaded file + + * removed configure options `--enable-all-in-one-v8`, `--enable-all-in-one-icu`, + and `--enable-all-in-one-libev`. + + * global internal rename to fix naming incompatibilities with JSON: + + Internal functions with names containing `array` have been renamed to `object`, + internal functions with names containing `list` have been renamed to `array`. + The renaming was mainly done in the C++ parts. The documentation has also been + adjusted so that the correct JSON type names are used in most places. + + The change also led to the addition of a few function aliases in AQL: + + * `TO_LIST` now is an alias of the new `TO_ARRAY` + * `IS_LIST` now is an alias of the new `IS_ARRAY` + * `IS_DOCUMENT` now is an alias of the new `IS_OBJECT` + + The changed also renamed the option `mergeArrays` to `mergeObjects` for AQL + data-modification query options and HTTP document modification API + + * AQL: added optimizer rule "remove-filter-covered-by-index" + + This rule removes FilterNodes and CalculationNodes from an execution plan if the + filter is already covered by a previous IndexRangeNode. Removing the CalculationNode + and the FilterNode will speed up query execution because the query requires less + computation. + + * AQL: range optimizations for IN and OR + + This change enables usage of indexes for several additional cases. Filters containing + the `IN` operator can now make use of indexes, and multiple OR- or AND-combined filter + conditions can now also use indexes if the filters are accessing the same indexed + attribute. + + Here are a few examples of queries that can now use indexes but couldn't before: + + FOR doc IN collection + FILTER doc.indexedAttribute == 1 || doc.indexedAttribute > 99 + RETURN doc + + FOR doc IN collection + FILTER doc.indexedAttribute IN [ 3, 42 ] || doc.indexedAttribute > 99 + RETURN doc + + FOR doc IN collection + FILTER (doc.indexedAttribute > 2 && doc.indexedAttribute < 10) || + (doc.indexedAttribute > 23 && doc.indexedAttribute < 42) + RETURN doc + + * fixed issue #500: AQL parentheses issue + + This change allows passing subqueries as AQL function parameters without using + duplicate brackets (e.g. `FUNC(query)` instead of `FUNC((query))` + + * added optional `COUNT` clause to AQL `COLLECT` + + This allows more efficient group count calculation queries, e.g. + + FOR doc IN collection + COLLECT age = doc.age WITH COUNT INTO length + RETURN { age: age, count: length } + + A count-only query is also possible: + + FOR doc IN collection + COLLECT WITH COUNT INTO length + RETURN length + + * fixed missing makeDirectory when fetching a Foxx application from a zip file + + * fixed issue #1134: Change the default endpoint to localhost + + This change will modify the ip address ArangoDB listens on to 127.0.0.1 by default. + This will make new ArangoDB installations unaccessible from clients other than + localhost unless changed. This is a security feature. + + To make ArangoDB accessible from any client, change the server's configuration + (`--server.endpoint`) to either `tcp://0.0.0.0:8529` or the server's publicly + + -- ArangoDB Maintainer Fri, 19 Dec 2014 21:00:40 +0100 + +arangodb (2.4.0a5-1.1) stable; urgency=low + + * Changed to Version 2.4.0-alpha5 + + * switch to new V8 engine 3.29.59 + + + + -- ArangoDB Maintainer Fri, 19 Dec 2014 13:46:24 +0100 + +arangodb (2.4.0a4-1.1) stable; urgency=low + + * Changed to Version 2.4.0-alpha4 + + * switch to new V8 engine 3.29.59 + + + + -- ArangoDB Maintainer Fri, 19 Dec 2014 10:28:16 +0100 + +arangodb (2.4.0a3-1.1) stable; urgency=low + + * Changed to Version 2.4.0-alpha3 + + * switch to new V8 engine 3.29.59 + + + + -- ArangoDB Maintainer Thu, 18 Dec 2014 17:45:48 +0100 + +arangodb (2.4.0a2-1.1) stable; urgency=low + + * Changed to Version 2.4.0-alpha2 + + * fixed superstates in FoxxGenerator + + + + -- ArangoDB Maintainer Fri, 28 Nov 2014 12:54:02 +0100 + +arangodb (2.4.0a1-1.1) stable; urgency=low + + * Changed to Version 2.4.0-alpha1 + + * fixed replication of `_graphs` collection + + * added AQL list functions `PUSH`, `POP`, `UNSHIFT`, `SHIFT`, `REMOVE_VALUES`, + `REMOVE_VALUE`, `REMOVE_NTH` and `APPEND` + + * added AQL functions `CALL` and `APPLY` to dynamically call other functions + + * fixed AQL optimizer cost estimation for LIMIT node + + + + -- ArangoDB Maintainer Tue, 25 Nov 2014 10:48:08 +0100 + +arangodb (2.3.0-1.1) stable; urgency=low + + * Changed to Version 2.3.0 + + * fixed syslog flags. `--log.syslog` is deprecated and setting it has no effect, + `--log.facility` now works as described. Application name has been changed from + `triagens` to `arangod`. It can be changed using `--log.application`. The syslog + will only contain the actual log message. The datetime prefix is omiited. + + * fixed deflate in SimpleHttpClient + + * hide system applications in **Applications** tab by default + + Display of system applications can be toggled by using the *system applications* + toggle in the UI. + + * added HTTP REST API for managing tasks (`/_api/tasks`) + + * allow passing character lists as optional parameter to AQL functions `TRIM`, + `LTRIM` and `RTRIM` + + These functions now support trimming using custom character lists. If no character + lists are specified, all whitespace characters will be removed as previously: + + TRIM(" foobar\t \r\n ") // "foobar" + TRIM(";foo;bar;baz, ", "; ") // "foo;bar;baz" + + * added AQL string functions `LTRIM`, `RTRIM`, `FIND_FIRST`, `FIND_LAST`, `SPLIT`, + `SUBSTITUTE` + + * added AQL functions `ZIP`, `VALUES` and `PERCENTILE` + + * made AQL functions `CONCAT` and `CONCAT_SEPARATOR` work with list arguments + + * dynamically create extra dispatcher threads if required + + * fixed issue #1097: schemas in the API docs no longer show required properties as optional + + + + -- ArangoDB Maintainer Tue, 18 Nov 2014 19:02:18 +0100 + +arangodb (2.3.0b2-1.1) stable; urgency=low + + * Changed to Version 2.3.0-beta2 + + * front-end: new icons for uploading and downloading JSON documents into a collection + + * front-end: fixed documents pagination css display error + + * front-end: fixed flickering of the progress view + + * front-end: fixed missing event for documents filter function + + * front-end: jsoneditor: added CMD+Return (Mac) CTRL+Return (Linux/Win) shortkey for + saving a document + + * front-end: added information tooltip for uploading json documents. + + * front-end: added database management view to the collapsed navigation menu + + * front-end: added collection truncation feature + + * fixed issue #1086: arangoimp: Odd errors if arguments are not given properly + + * performance improvements for AQL queries that use JavaScript-based expressions + internally + + * added AQL geo functions `WITHIN_RECTANGLE` and `IS_IN_POLYGON` + + * fixed non-working query results download in AQL editor of web interface + + * removed debug print message in AQL editor query export routine + + * fixed issue #1075: Aardvark: user name required even if auth is off #1075 + + The fix for this prefills the username input field with the current user's + accout name if any and `root` (the default username) otherwise. Additionally, + the tooltip text has been slightly adjusted. + + * fixed issue #1069: Add 'raw' link to swagger ui so that the raw swagger + json can easily be retrieved + + This adds a link to the Swagger API docs to an application's detail view in + the **Applications** tab of the web interface. The link produces the Swagger + JSON directly. If authentication is turned on, the link requires authentication, + too. + + * documentation updates + + * added dedicated `NOT IN` operator for AQL + + Previously, a `NOT IN` was only achievable by writing a negated `IN` condition: + + FOR i IN ... FILTER ! (i IN [ 23, 42 ]) ... + + This can now alternatively be expressed more intuitively as follows: + + FOR i IN ... FILTER i NOT IN [ 23, 42 ] ... + + * added alternative logical operator syntax for AQL + + Previously, the logical operators in AQL could only be written as: + - `&&`: logical and + - `||`: logical or + - `!`: negation + + ArangoDB 2.3 introduces the alternative variants for these operators: + - `AND`: logical and + - `OR`: logical or + - `NOT`: negation + + The new syntax is just an alternative to the old syntax, allowing easier + migration from SQL. The old syntax is still fully supported and will be. + + * improved output of `ArangoStatement.parse()` and POST `/_api/query` + + If an AQL query can be parsed without problems, The return value of + `ArangoStatement.parse()` now contains an attribute `ast` with the abstract + syntax tree of the query (before optimizations). Though this is an internal + representation of the query and is subject to change, it can be used to inspect + how ArangoDB interprets a given query. + + * improved `ArangoStatement.explain()` and POST `/_api/explain` + + The commands for explaining AQL queries have been improved. + + * added command-line option `--javascript.v8-contexts` to control the number of + V8 contexts created in arangod. + + Previously, the number of V8 contexts was equal to the number of server threads + (as specified by option `--server.threads`). However, it may be sensible to + create different amounts of threads and V8 contexts. If the option is not + specified, the number of V8 contexts created will be equal to the number of + server threads. Thus no change in configuration is required to keep the old + behavior. + + However, the default configuration files shipped with ArangoDB have been changed. + The number of server threads has been increased in the configuration files, and + the number of V8 contexts is now explicitly set in the configuration files (to + the same value as the number of server threads was set to in 2.2). + + If you are using the default config files or merge them with your local config files, + please review if the higher default number of server threads is okay in your + environment. Additionally you should verify that the number of V8 contexts + created (as specified in option `--javascript.v8-contexts`) is okay. + + * removed index type "bitarray" + + Bitarray indexes were only half-way documented and integrated in previous versions + of ArangoDB so their benefit was limited. The support for bitarray indexes has + thus been removed in ArangoDB 2.3. It is not possible to create indexes of type + "bitarray" with ArangoDB 2.3. + + When a collection is openend that contains a bitarray index definition created + with a previous version of ArangoDB, ArangoDB will ignore it and log the following + warning: + + index type 'bitarray' is not supported in this version of ArangoDB and is ignored + + Future versions of ArangoDB may automatically remove such index definitions so the + warnings will eventually disappear. + + * removed internal "_admin/modules/flush" in order to fix requireApp + + * added basic support for handling binary data in Foxx + + Requests with binary payload can be processed in Foxx applications by + using the new method `res.rawBodyBuffer()`. This will return the unparsed request + body as a Buffer object. + + There is now also the method `req.requestParts()` available in Foxx to retrieve + the individual components of a multipart HTTP request. + + Buffer objects can now be used when setting the response body of any Foxx action. + Additionally, `res.send()` has been added as a convenience method for returning + strings, JSON objects or buffers from a Foxx action: + + res.send("

some HTML

"); + res.send({ success: true }); + res.send(new Buffer("some binary data")); + + The convenience method `res.sendFile()` can now be used to easily return the + contents of a file from a Foxx action: + + res.sendFile(applicationContext.foxxFilename("image.png")); + + `fs.write` now accepts not only strings but also Buffer objects as second parameter: + + fs.write(filename, "some data"); + fs.write(filename, new Buffer("some binary data")); + + `fs.readBuffer` can be used to return the contents of a file in a Buffer object. + + * improved performance of insertion into non-unique hash indexes significantly in case + many duplicate keys are used in the index + + * issue #1042: set time zone in log output + + the command-line option `--log.use-local-time` was added to print dates and times in + the server-local timezone instead of UTC + + * command-line options that require a boolean value now validate the + + -- ArangoDB Maintainer Sat, 08 Nov 2014 00:09:03 +0100 + +arangodb (2.3.0b1-1.1) stable; urgency=low + + * Changed to Version 2.3.0-beta1 + + * added command-line option `--javascript.v8-contexts` to control the number of + V8 contexts created in arangod. + + Previously, the number of V8 contexts was equal to the number of server threads + (as specified by option `--server.threads`). However, it may be sensible to + create different amounts of threads and V8 contexts. If the option is not + specified, the number of V8 contexts created will be equal to the number of + server threads. Thus no change in configuration is required to keep the old + behavior. + + * removed bitarray indexes + + * removed internal "_admin/modules/flush" in order to fix requireApp + + * added basic support for handling binary data in Foxx + + Buffer objects can now be used when setting the response body of any Foxx action. + Additionally, `res.send()` has been added as a convenience method for returning + strings, JSON objects or buffers from a Foxx action: + + res.send("

some HTML

"); + res.send({ success: true }); + res.send(new Buffer("some binary data")); + + The convenience method `res.sendFile()` can now be used to easily return the + contents of a file from a Foxx action: + + res.sendFile(applicationContext.foxxFilename("image.png")); + + `fs.write` now accepts not only strings but also Buffer objects as second parameter: + + fs.write(filename, "some data"); + fs.write(filename, new Buffer("some binary data")); + + `fs.readBuffer` can be used to return the contents of a file in a Buffer object. + + * improved insert performance of non-unique hash index inserts significantly in case + many duplicate keys are used in the index + + * issue #1042: set time zone in log output + + the command-line option `--log.use-local-time` was added to print dates and times in + the server-local timezone instead of UTC + + * command-line options that require a boolean value now validate the + + -- ArangoDB Maintainer Sun, 02 Nov 2014 01:08:15 +0100 + +arangodb (2.3.0a6-1.1) stable; urgency=low + + * Changed to Version 2.3.0-alpha6 + + * removed internal "_admin/modules/flush" in order to fix requireApp + + * added basic support for handling binary data in Foxx + + Buffer objects can now be used when setting the response body of any Foxx action. + Additionally, `res.send()` has been added as a convenience method for returning + strings, JSON objects or buffers from a Foxx action: + + res.send("

some HTML

"); + res.send({ success: true }); + res.send(new Buffer("some binary data")); + + The convenience method `res.sendFile()` can now be used to easily return the + contents of a file from a Foxx action: + + res.sendFile(applicationContext.foxxFilename("image.png")); + + `fs.write` now accepts not only strings but also Buffer objects as second parameter: + + fs.write(filename, "some data"); + fs.write(filename, new Buffer("some binary data")); + + `fs.readBuffer` can be used to return the contents of a file in a Buffer object. + + * improved insert performance of non-unique hash index inserts significantly in case + many duplicate keys are used in the index + + * issue #1042: set time zone in log output + + the command-line option `--log.use-local-time` was added to print dates and times in + the server-local timezone instead of UTC + + * command-line options that require a boolean value now validate the + + -- ArangoDB Maintainer Wed, 29 Oct 2014 15:30:13 +0100 + +arangodb (2.3.0a3-1.1) stable; urgency=low + + * Changed to Version 2.3.0-alpha3 + * Added a _relation function in the general-graph module. + + This deprecated _directedRelation and _undirectedRelation. + ArangoDB does not offer any constraints for undirected edges + which caused some confusion of users how undirected relations + have to be handled. Relation now only supports directed relations + and the user can actively simulate undirected relations. + + * changed return value of Foxx.applicationContext#collectionName: + + Previously, the function could return invalid collection names because + invalid characters were not replaced in the application name prefix, only + in the collection name passed. + + Now, the function replaces invalid characters also in the application name + prefix, which might to slightly different results for application names that + contained any characters outside the ranges [a-z], [A-Z] and [0-9]. + + * prevent XSS in AQL editor and logs view + + * integrated tutorial into ArangoShell and web interface + + * added option `--backslash-escape` for arangoimp when running CSV file imports + + * front-end: added download feature for (filtered) documents + + * front-end: added download feature for the results of a user query + + * front-end: added function to move documents to another collection + + * front-end: added sort-by attribute to the documents filter + + * front-end: added sorting feature to database, graph management and user management view. + + * issue #989: front-end: Databases view not refreshing after deleting a database + + * issue #991: front-end: Database search broken + + * front-end: added infobox which shows more information about a document (_id, _rev, _key) or + an edge (_id, _rev, _key, _from, _to). The from and to attributes are clickable and redirect + to their document location. + + * front-end: added edit-mode for deleting multiple documents at the same time. + + * front-end: added delete button to the detailed document/edge view. + + * front-end: added visual feedback for saving documents/edges inside the editor (error/success). + + * front-end: added auto-focusing for the first input field in a modal. + + * front-end: added validation for user input in a modal. + + * front-end: user defined queries are now stored inside the database and are bound to the current + user, instead of using the local storage functionality of the browsers. The outcome of this is + that user defined queries are now independently usable from any device. Also queries can now be + edited through the standard document editor of the front-end through the _users collection. + + * front-end: added import and export functionality for user defined queries. + + * front-end: added new keywords and functions to the aql-editor theme + + * front-end: applied tile-style to the graph view + + * front-end: now using the new graph api including multi-collection support + + * front-end: foxx apps are now deleteable + + * front-end: foxx apps are now installable and updateable through github, if github is their + origin. + + * front-end: added foxx app version control. Multiple versions of a single foxx app are now + installable and easy to manage and are also arranged in groups. + + * front-end: the user-set filter of a collection is now stored until the user navigates to + another collection. + + * front-end: fetching and filtering of documents, statistics, and query operations are now + handled with asynchronous ajax calls. + + * front-end: added progress indicator if the front-end is waiting for a server operation. + + * front-end: fixed wrong count of documents in the documents view of a collection. + + * front-end: fixed unexpected styling of the manage db view and navigation. + + * front-end: fixed wrong handling of select fields in a modal view. + + * front-end: fixed wrong positioning of some tooltips. + + * automatically call `toJSON` function of JavaScript objects (if present) + when serializing them into database documents. This change allows + storing JavaScript date objects in the database in a sensible manner. + + + + -- ArangoDB Maintainer Mon, 22 Sep 2014 20:30:35 +0200 + +arangodb (2.2.3-1.1) stable; urgency=low + + * Changed to Version 2.2.3 + + * added `around` for Foxx controller + + * added `type` option for HTTP API `GET /_api/document?collection=...` + + This allows controlling the type of results to be returned. By default, paths to + documents will be returned, e.g. + + [ + `/_api/document/test/mykey1`, + `/_api/document/test/mykey2`, + ... + ] + + To return a list of document ids instead of paths, the `type` URL parameter can be + set to `id`: + + [ + `test/mykey1`, + `test/mykey2`, + ... + ] + + To return a list of document keys only, the `type` URL parameter can be set to `key`: + + [ + `mykey1`, + `mykey2`, + ... + ] + + + * properly capitalize HTTP response header field names in case the `x-arango-async` + HTTP header was used in a request. + + * fixed several documentation issues + + * speedup for several general-graph functions, AQL functions starting with `GRAPH_` + and traversals + + + + -- ArangoDB Maintainer Tue, 02 Sep 2014 11:30:26 +0200 + +arangodb (2.2.3r1-1.1) stable; urgency=low + + * Changed to Version 2.2.3-rc1 + + * added `type` option for HTTP API `GET /_api/document?collection=...` + + This allows controlling the type of results to be returned. By default, paths to + documents will be returned, e.g. + + [ + `/_api/document/test/mykey1`, + `/_api/document/test/mykey2`, + ... + ] + + To return a list of document ids instead of paths, the `type` URL parameter can be + set to `id`: + + [ + `test/mykey1`, + `test/mykey2`, + ... + ] + + To return a list of document keys only, the `type` URL parameter can be set to `key`: + + [ + `mykey1`, + `mykey2`, + ... + ] + + + * properly capitalize HTTP response header field names in case the `x-arango-async` + HTTP header was used in a request. + + * fixed several documentation issues + + * speedup for several general-graph functions, AQL functions starting with `GRAPH_` + and traversals + + + + -- ArangoDB Maintainer Mon, 01 Sep 2014 15:58:14 +0200 + +arangodb (2.2.2-1.1) stable; urgency=low + + * Changed to Version 2.2.2 + + * allow storing non-reserved attribute names starting with an underscore + + Previous versions of ArangoDB parsed away all attribute names that started with an + underscore (e.g. `_test', '_foo', `_bar`) on all levels of a document (root level + and sub-attribute levels). While this behavior was documented, it was unintuitive and + prevented storing documents inside other documents, e.g.: + + { + "_key" : "foo", + "_type" : "mydoc", + "references" : [ + { + "_key" : "something", + "_rev" : "...", + "value" : 1 + }, + { + "_key" : "something else", + "_rev" : "...", + "value" : 2 + } + ] + } + + In the above example, previous versions of ArangoDB removed all attributes and + sub-attributes that started with underscores, meaning the embedded documents would lose + some of their attributes. 2.2.2 should preserve such attributes, and will also allow + storing user-defined attribute names on the top-level even if they start with underscores + (such as `_type` in the above example). + + * fix conversion of JavaScript String, Number and Boolean objects to JSON. + + Objects created in JavaScript using `new Number(...)`, `new String(...)`, or + `new Boolean(...)` were not converted to JSON correctly. + + * fixed a race condition on task registration (i.e. `require("org/arangodb/tasks").register()`) + + this race condition led to undefined behavior when a just-created task with no offset and + no period was instantly executed and deleted by the task scheduler, before the `register` + function returned to the caller. + + * changed run-tests.sh to execute all suitable tests. + + * switch to new version of gyp + + * fixed upgrade button + + + + -- ArangoDB Maintainer Fri, 08 Aug 2014 12:26:37 +0200 + +arangodb (2.2.2r1-1.1) stable; urgency=low + + * Changed to Version 2.2.2-rc1 + + * fixed a race condition on task registration (i.e. `require("org/arangodb/tasks").register()`) + + this race condition led to undefined behavior when a just-created task with no offset and + no period was instantly executed and deleted by the task scheduler, before the `register` + function returned to the caller. + + * changed run-tests.sh to execute all suitable tests. + + * switch to new version of gyp + + * fixed upgrade button + + + + -- ArangoDB Maintainer Wed, 06 Aug 2014 11:21:54 +0200 + +arangodb (2.2.1-1.1) stable; urgency=low + + * Changed to Version 2.2.1 + + * fixed issue with --check-version: when creating a new database the check failed + + * issue #947 Foxx applicationContext missing some properties + + * added startup option `--wal.suppress-shape-information` + + Setting this option to `true` will reduce memory and disk space usage and require + less CPU time when modifying documents or edges. It should therefore be turned on + for standalone ArangoDB servers. However, for servers that are used as replication + masters, setting this option to `true` will effectively disable the usage of the + write-ahead log for replication, so it should be set to `false` for any replication + master servers. + + The default value for this option is `false`. + + * added optional `ttl` attribute to specify result cursor expiration for HTTP API method + `POST /_api/cursor` + + The `ttl` attribute can be used to prevent cursor results from timing out too early. + + * (reported by Christian Neubauer): + + The problem was that in Google's V8, signed and unsigned chars are not always declared cleanly. + so we need to force v8 to compile with forced signed chars which is done by the Flag: + -fsigned-char + at least it is enough to follow the instructions of compiling arango on rasperry + and add "CFLAGS='-fsigned-char'" to the make command of V8 and remove the armv7=0 + + * Fixed a bug with the replication client. In the case of single document + transactions the collection was not write locked. + + + + -- ArangoDB Maintainer Thu, 24 Jul 2014 12:22:18 +0200 + +arangodb (2.2.1r1-1.1) stable; urgency=low + + * Changed to Version 2.2.1-rc1 + + * fixed issue with --check-version: when creating a new database the check failed + + * issue #947 Foxx applicationContext missing some properties + + * added startup option `--wal.suppress-shape-information` + + Setting this option to `true` will reduce memory and disk space usage and require + less CPU time when modifying documents or edges. It should therefore be turned on + for standalone ArangoDB servers. However, for servers that are used as replication + masters, setting this option to `true` will effectively disable the usage of the + write-ahead log for replication, so it should be set to `false` for any replication + master servers. + + The default value for this option is `false`. + + * added optional `ttl` attribute to specify result cursor expiration for HTTP API method + `POST /_api/cursor` + + The `ttl` attribute can be used to prevent cursor results from timing out too early. + + * (reported by Christian Neubauer): + + The problem was that in Google's V8, signed and unsigned chars are not always declared cleanly. + so we need to force v8 to compile with forced signed chars which is done by the Flag: + -fsigned-char + at least it is enough to follow the instructions of compiling arango on rasperry + and add "CFLAGS='-fsigned-char'" to the make command of V8 and remove the armv7=0 + + * Fixed a bug with the replication client. In the case of single document + transactions the collection was not write locked. + + + + -- ArangoDB Maintainer Wed, 23 Jul 2014 18:37:33 +0200 + +arangodb (2.2.0-1.1) stable; urgency=low + + * Changed to Version 2.2.0 + + * The replication methods `logger.start`, `logger.stop` and `logger.properties` are + no-ops in ArangoDB 2.2 as there is no separate replication logger anymore. Data changes + are logged into the write-ahead log in ArangoDB 2.2, and not separately by the + replication logger. The replication logger object is still there in ArangoDB 2.2 to + ensure backwards-compatibility, however, logging cannot be started, stopped or + configured anymore. Using any of these methods will do nothing. + + This also affects the following HTTP API methods: + - `PUT /_api/replication/logger-start` + - `PUT /_api/replication/logger-stop` + - `GET /_api/replication/logger-config` + - `PUT /_api/replication/logger-config` + + Using any of these methods is discouraged from now on as they will be removed in + future versions of ArangoDB. + + * INCOMPATIBLE CHANGE: replication of transactions has changed. Previously, transactions + were logged on a master in one big block and shipped to a slave in one block, too. + Now transactions will be logged and replicated as separate entries, allowing transactions + to be bigger and also ensure replication progress. + + This change also affects the behavior of the `stop` method of the replication applier. + If the replication applier is now stopped manually using the `stop` method and later + restarted using the `start` method, any transactions that were unfinished at the + point of stopping will be aborted on a slave, even if they later commit on the master. + + In ArangoDB 2.2, stopping the replication applier manually should be avoided unless the + goal is to stop replication permanently or to do a full resync with the master anyway. + If the replication applier still must be stopped, it should be made sure that the + slave has fetched and applied all pending operations from a master, and that no + extra transactions are started on the master before the `stop` command on the slave + is executed. + + Replication of transactions in ArangoDB 2.2 might also lock the involved collections on + the slave while a transaction is either committed or aborted on the master and the + change has been replicated to the slave. This change in behavior may be important for + slave servers that are used for read-scaling. In order to avoid long lasting collection + locks on the slave, transactions should be kept small. + + The `_replication` system collection is not used anymore in ArangoDB 2.2 and its usage is + discouraged. + + * INCOMPATIBLE CHANGE: the figures reported by the `collection.figures` method + now only reflect documents and data contained in the journals and datafiles of + collections. Documents or deletions contained only in the write-ahead log will + not influence collection figures until the write-ahead log garbage collection + kicks in. The figures for a collection might therefore underreport the total + resource usage of a collection. + + Additionally, the attributes `lastTick` and `uncollectedLogfileEntries` have been + added to the result of the `figures` operation and the HTTP API method + `PUT /_api/collection/figures` + + * added `insert` method as an alias for `save`. Documents can now be inserted into + a collection using either method: + + db.test.save({ foo: "bar" }); + db.test.insert({ foo: "bar" }); + + * added support for data-modification AQL queries + + * added AQL keywords `INSERT`, `UPDATE`, `REPLACE` and `REMOVE` (and `WITH`) to + support data-modification AQL queries. + + Unquoted usage of these keywords for attribute names in AQL queries will likely + fail in ArangoDB 2.2. If any such attribute name needs to be used in a query, it + should be enclosed in backticks to indicate the usage of a literal attribute + name. + + For example, the following query will fail in ArangoDB 2.2 with a parse error: + + FOR i IN foo RETURN i.remove + + and needs to be rewritten like this: + + FOR i IN foo RETURN i.`remove` + + * disallow storing of JavaScript objects that contain JavaScript native objects + of type `Date`, `Function`, `RegExp` or `External`, e.g. + + db.test.save({ foo: /bar/ }); + db.test.save({ foo: new Date() }); + + will now print + + Error: cannot be converted into JSON shape: could not shape document + + Previously, objects of these types were silently converted into an empty object + (i.e. `{ }`). + + To store such objects in a collection, explicitly convert them into strings + like this: + + db.test.save({ foo: String(/bar/) }); + db.test.save({ foo: String(new Date()) }); + + * The replication methods `logger.start`, `logger.stop` and `logger.properties` are + no-ops in ArangoDB 2.2 as there is no separate replication logger anymore. Data changes + are logged into the write-ahead log in ArangoDB 2.2, and not separately by the + replication logger. The replication logger object is still there in ArangoDB 2.2 to + ensure backwards-compatibility, however, logging cannot be started, stopped or + configured anymore. Using any of these methods will do nothing. + + This also affects the following HTTP API methods: + - `PUT /_api/replication/logger-start` + - `PUT /_api/replication/logger-stop` + - `GET /_api/replication/logger-config` + - `PUT /_api/replication/logger-config` + + Using any of these methods is discouraged from now on as they will be removed in + future versions of ArangoDB. + + * INCOMPATIBLE CHANGE: replication of transactions has changed. Previously, transactions + were logged on a master in one big block and shipped to a slave in one block, too. + Now transactions will be logged and replicated as separate entries, allowing transactions + to be bigger and also ensure replication progress. + + This change also affects the behavior of the `stop` method of the replication applier. + If the replication applier is now stopped manually using the `stop` method and later + restarted using the `start` method, any transactions that were unfinished at the + point of stopping will be aborted on a slave, even if they later commit on the master. + + In ArangoDB 2.2, stopping the replication applier manually should be avoided unless the + goal is to stop replication permanently or to do a full resync with the master anyway. + If the replication applier still must be stopped, it should be made sure that the + slave has fetched and applied all pending operations from a master, and that no + extra transactions are started on the master before the `stop` command on the slave + is executed. + + Replication of transactions in ArangoDB 2.2 might also lock the involved collections on + the slave while a transaction is either committed or aborted on the master and the + change has been replicated to the slave. This change in behavior may be important for + slave servers that are used for read-scaling. In order to avoid long lasting collection + locks on the slave, transactions should be kept small. + + The `_replication` system collection is not used anymore in ArangoDB 2.2 and its usage is + discouraged. + + * INCOMPATIBLE CHANGE: the figures reported by the `collection.figures` method + now only reflect documents and data contained in the journals and datafiles of + collections. Documents or deletions contained only in the write-ahead log will + not influence collection figures until the write-ahead log garbage collection + kicks in. The figures for a collection might therefore underreport the total + resource usage of a collection. + + Additionally, the attributes `lastTick` and `uncollectedLogfileEntries` have been + added to the result of the `figures` operation and the HTTP API method + `PUT /_api/collection/figures` + + * added `insert` method as an alias for `save`. Documents can now be inserted into + a collection using either method: + + db.test.save({ foo: "bar" }); + db.test.insert({ foo: "bar" }); + + * added support for data-modification AQL queries + + * added AQL keywords `INSERT`, `UPDATE`, `REPLACE` and `REMOVE` (and `WITH`) to + support data-modification AQL queries. + + Unquoted usage of these keywords for attribute names in AQL queries will likely + fail in ArangoDB 2.2. If any such attribute name needs to be used in a query, it + should be enclosed in backticks to indicate the usage of a literal attribute + name. + + For example, the following query will fail in ArangoDB 2.2 with a parse error: + + FOR i IN foo RETURN i.remove + + and needs to be rewritten like this: + + FOR i IN foo RETURN i.`remove` + + * disallow storing of JavaScript objects that contain JavaScript native objects + of type `Date`, `Function`, `RegExp` or `External`, e.g. + + db.test.save({ foo: /bar/ }); + db.test.save({ foo: new Date() }); + + will now print + + Error: cannot be converted into JSON shape: could not shape document + + Previously, objects of these types were silently converted into an empty object + (i.e. `{ }`). + + To store such objects in a collection, explicitly convert them into strings + like this: + + db.test.save({ foo: String(/bar/) }); + db.test.save({ foo: String(new Date()) }); + + * honor startup option `--server.disable-statistics` when deciding whether or not + to start periodic statistics collection jobs + + Previously, the statistics collection jobs were started even if the server was + started with the `--server.disable-statistics` flag being set to `true` + + * removed startup option `--random.no-seed` + + This option had no effect in previous versions of ArangoDB and was thus removed. + + * removed startup option `--database.remove-on-drop` + + This option was used for debugging only. + + * removed startup option `--database.force-sync-properties` + + This option is now superfluous as collection properties are now stored in the + write-ahead log. + + * introduced write-ahead log + + All write operations in an ArangoDB server instance are automatically logged + to the server's write-ahead log. The write-ahead log is a set of append-only + logfiles, and it is used in case of a crash recovery and for replication. + Data from the write-ahead log will eventually be moved into the journals or + datafiles of collections, allowing the server to remove older write-ahead log + logfiles. Figures of collections will be updated when data are moved from the + write-ahead log into the journals or datafiles of collections. + + Cross-collection transactions in ArangoDB should benefit considerably by this + change, as less writes than in previous versions are required to ensure the data + of multiple collections are atomcially and durably committed. All data-modifying + operations inside transactions (insert, update, remove) will write their + operations into the write-ahead log directly, making transactions with multiple + operations also require less physical memory than in previous versions of ArangoDB, + that required all transaction data to fit into RAM. + + The `_trx` system collection is not used anymore in ArangoDB 2.2 and its usage is + discouraged. + + The data in the write-ahead log can also be used in the replication context. + The `_replication` collection that was used in previous versions of ArangoDB to + store all changes on the server is not used anymore in ArangoDB 2.2. Instead, + slaves can read from a master's write-ahead log to get informed about most + recent changes. This removes the need to store data-modifying operations in + both the actual place and the `_replication` collection. + + * removed startup option `--server.disable-replication-logger` + + This option is superfluous in ArangoDB 2.2. There is no dedicated replication + logger in ArangoDB 2.2. There is now always the write-ahead log, and it is also + used as the server's replication log. Specifying the startup option + `--server.disable-replication-logger` will do nothing in ArangoDB 2.2, but the + option should not be used anymore as it might be removed in a future version. + + * changed behavior of replication logger + + There is no dedicated replication logger in ArangoDB 2.2 as there is the + write-ahead log now. The existing APIs for starting and stopping the replication + logger still exist in ArangoDB 2.2 for downwards-compatibility, but calling + the start or stop operations are no-ops in ArangoDB 2.2. When querying the + replication logger status via the API, the server will always report that the + replication logger is running. Configuring the replication logger is a no-op + in ArangoDB 2.2, too. Changing the replication logger configuration has no + effect. Instead, the write-ahead log configuration can be changed. + + * removed MRuby integration for arangod + + ArangoDB had an experimental MRuby integration in some of the publish builds. + This wasn't continuously developed, and so it has been removed in ArangoDB 2.2. + + This change has led to the following startup options being superfluous: + + - `--ruby.gc-interval` + - `--ruby.action-directory` + - `--ruby.modules-path` + - `--ruby.startup-directory` + + Specifying these startup options will do nothing in ArangoDB 2.2, but the + options should be avoided from now on as they might be removed in future versions. + + * reclaim index memory when last document in collection is deleted + + Previously, deleting documents from a collection did not lead to index sizes being + reduced. Instead, the already allocated index memory was re-used when a collection + was refilled. + + Now, index memory for primary indexes and hash indexes is reclaimed instantly when + the last document from a collection is removed. + + * inlined and optimized functions in hash indexes + + * added AQL TRANSLATE function + + This function can be used to perform lookups from static lists, e.g. + + LET countryNames = { US: "United States", UK: "United Kingdom", FR: "France" } + RETURN TRANSLATE("FR", countryNames) + + * fixed datafile debugger + + * fixed check-version for empty directory + + * moved try/catch block to the top of routing chain + + * added mountedApp function for foxx-manager + + * fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web + does not change to cluster overview + + * fixed dfdb: should not start any other V8 threads + + * cleanup of version-check, added module org/arangodb/database-version, + added --check-version option + + * fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with + "WARNING format string is corrupt" when in non-system DB Dashboard + + * specialized primary index implementation to allow faster hash table + rebuilding and reduce lookups in datafiles for the actual value of `_key`. + + * issue #862: added `--overwrite` option to arangoimp + + * removed number of property lookups for documents during AQL queries that + access documents + + * prevent buffering of long print results in arangosh's and arangod's print + command + + this change will emit buffered intermediate print results and discard the + output buffer to quickly deliver print results to the user, and to prevent + constructing very large buffers for large results + + * removed sorting of attribute names for use in a collection's shaper + + sorting attribute names was done on document insert to keep attributes + of a collection in sorted order for faster comparisons. The sort order + of attributes was only used in one particular and unlikely case, so it + was removed. Collections with many different attribute names should + benefit from this change by faster inserts and slightly less memory usage. + + * fixed a bug in arangodump which got the collection name in _from and _to + attributes of edges wrong (all were "_unknown") + + * fixed a bug in arangorestore which did not recognise wrong _from and _to + attributes of edges + + * improved error detection and reporting in arangorestore + + + + -- ArangoDB Maintainer Fri, 11 Jul 2014 12:28:20 +0200 + +arangodb (2.2.0b3-1.1) stable; urgency=low + + * Changed to Version 2.2.0-beta3 + + * honor startup option `--server.disable-statistics` when deciding whether or not + to start periodic statistics collection jobs + + Previously, the statistics collection jobs were started even if the server was + started with the `--server.disable-statistics` flag being set to `true` + + * removed startup option `--random.no-seed` + + This option had no effect in previous versions of ArangoDB and was thus removed. + + * removed startup option `--database.remove-on-drop` + + * introduced write-ahead log + + All write operations in an ArangoDB server instance are automatically logged + to the server's write-ahead log. The write-ahead log is a set of append-only + logfiles, and it is used in case of a crash recovery and for replication. + Data from the write-ahead log will eventually be moved into the datafiles of + collections, allowing the server to remove older write-ahead log logfiles. + + Cross-collection transactions in ArangoDB should benefit considerably by this + change, as less writes than in previous versions is required to ensure the data + of multiple collections are atomcially and durably committed. All data-modifying + operations inside transactions (insert, update, remove) will write their + operations into the write-ahead log directly, making transactions with multiple + operations also require less physical memory than in previous versions of ArangoDB, + where most parts of transactions were handled in RAM first. + + The data in the write-ahead log can also be used in the replication context. + The `_replication` collection that was used in previous versions of ArangoDB to + store all changes on the server is not used anymore in ArangoDB 2.2. Instead, + slaves can read from a master's write-ahead log to get informed about most + recent changes. This removes the need to store data-modifying operations in + both the actual place and the `_replication` collection. + + Note: the replication from the write-ahead log is still in development. + + * removed startup option `--server.disable-replication-logger` + + This option is superfluous in ArangoDB 2.2. There is no dedicated replication + logger in ArangoDB 2.2. There is now always the write-ahead log, and it is also + used as the server's replication log. Specifying the startup option + `--server.disable-replication-logger` will do nothing in ArangoDB 2.2, but the + option should not be used anymore as it might be removed in a future version. + + * changed behavior of replication logger + + There is no dedicated replication logger in ArangoDB 2.2 as there is the + write-ahead log now. The existing APIs for starting and stopping the replication + logger still exist in ArangoDB 2.2 for downwards-compatibility, but calling + the start or stop operations are no-ops in ArangoDB 2.2. When querying the + replication logger status via the API, the server will always report that the + replication logger is running. Configuring the replication logger is a no-op + in ArangoDB 2.2, too. Changing the replication logger configuration has no + effect. Instead, the write-ahead log configuration can be changed. + + * removed MRuby integration for arangod + + ArangoDB had an experimental MRuby integration in some of the publish builds. + This wasn't continuously developed, and so it has been removed in ArangoDB 2.2. + + This change has led to the following startup options being superfluous: + + - `--ruby.gc-interval` + - `--ruby.action-directory` + - `--ruby.modules-path` + - `--ruby.startup-directory` + + Specifying these startup options will do nothing in ArangoDB 2.2, but the + options should be avoided from now on as they might be removed in future versions. + + * reclaim index memory when last document in collection is deleted + + Previously, deleting documents from a collection did not lead to index sizes being + reduced. Instead, the already allocated index memory was re-used when a collection + was refilled. + + Now, index memory for primary indexes and hash indexes is reclaimed instantly when + the last document from a collection is removed. + + * inlined and optimized functions in hash indexes + + * added AQL TRANSLATE function + + This function can be used to perform lookups from static lists, e.g. + + LET countryNames = { US: "United States", UK: "United Kingdom", FR: "France" } + RETURN TRANSLATE("FR", countryNames) + + * fixed datafile debugger + + * fixed check-version for empty directory + + * moved try/catch block to the top of routing chain + + * added mountedApp function for foxx-manager + + * fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web + does not change to cluster overview + + * fixed dfdb: should not start any other V8 threads + + * cleanup of version-check, added module org/arangodb/database-version, + added --check-version option + + * fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with + "WARNING format string is corrupt" when in non-system DB Dashboard + + * specialized primary index implementation to allow faster hash table + rebuilding and reduce lookups in datafiles for the actual value of `_key`. + + * issue #862: added `--overwrite` option to arangoimp + + * removed number of property lookups for documents during AQL queries that + access documents + + * prevent buffering of long print results in arangosh's and arangod's print + command + + this change will emit buffered intermediate print results and discard the + output buffer to quickly deliver print results to the user, and to prevent + constructing very large buffers for large results + + * removed sorting of attribute names for use in a collection's shaper + + sorting attribute names was done on document insert to keep attributes + of a collection in sorted order for faster comparisons. The sort order + of attributes was only used in one particular and unlikely case, so it + was removed. Collections with many different attribute names should + benefit from this change by faster inserts and slightly less memory usage. + + + + -- ArangoDB Maintainer Tue, 01 Jul 2014 18:30:19 +0200 + +arangodb (2.2.0b2-1.1) stable; urgency=low + + * Changed to Version 2.2.0-beta2 + + * honor startup option `--server.disable-statistics` when deciding whether or not + to start periodic statistics collection jobs + + Previously, the statistics collection jobs were started even if the server was + started with the `--server.disable-statistics` flag being set to `true` + + * removed startup option `--random.no-seed` + + This option had no effect in previous versions of ArangoDB and was thus removed. + + * removed startup option `--database.remove-on-drop` + + * introduced write-ahead log + + All write operations in an ArangoDB server instance are automatically logged + to the server's write-ahead log. The write-ahead log is a set of append-only + logfiles, and it is used in case of a crash recovery and for replication. + Data from the write-ahead log will eventually be moved into the datafiles of + collections, allowing the server to remove older write-ahead log logfiles. + + Cross-collection transactions in ArangoDB should benefit considerably by this + change, as less writes than in previous versions is required to ensure the data + of multiple collections are atomcially and durably committed. All data-modifying + operations inside transactions (insert, update, remove) will write their + operations into the write-ahead log directly, making transactions with multiple + operations also require less physical memory than in previous versions of ArangoDB, + where most parts of transactions were handled in RAM first. + + The data in the write-ahead log can also be used in the replication context. + The `_replication` collection that was used in previous versions of ArangoDB to + store all changes on the server is not used anymore in ArangoDB 2.2. Instead, + slaves can read from a master's write-ahead log to get informed about most + recent changes. This removes the need to store data-modifying operations in + both the actual place and the `_replication` collection. + + Note: the replication from the write-ahead log is still in development. + + * removed startup option `--server.disable-replication-logger` + + This option is superfluous in ArangoDB 2.2. There is no dedicated replication + logger in ArangoDB 2.2. There is now always the write-ahead log, and it is also + used as the server's replication log. Specifying the startup option + `--server.disable-replication-logger` will do nothing in ArangoDB 2.2, but the + option should not be used anymore as it might be removed in a future version. + + * changed behavior of replication logger + + There is no dedicated replication logger in ArangoDB 2.2 as there is the + write-ahead log now. The existing APIs for starting and stopping the replication + logger still exist in ArangoDB 2.2 for downwards-compatibility, but calling + the start or stop operations are no-ops in ArangoDB 2.2. When querying the + replication logger status via the API, the server will always report that the + replication logger is running. Configuring the replication logger is a no-op + in ArangoDB 2.2, too. Changing the replication logger configuration has no + effect. Instead, the write-ahead log configuration can be changed. + + * removed MRuby integration for arangod + + ArangoDB had an experimental MRuby integration in some of the publish builds. + This wasn't continuously developed, and so it has been removed in ArangoDB 2.2. + + This change has led to the following startup options being superfluous: + + - `--ruby.gc-interval` + - `--ruby.action-directory` + - `--ruby.modules-path` + - `--ruby.startup-directory` + + Specifying these startup options will do nothing in ArangoDB 2.2, but the + options should be avoided from now on as they might be removed in future versions. + + * reclaim index memory when last document in collection is deleted + + Previously, deleting documents from a collection did not lead to index sizes being + reduced. Instead, the already allocated index memory was re-used when a collection + was refilled. + + Now, index memory for primary indexes and hash indexes is reclaimed instantly when + the last document from a collection is removed. + + * inlined and optimized functions in hash indexes + + * added AQL TRANSLATE function + + This function can be used to perform lookups from static lists, e.g. + + LET countryNames = { US: "United States", UK: "United Kingdom", FR: "France" } + RETURN TRANSLATE("FR", countryNames) + + * fixed datafile debugger + + * fixed check-version for empty directory + + * moved try/catch block to the top of routing chain + + * added mountedApp function for foxx-manager + + * fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web + does not change to cluster overview + + * fixed dfdb: should not start any other V8 threads + + * cleanup of version-check, added module org/arangodb/database-version, + added --check-version option + + * fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with + "WARNING format string is corrupt" when in non-system DB Dashboard + + * specialized primary index implementation to allow faster hash table + rebuilding and reduce lookups in datafiles for the actual value of `_key`. + + * issue #862: added `--overwrite` option to arangoimp + + * removed number of property lookups for documents during AQL queries that + access documents + + * prevent buffering of long print results in arangosh's and arangod's print + command + + this change will emit buffered intermediate print results and discard the + output buffer to quickly deliver print results to the user, and to prevent + constructing very large buffers for large results + + * removed sorting of attribute names for use in a collection's shaper + + sorting attribute names was done on document insert to keep attributes + of a collection in sorted order for faster comparisons. The sort order + of attributes was only used in one particular and unlikely case, so it + was removed. Collections with many different attribute names should + benefit from this change by faster inserts and slightly less memory usage. + + + + -- ArangoDB Maintainer Tue, 01 Jul 2014 09:51:22 +0200 + +arangodb (2.2.0b1-1.1) stable; urgency=low + + * Changed to Version 2.2.0-beta1 + + * honor startup option `--server.disable-statistics` when deciding whether or not + to start periodic statistics collection jobs + + Previously, the statistics collection jobs were started even if the server was + started with the `--server.disable-statistics` flag being set to `true` + + * removed startup option `--random.no-seed` + + This option had no effect in previous versions of ArangoDB and was thus removed. + + * removed startup option `--database.remove-on-drop` + + * introduced write-ahead log + + All write operations in an ArangoDB server instance are automatically logged + to the server's write-ahead log. The write-ahead log is a set of append-only + logfiles, and it is used in case of a crash recovery and for replication. + Data from the write-ahead log will eventually be moved into the datafiles of + collections, allowing the server to remove older write-ahead log logfiles. + + Cross-collection transactions in ArangoDB should benefit considerably by this + change, as less writes than in previous versions is required to ensure the data + of multiple collections are atomcially and durably committed. All data-modifying + operations inside transactions (insert, update, remove) will write their + operations into the write-ahead log directly, making transactions with multiple + operations also require less physical memory than in previous versions of ArangoDB, + where most parts of transactions were handled in RAM first. + + The data in the write-ahead log can also be used in the replication context. + The `_replication` collection that was used in previous versions of ArangoDB to + store all changes on the server is not used anymore in ArangoDB 2.2. Instead, + slaves can read from a master's write-ahead log to get informed about most + recent changes. This removes the need to store data-modifying operations in + both the actual place and the `_replication` collection. + + Note: the replication from the write-ahead log is still in development. + + * removed startup option `--server.disable-replication-logger` + + This option is superfluous in ArangoDB 2.2. There is no dedicated replication + logger in ArangoDB 2.2. There is now always the write-ahead log, and it is also + used as the server's replication log. Specifying the startup option + `--server.disable-replication-logger` will do nothing in ArangoDB 2.2, but the + option should not be used anymore as it might be removed in a future version. + + * changed behavior of replication logger + + There is no dedicated replication logger in ArangoDB 2.2 as there is the + write-ahead log now. The existing APIs for starting and stopping the replication + logger still exist in ArangoDB 2.2 for downwards-compatibility, but calling + the start or stop operations are no-ops in ArangoDB 2.2. When querying the + replication logger status via the API, the server will always report that the + replication logger is running. Configuring the replication logger is a no-op + in ArangoDB 2.2, too. Changing the replication logger configuration has no + effect. Instead, the write-ahead log configuration can be changed. + + * removed MRuby integration for arangod + + ArangoDB had an experimental MRuby integration in some of the publish builds. + This wasn't continuously developed, and so it has been removed in ArangoDB 2.2. + + This change has led to the following startup options being superfluous: + + - `--ruby.gc-interval` + - `--ruby.action-directory` + - `--ruby.modules-path` + - `--ruby.startup-directory` + + Specifying these startup options will do nothing in ArangoDB 2.2, but the + options should be avoided from now on as they might be removed in future versions. + + * reclaim index memory when last document in collection is deleted + + Previously, deleting documents from a collection did not lead to index sizes being + reduced. Instead, the already allocated index memory was re-used when a collection + was refilled. + + Now, index memory for primary indexes and hash indexes is reclaimed instantly when + the last document from a collection is removed. + + * inlined and optimized functions in hash indexes + + * added AQL TRANSLATE function + + This function can be used to perform lookups from static lists, e.g. + + LET countryNames = { US: "United States", UK: "United Kingdom", FR: "France" } + RETURN TRANSLATE("FR", countryNames) + + * fixed datafile debugger + + * fixed check-version for empty directory + + * moved try/catch block to the top of routing chain + + * added mountedApp function for foxx-manager + + * fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web + does not change to cluster overview + + * fixed dfdb: should not start any other V8 threads + + * cleanup of version-check, added module org/arangodb/database-version, + added --check-version option + + * fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with + "WARNING format string is corrupt" when in non-system DB Dashboard + + * specialized primary index implementation to allow faster hash table + rebuilding and reduce lookups in datafiles for the actual value of `_key`. + + * issue #862: added `--overwrite` option to arangoimp + + * removed number of property lookups for documents during AQL queries that + access documents + + * prevent buffering of long print results in arangosh's and arangod's print + command + + this change will emit buffered intermediate print results and discard the + output buffer to quickly deliver print results to the user, and to prevent + constructing very large buffers for large results + + * removed sorting of attribute names for use in a collection's shaper + + sorting attribute names was done on document insert to keep attributes + of a collection in sorted order for faster comparisons. The sort order + of attributes was only used in one particular and unlikely case, so it + was removed. Collections with many different attribute names should + benefit from this change by faster inserts and slightly less memory usage. + + + + -- ArangoDB Maintainer Sat, 28 Jun 2014 10:34:22 +0200 + +arangodb (2.2.0a6-1.1) stable; urgency=low + + * Changed to Version 2.2.0-alpha6 + + * honor startup option `--server.disable-statistics` when deciding whether or not + to start periodic statistics collection jobs + + Previously, the statistics collection jobs were started even if the server was + started with the `--server.disable-statistics` flag being set to `true` + + * removed startup option `--random.no-seed` + + This option had no effect in previous versions of ArangoDB and was thus removed. + + * removed startup option `--database.remove-on-drop` + + * introduced write-ahead log + + All write operations in an ArangoDB server instance are automatically logged + to the server's write-ahead log. The write-ahead log is a set of append-only + logfiles, and it is used in case of a crash recovery and for replication. + Data from the write-ahead log will eventually be moved into the datafiles of + collections, allowing the server to remove older write-ahead log logfiles. + + Cross-collection transactions in ArangoDB should benefit considerably by this + change, as less writes than in previous versions is required to ensure the data + of multiple collections are atomcially and durably committed. All data-modifying + operations inside transactions (insert, update, remove) will write their + operations into the write-ahead log directly, making transactions with multiple + operations also require less physical memory than in previous versions of ArangoDB, + where most parts of transactions were handled in RAM first. + + The data in the write-ahead log can also be used in the replication context. + The `_replication` collection that was used in previous versions of ArangoDB to + store all changes on the server is not used anymore in ArangoDB 2.2. Instead, + slaves can read from a master's write-ahead log to get informed about most + recent changes. This removes the need to store data-modifying operations in + both the actual place and the `_replication` collection. + + Note: the replication from the write-ahead log is still in development. + + * removed startup option `--server.disable-replication-logger` + + This option is superfluous in ArangoDB 2.2. There is no dedicated replication + logger in ArangoDB 2.2. There is now always the write-ahead log, and it is also + used as the server's replication log. Specifying the startup option + `--server.disable-replication-logger` will do nothing in ArangoDB 2.2, but the + option should not be used anymore as it might be removed in a future version. + + * changed behavior of replication logger + + There is no dedicated replication logger in ArangoDB 2.2 as there is the + write-ahead log now. The existing APIs for starting and stopping the replication + logger still exist in ArangoDB 2.2 for downwards-compatibility, but calling + the start or stop operations are no-ops in ArangoDB 2.2. When querying the + replication logger status via the API, the server will always report that the + replication logger is running. Configuring the replication logger is a no-op + in ArangoDB 2.2, too. Changing the replication logger configuration has no + effect. Instead, the write-ahead log configuration can be changed. + + * removed MRuby integration for arangod + + ArangoDB had an experimental MRuby integration in some of the publish builds. + This wasn't continuously developed, and so it has been removed in ArangoDB 2.2. + + This change has led to the following startup options being superfluous: + + - `--ruby.gc-interval` + - `--ruby.action-directory` + - `--ruby.modules-path` + - `--ruby.startup-directory` + + Specifying these startup options will do nothing in ArangoDB 2.2, but the + options should be avoided from now on as they might be removed in future versions. + + * reclaim index memory when last document in collection is deleted + + Previously, deleting documents from a collection did not lead to index sizes being + reduced. Instead, the already allocated index memory was re-used when a collection + was refilled. + + Now, index memory for primary indexes and hash indexes is reclaimed instantly when + the last document from a collection is removed. + + * inlined and optimized functions in hash indexes + + * added AQL TRANSLATE function + + This function can be used to perform lookups from static lists, e.g. + + LET countryNames = { US: "United States", UK: "United Kingdom", FR: "France" } + RETURN TRANSLATE("FR", countryNames) + + * fixed datafile debugger + + * fixed check-version for empty directory + + * moved try/catch block to the top of routing chain + + * added mountedApp function for foxx-manager + + * fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web + does not change to cluster overview + + * fixed dfdb: should not start any other V8 threads + + * cleanup of version-check, added module org/arangodb/database-version, + added --check-version option + + * fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with + "WARNING format string is corrupt" when in non-system DB Dashboard + + * specialized primary index implementation to allow faster hash table + rebuilding and reduce lookups in datafiles for the actual value of `_key`. + + * issue #862: added `--overwrite` option to arangoimp + + * removed number of property lookups for documents during AQL queries that + access documents + + * prevent buffering of long print results in arangosh's and arangod's print + command + + this change will emit buffered intermediate print results and discard the + output buffer to quickly deliver print results to the user, and to prevent + constructing very large buffers for large results + + * removed sorting of attribute names for use in a collection's shaper + + sorting attribute names was done on document insert to keep attributes + of a collection in sorted order for faster comparisons. The sort order + of attributes was only used in one particular and unlikely case, so it + was removed. Collections with many different attribute names should + benefit from this change by faster inserts and slightly less memory usage. + + + + -- ArangoDB Maintainer Fri, 27 Jun 2014 11:33:12 +0200 + +arangodb (2.2.0a4-1.1) stable; urgency=low + + * Changed to Version 2.2.0-alpha4 + + * honor startup option `--server.disable-statistics` when deciding whether or not + to start periodic statistics collection jobs + + Previously, the statistics collection jobs were started even if the server was + started with the `--server.disable-statistics` flag being set to `true` + + * removed startup option `--random.no-seed` + + This option had no effect in previous versions of ArangoDB and was thus removed. + + * removed startup option `--database.remove-on-drop` + + * introduced write-ahead log + + All write operations in an ArangoDB server instance are automatically logged + to the server's write-ahead log. The write-ahead log is a set of append-only + logfiles, and it is used in case of a crash recovery and for replication. + Data from the write-ahead log will eventually be moved into the datafiles of + collections, allowing the server to remove older write-ahead log logfiles. + + Cross-collection transactions in ArangoDB should benefit considerably by this + change, as less writes than in previous versions is required to ensure the data + of multiple collections are atomcially and durably committed. All data-modifying + operations inside transactions (insert, update, remove) will write their + operations into the write-ahead log directly, making transactions with multiple + operations also require less physical memory than in previous versions of ArangoDB, + where most parts of transactions were handled in RAM first. + + The data in the write-ahead log can also be used in the replication context. + The `_replication` collection that was used in previous versions of ArangoDB to + store all changes on the server is not used anymore in ArangoDB 2.2. Instead, + slaves can read from a master's write-ahead log to get informed about most + recent changes. This removes the need to store data-modifying operations in + both the actual place and the `_replication` collection. + + Note: the replication from the write-ahead log is still in development. + + * removed startup option `--server.disable-replication-logger` + + This option is superfluous in ArangoDB 2.2. There is no dedicated replication + logger in ArangoDB 2.2. There is now always the write-ahead log, and it is also + used as the server's replication log. Specifying the startup option + `--server.disable-replication-logger` will do nothing in ArangoDB 2.2, but the + option should not be used anymore as it might be removed in a future version. + + * changed behavior of replication logger + + There is no dedicated replication logger in ArangoDB 2.2 as there is the + write-ahead log now. The existing APIs for starting and stopping the replication + logger still exist in ArangoDB 2.2 for downwards-compatibility, but calling + the start or stop operations are no-ops in ArangoDB 2.2. When querying the + replication logger status via the API, the server will always report that the + replication logger is running. Configuring the replication logger is a no-op + in ArangoDB 2.2, too. Changing the replication logger configuration has no + effect. Instead, the write-ahead log configuration can be changed. + + * removed MRuby integration for arangod + + ArangoDB had an experimental MRuby integration in some of the publish builds. + This wasn't continuously developed, and so it has been removed in ArangoDB 2.2. + + This change has led to the following startup options being superfluous: + + - `--ruby.gc-interval` + - `--ruby.action-directory` + - `--ruby.modules-path` + - `--ruby.startup-directory` + + Specifying these startup options will do nothing in ArangoDB 2.2, but the + options should be avoided from now on as they might be removed in future versions. + + * reclaim index memory when last document in collection is deleted + + Previously, deleting documents from a collection did not lead to index sizes being + reduced. Instead, the already allocated index memory was re-used when a collection + was refilled. + + Now, index memory for primary indexes and hash indexes is reclaimed instantly when + the last document from a collection is removed. + + * inlined and optimized functions in hash indexes + + * added AQL TRANSLATE function + + This function can be used to perform lookups from static lists, e.g. + + LET countryNames = { US: "United States", UK: "United Kingdom", FR: "France" } + RETURN TRANSLATE("FR", countryNames) + + * fixed datafile debugger + + * fixed check-version for empty directory + + * moved try/catch block to the top of routing chain + + * added mountedApp function for foxx-manager + + * fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web + does not change to cluster overview + + * fixed dfdb: should not start any other V8 threads + + * cleanup of version-check, added module org/arangodb/database-version, + added --check-version option + + * fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with + "WARNING format string is corrupt" when in non-system DB Dashboard + + * specialized primary index implementation to allow faster hash table + rebuilding and reduce lookups in datafiles for the actual value of `_key`. + + * issue #862: added `--overwrite` option to arangoimp + + * removed number of property lookups for documents during AQL queries that + access documents + + * prevent buffering of long print results in arangosh's and arangod's print + command + + this change will emit buffered intermediate print results and discard the + output buffer to quickly deliver print results to the user, and to prevent + constructing very large buffers for large results + + * removed sorting of attribute names for use in a collection's shaper + + sorting attribute names was done on document insert to keep attributes + of a collection in sorted order for faster comparisons. The sort order + of attributes was only used in one particular and unlikely case, so it + was removed. Collections with many different attribute names should + benefit from this change by faster inserts and slightly less memory usage. + + + + -- ArangoDB Maintainer Wed, 25 Jun 2014 23:56:02 +0200 + +arangodb (2.2.0a2-1.1) stable; urgency=low + + * Changed to Version 2.2.0-alpha2 + + * introduced write-ahead log + + All write operations in an ArangoDB server instance are automatically logged + to the server's write-ahead log. The write-ahead log is a set of append-only + logfiles, and it is used in case of a crash recovery and for replication. + Data from the write-ahead log will eventually be moved into the datafiles of + collections, allowing the server to remove older write-ahead log logfiles. + + Cross-collection transactions in ArangoDB should benefit considerably by this + change, as less writes than in previous versions is required to ensure the data + of multiple collections are atomcially and durably committed. All data-modifying + operations inside transactions (insert, update, remove) will write their + operations into the write-ahead log directly, making transactions with multiple + operations also require less physical memory than in previous versions of ArangoDB, + where most parts of transactions were handled in RAM first. + + The data in the write-ahead log can also be used in the replication context. + The `_replication` collection that was used in previous versions of ArangoDB to + store all changes on the server is not used anymore in ArangoDB 2.2. Instead, + slaves can read from a master's write-ahead log to get informed about most + recent changes. This removes the need to store data-modifying operations in + both the actual place and the `_replication` collection. + + Note: the replication from the write-ahead log is still in development. + + * removed startup option `--server.disable-replication-logger` + + This option is superfluous in ArangoDB 2.2. There is no dedicated replication + logger in ArangoDB 2.2. There is now always the write-ahead log, and it is also + used as the server's replication log. Specifying the startup option + `--server.disable-replication-logger` will do nothing in ArangoDB 2.2, but the + option should not be used anymore as it might be removed in a future version. + + * changed behavior of replication logger + + There is no dedicated replication logger in ArangoDB 2.2 as there is the + write-ahead log now. The existing APIs for starting and stopping the replication + logger still exist in ArangoDB 2.2 for downwards-compatibility, but calling + the start or stop operations are no-ops in ArangoDB 2.2. When querying the + replication logger status via the API, the server will always report that the + replication logger is running. Configuring the replication logger is a no-op + in ArangoDB 2.2, too. Changing the replication logger configuration has no + effect. Instead, the write-ahead log configuration can be changed. + + * removed MRuby integration for arangod + + ArangoDB had an experimental MRuby integration in some of the publish builds. + This wasn't continuously developed, and so it has been removed in ArangoDB 2.2. + + This change has led to the following startup options being superfluous: + + - `--ruby.gc-interval` + - `--ruby.action-directory` + - `--ruby.modules-path` + - `--ruby.startup-directory` + + Specifying these startup options will do nothing in ArangoDB 2.2, but the + options should be avoided from now on as they might be removed in future versions. + + * reclaim index memory when last document in collection is deleted + + Previously, deleting documents from a collection did not lead to index sizes being + reduced. Instead, the already allocated index memory was re-used when a collection + was refilled. + + Now, index memory for primary indexes and hash indexes is reclaimed instantly when + the last document from a collection is removed. + + * inlined and optimized functions in hash indexes + + * added AQL TRANSLATE function + + This function can be used to perform lookups from static lists, e.g. + + LET countryNames = { US: "United States", UK: "United Kingdom", FR: "France" } + RETURN TRANSLATE("FR", countryNames) + + * fixed datafile debugger + + * fixed check-version for empty directory + + * moved try/catch block to the top of routing chain + + * added mountedApp function for foxx-manager + + * fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web + does not change to cluster overview + + * fixed dfdb: should not start any other V8 threads + + * cleanup of version-check, added module org/arangodb/database-version, + added --check-version option + + * fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with + "WARNING format string is corrupt" when in non-system DB Dashboard + + * specialized primary index implementation to allow faster hash table + rebuilding and reduce lookups in datafiles for the actual value of `_key`. + + * issue #862: added `--overwrite` option to arangoimp + + * removed number of property lookups for documents during AQL queries that + access documents + + * prevent buffering of long print results in arangosh's and arangod's print + command + + this change will emit buffered intermediate print results and discard the + output buffer to quickly deliver print results to the user, and to prevent + constructing very large buffers for large results + + * removed sorting of attribute names for use in a collection's shaper + + sorting attribute names was done on document insert to keep attributes + of a collection in sorted order for faster comparisons. The sort order + of attributes was only used in one particular and unlikely case, so it + was removed. Collections with many different attribute names should + benefit from this change by faster inserts and slightly less memory usage. + + + + -- ArangoDB Maintainer Mon, 23 Jun 2014 16:43:29 +0200 + +arangodb (2.2.0a1-1.1) stable; urgency=low + + * Changed to Version 2.2.0-alpha1 + + * introduced write-ahead log + + All write operations in an ArangoDB server instance are automatically logged + to the server's write-ahead log. The write-ahead log is a set of append-only + logfiles, and it is used in case of a crash recovery and for replication. + Data from the write-ahead log will eventually be moved into the datafiles of + collections, allowing the server to remove older write-ahead log logfiles. + + Cross-collection transactions in ArangoDB should benefit considerably by this + change, as less writes than in previous versions is required to ensure the data + of multiple collections are atomcially and durably committed. All data-modifying + operations inside transactions (insert, update, remove) will write their + operations into the write-ahead log directly, making transactions with multiple + operations also require less physical memory than in previous versions of ArangoDB, + where most parts of transactions were handled in RAM first. + + The data in the write-ahead log can also be used in the replication context. + The `_replication` collection that was used in previous versions of ArangoDB to + store all changes on the server is not used anymore in ArangoDB 2.2. Instead, + slaves can read from a master's write-ahead log to get informed about most + recent changes. This removes the need to store data-modifying operations in + both the actual place and the `_replication` collection. + + Note: the replication from the write-ahead log is still in development. + + * removed startup option `--server.disable-replication-logger` + + This option is superfluous in ArangoDB 2.2. There is no dedicated replication + logger in ArangoDB 2.2. There is now always the write-ahead log, and it is also + used as the server's replication log. Specifying the startup option + `--server.disable-replication-logger` will do nothing in ArangoDB 2.2, but the + option should not be used anymore as it might be removed in a future version. + + * changed behavior of replication logger + + There is no dedicated replication logger in ArangoDB 2.2 as there is the + write-ahead log now. The existing APIs for starting and stopping the replication + logger still exist in ArangoDB 2.2 for downwards-compatibility, but calling + the start or stop operations are no-ops in ArangoDB 2.2. When querying the + replication logger status via the API, the server will always report that the + replication logger is running. Configuring the replication logger is a no-op + in ArangoDB 2.2, too. Changing the replication logger configuration has no + effect. Instead, the write-ahead log configuration can be changed. + + * removed MRuby integration for arangod + + ArangoDB had an experimental MRuby integration in some of the publish builds. + This wasn't continuously developed, and so it has been removed in ArangoDB 2.2. + + This change has led to the following startup options being superfluous: + + - `--ruby.gc-interval` + - `--ruby.action-directory` + - `--ruby.modules-path` + - `--ruby.startup-directory` + + Specifying these startup options will do nothing in ArangoDB 2.2, but the + options should be avoided from now on as they might be removed in future versions. + + * reclaim index memory when last document in collection is deleted + + Previously, deleting documents from a collection did not lead to index sizes being + reduced. Instead, the already allocated index memory was re-used when a collection + was refilled. + + Now, index memory for primary indexes and hash indexes is reclaimed instantly when + the last document from a collection is removed. + + * inlined and optimized functions in hash indexes + + * added AQL TRANSLATE function + + This function can be used to perform lookups from static lists, e.g. + + LET countryNames = { US: "United States", UK: "United Kingdom", FR: "France" } + RETURN TRANSLATE("FR", countryNames) + + * fixed datafile debugger + + * fixed check-version for empty directory + + * moved try/catch block to the top of routing chain + + * added mountedApp function for foxx-manager + + * fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web + does not change to cluster overview + + * fixed dfdb: should not start any other V8 threads + + * cleanup of version-check, added module org/arangodb/database-version, + added --check-version option + + * fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with + "WARNING format string is corrupt" when in non-system DB Dashboard + + * specialized primary index implementation to allow faster hash table + rebuilding and reduce lookups in datafiles for the actual value of `_key`. + + * issue #862: added `--overwrite` option to arangoimp + + * removed number of property lookups for documents during AQL queries that + access documents + + * prevent buffering of long print results in arangosh's and arangod's print + command + + this change will emit buffered intermediate print results and discard the + output buffer to quickly deliver print results to the user, and to prevent + constructing very large buffers for large results + + * removed sorting of attribute names for use in a collection's shaper + + sorting attribute names was done on document insert to keep attributes + of a collection in sorted order for faster comparisons. The sort order + of attributes was only used in one particular and unlikely case, so it + was removed. Collections with many different attribute names should + benefit from this change by faster inserts and slightly less memory usage. + + + + -- ArangoDB Maintainer Mon, 23 Jun 2014 11:46:12 +0200 + +arangodb (2.1.2-1.1) stable; urgency=low + + * Changed to Version 2.1.2 + + * fixed check-version for empty directory + + * moved try/catch block to the top of routing chain + + + + -- ArangoDB Maintainer Sun, 15 Jun 2014 16:05:00 +0200 + +arangodb (2.1.1-1.1) stable; urgency=low + + * Changed to Version 2.1.1 + + * fixed random generation under MacOSX + + * fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web + does not change to cluster overview + + * fixed dfdb: should not start any other V8 threads + + * cleanup of version-check, added module org/arangodb/database-version, + added --check-version option + + * fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with + "WARNING format string is corrupt" when in non-system DB Dashboard + + + + -- ArangoDB Maintainer Fri, 06 Jun 2014 18:41:30 +0200 + + -- ArangoDB Maintainer Sun, 01 Jun 2014 22:10:48 +0200 + +arangodb (2.1.0-1.1) stable; urgency=low + + * Changed to Version 2.1.0 + + * implemented upgrade procedure for clusters + + * fixed communication issue with agency which prevented reconnect + after an agent failure + + * fixed cluster dashboard in the case that one but not all servers + in the cluster are down + + * fixed a bug with coordinators creating local database objects + in the wrong order (_system needs to be done successfully first), + which lead to a coordinator on strike + + * improved cluster dashboard + + + + -- ArangoDB Maintainer Thu, 29 May 2014 11:01:03 +0200 + +arangodb (2.1.0r2-1.1) stable; urgency=low + + * Changed to Version 2.1.0-rc2 + + * fixed issue #864: Inconsistent behavior of AQL REVERSE(list) function + + + + -- ArangoDB Maintainer Mon, 26 May 2014 00:48:13 +0200 + +arangodb (2.1.0r1-1.1) stable; urgency=low + + * Changed to Version 2.1.0-rc1 + + * added server-side periodic task management functions: + + - require("org/arangodb/tasks").register(): registers a periodic task + - require("org/arangodb/tasks").unregister(): unregisters and removes a + periodic task + - require("org/arangodb/tasks").get(): retrieves a specific tasks or all + existing tasks + + the previous undocumented function `internal.definePeriodic` is now + deprecated and will be removed in a future release. + + * decrease the size of some seldomly used system collections on creation. + + This will make these collections use less disk space and mapped memory. + + * added AQL date functions + + * added AQL FLATTEN() and FLATTEN_RECURSIVE() list functions + + * added index memory statistics to `db..figures()` function + + The `figures` function will now return a sub-document `indexes`, which lists + the number of indexes in the `count` sub-attribute, and the total memory + usage of the indexes in bytes in the `size` sub-attribute. + + * added AQL CURRENT_DATABASE() function + + This function returns the current database's name. + + * added AQL CURRENT_USER() function + + This function returns the current user from an AQL query. The current user is the + username that was specified in the `Authorization` HTTP header of the request. If + authentication is turned off or the query was executed outside a request context, + the function will return `null`. + + * fixed issue #796: Searching with newline chars broken? + + fixed slightly different handling of backslash escape characters in a few + AQL functions. Now handling of escape sequences should be consistent, and + searching for newline characters should work the same everywhere + + * added OpenSSL version check for configure + + It will report all OpenSSL versions < 1.0.1g as being too old. + `configure` will only complain about an outdated OpenSSL version but not stop. + + * require C++ compiler support (requires g++ 4.8, clang++ 3.4 or Visual Studio 13) + + * less string copying returning JSONified documents from ArangoDB, e.g. via + HTTP GET `/_api/document//` + + * issue #798: Lower case http headers from arango + + This change allows returning capitalized HTTP headers, e.g. + `Content-Length` instead of `content-length`. + The HTTP spec says that headers are case-insensitive, but + in fact several clients rely on a specific case in response + headers. + This change will capitalize HTTP headers if the `X-Arango-Version` + request header is sent by the client and contains a value of at + least `20100` (for version 2.1). The default value for the + compatibility can also be set at server start, using the + `--server.default-api-compatibility` option. + + * simplified usage of `db._createStatement()` + + Previously, the function could not be called with a query string parameter as + follows: + + db._createStatement(queryString); + + Calling it as above resulted in an error because the function expected an + object as its parameter. From now on, it's possible to call the function with + just the query string. + + * 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. + + * 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. + + * use a new data structure for the edge index of an edge collection. This + improves the performance for the creation of the edge index and in + particular speeds up removal of edges in graphs. Note however that + this change might change the order in which edges starting at + or ending in a vertex are returned. However, this order was never + guaranteed anyway and it is not sensible to guarantee any particular + order. + + * provide a size hint to edge and hash indexes when initially filling them + this will lead to less re-allocations when populating these indexes + + this may speed up building indexes when opening an existing collection + + * don't requeue identical context methods in V8 threads in case a method is + already registered + + * removed arangod command line option `--database.remove-on-compacted` + + * export the sort attribute for graph traversals to the HTTP interface + + * add support for arangodump/arangorestore for clusters + + + + -- ArangoDB Maintainer Mon, 12 May 2014 19:29:58 +0200 + +arangodb (2.1.0a9-1.1) stable; urgency=low + + * Changed to Version 2.1.0-alpha9 + + * added server-side periodic task management functions: + + - require("org/arangodb/tasks").register(): registers a periodic task + - require("org/arangodb/tasks").unregister(): unregisters and removes a + periodic task + - require("org/arangodb/tasks").get(): retrieves a specific tasks or all + existing tasks + + the previous undocumented function `internal.definePeriodic` is now + deprecated and will be removed in a future release. + + * decrease the size of some seldomly used system collections on creation. + + This will make these collections use less disk space and mapped memory. + + * added AQL date functions + + * added AQL FLATTEN() and FLATTEN_RECURSIVE() list functions + + * added index memory statistics to `db..figures()` function + + The `figures` function will now return a sub-document `indexes`, which lists + the number of indexes in the `count` sub-attribute, and the total memory + usage of the indexes in bytes in the `size` sub-attribute. + + * added AQL CURRENT_DATABASE() function + + This function returns the current database's name. + + * added AQL CURRENT_USER() function + + This function returns the current user from an AQL query. The current user is the + username that was specified in the `Authorization` HTTP header of the request. If + authentication is turned off or the query was executed outside a request context, + the function will return `null`. + + * fixed issue #796: Searching with newline chars broken? + + fixed slightly different handling of backslash escape characters in a few + AQL functions. Now handling of escape sequences should be consistent, and + searching for newline characters should work the same everywhere + + * added OpenSSL version check for configure + + It will report all OpenSSL versions < 1.0.1g as being too old. + `configure` will only complain about an outdated OpenSSL version but not stop. + + * require C++ compiler support (requires g++ 4.8, clang++ 3.4 or Visual Studio 13) + + * less string copying returning JSONified documents from ArangoDB, e.g. via + HTTP GET `/_api/document//` + + * issue #798: Lower case http headers from arango + + This change allows returning capitalized HTTP headers, e.g. + `Content-Length` instead of `content-length`. + The HTTP spec says that headers are case-insensitive, but + in fact several clients rely on a specific case in response + headers. + This change will capitalize HTTP headers if the `X-Arango-Version` + request header is sent by the client and contains a value of at + least `20100` (for version 2.1). The default value for the + compatibility can also be set at server start, using the + `--server.default-api-compatibility` option. + + * simplified usage of `db._createStatement()` + + Previously, the function could not be called with a query string parameter as + follows: + + db._createStatement(queryString); + + Calling it as above resulted in an error because the function expected an + object as its parameter. From now on, it's possible to call the function with + just the query string. + + * 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. + + * 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. + + * use a new data structure for the edge index of an edge collection. This + improves the performance for the creation of the edge index and in + particular speeds up removal of edges in graphs. Note however that + this change might change the order in which edges starting at + or ending in a vertex are returned. However, this order was never + guaranteed anyway and it is not sensible to guarantee any particular + order. + + * provide a size hint to edge and hash indexes when initially filling them + this will lead to less re-allocations when populating these indexes + + this may speed up building indexes when opening an existing collection + + * don't requeue identical context methods in V8 threads in case a method is + already registered + + * removed arangod command line option `--database.remove-on-compacted` + + * export the sort attribute for graph traversals to the HTTP interface + + * add support for arangodump/arangorestore for clusters + + + + -- ArangoDB Maintainer Sun, 11 May 2014 01:13:36 +0200 + +arangodb (2.1.0a7-1.1) stable; urgency=low + + * Changed to Version 2.1.0-alpha7 + + * added server-side periodic task management functions: + + - require("org/arangodb/tasks").register(): registers a periodic task + - require("org/arangodb/tasks").unregister(): unregisters and removes a + periodic task + - require("org/arangodb/tasks").get(): retrieves a specific tasks or all + existing tasks + + the previous undocumented function `internal.definePeriodic` is now + deprecated and will be removed in a future release. + + * decrease the size of some seldomly used system collections on creation. + + This will make these collections use less disk space and mapped memory. + + * added AQL date functions + + * added AQL FLATTEN() and FLATTEN_RECURSIVE() list functions + + * added index memory statistics to `db..figures()` function + + The `figures` function will now return a sub-document `indexes`, which lists + the number of indexes in the `count` sub-attribute, and the total memory + usage of the indexes in bytes in the `size` sub-attribute. + + * added AQL CURRENT_DATABASE() function + + This function returns the current database's name. + + * added AQL CURRENT_USER() function + + This function returns the current user from an AQL query. The current user is the + username that was specified in the `Authorization` HTTP header of the request. If + authentication is turned off or the query was executed outside a request context, + the function will return `null`. + + * fixed issue #796: Searching with newline chars broken? + + fixed slightly different handling of backslash escape characters in a few + AQL functions. Now handling of escape sequences should be consistent, and + searching for newline characters should work the same everywhere + + * added OpenSSL version check for configure + + It will report all OpenSSL versions < 1.0.1g as being too old. + `configure` will only complain about an outdated OpenSSL version but not stop. + + * require C++ compiler support (requires g++ 4.8, clang++ 3.4 or Visual Studio 13) + + * less string copying returning JSONified documents from ArangoDB, e.g. via + HTTP GET `/_api/document//` + + * issue #798: Lower case http headers from arango + + This change allows returning capitalized HTTP headers, e.g. + `Content-Length` instead of `content-length`. + The HTTP spec says that headers are case-insensitive, but + in fact several clients rely on a specific case in response + headers. + This change will capitalize HTTP headers if the `X-Arango-Version` + request header is sent by the client and contains a value of at + least `20100` (for version 2.1). The default value for the + compatibility can also be set at server start, using the + `--server.default-api-compatibility` option. + + * simplified usage of `db._createStatement()` + + Previously, the function could not be called with a query string parameter as + follows: + + db._createStatement(queryString); + + Calling it as above resulted in an error because the function expected an + object as its parameter. From now on, it's possible to call the function with + just the query string. + + * 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. + + * 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. + + * use a new data structure for the edge index of an edge collection. This + improves the performance for the creation of the edge index and in + particular speeds up removal of edges in graphs. Note however that + this change might change the order in which edges starting at + or ending in a vertex are returned. However, this order was never + guaranteed anyway and it is not sensible to guarantee any particular + order. + + * provide a size hint to edge and hash indexes when initially filling them + this will lead to less re-allocations when populating these indexes + + this may speed up building indexes when opening an existing collection + + * don't requeue identical context methods in V8 threads in case a method is + already registered + + * removed arangod command line option `--database.remove-on-compacted` + + * export the sort attribute for graph traversals to the HTTP interface + + * add support for arangodump/arangorestore for clusters + + + + -- ArangoDB Maintainer Sat, 10 May 2014 20:05:38 +0200 + +arangodb (2.1.0a6-1.1) stable; urgency=low + + * Changed to Version 2.1.0-alpha6 + + * added server-side periodic task management functions: + + - require("org/arangodb/tasks").register(): registers a periodic task + - require("org/arangodb/tasks").unregister(): unregisters and removes a + periodic task + - require("org/arangodb/tasks").get(): retrieves a specific tasks or all + existing tasks + + the previous undocumented function `internal.definePeriodic` is now + deprecated and will be removed in a future release. + + * decrease the size of some seldomly used system collections on creation. + + This will make these collections use less disk space and mapped memory. + + * added AQL date functions + + * added AQL FLATTEN() and FLATTEN_RECURSIVE() list functions + + * added index memory statistics to `db..figures()` function + + The `figures` function will now return a sub-document `indexes`, which lists + the number of indexes in the `count` sub-attribute, and the total memory + usage of the indexes in bytes in the `size` sub-attribute. + + * added AQL CURRENT_DATABASE() function + + This function returns the current database's name. + + * added AQL CURRENT_USER() function + + This function returns the current user from an AQL query. The current user is the + username that was specified in the `Authorization` HTTP header of the request. If + authentication is turned off or the query was executed outside a request context, + the function will return `null`. + + * fixed issue #796: Searching with newline chars broken? + + fixed slightly different handling of backslash escape characters in a few + AQL functions. Now handling of escape sequences should be consistent, and + searching for newline characters should work the same everywhere + + * added OpenSSL version check for configure + + It will report all OpenSSL versions < 1.0.1g as being too old. + `configure` will only complain about an outdated OpenSSL version but not stop. + + * require C++ compiler support (requires g++ 4.8, clang++ 3.4 or Visual Studio 13) + + * less string copying returning JSONified documents from ArangoDB, e.g. via + HTTP GET `/_api/document//` + + * issue #798: Lower case http headers from arango + + This change allows returning capitalized HTTP headers, e.g. + `Content-Length` instead of `content-length`. + The HTTP spec says that headers are case-insensitive, but + in fact several clients rely on a specific case in response + headers. + This change will capitalize HTTP headers if the `X-Arango-Version` + request header is sent by the client and contains a value of at + least `20100` (for version 2.1). The default value for the + compatibility can also be set at server start, using the + `--server.default-api-compatibility` option. + + * simplified usage of `db._createStatement()` + + Previously, the function could not be called with a query string parameter as + follows: + + db._createStatement(queryString); + + Calling it as above resulted in an error because the function expected an + object as its parameter. From now on, it's possible to call the function with + just the query string. + + * 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. + + * 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. + + * use a new data structure for the edge index of an edge collection. This + improves the performance for the creation of the edge index and in + particular speeds up removal of edges in graphs. Note however that + this change might change the order in which edges starting at + or ending in a vertex are returned. However, this order was never + guaranteed anyway and it is not sensible to guarantee any particular + order. + + * provide a size hint to edge and hash indexes when initially filling them + this will lead to less re-allocations when populating these indexes + + this may speed up building indexes when opening an existing collection + + * don't requeue identical context methods in V8 threads in case a method is + already registered + + * removed arangod command line option `--database.remove-on-compacted` + + * export the sort attribute for graph traversals to the HTTP interface + + * add support for arangodump/arangorestore for clusters + + + + -- ArangoDB Maintainer Sat, 10 May 2014 19:37:47 +0200 + +arangodb (2.1.0a4-1.1) stable; urgency=low + + * Changed to Version 2.1.0-alpha4 + + * added server-side periodic task management functions: + + - require("org/arangodb/tasks").register(): registers a periodic task + - require("org/arangodb/tasks").unregister(): unregisters and removes a + periodic task + - require("org/arangodb/tasks").get(): retrieves a specific tasks or all + existing tasks + + the previous undocumented function `internal.definePeriodic` is now + deprecated and will be removed in a future release. + + * decrease the size of some seldomly used system collections on creation. + + This will make these collections use less disk space and mapped memory. + + * added AQL date functions + + * added AQL FLATTEN() and FLATTEN_RECURSIVE() list functions + + * added index memory statistics to `db..figures()` function + + The `figures` function will now return a sub-document `indexes`, which lists + the number of indexes in the `count` sub-attribute, and the total memory + usage of the indexes in bytes in the `size` sub-attribute. + + * added AQL CURRENT_DATABASE() function + + This function returns the current database's name. + + * added AQL CURRENT_USER() function + + This function returns the current user from an AQL query. The current user is the + username that was specified in the `Authorization` HTTP header of the request. If + authentication is turned off or the query was executed outside a request context, + the function will return `null`. + + * fixed issue #796: Searching with newline chars broken? + + fixed slightly different handling of backslash escape characters in a few + AQL functions. Now handling of escape sequences should be consistent, and + searching for newline characters should work the same everywhere + + * added OpenSSL version check for configure + + It will report all OpenSSL versions < 1.0.1g as being too old. + `configure` will only complain about an outdated OpenSSL version but not stop. + + * require C++ compiler support (requires g++ 4.8, clang++ 3.4 or Visual Studio 13) + + * less string copying returning JSONified documents from ArangoDB, e.g. via + HTTP GET `/_api/document//` + + * issue #798: Lower case http headers from arango + + This change allows returning capitalized HTTP headers, e.g. + `Content-Length` instead of `content-length`. + The HTTP spec says that headers are case-insensitive, but + in fact several clients rely on a specific case in response + headers. + This change will capitalize HTTP headers if the `X-Arango-Version` + request header is sent by the client and contains a value of at + least `20100` (for version 2.1). The default value for the + compatibility can also be set at server start, using the + `--server.default-api-compatibility` option. + + * simplified usage of `db._createStatement()` + + Previously, the function could not be called with a query string parameter as + follows: + + db._createStatement(queryString); + + Calling it as above resulted in an error because the function expected an + object as its parameter. From now on, it's possible to call the function with + just the query string. + + * 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. + + * 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. + + * use a new data structure for the edge index of an edge collection. This + improves the performance for the creation of the edge index and in + particular speeds up removal of edges in graphs. Note however that + this change might change the order in which edges starting at + or ending in a vertex are returned. However, this order was never + guaranteed anyway and it is not sensible to guarantee any particular + order. + + * provide a size hint to edge and hash indexes when initially filling them + this will lead to less re-allocations when populating these indexes + + this may speed up building indexes when opening an existing collection + + * don't requeue identical context methods in V8 threads in case a method is + already registered + + * removed arangod command line option `--database.remove-on-compacted` + + * export the sort attribute for graph traversals to the HTTP interface + + * add support for arangodump/arangorestore for clusters + + + + -- ArangoDB Maintainer Sat, 10 May 2014 15:07:44 +0200 + +arangodb (2.1.0a3-1.1) stable; urgency=low + + * Changed to Version 2.1.0-alpha3 + + * fixed issue #848: db.someEdgeCollection.inEdge does not return correct + + -- ArangoDB Maintainer Sat, 10 May 2014 11:46:54 +0200 + +arangodb (2.1.0a3-1.1) stable; urgency=low + + * Changed to Version 2.1.0-alpha3 + + * fixed issue #848: db.someEdgeCollection.inEdge does not return correct + + -- ArangoDB Maintainer Sat, 10 May 2014 11:16:50 +0200 + +arangodb (2.0.nightly-1.1) stable; urgency=low + + * Changed to Version 2.0.nightly + + -- ArangoDB Maintainer Tue, 06 May 2014 01:20:47 +0200 + +arangodb (2.0.7-1.1) stable; urgency=low + + * Changed to Version 2.0.7 + + * issue #839: Foxx Manager missing "unfetch" + + * fixed a race condition at startup + + this fixes undefined behavior in case the logger was involved directly at + startup, before the logger initialization code was called. This should have + occurred only for code that was executed before the invocation of main(), + e.g. during ctor calls of statically defined objects. + + * fixed permission problems under Windows + + + + -- ArangoDB Maintainer Mon, 05 May 2014 19:23:11 +0200 + +arangodb (2.0.6-1.1) stable; urgency=low + + * Changed to Version 2.0.6 + + * fixed issue #835: arangosh doesn't show correct database name + + + + -- ArangoDB Maintainer Tue, 22 Apr 2014 23:19:09 +0200 + +arangodb (2.0.5-1.1) stable; urgency=low + + * Changed to Version 2.0.5 + + * Fixed a caching problem in IE JS Shell + + * added cancelation for async jobs + + * upgraded to new gyp for V8 + + * new Windows installer + + + + -- ArangoDB Maintainer Mon, 21 Apr 2014 17:02:15 +0200 + +arangodb (2.0.4-1.1) stable; urgency=low + + * Changed to Version 2.0.4 + + * fixed cluster authentication front-end issues for Firefox and IE, there are + still problems with Chrome + + + + -- ArangoDB Maintainer Mon, 14 Apr 2014 20:19:04 +0200 + +arangodb (2.0.3-1.1) stable; urgency=low + + * Changed to Version 2.0.3 + + * fixed AQL optimizer bug + + * fixed front-end issues + + * added password change dialog + + + + -- ArangoDB Maintainer Sun, 13 Apr 2014 21:33:43 +0200 + +arangodb (2.0.2-1.1) stable; urgency=low + + * Changed to Version 2.0.2 + + * 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 + + + + -- ArangoDB Maintainer Sun, 06 Apr 2014 14:38:55 +0200 + +arangodb (2.0.1-1.1) stable; urgency=low + + * Changed to Version 2.0.1 + + * 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 + + + + -- ArangoDB Maintainer Mon, 31 Mar 2014 19:52:56 +0200 + +arangodb (2.0.1r3-1.1) stable; urgency=low + + * Changed to Version 2.0.1-rc3 + + * 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 + + + + -- ArangoDB Maintainer Mon, 31 Mar 2014 10:58:07 +0200 + +arangodb (2.0.1r2-1.1) stable; urgency=low + + * Changed to Version 2.0.1-rc2 + + * 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 + + + + -- ArangoDB Maintainer Fri, 28 Mar 2014 10:30:40 +0100 + +arangodb (2.0.0-1.1) stable; urgency=low + + * Changed to Version 2.0.0 + + * first 2.0 release + + + + -- ArangoDB Maintainer Mon, 10 Mar 2014 16:48:11 +0100 + +arangodb (2.0.0r2-1.1) stable; urgency=low + + * Changed to Version 2.0.0-rc2 + + * fixed cluster authorization + + + + -- ArangoDB Maintainer Fri, 07 Mar 2014 14:08:21 +0100 + +arangodb (2.0.0r1-1.1) stable; urgency=low + + * Changed to Version 2.0.0-rc1 + + * added sharding :-) + + more detailed documentation on the sharding and cluster features can be found in the user + manual, section **Sharding** + + * INCOMPATIBLE CHANGE: using complex values in AQL filter conditions with operators other + than equality (e.g. >=, >, <=, <) will disable usage of skiplist indexes for filter + evaluation. + + For example, the following queries will be affected by change: + + FOR doc IN docs FILTER doc.value < { foo: "bar" } RETURN doc + FOR doc IN docs FILTER doc.value >= [ 1, 2, 3 ] RETURN doc + + The following queries will not be affected by the change: + + FOR doc IN docs FILTER doc.value == 1 RETURN doc + FOR doc IN docs FILTER doc.value == "foo" RETURN doc + FOR doc IN docs FILTER doc.value == [ 1, 2, 3 ] RETURN doc + FOR doc IN docs FILTER doc.value == { foo: "bar" } RETURN doc + + * INCOMPATIBLE CHANGE: removed undocumented method `collection.saveOrReplace` + + this feature was never advertised nor documented nor tested. + + * INCOMPATIBLE CHANGE: removed undocumented REST API method `/_api/simple/BY-EXAMPLE-HASH` + + this feature was never advertised nor documented nor tested. + + * added explicit startup parameter `--server.reuse-address` + + This flag can be used to control whether sockets should be acquired with the SO_REUSEADDR + flag. + + Regardless of this setting, sockets on Windows are always acquired using the + SO_EXCLUSIVEADDRUSE flag. + + * removed undocumented REST API method GET `/_admin/database-name` + + * added user validation API at POST `/_api/user/` + + * slightly improved users management API in `/_api/user`: + + Previously, when creating a new user via HTTP POST, the username needed to be + passed in an attribute `username`. When users were returned via this API, + the usernames were returned in an attribute named `user`. This was slightly + confusing and was changed in 1.5 as follows: + + - when adding a user via HTTP POST, the username can be specified in an attribute + `user`. If this attribute is not used, the API will look into the attribute `username` + as before and use that value. + - when users are returned via HTTP GET, the usernames are still returned in an + attribute `user`. + + This change should be fully downwards-compatible with the previous version of the API. + + * added AQL SLICE function to extract slices from lists + + * removed check-server binary + + * made module loader more node compatible + + * the startup option `--javascript.package-path` for arangosh is now deprecated and does + nothing. Using it will not cause an error, but the option is ignored. + + * added coffee script support + + * Several UI improvements. + + * Exchanged icons in the graphviewer toolbar + + * always start networking and HTTP listeners when starting the server (even in + console mode) + + * allow vertex and edge filtering with user-defined functions in TRAVERSAL, + TRAVERSAL_TREE and SHORTEST_PATH AQL functions: + + // 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 + + -- ArangoDB Maintainer Sat, 08 Feb 2014 22:27:45 +0100 + +arangodb (1.4.8-1.1) stable; urgency=low + + * Changed to Version 1.4.8 + + * install foxx apps in the web interface + + * fixed a segfault in the import API + + -- ArangoDB Maintainer Sat, 08 Feb 2014 20:41:13 +0100 + +arangodb (1.4.9-1.1) stable; urgency=low + + * Changed to Version 1.4.9 + + -- ArangoDB Maintainer Fri, 07 Feb 2014 21:49:50 +0100 + +arangodb (1.4.8-1.1) stable; urgency=low + + * Changed to Version 1.4.8 + + -- ArangoDB Maintainer Mon, 27 Jan 2014 13:43:56 +0100 + +arangodb (1.4.7-1.1) stable; urgency=low + + * Changed to Version 1.4.7 + + -- ArangoDB Maintainer Thu, 23 Jan 2014 17:21:31 +0100 + +arangodb (1.4.6-1.1) stable; urgency=low + + * Changed to Version 1.4.6 + + -- ArangoDB Maintainer Mon, 20 Jan 2014 22:15:44 +0100 + +arangodb (1.4.5-1.1) stable; urgency=low + + * Changed to Version 1.4.5 + + -- ArangoDB Maintainer Wed, 15 Jan 2014 17:08:12 +0100 + +arangodb (1.4.5r2-1.1) stable; urgency=low + + * Changed to Version 1.4.5-rc2 + + -- ArangoDB Maintainer Mon, 13 Jan 2014 14:46:37 +0100 + +arangodb (1.4.5r1-1.1) stable; urgency=low + + * Changed to Version 1.4.5-rc1 + + -- ArangoDB Maintainer Fri, 03 Jan 2014 15:30:12 +0100 + +arangodb (1.4.4-1.1) stable; urgency=low + + * Changed to Version 1.4.4 + + -- ArangoDB Maintainer Tue, 24 Dec 2013 10:26:15 +0100 + +arangodb (1.4.4r1-1.1) stable; urgency=low + + * Changed to Version 1.4.4-rc1 + + -- ArangoDB Maintainer Sun, 22 Dec 2013 18:43:40 +0100 + +arangodb (1.4.3-1.1) stable; urgency=low + + * Changed to Version 1.4.3 + + -- ArangoDB Maintainer Mon, 25 Nov 2013 10:41:14 +0100 + +arangodb (1.4.3a1-1.1) stable; urgency=low + + * Changed to Version 1.4.3-alpha1 + + -- ArangoDB Maintainer Fri, 22 Nov 2013 22:11:35 +0100 + +arangodb (1.4.2-18.4) stable; urgency=low + + * Changed to Version 1.4.2 + + -- ArangoDB Maintainer Wed, 20 Nov 2013 14:18:14 +0100 + +arangodb (1.4.2a1-18.4) stable; urgency=low + + * Changed to Version 1.4.2-alpha1 + + -- ArangoDB Maintainer Sat, 09 Nov 2013 19:23:27 +0100 + +arangodb (1.4.1-18.4) stable; urgency=low + + * Changed to Version 1.4.1 + + -- ArangoDB Maintainer Fri, 08 Nov 2013 13:03:44 +0100 + +arangodb (1.4.1r1-18.4) stable; urgency=low + + * Changed to Version 1.4.1-rc1 + + -- ArangoDB Maintainer Thu, 07 Nov 2013 22:57:35 +0100 + +arangodb (1.4.1r1-18.4) stable; urgency=low + + * Changed to Version 1.4.1-rc1 + + -- ArangoDB Maintainer Thu, 07 Nov 2013 21:20:03 +0100 + +arangodb (1.4.0-18.1) stable; urgency=low + + * Changed to Version 1.4.0 + + -- ArangoDB Maintainer Tue, 29 Oct 2013 15:33:15 +0100 + +arangodb (1.4.0r1-18.1) stable; urgency=low + + * Changed to Version 1.4.0-rc1 + + -- Info Tue, 29 Oct 2013 08:55:47 +0100 + +arangodb (1.4.0b2-18.1) stable; urgency=low + + * Changed to Version 1.4.0-beta2 + + -- Info Tue, 22 Oct 2013 16:30:46 +0200 + +arangodb (1.4.0-16) stable; urgency=low + + * Changed to Version 1.4.0-alpha1 + + -- Info Fri, 02 Aug 2013 17:36:00 +0200 + +arangodb (1.3.2-15) stable; urgency=low + + * Changed to Version 1.3.2 + + -- Info Fri, 21 Jun 2013 13:09:00 +0100 + +arangodb (1.3.1-14) stable; urgency=low + + * Changed to Version 1.3.1 + + -- Info Fri, 24 May 2013 18:05:00 +0100 + +arangodb (1.3.0-13) stable; urgency=low + + * Changed to Version 1.3.0 + + -- Info Fri, 10 May 2013 17:12:00 +0100 + +arangodb (1.2.3-12) stable; urgency=low + + * Changed to Version 1.2.3 + + -- Info Fri, 12 Apr 2013 12:35:00 +0100 + +arangodb (1.2.2-11) stable; urgency=low + + * Changed to Version 1.2.2 + + -- Info Tue, 26 Mar 2013 14:48:00 +0100 + +arangodb (1.2.1-10) stable; urgency=low + + * Changed to Version 1.2.1 + + -- Info Fri, 15 Mar 2013 06:28:00 +0100 + +arangodb (1.2.0-9) stable; urgency=low + + * Changed to Version 1.2.0 + + -- Info Fri, 1 Mar 2013 14:15:00 +0100 + +arangodb (1.2.beta3-9) stable; urgency=low + + * Changed to Version 1.2.beta3 + + -- Info Fri, 22 Feb 2013 17:22:00 +0100 + +arangodb (1.2.beta2-6) stable; urgency=low + + * Changed to Version 1.2.beta2 + + -- Info Fri, 15 Feb 2013 14:39:00 +0100 + +arangodb (1.2.beta1-4) stable; urgency=low + + * Changed to Version 1.2.beta1 + + -- Info Mon, 4 Feb 2013 10:02:00 +0100 + +arangodb (1.1.2-3) stable; urgency=low + + * Changed to Version 1.1.2 + + -- Info Mon, 21 Jan 2013 08:29:00 +0100 + +arangodb (1.1.1-2) stable; urgency=low + + * Changed to Version 1.1.1 + + -- Info Tue, 18 Dec 2012 13:50:00 +0100 + +arangodb (1.1.0-0) stable; urgency=low + + * Changed to Version 1.1.0 (final) + + -- Info Wed, 5 Dec 2012 15:05:00 +0100 + +arangodb (1.1.0-0) stable; urgency=low + + * Changed to Version 1.1.0 ()beta) + + -- Info Tue, 16 Oct 2012 07:37:00 +0200 + +arangodb (1.0.99-0) stable; urgency=low + + * Initial Release + + -- Info Wed, 5 Sep 2012 17:50:38 +0200 diff --git a/Installation/debian/compat b/Installation/debian/compat new file mode 100644 index 0000000000..45a4fb75db --- /dev/null +++ b/Installation/debian/compat @@ -0,0 +1 @@ +8 diff --git a/Installation/debian/control b/Installation/debian/control new file mode 100644 index 0000000000..54a28955fe --- /dev/null +++ b/Installation/debian/control @@ -0,0 +1,47 @@ +Source: arangodb +Section: database +Priority: optional +Maintainer: ArangoDB GmbH +Build-Depends: debhelper (>= 5), libreadline-dev, libssl-dev, python, libicu-dev, libtool, autoconf, automake + +Package: arangodb +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Conflicts: arangodb-client +Description: a multi-purpose NoSQL database + A distributed free and open-source database with a flexible data model for documents, + graphs, and key-values. Build high performance applications using a convenient + SQL-like query language or JavaScript extensions. + . + Copyright: 2012-2013 by triAGENS GmbH + Copyright: 2014-2015 by ArangoDB GmbH + ArangoDB Software + www.arangodb.com + +Package: arangodb-client +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Conflicts: arangodb +Description: stand-alone shell + A distributed free and open-source database with a flexible data model for documents, + graphs, and key-values. Build high performance applications using a convenient + SQL-like query language or JavaScript extensions. + . + Copyright: 2012-2013 by triAGENS GmbH + Copyright: 2014-2015 by ArangoDB GmbH + ArangoDB Software + www.arangodb.com + +Package: arangodb-dbg +Architecture: any +Section: debug +Priority: extra +Depends: + arangodb (= ${binary:Version}), + ${misc:Depends} +Description: debugging symbols for arangodb + A distributed free and open-source database with a flexible data model for documents, + graphs, and key-values. Build high performance applications using a convenient + SQL-like query language or JavaScript extensions. + . + This package contains the debugging symbols for giblib1. diff --git a/Installation/debian/copyright b/Installation/debian/copyright new file mode 100644 index 0000000000..ea722b8ff1 --- /dev/null +++ b/Installation/debian/copyright @@ -0,0 +1,14 @@ +This is the Debian GNU/Linux prepackaged version of arangodb. +It was packaged by Frank Celler +from sources obtained from http://github.com/triAGENS/ArangoDB. + +Copyright: + +Copyright (C) 2012-2013 triAGENS GmbH + 2014 ArangoDB GmbH + +License: + +ArangoDB is distributed under the terms of the Apache2 licenses. +On Debian GNU/Linux system you can find a copy of this +license in `/usr/share/common-licenses/Apache-2.0'. diff --git a/Installation/debian/rules b/Installation/debian/rules new file mode 100755 index 0000000000..9c0fe1e8e8 --- /dev/null +++ b/Installation/debian/rules @@ -0,0 +1,141 @@ +#!/usr/bin/make -f +# Sample debian/rules that uses debhelper. +# GNU copyright 1997 to 1999 by Joey Hess. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# This is the debhelper compatibility version to use. +# export DH_COMPAT=7 + +CFLAGS = -g +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) +CFLAGS += -O0 +else +CFLAGS += -O3 +endif + +ifeq (yes,$(shell test -f /opt/gnu/bin/gcc && echo yes)) +USE_CC = CC=/opt/gnu/bin/gcc +USE_CXX = CXX=/opt/gnu/bin/g++ +else +USE_CC = CC=gcc +USE_CXX = CXX=g++ +endif + +build-arch: build +build-indep: build +build: build-stamp +build-stamp: + dh_testdir + + # Add here commands to compile the package. + ./configure $(USE_CC) $(USE_CXX) \ + --program-prefix= \ + --prefix=/usr \ + --exec-prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --includedir=/usr/include \ + --libdir=/usr/lib \ + --libexecdir=/usr/lib \ + --localstatedir=/var \ + --sharedstatedir=/usr/com \ + --mandir=/usr/share/man \ + --infodir=/usr/share/info \ + --enable-all-in-one-etcd \ + --enable-tcmalloc + + # hidden files + rm -f js/node/node_modules/cheerio/.jshintrc + rm -f js/node/node_modules/cheerio/node_modules/htmlparser2/.gitattributes + rm -f js/node/node_modules/sinon/node_modules/util/.zuul.yml + rm -f js/node/node_modules/sinon/node_modules/formatio/node_modules/samsam/.project + rm -f js/node/node_modules/moment/.vimrc-local + rm -f js/node/node_modules/moment/.sauce-labs.creds + rm -f js/node/node_modules/htmlparser2/.gitattributes + + # executables + rm -f js/node/node_modules/cheerio/scripts/prepublish + rm -f js/node/node_modules/buster-format/node_modules/buster-core/vendor/buster-util/jstdhtml + rm -f js/node/node_modules/buster-format/node_modules/buster-core/run-tests + rm -f js/node/node_modules/iced-coffee-script/node_modules/docco/node_modules/fs-extra/node_modules/rimraf/bin.js + rm -f js/node/node_modules/buster-format/node_modules/buster-core/vendor/sinon/build + rm -f js/node/node_modules/iced-coffee-script/node_modules/docco/node_modules/fs-extra/node_modules/rimraf/test/setup.sh + rm -f js/node/node_modules/buster-format/run-tests + rm -f js/node/node_modules/iced-coffee-script/node_modules/docco/node_modules/fs-extra/node_modules/rimraf/test/run.sh + + # empty + rm -f js/node/node_modules/iced-coffee-script/node_modules/docco/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/b + rm -f js/node/node_modules/iced-coffee-script/node_modules/docco/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/c + rm -f js/node/node_modules/iced-coffee-script/node_modules/docco/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/e + rm -f js/node/node_modules/iced-coffee-script/node_modules/docco/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/d + rm -f js/node/node_modules/iced-coffee-script/node_modules/docco/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/f + + # not used + rm -rf js/node/node_modules/js-yaml/demo + + rm -f .file-list-js + make -j12 all + + # --- end custom part for compiling + + touch build-stamp + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + # Add here commands to clean up after the build process. + make clean || true + # --- end custom part for cleaning up + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_prep + dh_installdirs + dh_auto_install + +# Build architecture-independent files here. +binary-indep: build install + # We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot +# dh_installdebconf + dh_installdocs + dh_installexamples + dh_installmenu +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime + dh_installinit + dh_installcron + dh_installman + dh_installinfo + dh_install +# dh_undocumented + dh_installchangelogs + dh_link + dh_strip --dbg-package=arangodb-dbg + dh_compress + dh_fixperms +# dh_makeshlibs + dh_installdeb +# dh_perl + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install From a6124247d4eecc1a48e60203a9cf427dcc0f7d34 Mon Sep 17 00:00:00 2001 From: Jan Steemann Date: Wed, 2 Mar 2016 15:27:31 +0100 Subject: [PATCH 2/2] fixed threading issues --- lib/Basics/Thread.cpp | 37 ++++++++++++++++++++++++------------ lib/Basics/Thread.h | 2 ++ lib/Basics/WorkMonitor.cpp | 6 ++++-- lib/Basics/WorkMonitor.h | 2 +- lib/Basics/threads-posix.cpp | 2 +- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/lib/Basics/Thread.cpp b/lib/Basics/Thread.cpp index 080401d9ef..e3748a6ea5 100644 --- a/lib/Basics/Thread.cpp +++ b/lib/Basics/Thread.cpp @@ -75,16 +75,20 @@ void Thread::startThread(void* arg) { ptr->_threadNumber = LOCAL_THREAD_NUMBER; - WorkMonitor::pushThread(ptr); + bool pushed = WorkMonitor::pushThread(ptr); try { ptr->runMe(); } catch (...) { - WorkMonitor::popThread(ptr); + if (pushed) { + WorkMonitor::popThread(ptr); + } throw; } - WorkMonitor::popThread(ptr); + if (pushed) { + WorkMonitor::popThread(ptr); + } } //////////////////////////////////////////////////////////////////////////////// @@ -120,6 +124,17 @@ TRI_tid_t Thread::currentThreadId() { #endif #endif } + +std::string Thread::stringify(ThreadState state) { + switch (state) { + case ThreadState::CREATED: return "created"; + case ThreadState::STARTED: return "started"; + case ThreadState::STOPPING: return "stopping"; + case ThreadState::STOPPED: return "stopped"; + case ThreadState::DETACHED: return "detached"; + } + return "unknown"; +} //////////////////////////////////////////////////////////////////////////////// /// @brief constructs a thread @@ -142,26 +157,24 @@ Thread::Thread(std::string const& name) //////////////////////////////////////////////////////////////////////////////// Thread::~Thread() { - LOG_TOPIC(TRACE, Logger::THREADS) << "delete(" << _name << ")"; + auto state = _state.load(); + LOG_TOPIC(TRACE, Logger::THREADS) << "delete(" << _name << "), state: " << stringify(state); - if (_state.load() == ThreadState::STOPPED) { -#ifdef TRI_HAVE_POSIX_THREADS - int res = pthread_detach(_thread); + if (state == ThreadState::STOPPED) { + int res = TRI_JoinThread(&_thread); if (res != 0) { LOG_TOPIC(INFO, Logger::THREADS) << "cannot detach thread"; } _state.store(ThreadState::DETACHED); -#endif } -#ifdef TRI_HAVE_POSIX_THREADS - if (_state.load() != ThreadState::DETACHED) { - LOG(FATAL) << "thread is not detached, hard shutdown"; + state = _state.load(); + if (state != ThreadState::DETACHED) { + LOG(FATAL) << "thread is not detached but " << stringify(state) << ". shutting down hard"; FATAL_ERROR_EXIT(); } -#endif } //////////////////////////////////////////////////////////////////////////////// diff --git a/lib/Basics/Thread.h b/lib/Basics/Thread.h index 3b45ec3633..ddbf5f639a 100644 --- a/lib/Basics/Thread.h +++ b/lib/Basics/Thread.h @@ -64,6 +64,8 @@ class Thread { enum class ThreadState { CREATED, STARTED, STOPPING, STOPPED, DETACHED }; + static std::string stringify(ThreadState); + public: ////////////////////////////////////////////////////////////////////////////// /// @brief current work description as thread local variable diff --git a/lib/Basics/WorkMonitor.cpp b/lib/Basics/WorkMonitor.cpp index d64082cf3a..1f16bfccb1 100644 --- a/lib/Basics/WorkMonitor.cpp +++ b/lib/Basics/WorkMonitor.cpp @@ -129,9 +129,9 @@ void WorkMonitor::freeWorkDescription(WorkDescription* desc) { /// @brief pushes a thread //////////////////////////////////////////////////////////////////////////////// -void WorkMonitor::pushThread(Thread* thread) { +bool WorkMonitor::pushThread(Thread* thread) { if (WORK_MONITOR_STOPPED.load()) { - return; + return false; } TRI_ASSERT(thread != nullptr); @@ -151,6 +151,8 @@ void WorkMonitor::pushThread(Thread* thread) { } catch (...) { throw; } + + return true; } //////////////////////////////////////////////////////////////////////////////// diff --git a/lib/Basics/WorkMonitor.h b/lib/Basics/WorkMonitor.h index 5be50c0716..19214cf2cb 100644 --- a/lib/Basics/WorkMonitor.h +++ b/lib/Basics/WorkMonitor.h @@ -57,7 +57,7 @@ class WorkMonitor : public Thread { /// @brief pushes a threads ////////////////////////////////////////////////////////////////////////////// - static void pushThread(Thread* thread); + static bool pushThread(Thread* thread); ////////////////////////////////////////////////////////////////////////////// /// @brief pops a threads diff --git a/lib/Basics/threads-posix.cpp b/lib/Basics/threads-posix.cpp index 6c04a49972..76601cd2dd 100644 --- a/lib/Basics/threads-posix.cpp +++ b/lib/Basics/threads-posix.cpp @@ -115,7 +115,7 @@ bool TRI_StartThread(TRI_thread_t* thread, TRI_tid_t* threadId, /// @brief waits for a thread to finish //////////////////////////////////////////////////////////////////////////////// -int TRI_JoinThread(TRI_thread_t* thread) { return pthread_join(*thread, 0); } +int TRI_JoinThread(TRI_thread_t* thread) { return pthread_join(*thread, nullptr); } //////////////////////////////////////////////////////////////////////////////// /// @brief checks if we are the thread