From 9ab9e4230f0453e467a3bdc9e1012adb35f7853f Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Fri, 3 Sep 2021 16:20:52 +0200 Subject: [PATCH 01/11] attempt to first uninstall the old service on silent upgrade as well, so the new one can be installed afterwards without problems. --- Installation/Windows/Templates/NSIS.template.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Installation/Windows/Templates/NSIS.template.in b/Installation/Windows/Templates/NSIS.template.in index d6cf6db9b059..f3e41fd57aa4 100755 --- a/Installation/Windows/Templates/NSIS.template.in +++ b/Installation/Windows/Templates/NSIS.template.in @@ -650,6 +650,8 @@ FunctionEnd Function InstallOptionsPage2 IfSilent 0 continueUI + ; this would be called inside the UI code: + stop_old_service Return continueUI: From 853d95c119da2666256703884027f394b6d8ec3b Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Fri, 3 Sep 2021 18:50:28 +0200 Subject: [PATCH 02/11] fix syntax --- Installation/Windows/Templates/NSIS.template.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Installation/Windows/Templates/NSIS.template.in b/Installation/Windows/Templates/NSIS.template.in index f3e41fd57aa4..217d9d942575 100755 --- a/Installation/Windows/Templates/NSIS.template.in +++ b/Installation/Windows/Templates/NSIS.template.in @@ -651,7 +651,7 @@ FunctionEnd Function InstallOptionsPage2 IfSilent 0 continueUI ; this would be called inside the UI code: - stop_old_service + Call stop_old_service Return continueUI: From bee977f7df735d8df75c54d0c4416b88a9f6791e Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Mon, 27 Sep 2021 14:37:52 +0200 Subject: [PATCH 03/11] fix non-ui hooks --- Installation/Windows/Templates/NSIS.template.in | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/Installation/Windows/Templates/NSIS.template.in b/Installation/Windows/Templates/NSIS.template.in index 217d9d942575..a98cfca25890 100755 --- a/Installation/Windows/Templates/NSIS.template.in +++ b/Installation/Windows/Templates/NSIS.template.in @@ -226,6 +226,9 @@ Function check_previous_install StrCpy $UpgradeInstall "0" IfFileExists "$DATADIR\@INC_CPACK_ARANGO_DATA_DIR@\SERVER" OldFound IfFileExists "$DATADIR\@INC_CPACK_ARANGO_DATA_DIR@\ENGINE" OldFound + ${if} $IS_DEFAULT_INSTALLDIR == "0" + IfFileExists "$DATADIR\ENGINE" OldFound + ${EndIf} DetailPrint "This is a fresh install." return OldFound: @@ -650,8 +653,6 @@ FunctionEnd Function InstallOptionsPage2 IfSilent 0 continueUI - ; this would be called inside the UI code: - Call stop_old_service Return continueUI: @@ -888,6 +889,12 @@ FunctionEnd ;Installer Sections Section "-Core installation" + IfSilent 0 continueBaseInstall + ${If} $UpgradeInstall == "1" + ; this would be called inside the UI code: + Call stop_old_service + ${EndIf} +continueBaseInstall: ;Use the entire tree produced by the INSTALL target. Keep the ;list of directories here in sync with the RMDir commands below. SetOutPath "$INSTDIR" From 2b0ff771909f7c45b2e7aa7fb3b00d5da936f145 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Wed, 29 Sep 2021 11:25:04 +0200 Subject: [PATCH 04/11] fix silent upgrade process --- .../Windows/Templates/NSIS.template.in | 44 +++++++++++++------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/Installation/Windows/Templates/NSIS.template.in b/Installation/Windows/Templates/NSIS.template.in index a98cfca25890..908080963f0a 100755 --- a/Installation/Windows/Templates/NSIS.template.in +++ b/Installation/Windows/Templates/NSIS.template.in @@ -226,9 +226,9 @@ Function check_previous_install StrCpy $UpgradeInstall "0" IfFileExists "$DATADIR\@INC_CPACK_ARANGO_DATA_DIR@\SERVER" OldFound IfFileExists "$DATADIR\@INC_CPACK_ARANGO_DATA_DIR@\ENGINE" OldFound - ${if} $IS_DEFAULT_INSTALLDIR == "0" + IfSilent 0 continueNoDirectMatch IfFileExists "$DATADIR\ENGINE" OldFound - ${EndIf} +continueNoDirectMatch: DetailPrint "This is a fresh install." return OldFound: @@ -241,7 +241,14 @@ Function stop_old_service SimpleSC::StopService '${TRI_SVC_NAME}' 0 30 Call WaitForServiceDown SimpleSC::RemoveService '${TRI_SVC_NAME}' - ${EndIf} + Pop $0 ; returns an errorcode (<>0) otherwise success (0) + IntCmp $0 0 Done_stop_old + Push $0 + SimpleSC::GetErrorMessage + Pop $0 + DetailPrint 'Stopping ArangoDB fails - Reason: $0' + MessageBox MB_OK 'Stopping ArangoDB fails - Reason: $0'^M ${EndIf} +Done_stop_old: FunctionEnd @@ -734,7 +741,7 @@ Function UpgradeExisting push ${ARANGO_EXIT_ALREADY_RUNNING} pop $0 retryDetectUpgradeNeeded: - ExecWait "$INSTDIR\${SBIN_DIR}\arangod.exe --server.rest-server false --log.foreground-tty false --database.check-version" $0 + ExecWait "$INSTDIR\${SBIN_DIR}\arangod.exe --server.rest-server false --log.foreground-tty false --database.check-version $DATADIR" $0 DetailPrint "done Checking whether an existing database needs upgrade: $0" ${If} $0 == ${ARANGO_EXIT_ALREADY_RUNNING} ${OrIf} $0 == ${ARANGO_EXIT_COULD_NOT_LOCK} @@ -762,7 +769,7 @@ retryDetectUpgradeNeeded: ${EndIf} DetailPrint "Attempting to run database upgrade: " ; Now actually do the upgrade - ExecWait "$INSTDIR\${SBIN_DIR}\arangod.exe --server.rest-server false --log.level error --database.auto-upgrade true" $0 + ExecWait "$INSTDIR\${SBIN_DIR}\arangod.exe --server.rest-server false --log.level error --database.auto-upgrade true $DATADIR" $0 DetailPrint "Done running database upgrade: $0" ${If} $0 != 0 !insertmacro printExitCode $0 "the Upgrade failed, please do a manual upgrade" "" @@ -889,11 +896,12 @@ FunctionEnd ;Installer Sections Section "-Core installation" - IfSilent 0 continueBaseInstall - ${If} $UpgradeInstall == "1" - ; this would be called inside the UI code: - Call stop_old_service - ${EndIf} + IfSilent 0 continueBaseInstall + ; this would be called inside the UI code: + Call check_previous_install + ${If} $UpgradeInstall == "1" + Call stop_old_service + ${EndIf} continueBaseInstall: ;Use the entire tree produced by the INSTALL target. Keep the ;list of directories here in sync with the RMDir commands below. @@ -979,9 +987,6 @@ continueBaseInstall: CreateDirectory $LOGDIR ${EndIf} - ; non-interactive install only hits us here? - Call check_previous_install - CreateDirectory $APPDIR Call assignFileRights ${If} $UpgradeInstall == "1" @@ -1264,6 +1269,7 @@ SectionEnd ; "Program Files" for AllUsers, "My Documents" for JustMe... var CMDINSTDIR +var CMDUPGRADE Function .onInit ; are we allowed to install admin in first place? @@ -1301,7 +1307,17 @@ Function .onInit ${EndIf} noInstDir: - # we only want to manipulate APPDIR here if /APPDIR is really set! + # $AUTOMATIC_UPDATE would be set later in the UI code (if) + StrCpy $AUTOMATIC_UPDATE "0" + ${GetParameters} $R0 + ClearErrors + ${GetOptions} $R0 "/UPGRADE=" $CMDUPGRADE + IfErrors noUpgrade 0 + IfSilent 0 noUpgrade + StrCpy $AUTOMATIC_UPDATE "$CMDUPGRADE" +noUpgrade: + + # we only want to manipulate APPDIR here if /APPDIR is really set! ${GetParameters} $R0 ClearErrors ${GetOptions} $R0 "/APPDIR=" $CMDINSTDIR From e0586c9123d9ea1764d2c4deb4a5dd9d2e2a511e Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Wed, 29 Sep 2021 11:30:01 +0200 Subject: [PATCH 05/11] fix syntax --- Installation/Windows/Templates/NSIS.template.in | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Installation/Windows/Templates/NSIS.template.in b/Installation/Windows/Templates/NSIS.template.in index 908080963f0a..d5cacb4a2320 100755 --- a/Installation/Windows/Templates/NSIS.template.in +++ b/Installation/Windows/Templates/NSIS.template.in @@ -247,7 +247,8 @@ Function stop_old_service SimpleSC::GetErrorMessage Pop $0 DetailPrint 'Stopping ArangoDB fails - Reason: $0' - MessageBox MB_OK 'Stopping ArangoDB fails - Reason: $0'^M ${EndIf} + MessageBox MB_OK 'Stopping ArangoDB fails - Reason: $0' + ${EndIf} Done_stop_old: FunctionEnd From 02861009cf83fbd2e660cba421e35e8f487427d3 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Wed, 29 Sep 2021 16:45:39 +0200 Subject: [PATCH 06/11] skip expected error sitiuation from user interaction --- Installation/Windows/Templates/NSIS.template.in | 1 + 1 file changed, 1 insertion(+) diff --git a/Installation/Windows/Templates/NSIS.template.in b/Installation/Windows/Templates/NSIS.template.in index d5cacb4a2320..e451bbe2529b 100755 --- a/Installation/Windows/Templates/NSIS.template.in +++ b/Installation/Windows/Templates/NSIS.template.in @@ -243,6 +243,7 @@ Function stop_old_service SimpleSC::RemoveService '${TRI_SVC_NAME}' Pop $0 ; returns an errorcode (<>0) otherwise success (0) IntCmp $0 0 Done_stop_old + IntCmp $0 1060 Done_stop_old ; service not there, we don't care. Push $0 SimpleSC::GetErrorMessage Pop $0 From 80b8db8fa982cdb4662acf9cab74445612f3df33 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Wed, 29 Sep 2021 17:00:39 +0200 Subject: [PATCH 07/11] forward package vendor --- cmake/packages/client/nsis.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/packages/client/nsis.txt b/cmake/packages/client/nsis.txt index ba3a1f96aade..94a918062f5f 100644 --- a/cmake/packages/client/nsis.txt +++ b/cmake/packages/client/nsis.txt @@ -38,6 +38,7 @@ set(ARANGODB_URL_INFO_ABOUT "@ARANGODB_URL_INFO_ABOUT@") set(ARANGODB_SOURCE_DIR "@ARANGODB_SOURCE_DIR@") set(ARANGODB_VERSION "@ARANGODB_VERSION@") set(ARANGODB_PACKAGE_ARCHITECTURE "@ARANGODB_PACKAGE_ARCHITECTURE@") +set(ARANGODB_PACKAGE_VENDOR "@ARANGODB_PACKAGE_VENDOR@") set(ARANGODB_PACKAGE_CONTACT "@ARANGODB_PACKAGE_CONTACT@") set(CMAKE_INSTALL_FULL_BINDIR "@CMAKE_INSTALL_FULL_BINDIR@") @@ -73,6 +74,7 @@ set(ARANGODB_JS_VERSION "@ARANGODB_JS_VERSION@") ################################################################################ set(CPACK_PACKAGE_VERSION "${ARANGODB_VERSION}") +set(CPACK_PACKAGE_VENDOR ${ARANGODB_PACKAGE_VENDOR}) set(CPACK_PACKAGE_CONTACT ${ARANGODB_PACKAGE_CONTACT}) if (${USE_ENTERPRISE}) From 82405847424523504666a8a35eac6654e934a137 Mon Sep 17 00:00:00 2001 From: Wilfried Goesgens Date: Wed, 29 Sep 2021 17:29:20 +0200 Subject: [PATCH 08/11] fix installed icon path --- cmake/packages/client/nsis.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/packages/client/nsis.txt b/cmake/packages/client/nsis.txt index 94a918062f5f..5f8029dff043 100644 --- a/cmake/packages/client/nsis.txt +++ b/cmake/packages/client/nsis.txt @@ -129,7 +129,7 @@ INSTALL(FILES ${CMAKE_INSTALL_SYSTEM_RUNTIME_COMPONENT} DESTINATION ${CMAKE_INST set (ICON_PATH "${W_INSTALL_FILES}/Icons/") install(DIRECTORY "${ICON_PATH}" DESTINATION "resources") -file(TO_NATIVE_PATH "resources/Icons/arangodb.ico" RELATIVE_ARANGO_ICON) +file(TO_NATIVE_PATH "resources/arangodb.ico" RELATIVE_ARANGO_ICON) file(TO_NATIVE_PATH "${ICON_PATH}arangodb.bmp" ARANGO_IMG) file(TO_NATIVE_PATH "${ICON_PATH}/arangodb.ico" ARANGO_ICON) From c0e676d3173fc0ad4463b0c301292319c16211be Mon Sep 17 00:00:00 2001 From: Vadim Date: Thu, 30 Sep 2021 14:53:50 +0300 Subject: [PATCH 09/11] Update CHANGELOG --- CHANGELOG | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index f265844e99c9..bb4c5924b5cc 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,8 @@ devel ----- +* Fixed BTS-582: ArangoDB client EXE package for Windows has incorrect metadata. + * APM-121: allow the UPSERT query to have indexHint as an extra parameter for OPTIONS. It will be used as a hint by the inner FOR loop that is performed as part of the UPSERT query, and would help in cases such as UPSERT not From 7e1957b60d3b526d7a157723b18f22d1f3eaa4ba Mon Sep 17 00:00:00 2001 From: Vadim Date: Thu, 30 Sep 2021 16:41:29 +0300 Subject: [PATCH 10/11] Update CHANGELOG --- CHANGELOG | 3573 +---------------------------------------------------- 1 file changed, 4 insertions(+), 3569 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index bb4c5924b5cc..243ec4da8ba9 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -3,6 +3,9 @@ devel * Fixed BTS-582: ArangoDB client EXE package for Windows has incorrect metadata. +* Fixed BTS-575: Windows EXE installer doesn't replace service during upgrade in + silent (non-UI) mode. + * APM-121: allow the UPSERT query to have indexHint as an extra parameter for OPTIONS. It will be used as a hint by the inner FOR loop that is performed as part of the UPSERT query, and would help in cases such as UPSERT not @@ -15537,3572 +15540,4 @@ v2.2.2 (2014-08-08) 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 - - -v2.2.1 (2014-07-24) -------------------- - -* fixed hanging write-ahead log recovery for certain cases that involved dropping - databases - -* fixed issue with --check-version: when creating a new database the check failed - -* issue #947 Foxx applicationContext missing some properties - -* fixed issue with --check-version: when creating a new database the check failed - -* 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. - -* issue #947: Foxx applicationContext missing some properties - -* (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. - - -v2.2.0 (2014-07-10) -------------------- - -* 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 atomically 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 recognize wrong _from and _to - attributes of edges - -* improved error detection and reporting in arangorestore - - -v2.1.1 (2014-06-06) -------------------- - -* fixed dfdb: should not start any other V8 threads - -* signature for collection functions was modified - - The basic change was the substitution of the input parameter of the - function by an generic options object which can contain multiple - option parameter of the function. - Following functions were modified - remove - removeBySample - replace - replaceBySample - update - updateBySample - - Old signature is yet supported but it will be removed in future versions - -v2.1.0 (2014-05-29) -------------------- - -* 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 first) - -* improved cluster dashboard - - -v2.1.0-rc2 (2014-05-25) ------------------------ - -* fixed issue #864: Inconsistent behavior of AQL REVERSE(list) function - - -v2.1.0-rc1 (XXXX-XX-XX) ------------------------ - -* 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 seldom used system collections on creation. - - This will make these collections use less disk space and mapped memory. - -* added AQL date functions - -* added AQL FLATTEN() list function - -* 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 behavior 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 - - -v2.0.8 (XXXX-XX-XX) -------------------- - -* fixed too-busy iteration over skiplists - - Even when a skiplist query was restricted by a limit clause, the skiplist - index was queried without the limit. this led to slower-than-necessary - execution times. - -* fixed timeout overflows on 32 bit systems - - this bug has led to problems when select was called with a high timeout - value (2000+ seconds) on 32bit systems that don't have a forgiving select - implementation. when the call was made on these systems, select failed - so no data would be read or sent over the connection - - this might have affected some cluster-internal operations. - -* fixed ETCD issues on 32 bit systems - - ETCD was non-functional on 32 bit systems at all. The first call to the - watch API crashed it. This was because atomic operations worked on data - structures that were not properly aligned on 32 bit systems. - -* fixed issue #848: db.someEdgeCollection.inEdge does not return correct - value when called the 2nd time after a .save to the edge collection - - -v2.0.7 (2014-05-05) -------------------- - -* 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. - - -v2.0.6 (2014-04-22) -------------------- - -* fixed issue #835: arangosh doesn't show correct database name - - - -v2.0.5 (2014-04-21) -------------------- - -* Fixed a caching problem in IE JS Shell - -* added cancelation for async jobs - -* upgraded to new gyp for V8 - -* new Windows installer - - -v2.0.4 (2014-04-14) -------------------- - -* fixed cluster authentication front-end issues for Firefox and IE, there are - still problems with Chrome - - -v2.0.3 (2014-04-14) -------------------- - -* fixed AQL optimizer bug - -* fixed front-end issues - -* added password change dialog - - -v2.0.2 (2014-04-06) -------------------- - -* during cluster startup, do not log (somewhat expected) connection errors with - log level error, but with log level info - -* fixed dashboard modals - -* fixed connection check for cluster planning front end: firefox does - not support async:false - -* document how to persist a cluster plan in order to relaunch an existing - cluster later - - -v2.0.1 (2014-03-31) -------------------- - -* make ArangoDB not send back a `WWW-Authenticate` header to a client in case the - client sends the `X-Omit-WWW-Authenticate` HTTP header. - - This is done to prevent browsers from showing their built-in HTTP authentication - dialog for AJAX requests that require authentication. - ArangoDB will still return an HTTP 401 (Unauthorized) if the request doesn't - contain valid credentials, but it will omit the `WWW-Authenticate` header, - allowing clients to bypass the browser's authentication dialog. - -* fixed isses in arango-dfdb: - - the dfdb was not able to unload certain system collections, so these couldn't be - inspected with the dfdb sometimes. Additionally, it did not truncate corrupt - markers from datafiles under some circumstances - -* added `changePassword` attribute for users - -* fixed non-working "save" button in collection edit view of web interface - clicking the save button did nothing. one had to press enter in one of the input - fields to send modified form data - -* fixed V8 compile error on MacOS X - -* prevent `body length: -9223372036854775808` being logged in development mode for - some Foxx HTTP responses - -* fixed several bugs in web interface dashboard - -* fixed issue #783: coffee script not working in manifest file - -* fixed issue #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 - - -v2.0.0 (2014-03-10) -------------------- - -* first 2.0 release - - -v2.0.0-rc2 (2014-03-07) ------------------------ - -* fixed cluster authorization - - -v2.0.0-rc1 (2014-02-28) ------------------------ - -* added sharding :-) - -* added collection._dbName attribute to query the name of the database from a collection - - 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 2.0 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 - -* 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 - var aqlfunctions = require("org/arangodb/aql/functions"); - aqlfunctions.register("myfunctions::checkedge", function (config, vertex, edge, path) { - return (edge.type !== 'dislikes'); // don't follow these edges - }, false); - - aqlfunctions.register("myfunctions::checkvertex", function (config, vertex, path) { - if (vertex.isDeleted || ! vertex.isActive) { - return [ "prune", "exclude" ]; // exclude these and don't follow them - } - return [ ]; // include everything else - }, false); - -* fail if invalid `strategy`, `order` or `itemOrder` attribute values - are passed to the AQL TRAVERSAL function. Omitting these attributes - is not considered an error, but specifying an invalid value for any - of these attributes will make an AQL query fail. - -* issue #751: Create database through API should return HTTP status code 201 - - By default, the server now returns HTTP 201 (created) when creating a new - database successfully. To keep compatibility with older ArangoDB versions, the - startup parameter `--server.default-api-compatibility` can be set to a value - of `10400` to indicate API compatibility with ArangoDB 1.4. The compatibility - can also be enforced by setting the `X-Arango-Version` HTTP header in a - client request to this API on a per-request basis. - -* allow direct access from the `db` object to collections whose names start - with an underscore (e.g. db._users). - - Previously, access to such collections via the `db` object was possible from - arangosh, but not from arangod (and thus Foxx and actions). The only way - to access such collections from these places was via the `db._collection()` - workaround. - -* allow `\n` (as well as `\r\n`) as line terminator in batch requests sent to - `/_api/batch` HTTP API. - -* use `--data-binary` instead of `--data` parameter in generated cURL examples - -* issue #703: Also show path of logfile for fm.config() - -* issue #675: Dropping a collection used in "graph" module breaks the graph - -* added "static" Graph.drop() method for graphs API - -* fixed issue #695: arangosh server.password error - -* use pretty-printing in `--console` mode by default - -* simplified ArangoDB startup options - - Some startup options are now superfluous or their usage is simplified. The - following options have been changed: - - * `--javascript.modules-path`: this option has been removed. The modules paths - are determined by arangod and arangosh automatically based on the value of - `--javascript.startup-directory`. - - If the option is set on startup, it is ignored so startup will not abort with - an error `unrecognized option`. - - * `--javascript.action-directory`: this option has been removed. The actions - directory is determined by arangod automatically based on the value of - `--javascript.startup-directory`. - - If the option is set on startup, it is ignored so startup will not abort with - an error `unrecognized option`. - - * `--javascript.package-path`: this option is still available but it is not - required anymore to set the standard package paths (e.g. `js/npm`). arangod - will automatically use this standard package path regardless of whether it - was specified via the options. - - It is possible to use this option to add additional package paths to the - standard value. - - Configuration files included with arangod are adjusted accordingly. - -* layout of the graphs tab adapted to better fit with the other tabs - -* database selection is moved to the bottom right corner of the web interface - -* removed priority queue index type - - this feature was never advertised nor documented nor tested. - -* display internal attributes in document source view of web interface - -* removed separate shape collections - - When upgrading to ArangoDB 2.0, existing collections will be converted to include - shapes and attribute markers in the datafiles instead of using separate files for - shapes. - - When a collection is converted, existing shapes from the SHAPES directory will - be written to a new datafile in the collection directory, and the SHAPES directory - will be removed afterwards. - - This saves up to 2 MB of memory and disk space for each collection - (savings are higher, the less different shapes there are in a collection). - Additionally, one less file descriptor per opened collection will be used. - - When creating a new collection, the amount of sync calls may be reduced. The same - may be true for documents with yet-unknown shapes. This may help performance - in these cases. - -* added AQL functions `NTH` and `POSITION` - -* added signal handler for arangosh to save last command in more cases - -* added extra prompt placeholders for arangosh: - - `%e`: current endpoint - - `%u`: current user - -* added arangosh option `--javascript.gc-interval` to control amount of - garbage collection performed by arangosh - -* fixed issue #651: Allow addEdge() to take vertex ids in the JS library - -* removed command-line option `--log.format` - - In previous versions, this option did not have an effect for most log messages, so - it got removed. - -* removed C++ logger implementation - - Logging inside ArangoDB is now done using the LOG_XXX() macros. The LOGGER_XXX() - macros are gone. - -* added collection status "loading" - - -v1.4.16 (XXXX-XX-XX) --------------------- - -* fixed too eager datafile deletion - - this issue could have caused a crash when the compaction had marked datafiles as obsolete - and they were removed while "old" temporary query results still pointed to the old datafile - positions - -* fixed issue #826: Replication fails when a collection's configuration changes - - -v1.4.15 (2014-04-19) --------------------- - -* bugfix for AQL query optimizer - - the following type of query was too eagerly optimized, leading to errors in code-generation: - - LET a = (FOR i IN [] RETURN i) LET b = (FOR i IN [] RETURN i) RETURN 1 - - the problem occurred when both lists in the subqueries were empty. In this case invalid code - was generated and the query couldn't be executed. - - -v1.4.14 (2014-04-05) --------------------- - -* fixed race conditions during shape / attribute insertion - - A race condition could have led to spurious `cannot find attribute #xx` or - `cannot find shape #xx` (where xx is a number) warning messages being logged - by the server. This happened when a new attribute was inserted and at the same - time was queried by another thread. - - Also fixed a race condition that may have occurred when a thread tried to - access the shapes / attributes hash tables while they were resized. In this - cases, the shape / attribute may have been hashed to a wrong slot. - -* fixed a memory barrier / cpu synchronization problem with libev, affecting - Windows with Visual Studio 2013 (probably earlier versions are affected, too) - - The issue is described in detail here: - http://lists.schmorp.de/pipermail/libev/2014q1/002318.html - - -v1.4.13 (2014-03-14) --------------------- - -* added diagnostic output for Foxx application upload - -* allow dump & restore from ArangoDB 1.4 with an ArangoDB 2.0 server - -* allow startup options `temp-path` and `default-language` to be specified from the arangod - configuration file and not only from the command line - -* fixed too eager compaction - - The compaction will now wait for several seconds before trying to re-compact the same - collection. Additionally, some other limits have been introduced for the compaction. - - -v1.4.12 (2014-03-05) --------------------- - -* fixed display bug in web interface which caused the following problems: - - documents were displayed in web interface as being empty - - document attributes view displayed many attributes with content "undefined" - - document source view displayed many attributes with name "TYPEOF" and value "undefined" - - an alert popping up in the browser with message "Datatables warning..." - -* re-introduced old-style read-write locks to supports Windows versions older than - Windows 2008R2 and Windows 7. This should re-enable support for Windows Vista and - Windows 2008. - - -v1.4.11 (2014-02-27) --------------------- - -* added SHORTEST_PATH AQL function - - this calculates the shortest paths between two vertices, using the Dijkstra - algorithm, employing a min-heap - - By default, ArangoDB does not know the distance between any two vertices and - will use a default distance of 1. A custom distance function can be registered - as an AQL user function to make the distance calculation use any document - attributes or custom logic: - - RETURN SHORTEST_PATH(cities, motorways, "cities/CGN", "cities/MUC", "outbound", { - paths: true, - distance: "myfunctions::citydistance" - }) - - // using the following custom distance function - var aqlfunctions = require("org/arangodb/aql/functions"); - aqlfunctions.register("myfunctions::distance", function (config, vertex1, vertex2, edge) { - return Math.sqrt(Math.pow(vertex1.x - vertex2.x) + Math.pow(vertex1.y - vertex2.y)); - }, false); - -* fixed bug in Graph.pathTo function - -* fixed small memleak in AQL optimizer - -* fixed access to potentially uninitialized variable when collection had a cap constraint - - -v1.4.10 (2014-02-21) --------------------- - -* fixed graph constructor to allow graph with some parameter to be used - -* added node.js "events" and "stream" - -* updated npm packages - -* added loading of .json file - -* Fixed http return code in graph api with waitForSync parameter. - -* Fixed documentation in graph, simple and index api. - -* removed 2 tests due to change in ruby library. - -* issue #756: set access-control-expose-headers on CORS response - - the following headers are now whitelisted by ArangoDB in CORS responses: - - etag - - content-encoding - - content-length - - location - - server - - x-arango-errors - - x-arango-async-id - - -v1.4.9 (2014-02-07) -------------------- - -* return a document's current etag in response header for HTTP HEAD requests on - documents that return an HTTP 412 (precondition failed) error. This allows - retrieving the document's current revision easily. - -* added AQL function `SKIPLIST` to directly access skiplist indexes from AQL - - This is a shortcut method to use a skiplist index for retrieving specific documents in - indexed order. The function capability is rather limited, but it may be used - for several cases to speed up queries. The documents are returned in index order if - only one condition is used. - - /* return all documents with mycollection.created > 12345678 */ - FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ]] }) - RETURN doc - - /* return first document with mycollection.created > 12345678 */ - FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ]] }, 0, 1) - RETURN doc - - /* return all documents with mycollection.created between 12345678 and 123456790 */ - FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ], [ '<=', 123456790 ]] }) - RETURN doc - - /* return all documents with mycollection.a equal 1 and .b equal 2 */ - FOR doc IN SKIPLIST(mycollection, { a: [[ '==', 1 ]], b: [[ '==', 2 ]] }) - RETURN doc - - The function requires a skiplist index with the exact same attributes to - be present on the specified collection. All attributes present in the skiplist - index must be specified in the conditions specified for the `SKIPLIST` function. - Attribute declaration order is important, too: attributes must be specified in the - same order in the condition as they have been declared in the skiplist index. - -* added command-line option `--server.disable-authentication-unix-sockets` - - with this option, authentication can be disabled for all requests coming - in via UNIX domain sockets, enabling clients located on the same host as - the ArangoDB server to connect without authentication. - Other connections (e.g. TCP/IP) are not affected by this option. - - The default value for this option is `false`. - Note: this option is only supported on platforms that support Unix domain - sockets. - -* call global arangod instance destructor on shutdown - -* issue #755: TRAVERSAL does not use strategy, order and itemOrder options - - these options were not honored when configuring a traversal via the AQL - TRAVERSAL function. Now, these options are used if specified. - -* allow vertex and edge filtering with user-defined functions in TRAVERSAL, - 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 - var aqlfunctions = require("org/arangodb/aql/functions"); - aqlfunctions.register("myfunctions::checkedge", function (config, vertex, edge, path) { - return (edge.type !== 'dislikes'); // don't follow these edges - }, false); - - aqlfunctions.register("myfunctions::checkvertex", function (config, vertex, path) { - if (vertex.isDeleted || ! vertex.isActive) { - return [ "prune", "exclude" ]; // exclude these and don't follow them - } - return [ ]; // include everything else - }, false); - -* issue #748: add vertex filtering to AQL's TRAVERSAL[_TREE]() function - - -v1.4.8 (2014-01-31) -------------------- - -* install foxx apps in the web interface - -* fixed a segfault in the import API - - -v1.4.7 (2014-01-23) -------------------- - -* issue #744: Add usage example arangoimp from Command line - -* issue #738: added __dirname, __filename pseudo-globals. Fixes #733. (@by pluma) - -* mount all Foxx applications in system apps directory on startup - - -v1.4.6 (2014-01-20) -------------------- - -* issue #736: AQL function to parse collection and key from document handle - -* added fm.rescan() method for Foxx-Manager - -* fixed issue #734: foxx cookie and route problem - -* added method `fm.configJson` for arangosh - -* include `startupPath` in result of API `/_api/foxx/config` - - -v1.4.5 (2014-01-15) -------------------- - -* fixed issue #726: Alternate Windows Install Method - -* fixed issue #716: dpkg -P doesn't remove everything - -* fixed bugs in description of HTTP API `_api/index` - -* fixed issue #732: Rest API GET revision number - -* added missing documentation for several methods in HTTP API `/_api/edge/...` - -* fixed typos in description of HTTP API `_api/document` - -* defer evaluation of AQL subqueries and logical operators (lazy evaluation) - -* Updated font in WebFrontend, it now contains a version that renders properly on Windows - -* generally allow function return values as call parameters to AQL functions - -* fixed potential deadlock in global context method execution - -* added override file "arangod.conf.local" (and co) - - -v1.4.4 (2013-12-24) -------------------- - -* uid and gid are now set in the scripts, there is no longer a separate config file for - arangod when started from a script - -* foxx-manager is now an alias for arangosh - -* arango-dfdb is now an alias for arangod, moved from bin to sbin - -* changed from readline to linenoise for Windows - -* added --install-service and --uninstall-service for Windows - -* removed --daemon and --supervisor for Windows - -* arangosh and arangod now uses the config-file which maps the binary name, i. e. if you - rename arangosh to foxx-manager it will use the config file foxx-manager.conf - -* fixed lock file for Windows - -* fixed issue #711, #687: foxx-manager throws internal errors - -* added `--server.ssl-protocol` option for client tools - this allows connecting from arangosh, arangoimp, arangoimp etc. to an ArangoDB - server that uses a non-default value for `--server.ssl-protocol`. The default - value for the SSL protocol is 4 (TLSv1). If the server is configured to use a - different protocol, it was not possible to connect to it with the client tools. - -* added more detailed request statistics - - This adds the number of async-executed HTTP requests plus the number of HTTP - requests per individual HTTP method type. - -* added `--force` option for arangorestore - this option allows continuing a restore operation even if the server reports errors - in the middle of the restore operation - -* better error reporting for arangorestore - in case the server returned an HTTP error, arangorestore previously reported this - error as `internal error` without any details only. Now server-side errors are - reported by arangorestore with the server's error message - -* include more system collections in dumps produced by arangodump - previously some system collections were intentionally excluded from dumps, even if the - dump was run with `--include-system-collections`. for example, the collections `_aal`, - `_modules`, `_routing`, and `_users` were excluded. This makes sense in a replication - context but not always in a dump context. - When specifying `--include-system-collections`, arangodump will now include the above- - mentioned collections in the dump, too. Some other system collections are still excluded - even when the dump is run with `--include-system-collections`, for example `_replication` - and `_trx`. - -* fixed issue #701: ArangoStatement undefined in arangosh - -* fixed typos in configuration files - - -v1.4.3 (2013-11-25) -------------------- - -* fixed a segfault in the AQL optimizer, occurring when a constant non-list value was - used on the right-hand side of an IN operator that had a collection attribute on the - left-hand side - -* issue #662: - - Fixed access violation errors (crashes) in the Windows version, occurring under some - circumstances when accessing databases with multiple clients in parallel - -* fixed issue #681: Problem with ArchLinux PKGBUILD configuration - - -v1.4.2 (2013-11-20) -------------------- - -* fixed issue #669: Tiny documentation update - -* ported Windows version to use native Windows API SRWLocks (slim read-write locks) - and condition variables instead of homemade versions - - MSDN states the following about the compatibility of SRWLocks and Condition Variables: - - Minimum supported client: - Windows Server 2008 [desktop apps | Windows Store apps] - - Minimum supported server: - Windows Vista [desktop apps | Windows Store apps] - -* fixed issue #662: ArangoDB on Windows hanging - - This fixes a deadlock issue that occurred on Windows when documents were written to - a collection at the same time when some other thread tried to drop the collection. - -* fixed file-based logging in Windows - - the logger complained on startup if the specified log file already existed - -* fixed startup of server in daemon mode (`--daemon` startup option) - -* fixed a segfault in the AQL optimizer - -* issue #671: Method graph.measurement does not exist - -* changed Windows condition variable implementation to use Windows native - condition variables - - This is an attempt to fix spurious Windows hangs as described in issue #662. - -* added documentation for JavaScript traversals - -* added --code-page command-line option for Windows version of arangosh - -* fixed a problem when creating edges via the web interface. - - The problem only occurred if a collection was created with type "document - collection" via the web interface, and afterwards was dropped and re-created - with type "edge collection". If the web interface page was not reloaded, - the old collection type (document) was cached, making the subsequent creation - of edges into the (seeming-to-be-document) collection fail. - - The fix is to not cache the collection type in the web interface. Users of - an older version of the web interface can reload the collections page if they - are affected. - -* fixed a caching problem in arangosh: if a collection was created using the web - interface, and then removed via arangosh, arangosh did not actually drop the - collection due to caching. - - Because the `drop` operation was not carried out, this caused misleading error - messages when trying to re-create the collection (e.g. `cannot create collection: - duplicate name`). - -* fixed ALT-introduced characters for arangosh console input on Windows - - The Windows readline port was not able to handle characters that are built - using CTRL or ALT keys. Regular characters entered using the CTRL or ALT keys - were silently swallowed and not passed to the terminal input handler. - - This did not seem to cause problems for the US keyboard layout, but was a - severe issue for keyboard layouts that require the ALT (or ALT-GR) key to - construct characters. For example, entering the character `{` with a German - keyboard layout requires pressing ALT-GR + 9. - -* fixed issue #665: Hash/skiplist combo madness bit my ass - - this fixes a problem with missing/non-deterministic rollbacks of inserts in - case of a unique constraint violation into a collection with multiple secondary - indexes (with at least one of them unique) - -* fixed issue #664: ArangoDB installer on Windows requires drive c: - -* partly fixed issue #662: ArangoDB on Windows hanging - - This fixes dropping databases on Windows. In previous 1.4 versions on Windows, - one shape collection file was not unloaded and removed when dropping a database, - leaving one directory and one shape collection file in the otherwise-dropped - database directory. - -* fixed issue #660: updated documentation on indexes - - -v1.4.1 (2013-11-08) -------------------- - -* performance improvements for skip-list deletes - - -v1.4.1-rc1 (2013-11-07) ------------------------ - -* fixed issue #635: Web-Interface should have a "Databases" Menu for Management - -* fixed issue #624: Web-Interface is missing a Database selector - -* fixed segfault in bitarray query - -* fixed issue #656: Cannot create unique index through web interface - -* fixed issue #654: bitarray index makes server down - -* fixed issue #653: Slow query - -* fixed issue #650: Randomness of any() should be improved - -* made AQL `DOCUMENT()` function polymorphic and work with just one parameter. - - This allows using the `DOCUMENT` function like this: - - DOCUMENT('users/john') - DOCUMENT([ 'users/john', 'users/amy' ]) - - in addition to the existing use cases: - - DOCUMENT(users, 'users/john') - DOCUMENT(users, 'john') - DOCUMENT(users, [ 'users/john' ]) - DOCUMENT(users, [ 'users/john', 'users/amy' ]) - DOCUMENT(users, [ 'john', 'amy' ]) - -* simplified usage of ArangoDB batch API - - It is not necessary anymore to send the batch boundary in the HTTP `Content-Type` - header. Previously, the batch API expected the client to send a Content-Type header - of`multipart/form-data; boundary=`. This is still supported in - ArangoDB 2.0, but clients can now also omit this header. If the header is not - present in a client request, ArangoDB will ignore the request content type and - read the MIME boundary from the beginning of the request body. - - This also allows using the batch API with the Swagger "Try it out" feature (which is - not too good at sending a different or even dynamic content-type request header). - -* added API method GET `/_api/database/user` - - This returns the list of databases a specific user can see without changing the - username/passwd. - -* issue #424: Documentation about IDs needs to be upgraded - - -v1.4.0 (2013-10-29) -------------------- - -* fixed issue #648: /batch API is missing from Web Interface API Documentation (Swagger) - -* fixed issue #647: Icon tooltips missing - -* fixed issue #646: index creation in web interface - -* fixed issue #645: Allow jumping from edge to linked vertices - -* merged PR for issue #643: Some minor corrections and a link to "Downloads" - -* fixed issue #642: Completion of error handling - -* fixed issue #639: compiling v1.4 on maverick produces warnings on -Wstrict-null-sentinel - -* fixed issue #634: Web interface bug: Escape does not always propagate - -* fixed issue #620: added startup option `--server.default-api-compatibility` - - This adds the following changes to the ArangoDB server and clients: - - the server provides a new startup option `--server.default-api-compatibility`. - This option can be used to determine the compatibility of (some) server API - return values. The value for this parameter is a server version number, - calculated as follows: `10000 * major + 100 * minor` (e.g. `10400` for ArangoDB - 1.3). The default value is `10400` (1.4), the minimum allowed value is `10300` - (1.3). - - When setting this option to a value lower than the current server version, - the server might respond with old-style results to "old" clients, increasing - compatibility with "old" (non-up-to-date) clients. - - - the server will on each incoming request check for an HTTP header - `x-arango-version`. Clients can optionally set this header to the API - version number they support. For example, if a client sends the HTTP header - `x-arango-version: 10300`, the server will pick this up and might send ArangoDB - 1.3-style responses in some situations. - - Setting either the startup parameter or using the HTTP header (or both) allows - running "old" clients with newer versions of ArangoDB, without having to adjust - the clients too much. - - - the `location` headers returned by the server for the APIs `/_api/document/...` - and `/_api/collection/...` will have different values depending on the used API - version. If the API compatibility is `10300`, the `location` headers returned - will look like this: - - location: /_api/document/.... - - whereas when an API compatibility of `10400` or higher is used, the `location` - headers will look like this: - - location: /_db//_api/document/... - - Please note that even in the presence of this, old API versions still may not - be supported forever by the server. - -* fixed issue #643: Some minor corrections and a link to "Downloads" by @frankmayer - -* started issue #642: Completion of error handling - -* fixed issue #639: compiling v1.4 on maverick produces warnings on - -Wstrict-null-sentinel - -* fixed issue #621: Standard Config needs to be fixed - -* added function to manage indexes (web interface) - -* improved server shutdown time by signaling shutdown to applicationserver, - logging, cleanup and compactor threads - -* added foxx-manager `replace` command - -* added foxx-manager `installed` command (a more intuitive alias for `list`) - -* fixed issue #617: Swagger API is missing '/_api/version' - -* fixed issue #615: Swagger API: Some commands have no parameter entry forms - -* fixed issue #614: API : Typo in : Request URL /_api/database/current - -* fixed issue #609: Graph viz tool - different background color - -* fixed issue #608: arangosh config files - eventually missing in the manual - -* fixed issue #607: Admin interface: no core documentation - -* fixed issue #603: Aardvark Foxx App Manager - -* fixed a bug in type-mapping between AQL user functions and the AQL layer - - The bug caused errors like the following when working with collection documents - in an AQL user function: - - TypeError: Cannot assign to read only property '_id' of # - -* create less system collections when creating a new database - - This is achieved by deferring collection creation until the collections are actually - needed by ArangoDB. The following collections are affected by the change: - - `_fishbowl` - - `_structures` - - -v1.4.0-beta2 (2013-10-14) -------------------------- - -* fixed compaction on Windows - - The compaction on Windows did not ftruncate the cleaned datafiles to a smaller size. - This has been fixed so not only the content of the files is cleaned but also files - are re-created with potentially smaller sizes. - -* only the following system collections will be excluded from replication from now on: - - `_replication` - - `_trx` - - `_users` - - `_aal` - - `_fishbowl` - - `_modules` - - `_routing` - - Especially the following system collections will now be included in replication: - - `_aqlfunctions` - - `_graphs` - - In previous versions of ArangoDB, all system collections were excluded from the - replication. - - The change also caused a change in the replication logger and applier: - in previous versions of ArangoDB, only a collection's id was logged for an operation. - This has not caused problems for non-system collections but for system collections - there ids might differ. In addition to a collection id ArangoDB will now also log the - name of a collection for each replication event. - - The replication applier will now look for the collection name attribute in logged - events preferably. - -* added database selection to arango-dfdb - -* provide foxx-manager, arangodump, and arangorestore in Windows build - -* ArangoDB 1.4 will refuse to start if option `--javascript.app-path` is not set. - -* added startup option `--server.allow-method-override` - - This option can be set to allow overriding the HTTP request method in a request using - one of the following custom headers: - - - x-http-method-override - - x-http-method - - x-method-override - - This allows bypassing proxies and tools that would otherwise just let certain types of - requests pass. Enabling this option may impose a security risk, so it should only be - used in very controlled environments. - - The default value for this option is `false` (no method overriding allowed). - -* added "details" URL parameter for bulk import API - - Setting the `details` URL parameter to `true` in a call to POST `/_api/import` will make - the import return details about non-imported documents in the `details` attribute. If - `details` is `false` or omitted, no `details` attribute will be present in the response. - This is the same behavior that previous ArangoDB versions exposed. - -* added "complete" option for bulk import API - - Setting the `complete` URL parameter to `true` in a call to POST `/_api/import` will make - the import completely fail if at least one of documents cannot be imported successfully. - - It defaults to `false`, which will make ArangoDB continue importing the other documents - from the import even if some documents cannot be imported. This is the same behavior that - previous ArangoDB versions exposed. - -* added missing swagger documentation for `/_api/log` - -* calling `/_api/logs` (or `/_admin/logs`) is only permitted from the `_system` database now. - - Calling this API method for/from other database will result in an HTTP 400. - -' ported fix from https://github.com/novus/nvd3/commit/0894152def263b8dee60192f75f66700cea532cc - - This prevents JavaScript errors from occurring in Chrome when in the admin interface, - section "Dashboard". - -* show current database name in web interface (bottom right corner) - -* added missing documentation for /_api/import in swagger API docs - -* allow specification of database name for replication sync command replication applier - - This allows syncing from a master database with a different name than the slave database. - -* issue #601: Show DB in prompt - - arangosh now displays the database name as part of the prompt by default. - - Can change the prompt by using the `--prompt` option, e.g. - - > arangosh --prompt "my db is named \"%d\"> " - - -v1.4.0-beta1 (2013-10-01) -------------------------- - -* make the Foxx manager use per-database app directories - - Each database now has its own subdirectory for Foxx applications. Each database - can thus use different Foxx applications if required. A Foxx app for a specific - database resides in `/databases//`. - - System apps are shared between all databases. They reside in `/system/`. - -* only trigger an engine reset in development mode for URLs starting with `/dev/` - - This prevents ArangoDB from reloading all Foxx applications when it is not - actually necessary. - -* changed error code from 10 (bad parameter) to 1232 (invalid key generator) for - errors that are due to an invalid key generator specification when creating a new - collection - -* automatic detection of content-type / mime-type for Foxx assets based on filenames, - added possibility to override auto detection - -* added endpoint management API at `/_api/endpoint` - -* changed HTTP return code of PUT `/_api/cursor` from 400 to 404 in case a - non-existing cursor is referred to - -* issue #360: added support for asynchronous requests - - Incoming HTTP requests with the headers `x-arango-async: true` or - `x-arango-async: store` will be answered by the server instantly with a generic - HTTP 202 (Accepted) response. - - The actual requests will be queued and processed by the server asynchronously, - allowing the client to continue sending other requests without waiting for the - server to process the actually requested operation. - - The exact point in time when a queued request is executed is undefined. If an - error occurs during execution of an asynchronous request, the client will not - be notified by the server. - - The maximum size of the asynchronous task queue can be controlled using the new - option `--scheduler.maximal-queue-size`. If the queue contains this many number of - tasks and a new asynchronous request comes in, the server will reject it with an - HTTP 500 (internal server error) response. - - Results of incoming requests marked with header `x-arango-async: true` will be - discarded by the server immediately. Clients have no way of accessing the result - of such asynchronously executed request. This is just _fire and forget_. - - To later retrieve the result of an asynchronously executed request, clients can - mark a request with the header `x-arango-async: keep`. This makes the server - store the result of the request in memory until explicitly fetched by a client - via the `/_api/job` API. The `/_api/job` API also provides methods for basic - inspection of which pending or already finished requests there are on the server, - plus ways for garbage collecting unneeded results. - -* Added new option `--scheduler.maximal-queue-size`. - -* issue #590: Manifest Lint - -* added data dump and restore tools, arangodump and arangorestore. - - arangodump can be used to create a logical dump of an ArangoDB database, or - just dedicated collections. It can be used to dump both a collection's structure - (properties and indexes) and data (documents). - - arangorestore can be used to restore data from a dump created with arangodump. - arangorestore currently does not re-create any indexes, and doesn't yet handle - referenced documents in edges properly when doing just partial restores. - This will be fixed until 1.4 stable. - -* introduced `--server.database` option for arangosh, arangoimp, and arangob. - - The option allows these client tools to use a certain database for their actions. - In arangosh, the current database can be switched at any time using the command - - db._useDatabase(); - - When no database is specified, all client tools will assume they should use the - default database `_system`. This is done for downwards-compatibility reasons. - -* added basic multi database support (alpha) - - New databases can be created using the REST API POST `/_api/database` and the - shell command `db._createDatabase()`. - - The default database in ArangoDB is called `_system`. This database is always - present and cannot be deleted by the user. When an older version of ArangoDB is - upgraded to 1.4, the previously only database will automatically become the - `_system` database. - - New databases can be created with the above commands, and can be deleted with the - REST API DELETE `/_api/database/` or the shell command `db._dropDatabase();`. - - Deleting databases is still unstable in ArangoDB 1.4 alpha and might crash the - server. This will be fixed until 1.4 stable. - - To access a specific database via the HTTP REST API, the `/_db//` prefix - can be used in all URLs. ArangoDB will check if an incoming request starts with - this prefix, and will automatically pick the database name from it. If the prefix - is not there, ArangoDB will assume the request is made for the default database - (`_system`). This is done for downwards-compatibility reasons. - - That means, the following URL pathnames are logically identical: - - /_api/document/mycollection/1234 - /_db/_system/document/mycollection/1234 - - To access a different database (e.g. `test`), the URL pathname would look like this: - - /_db/test/document/mycollection/1234 - - New databases can also be created and existing databases can only be dropped from - within the default database (`_system`). It is not possible to drop the `_system` - database itself. - - Cross-database operations are unintended and unsupported. The intention of the - multi-database feature is to have the possibility to have a few databases managed - by ArangoDB in parallel, but to only access one database at a time from a connection - or a request. - - When accessing the web interface via the URL pathname `/_admin/html/` or `/_admin/aardvark`, - the web interface for the default database (`_system`) will be displayed. - To access the web interface for a different database, the database name can be - put into the URLs as a prefix, e.g. `/_db/test/_admin/html` or - `/_db/test/_admin/aardvark`. - - All internal request handlers and also all user-defined request handlers and actions - (including Foxx) will only get to see the unprefixed URL pathnames (i.e. excluding - any database name prefix). This is to ensure downwards-compatibility. - - To access the name of the requested database from any action (including Foxx), use - use `req.database`. - - For example, when calling the URL `/myapp/myaction`, the content of `req.database` - will be `_system` (the default database because no database got specified) and the - content of `req.url` will be `/myapp/myaction`. - - When calling the URL `/_db/test/myapp/myaction`, the content of `req.database` will be - `test`, and the content of `req.url` will still be `/myapp/myaction`. - -* Foxx now excludes files starting with . (dot) when bundling assets - - This mitigates problems with editor swap files etc. - -* made the web interface a Foxx application - - This change caused the files for the web interface to be moved from `html/admin` to - `js/apps/aardvark` in the file system. - - The base URL for the admin interface changed from `_admin/html/index.html` to - `_admin/aardvark/index.html`. - - The "old" redirection to `_admin/html/index.html` will now produce a 404 error. - - When starting ArangoDB with the `--upgrade` option, this will automatically be remedied - by putting in a redirection from `/` to `/_admin/aardvark/index.html`, and from - `/_admin/html/index.html` to `/_admin/aardvark/index.html`. - - This also obsoletes the following configuration (command-line) options: - - `--server.admin-directory` - - `--server.disable-admin-interface` - - when using these now obsolete options when the server is started, no error is produced - for downwards-compatibility. - -* changed User-Agent value sent by arangoimp, arangosh, and arangod from "VOC-Agent" to - "ArangoDB" - -* changed journal file creation behavior as follows: - - Previously, a journal file for a collection was always created when a collection was - created. When a journal filled up and became full, the current journal was made a - datafile, and a new (empty) journal was created automatically. There weren't many - intended situations when a collection did not have at least one journal. - - This is changed now as follows: - - when a collection is created, no journal file will be created automatically - - when there is a write into a collection without a journal, the journal will be - created lazily - - when there is a write into a collection with a full journal, a new journal will - be created automatically - - From the end user perspective, nothing should have changed, except that there is now - less disk usage for empty collections. Disk usage of infrequently updated collections - might also be reduced significantly by running the `rotate()` method of a collection, - and not writing into a collection subsequently. - -* added method `collection.rotate()` - - This allows premature rotation of a collection's current journal file into a (read-only) - datafile. The purpose of using `rotate()` is to prematurely allow compaction (which is - performed on datafiles only) on data, even if the journal was not filled up completely. - - Using `rotate()` may make sense in the following scenario: - - c = db._create("test"); - for (i = 0; i < 1000; ++i) { - c.save(...); // insert lots of data here - } - - ... - c.truncate(); // collection is now empty - // only data in datafiles will be compacted by following compaction runs - // all data in the current journal would not be compacted - - // calling rotate will make the current journal a datafile, and thus make it - // eligible for compaction - c.rotate(); - - Using `rotate()` may also be useful when data in a collection is known to not change - in the immediate future. After having completed all write operations on a collection, - performing a `rotate()` will reduce the size of the current journal to the actually - required size (remember that journals are pre-allocated with a specific size) before - making the journal a datafile. Thus `rotate()` may cause disk space savings, even if - the datafiles does not qualify for compaction after rotation. - - Note: rotating the journal is asynchronous, so that the actual rotation may be executed - after `rotate()` returns to the caller. - -* changed compaction to merge small datafiles together (up to 3 datafiles are merged in - a compaction run) - - In the regular case, this should leave less small datafiles stay around on disk and allow - using less file descriptors in total. - -* added AQL MINUS function - -* added AQL UNION_DISTINCT function (more efficient than combination of `UNIQUE(UNION())`) - -* updated mruby to 2013-08-22 - -* issue #587: Add db._create() in help for startup arangosh - -* issue #586: Share a link on installation instructions in the User Manual - -* issue #585: Bison 2.4 missing on Mac for custom build - -* issue #584: Web interface images broken in devel - -* issue #583: Small documentation update - -* issue #581: Parameter binding for attributes - -* issue #580: Small improvements (by @guidoreina) - -* issue #577: Missing documentation for collection figures in implementor manual - -* issue #576: Get disk usage for collections and graphs - - This extends the result of the REST API for /_api/collection/figures with - the attributes `compactors.count`, `compactors.fileSize`, `shapefiles.count`, - and `shapefiles.fileSize`. - -* issue #575: installing devel version on mac (low prio) - -* issue #574: Documentation (POST /_admin/routing/reload) - -* issue #558: HTTP cursors, allow count to ignore LIMIT - - -v1.4.0-alpha1 (2013-08-02) --------------------------- - -* added replication. check online manual for details. - -* added server startup options `--server.disable-replication-logger` and - `--server.disable-replication-applier` - -* removed action deployment tool, this now handled with Foxx and its manager or - by kaerus node utility - -* fixed a server crash when using byExample / firstExample inside a transaction - and the collection contained a usable hash/skiplist index for the example - -* defineHttp now only expects a single context - -* added collection detail dialog (web interface) - - Shows collection properties, figures (datafiles, journals, attributes, etc.) - and indexes. - -* added documents filter (web interface) - - Allows searching for documents based on attribute values. One or many filter - conditions can be defined, using comparison operators such as '==', '<=', etc. - -* improved AQL editor (web interface) - - Editor supports keyboard shortcuts (Submit, Undo, Redo, Select). - Editor allows saving and reusing of user-defined queries. - Added example queries to AQL editor. - Added comment button. - -* added document import (web interface) - - Allows upload of JSON-data from files. Files must have an extension of .json. - -* added dashboard (web interface) - - Shows the status of replication and multiple system charts, e.g. - Virtual Memory Size, Request Time, HTTP Connections etc. - -* added API method `/_api/graph` to query all graphs with all properties. - -* added example queries in web interface AQL editor - -* added arango.reconnect() method for arangosh to dynamically switch server or - user name - -* added AQL range operator `..` - - The `..` operator can be used to easily iterate over a sequence of numeric - values. It will produce a list of values in the defined range, with both bounding - values included. - - Example: - - 2010..2013 - - will produce the following result: - - [ 2010, 2011, 2012, 2013 ] - -* added AQL RANGE function - -* added collection.first(count) and collection.last(count) document access functions - - These functions allow accessing the first or last n documents in a collection. The order - is determined by document insertion/update time. - -* added AQL INTERSECTION function - -* INCOMPATIBLE CHANGE: changed AQL user function namespace resolution operator from `:` to `::` - - AQL user-defined functions were introduced in ArangoDB 1.3, and the namespace resolution - operator for them was the single colon (`:`). A function call looked like this: - - RETURN mygroup:myfunc() - - The single colon caused an ambiguity in the AQL grammar, making it indistinguishable from - named attributes or the ternary operator in some cases, e.g. - - { mygroup:myfunc ? mygroup:myfunc } - - The change of the namespace resolution operator from `:` to `::` fixes this ambiguity. - - Existing user functions in the database will be automatically fixed when starting ArangoDB - 1.4 with the `--upgrade` option. However, queries using user-defined functions need to be - adjusted on the client side to use the new operator. - -* allow multiple AQL LET declarations separated by comma, e.g. - LET a = 1, b = 2, c = 3 - -* more useful AQL error messages - - The error position (line/column) is more clearly indicated for parse errors. - Additionally, if a query references a collection that cannot be found, the error - message will give a hint on the collection name - -* changed return value for AQL `DOCUMENT` function in case document is not found - - Previously, when the AQL `DOCUMENT` function was called with the id of a document and - the document could not be found, it returned `undefined`. This value is not part of the - JSON type system and this has caused some problems. - Starting with ArangoDB 1.4, the `DOCUMENT` function will return `null` if the document - looked for cannot be found. - - In case the function is called with a list of documents, it will continue to return all - found documents, and will not return `null` for non-found documents. This has not changed. - -* added single line comments for AQL - - Single line comments can be started with a double forward slash: `//`. - They end at the end of the line, or the end of the query string, whichever is first. - -* fixed documentation issues #567, #568, #571. - -* added collection.checksum() method to calculate CRC checksums for - collections - - This can be used to - - check if data in a collection has changed - - compare the contents of two collections on different ArangoDB instances - -* issue #565: add description line to aal.listAvailable() - -* fixed several out-of-memory situations when double freeing or invalid memory - accesses could happen - -* less msyncing during the creation of collections - - This is achieved by not syncing the initial (standard) markers in shapes collections. - After all standard markers are written, the shapes collection will get synced. - -* renamed command-line option `--log.filter` to `--log.source-filter` to avoid - misunderstandings - -* introduced new command-line option `--log.content-filter` to optionally restrict - logging to just specific log messages (containing the filter string, case-sensitive). - - For example, to filter on just log entries which contain `ArangoDB`, use: - - --log.content-filter "ArangoDB" - -* added optional command-line option `--log.requests-file` to log incoming HTTP - requests to a file. - - When used, all HTTP requests will be logged to the specified file, containing the - client IP address, HTTP method, requests URL, HTTP response code, and size of the - response body. - -* added a signal handler for SIGUSR1 signal: - - when ArangoDB receives this signal, it will respond all further incoming requests - with an HTTP 503 (Service Unavailable) error. This will be the case until another - SIGUSR1 signal is caught. This will make ArangoDB start serving requests regularly - again. Note: this is not implemented on Windows. - -* limited maximum request URI length to 16384 bytes: - - Incoming requests with longer request URIs will be responded to with an HTTP - 414 (Request-URI Too Long) error. - -* require version 1.0 or 1.1 in HTTP version signature of requests sent by clients: - - Clients sending requests with a non-HTTP 1.0 or non-HTTP 1.1 version number will - be served with an HTTP 505 (HTTP Version Not Supported) error. - -* updated manual on indexes: - - using system attributes such as `_id`, `_key`, `_from`, `_to`, `_rev` in indexes is - disallowed and will be rejected by the server. This was the case since ArangoDB 1.3, - but was not properly documented. - -* issue #563: can aal become a default object? - - aal is now a prefab object in arangosh - -* prevent certain system collections from being renamed, dropped, or even unloaded. - - Which restrictions there are for which system collections may vary from release to - release, but users should in general not try to modify system collections directly - anyway. - - Note: there are no such restrictions for user-created collections. - -* issue #559: added Foxx documentation to user manual - -* added server startup option `--server.authenticate-system-only`. This option can be - used to restrict the need for HTTP authentication to internal functionality and APIs, - such as `/_api/*` and `/_admin/*`. - Setting this option to `true` will thus force authentication for the ArangoDB APIs - and the web interface, but allow unauthenticated requests for other URLs (including - user defined actions and Foxx applications). - The default value of this option is `false`, meaning that if authentication is turned - on, authentication is still required for *all* incoming requests. Only by setting the - option to `true` this restriction is lifted and authentication becomes required for - URLs starting with `/_` only. - - Please note that authentication still needs to be enabled regularly by setting the - `--server.disable-authentication` parameter to `false`. Otherwise no authentication - will be required for any URLs as before. - -* protect collections against unloading when there are still document barriers around. - -* extended cap constraints to optionally limit the active data size in a collection to - a specific number of bytes. - - The arguments for creating a cap constraint are now: - `collection.ensureCapConstraint(, );` - - It is supported to specify just a count as in ArangoDB 1.3 and before, to specify - just a fileSize, or both. The first met constraint will trigger the automated - document removal. - -* added `db._exists(doc)` and `collection.exists(doc)` for easy document existence checks - -* added API `/_api/current-database` to retrieve information about the database the - client is currently connected to (note: the API `/_api/current-database` has been - removed in the meantime. The functionality is accessible via `/_api/database/current` - now). - -* ensure a proper order of tick values in datafiles/journals/compactors. - any new files written will have the _tick values of their markers in order. for - older files, there are edge cases at the beginning and end of the datafiles when - _tick values are not properly in order. - -* prevent caching of static pages in PathHandler. - whenever a static page is requested that is served by the general PathHandler, the - server will respond to HTTP GET requests with a "Cache-Control: max-age=86400" header. - -* added "doCompact" attribute when creating collections and to collection.properties(). - The attribute controls whether collection datafiles are compacted. - -* changed the HTTP return code from 400 to 404 for some cases when there is a referral - to a non-existing collection or document. - -* introduced error code 1909 `too many iterations` that is thrown when graph traversals - hit the `maxIterations` threshold. - -* optionally limit traversals to a certain number of iterations - the limitation can be achieved via the traversal API by setting the `maxIterations` - attribute, and also via the AQL `TRAVERSAL` and `TRAVERSAL_TREE` functions by setting - the same attribute. If traversals are not limited by the end user, a server-defined - limit for `maxIterations` may be used to prevent server-side traversals from running - endlessly. - -* added graph traversal API at `/_api/traversal` - -* added "API" link in web interface, pointing to REST API generated with Swagger - -* moved "About" link in web interface into "links" menu - -* allow incremental access to the documents in a collection from out of AQL - this allows reading documents from a collection chunks when a full collection scan - is required. memory usage might be must lower in this case and queries might finish - earlier if there is an additional LIMIT statement - -* changed AQL COLLECT to use a stable sort, so any previous SORT order is preserved - -* issue #547: Javascript error in the web interface - -* issue #550: Make AQL graph functions support key in addition to id - -* issue #526: Unable to escape when an errorneous command is entered into the js shell - -* issue #523: Graph and vertex methods for the javascript api - -* issue #517: Foxx: Route parameters with capital letters fail - -* issue #512: Binded Parameters for LIMIT - - -v1.3.3 (2013-08-01) -------------------- - -* issue #570: updateFishbowl() fails once - -* updated and fixed generated examples - -* issue #559: added Foxx documentation to user manual - -* added missing error reporting for errors that happened during import of edges - - -v1.3.2 (2013-06-21) -------------------- - -* fixed memleak in internal.download() - -* made the shape-collection journal size adaptive: - if too big shapes come in, a shape journal will be created with a big-enough size - automatically. the maximum size of a shape journal is still restricted, but to a - very big value that should never be reached in practice. - -* fixed a segfault that occurred when inserting documents with a shape size bigger - than the default shape journal size (2MB) - -* fixed a locking issue in collection.truncate() - -* fixed value overflow in accumulated filesizes reported by collection.figures() - -* issue #545: AQL FILTER unnecessary (?) loop - -* issue #549: wrong return code with --daemon - - -v1.3.1 (2013-05-24) -------------------- - -* removed currently unused _ids collection - -* fixed usage of --temp-path in aranogd and arangosh - -* issue #540: suppress return of temporary internal variables in AQL - -* issue #530: ReferenceError: ArangoError is not a constructor - -* issue #535: Problem with AQL user functions javascript API - -* set --javascript.app-path for test execution to prevent startup error - -* issue #532: Graph _edgesCache returns invalid data? - -* issue #531: Arangod errors - -* issue #529: Really weird transaction issue - -* fixed usage of --temp-path in aranogd and arangosh - - -v1.3.0 (2013-05-10) -------------------- - -* fixed problem on restart ("datafile-xxx is not sealed") when server was killed - during a compaction run - -* fixed leak when using cursors with very small batchSize - -* issue #508: `unregistergroup` function not mentioned in http interface docs - -* issue #507: GET /_api/aqlfunction returns code inside parentheses - -* fixed issue #489: Bug in aal.install - -* fixed issue 505: statistics not populated on MacOS - - -v1.3.0-rc1 (2013-04-24) ------------------------ - -* updated documentation for 1.3.0 - -* added node modules and npm packages - -* changed compaction to only compact datafiles with more at least 10% of dead - documents (byte size-wise) - -* issue #498: fixed reload of authentication info when using - `require("org/arangodb/users").reload()` - -* issue #495: Passing an empty array to create a document results in a - "phantom" document - -* added more precision for requests statistics figures - -* added "sum" attribute for individual statistics results in statistics API - at /_admin/statistics - -* made "limit" an optional parameter in AQL function NEAR(). - limit can now be either omitted completely, or set to 0. If so, an internal - default value (currently 100) will be applied for the limit. - -* issue #481 - -* added "attributes.count" to output of `collection.figures()` - this also affects the REST API /_api/collection//figures - -* added IndexedPropertyGetter for ShapedJson objects - -* added API for user-defined AQL functions - -* issue #475: A better error message for deleting a non-existent graph - -* issue #474: Web interface problems with the JS Shell - -* added missing documentation for AQL UNION function - -* added transaction support. - This provides ACID transactions for ArangoDB. Transactions can be invoked - using the `db._executeTransaction()` function, or the `/_api/transaction` - REST API. - -* switched to semantic versioning (at least for alpha & alpha naming) - -* added saveOrReplace() for server-side JS - -v1.3.alpha1 (2013-04-05) ------------------------- - -* cleanup of Module, Package, ArangoApp and modules "internal", "fs", "console" - -* use Error instead of string in throw to allow stack-trace - -* issue #454: error while creation of Collection - -* make `collection.count()` not recalculate the number of documents on the fly, but - use some internal document counters. - -* issue #457: invalid string value in web interface - -* make datafile id (datafile->_fid) identical to the numeric part of the filename. - E.g. the datafile `journal-123456.db` will now have a datafile marker with the same - fid (i.e. `123456`) instead of a different value. This change will only affect - datafiles that are created with 1.3 and not any older files. - The intention behind this change is to make datafile debugging easier. - -* consistently discard document attributes with reserved names (system attributes) - but without any known meaning, for example `_test`, `_foo`, ... - - Previously, these attributes were saved with the document regularly in some cases, - but were discarded in other cases. - Now these attributes are discarded consistently. "Real" system attributes such as - `_key`, `_from`, `_to` are not affected and will work as before. - - Additionally, attributes with an empty name (``) are discarded when documents are - saved. - - Though using reserved or empty attribute names in documents was not really and - consistently supported in previous versions of ArangoDB, this change might cause - an incompatibility for clients that rely on this feature. - -* added server startup flag `--database.force-sync-properties` to force syncing of - collection properties on collection creation, deletion and on property update. - The default value is true to mimic the behavior of previous versions of ArangoDB. - If set to false, collection properties are written to disk but no call to sync() - is made. - -* added detailed output of server version and components for REST APIs - `/_admin/version` and `/_api/version`. To retrieve this extended information, - call the REST APIs with URL parameter `details=true`. - -* issue #443: For git-based builds include commit hash in version - -* adjust startup log output to be more compact, less verbose - -* set the required minimum number of file descriptors to 256. - On server start, this number is enforced on systems that have rlimit. If the limit - cannot be enforced, starting the server will fail. - Note: 256 is considered to be the absolute minimum value. Depending on the use case - for ArangoDB, a much higher number of file descriptors should be used. - - To avoid checking & potentially changing the number of maximum open files, use the - startup option `--server.descriptors-minimum 0` - -* fixed shapedjson to json conversion for special numeric values (NaN, +inf, -inf). - Before, "NaN", "inf", or "-inf" were written into the JSONified output, but these - values are not allowed in JSON. Now, "null" is written to the JSONified output as - required. - -* added AQL functions VARIANCE_POPULATION(), VARIANCE_SAMPLE(), STDDEV_POPULATION(), - STDDEV_SAMPLE(), AVERAGE(), MEDIAN() to calculate statistical values for lists - -* added AQL SQRT() function - -* added AQL TRIM(), LEFT() and RIGHT() string functions - -* fixed issue #436: GET /_api/document on edge - -* make AQL REVERSE() and LENGTH() functions work on strings, too - -* disabled DOT generation in `make doxygen`. this speeds up docs generation - -* renamed startup option `--dispatcher.report-intervall` to `--dispatcher.report-interval` - -* renamed startup option `--scheduler.report-intervall` to `--scheduler.report-interval` - -* slightly changed output of REST API method /_admin/log. - Previously, the log messages returned also contained the date and log level, now - they will only contain the log message, and no date and log level information. - This information can be re-created by API users from the `timestamp` and `level` - attributes of the result. - -* removed configure option `--enable-zone-debug` - memory zone debugging is now automatically turned on when compiling with ArangoDB - `--enable-maintainer-mode` - -* removed configure option `--enable-arangob` - arangob is now always included in the build - - -v1.2.3 (XXXX-XX-XX) -------------------- - -* added optional parameter `edgexamples` for AQL function EDGES() and NEIGHBORS() - -* added AQL function NEIGHBORS() - -* added freebsd support - -* fixed firstExample() query with `_id` and `_key` attributes - -* issue triAGENS/ArangoDB-PHP#55: AQL optimizer may have mis-optimized duplicate - filter statements with limit - - -v1.2.2 (2013-03-26) -------------------- - -* fixed save of objects with common sub-objects - -* issue #459: fulltext internal memory allocation didn't scale well - This fix improves loading times for collections with fulltext indexes that have - lots of equal words indexed. - -* issue #212: auto-increment support - - The feature can be used by creating a collection with the extra `keyOptions` - attribute as follows: - - db._create("mycollection", { keyOptions: { type: "autoincrement", offset: 1, increment: 10, allowUserKeys: true } }); - - The `type` attribute will make sure the keys will be auto-generated if no - `_key` attribute is specified for a document. - - The `allowUserKeys` attribute determines whether users might still supply own - `_key` values with documents or if this is considered an error. - - The `increment` value determines the actual increment value, whereas the `offset` - value can be used to seed to value sequence with a specific starting value. - This will be useful later in a multi-master setup, when multiple servers can use - different auto-increment seed values and thus generate non-conflicting auto-increment values. - - The default values currently are: - - - `allowUserKeys`: `true` - - `offset`: `0` - - `increment`: `1` - - The only other available key generator type currently is `traditional`. - The `traditional` key generator will auto-generate keys in a fashion as ArangoDB - always did (some increasing integer value, with a more or less unpredictable - increment value). - - Note that for the `traditional` key generator there is only the option to disallow - user-supplied keys and give the server the sole responsibility for key generation. - This can be achieved by setting the `allowUserKeys` property to `false`. - - This change also introduces the following errors that API implementors may want to check - the return values for: - - - 1222: `document key unexpected`: will be raised when a document is created with - a `_key` attribute, but the underlying collection was set up with the `keyOptions` - attribute `allowUserKeys: false`. - - - 1225: `out of keys`: will be raised when the auto-increment key generator runs - out of keys. This may happen when the next key to be generated is 2^64 or higher. - In practice, this will only happen if the values for `increment` or `offset` are - not set appropriately, or if users are allowed to supply own keys, those keys - are near the 2^64 threshold, and later the auto-increment feature kicks in and - generates keys that cross that threshold. - - In practice it should not occur with proper configuration and proper usage of the - collections. - - This change may also affect the following REST APIs: - - POST `/_api/collection`: the server does now accept the optional `keyOptions` - attribute in the second parameter - - GET `/_api/collection/properties`: will return the `keyOptions` attribute as part - of the collection's properties. The previous optional attribute `createOptions` - is now gone. - -* fixed `ArangoStatement.explain()` method with bind variables - -* fixed misleading "cursor not found" error message in arangosh that occurred when - `count()` was called for client-side cursors - -* fixed handling of empty attribute names, which may have crashed the server under - certain circumstances before - -* fixed usage of invalid pointer in error message output when index description could - not be opened - - -v1.2.1 (2013-03-14) -------------------- - -* issue #444: please darken light color in arangosh - -* issue #442: pls update post install info on osx - -* fixed conversion of special double values (NaN, -inf, +inf) when converting from - shapedjson to JSON - -* fixed compaction of markers (location of _key was not updated correctly in memory, - leading to _keys pointing to undefined memory after datafile rotation) - -* fixed edge index key pointers to use document master pointer plus offset instead - of direct _key address - -* fixed case when server could not create any more journal or compactor files. - Previously a wrong status code may have been returned, and not being able to create - a new compactor file may have led to an infinite loop with error message - "could not create compactor". - -* fixed value truncation for numeric filename parts when renaming datafiles/journals - - -v1.2.0 (2013-03-01) -------------------- - -* by default statistics are now switch off; in order to enable comment out - the "disable-statistics = yes" line in "arangod.conf" - -* fixed issue #435: csv parser skips data at buffer border - -* added server startup option `--server.disable-statistics` to turn off statistics - gathering without recompilation of ArangoDB. - This partly addresses issue #432. - -* fixed dropping of indexes without collection name, e.g. - `db.xxx.dropIndex("123456");` - Dropping an index like this failed with an assertion error. - -* fixed issue #426: arangoimp should be able to import edges into edge collections - -* fixed issue #425: In case of conflict ArangoDB returns HTTP 400 Bad request - (with 1207 Error) instead of HTTP 409 Conflict - -* fixed too greedy token consumption in AQL for negative values: - e.g. in the statement `RETURN { a: 1 -2 }` the minus token was consumed as part - of the value `-2`, and not interpreted as the binary arithmetic operator - - -v1.2.beta3 (2013-02-22) ------------------------ - -* issue #427: ArangoDB Importer Manual has no navigation links (previous|home|next) - -* issue #319: Documentation missing for Emergency console and incomplete for datafile debugger. - -* issue #370: add documentation for reloadRouting and flushServerModules - -* issue #393: added REST API for user management at /_api/user - -* issue #393, #128: added simple cryptographic functions for user actions in module "crypto": - * require("org/arangodb/crypto").md5() - * require("org/arangodb/crypto").sha256() - * require("org/arangodb/crypto").rand() - -* added replaceByExample() Javascript and REST API method - -* added updateByExample() Javascript and REST API method - -* added optional "limit" parameter for removeByExample() Javascript and REST API method - -* fixed issue #413 - -* updated bundled V8 version from 3.9.4 to 3.16.14.1 - Note: the Windows version used a more recent version (3.14.0.1) and was not updated. - -* fixed issue #404: keep original request url in request object - - -v1.2.beta2 (2013-02-15) ------------------------ - -* fixed issue #405: 1.2 compile warnings - -* fixed issue #333: [debian] Group "arangodb" is not used when starting vie init.d script - -* added optional parameter 'excludeSystem' to GET /_api/collection - This parameter can be used to disable returning system collections in the list - of all collections. - -* added AQL functions KEEP() and UNSET() - -* fixed issue #348: "HTTP Interface for Administration and Monitoring" - documentation errors. - -* fix stringification of specific positive int64 values. Stringification of int64 - values with the upper 32 bits cleared and the 33rd bit set were broken. - -* issue #395: Collection properties() function should return 'isSystem' for - Javascript and REST API - -* make server stop after upgrade procedure when invoked with `--upgrade option`. - When started with the `--upgrade` option, the server will perfom - the upgrade, and then exit with a status code indicating the result of the - upgrade (0 = success, 1 = failure). To start the server regularly in either - daemon or console mode, the `--upgrade` option must not be specified. - This change was introduced to allow init.d scripts check the result of - the upgrade procedure, even in case an upgrade was successful. - this was introduced as part of issue #391. - -* added AQL function EDGES() - -* added more crash-protection when reading corrupted collections at startup - -* added documentation for AQL function CONTAINS() - -* added AQL function LIKE() - -* replaced redundant error return code 1520 (Unable to open collection) with error code - 1203 (Collection not found). These error codes have the same meanings, but one of - them was returned from AQL queries only, the other got thrown by other parts of - ArangoDB. Now, error 1203 (Collection not found) is used in AQL too in case a - non-existing collection is used. - -v1.2.beta1 (2013-02-01) ------------------------ - -* fixed issue #382: [Documentation error] Maschine... should be Machine... - -* unified history file locations for arangod, arangosh, and arangoirb. - - The readline history for arangod (emergency console) is now stored in file - $HOME/.arangod. It was stored in $HOME/.arango before. - - The readline history for arangosh is still stored in $HOME/.arangosh. - - The readline history for arangoirb is now stored in $HOME/.arangoirb. It was - stored in $HOME/.arango-mrb before. - -* fixed issue #381: _users user should have a unique constraint - -* allow negative list indexes in AQL to access elements from the end of a list, - e.g. ```RETURN values[-1]``` will return the last element of the `values` list. - -* collection ids, index ids, cursor ids, and document revision ids created and - returned by ArangoDB are now returned as strings with numeric content inside. - This is done to prevent some value overrun/truncation in any part of the - complete client/server workflow. - In ArangoDB 1.1 and before, these values were previously returned as - (potentially very big) integer values. This may cause problems (clipping, overrun, - precision loss) for clients that do not support big integers natively and store - such values in IEEE754 doubles internally. This type loses precision after about - 52 bits and is thus not safe to hold an id. - Javascript and 32 bit-PHP are examples for clients that may cause such problems. - Therefore, ids are now returned by ArangoDB as strings, with the string - content being the integer value as before. - - Example for documents ("_rev" attribute): - - Document returned by ArangoDB 1.1: { "_rev": 1234, ... } - - Document returned by ArangoDB 1.2: { "_rev": "1234", ... } - - Example for collections ("id" attribute / "_id" property): - - Collection returned by ArangoDB 1.1: { "id": 9327643, "name": "test", ... } - - Collection returned by ArangoDB 1.2: { "id": "9327643", "name": "test", ... } - - Example for cursors ("id" attribute): - - Collection returned by ArangoDB 1.1: { "id": 11734292, "hasMore": true, ... } - - Collection returned by ArangoDB 1.2: { "id": "11734292", "hasMore": true, ... } - -* global variables are not automatically available anymore when starting the - arangod Javascript emergency console (i.e. ```arangod --console```). - - Especially, the variables `db`, `edges`, and `internal` are not available - anymore. `db` and `internal` can be made available in 1.2 by - ```var db = require("org/arangodb").db;``` and - ```var internal = require("internal");```, respectively. - The reason for this change is to get rid of global variables in the server - because this will allow more specific inclusion of functionality. - - For convenience, the global variable `db` is still available by default in - arangosh. The global variable `edges`, which since ArangoDB 1.1 was kind of - a redundant wrapper of `db`, has been removed in 1.2 completely. - Please use `db` instead, and if creating an edge collection, use the explicit - ```db._createEdgeCollection()``` command. - -* issue #374: prevent endless redirects when calling admin interface with - unexpected URLs - -* issue #373: TRAVERSAL() `trackPaths` option does not work. Instead `paths` does work - -* issue #358: added support for CORS - -* honor optional waitForSync property for document removal, replace, update, and - save operations in arangosh. The waitForSync parameter for these operations - was previously honored by the REST API and on the server-side, but not when - the waitForSync parameter was specified for a document operation in arangosh. - -* calls to db.collection.figures() and /_api/collection//figures now - additionally return the number of shapes used in the collection in the - extra attribute "shapes.count" - -* added AQL TRAVERSAL_TREE() function to return a hierarchical result from a traversal - -* added AQL TRAVERSAL() function to return the results from a traversal - -* added AQL function ATTRIBUTES() to return the attribute names of a document - -* removed internal server-side AQL functions from global scope. - - Now the AQL internal functions can only be accessed via the exports of the - ahuacatl module, which can be included via ```require("org/arangodb/ahuacatl")```. - It shouldn't be necessary for clients to access this module at all, but - internal code may use this module. - - The previously global AQL-related server-side functions were moved to the - internal namespace. This produced the following function name changes on - the server: - - old name new name - ------------------------------------------------------ - AHUACATL_RUN => require("internal").AQL_QUERY - AHUACATL_EXPLAIN => require("internal").AQL_EXPLAIN - AHUACATL_PARSE => require("internal").AQL_PARSE - - Again, clients shouldn't have used these functions at all as there is the - ArangoStatement object to execute AQL queries. - -* fixed issue #366: Edges index returns strange description - -* added AQL function MATCHES() to check a document against a list of examples - -* added documentation and tests for db.collection.removeByExample - -* added --progress option for arangoimp. This will show the percentage of the input - file that has been processed by arangoimp while the import is still running. It can - be used as a rough indicator of progress for the entire import. - -* make the server log documents that cannot be imported via /_api/import into the - logfile using the warning log level. This may help finding illegal documents in big - import runs. - -* check on server startup whether the database directory and all collection directories - are writable. if not, the server startup will be aborted. this prevents serious - problems with collections being non-writable and this being detected at some pointer - after the server has been started - -* allow the following AQL constructs: FUNC(...)[...], FUNC(...).attribute - -* fixed issue #361: Bug in Admin Interface. Header disappears when clicking new collection - -* Added in-memory only collections - - Added collection creation parameter "isVolatile": - if set to true, the collection is created as an in-memory only collection, - meaning that all document data of that collection will reside in memory only, - and will not be stored permanently to disk. - This means that all collection data will be lost when the collection is unloaded - or the server is shut down. - As this collection type does not have datafile disk overhead for the regular - document operations, it may be faster than normal disk-backed collections. The - actual performance gains strongly depend on the underlying OS, filesystem, and - settings though. - This collection type should be used for caches only and not for any sensible data - that cannot be re-created otherwise. - Some platforms, namely Windows, currently do not support this collection type. - When creating an in-memory collection on such platform, an error message will be - returned by ArangoDB telling the user the platform does not support it. - - Note: in-memory collections are an experimental feature. The feature might - change drastically or even be removed altogether in a future version of ArangoDB. - -* fixed issue #353: Please include "pretty print" in Emergency Console - -* fixed issue #352: "pretty print" console.log - This was achieved by adding the dump() function for the "internal" object - -* reduced insertion time for edges index - Inserting into the edges index now avoids costly comparisons in case of a hash - collision, reducing the prefilling/loading timer for bigger edge collections - -* added fulltext queries to AQL via FULLTEXT() function. This allows search - fulltext indexes from an AQL query to find matching documents - -* added fulltext index type. This index type allows indexing words and prefixes of - words from a specific document attribute. The index can be queries using a - SimpleQueryFull object, the HTTP REST API at /_api/simple/fulltext, or via AQL - -* added collection.revision() method to determine whether a collection has changed. - The revision method returns a revision string that can be used by client programs - for equality/inequality comparisons. The value returned by the revision method - should be treated by clients as an opaque string and clients should not try to - figure out the sense of the revision id. This is still useful enough to check - whether data in a collection has changed. - -* issue #346: adaptively determine NUMBER_HEADERS_PER_BLOCK - -* issue #338: arangosh cursor positioning problems - -* issue #326: use limit optimization with filters - -* issue #325: use index to avoid sorting - -* issue #324: add limit optimization to AQL - -* removed arango-password script and added Javascript functionality to add/delete - users instead. The functionality is contained in module `users` and can be invoked - as follows from arangosh and arangod: - * require("users").save("name", "passwd"); - * require("users").replace("name", "newPasswd"); - * require("users").remove("name"); - * require("users").reload(); - These functions are intentionally not offered via the web interface. - This also addresses issue #313 - -* changed print output in arangosh and the web interface for JSON objects. - Previously, printing a JSON object in arangosh resulted in the attribute values - being printed as proper JSON, but attribute names were printed unquoted and - unescaped. This was fine for the purpose of arangosh, but lead to invalid - JSON being produced. Now, arangosh will produce valid JSON that can be used - to send it back to ArangoDB or use it with arangoimp etc. - -* fixed issue #300: allow importing documents via the REST /_api/import API - from a JSON list, too. - So far, the API only supported importing from a format that had one JSON object - on each line. This is sometimes inconvenient, e.g. when the result of an AQL - query or any other list is to be imported. This list is a JSON list and does not - necessary have a document per line if pretty-printed. - arangoimp now supports the JSON list format, too. However, the format requires - arangoimp and the server to read the entire dataset at once. If the dataset is - too big (bigger than --max-upload-size) then the import will be rejected. Even if - increased, the entire list must fit in memory on both the client and the server, - and this may be more resource-intensive than importing individual lines in chunks. - -* removed unused parameter --reuse-ids for arangoimp. This parameter did not have - any effect in 1.2, was never publicly announced and did evil (TM) things. - -* fixed issue #297 (partly): added whitespace between command line and - command result in arangosh, added shell colors for better usability - -* fixed issue #296: system collections not usable from AQL - -* fixed issue #295: deadlock on shutdown - -* fixed issue #293: AQL queries should exploit edges index - -* fixed issue #292: use index when filtering on _key in AQL - -* allow user-definable document keys - users can now define their own document keys by using the _key attribute - when creating new documents or edges. Once specified, the value of _key is - immutable. - The restrictions for user-defined key values are: - * the key must be at most 254 bytes long - * it must consist of the letters a-z (lower or upper case), the digits 0-9, - the underscore (_) or dash (-) characters only - * any other characters, especially multi-byte sequences, whitespace or - punctuation characters cannot be used inside key values - - Specifying a document key is optional when creating new documents. If no - document key is specified, ArangoDB will create a document key itself. - There are no guarantees about the format and pattern of auto-generated document - keys other than the above restrictions. - Clients should therefore treat auto-generated document keys as opaque values. - Keys can be used to look up and reference documents, e.g.: - * saving a document: `db.users.save({ "_key": "fred", ... })` - * looking up a document: `db.users.document("fred")` - * referencing other documents: `edges.relations.save("users/fred", "users/john", ...)` - - This change is downwards-compatible to ArangoDB 1.1 because in ArangoDB 1.1 - users were not able to define their own keys. If the user does not supply a _key - attribute when creating a document, ArangoDB 1.2 will still generate a key of - its own as ArangoDB 1.1 did. However, all documents returned by ArangoDB 1.2 will - include a _key attribute and clients should be able to handle that (e.g. by - ignoring it if not needed). Documents returned will still include the _id attribute - as in ArangoDB 1.1. - -* require collection names everywhere where a collection id was allowed in - ArangoDB 1.1 & 1.0 - This change requires clients to use a collection name in place of a collection id - at all places the client deals with collections. - Examples: - * creating edges: the _from and _to attributes must now contain collection names instead - of collection ids: `edges.relations.save("test/my-key1", "test/my-key2", ...)` - * retrieving edges: the returned _from and _to attributes now will contain collection - names instead of ids, too: _from: `test/fred` instead of `1234/3455` - * looking up documents: db.users.document("fred") or db._document("users/fred") - - Collection names must be used in REST API calls instead of collection ids, too. - This change is thus not completely downwards-compatible to ArangoDB 1.1. ArangoDB 1.1 - required users to use collection ids in many places instead of collection names. - This was unintuitive and caused overhead in cases when just the collection name was - known on client-side but not its id. This overhead can now be avoided so clients can - work with the collection names directly. There is no need to work with collection ids - on the client side anymore. - This change will likely require adjustments to API calls issued by clients, and also - requires a change in how clients handle the _id value of returned documents. Previously, - the _id value of returned documents contained the collection id, a slash separator and - the document number. Since 1.2, _id will contain the collection name, a slash separator - and the document key. The same applies to the _from and _to attribute values of edges - that are returned by ArangoDB. - - Also removed (now unnecessary) location header in responses of the collections REST API. - The location header was previously returned because it was necessary for clients. - When clients created a collection, they specified the collection name. The collection - id was generated on the server, but the client needed to use the server-generated - collection id for further API calls, e.g. when creating edges etc. Therefore, the - full collection URL, also containing the collection id, was returned by the server in - responses to the collection API, in the HTTP location header. - Returning the location header has become unnecessary in ArangoDB 1.2 because users - can access collections by name and do not need to care about collection ids. - - -v1.1.3 (2013-XX-XX) -------------------- - -* fix case when an error message was looked up for an error code but no error - message was found. In this case a NULL ptr was returned and not checked everywhere. - The place this error popped up was when inserting into a non-unique hash index - failed with a specific, invalid error code. - -* fixed issue #381: db._collection("_users").getIndexes(); - -* fixed issue #379: arango-password fatal issue javscript.startup-directory - -* fixed issue #372: Command-Line Options for the Authentication and Authorization - - -v1.1.2 (2013-01-20) -------------------- - -* upgraded to mruby 2013-01-20 583983385b81c21f82704b116eab52d606a609f4 - -* fixed issue #357: Some spelling and grammar errors - -* fixed issue #355: fix quotes in pdf manual - -* fixed issue #351: Strange arangosh error message for long running query - -* fixed randomly hanging connections in arangosh on MacOS - -* added "any" query method: this returns a random document from a collection. It - is also available via REST HTTP at /_api/simple/any. - -* added deployment tool - -* added getPeerVertex - -* small fix for logging of long messages: the last character of log messages longer - than 256 bytes was not logged. - -* fixed truncation of human-readable log messages for web interface: the trailing \0 - byte was not appended for messages longer than 256 bytes - -* fixed issue #341: ArangoDB crashes when stressed with Batch jobs - Contrary to the issue title, this did not have anything to do with batch jobs but - with too high memory usage. The memory usage of ArangoDB is now reduced for cases - when there are lots of small collections with few documents each - -* started with issue #317: Feature Request (from Google Groups): DATE handling - -* backported issue #300: Extend arangoImp to Allow importing result set-like - (list of documents) formatted files - -* fixed issue #337: "WaitForSync" on new collection does not work on Win/X64 - -* fixed issue #336: Collections REST API docs - -* fixed issue #335: mmap errors due to wrong memory address calculation - -* fixed issue #332: arangoimp --use-ids parameter seems to have no impact - -* added option '--server.disable-authentication' for arangosh as well. No more passwd - prompts if not needed - -* fixed issue #330: session logging for arangosh - -* fixed issue #329: Allow passing script file(s) as parameters for arangosh to run - -* fixed issue #328: 1.1 compile warnings - -* fixed issue #327: Javascript parse errors in front end - - -v1.1.1 (2012-12-18) -------------------- - -* fixed issue #339: DELETE /_api/cursor/cursor-identifier return incollect errorNum - - The fix for this has led to a signature change of the function actions.resultNotFound(). - The meaning of parameter #3 for This function has changed from the error message string - to the error code. The error message string is now parameter #4. - Any client code that uses this function in custom actions must be adjusted. - -* fixed issue #321: Problem upgrading arangodb 1.0.4 to 1.1.0 with Homebrew (OSX 10.8.2) - -* fixed issue #230: add navigation and search for online documentation - -* fixed issue #315: Strange result in PATH - -* fixed issue #323: Wrong function returned in error message of AQL CHAR_LENGTH() - -* fixed some log errors on startup / shutdown due to pid file handling and changing - of directories - - -v1.1.0 (2012-12-05) -------------------- - -* WARNING: - arangod now performs a database version check at startup. It will look for a file - named "VERSION" in its database directory. If the file is not present, arangod will - perform an automatic upgrade of the database directory. This should be the normal - case when upgrading from ArangoDB 1.0 to ArangoDB 1.1. - - If the VERSION file is present but is from an older version of ArangoDB, arangod - will refuse to start and ask the user to run a manual upgrade first. A manual upgrade - can be performed by starting arangod with the option `--upgrade`. - - This upgrade procedure shall ensure that users have full control over when they - perform any updates/upgrades of their data, and can plan backups accordingly. The - procedure also guarantees that the server is not run without any required system - collections or with in incompatible data state. - -* added AQL function DOCUMENT() to retrieve a document by its _id value - -* fixed issue #311: fixed segfault on unload - -* fixed issue #309: renamed stub "import" button from web interface - -* fixed issue #307: added WaitForSync column in collections list in in web interface - -* fixed issue #306: naming in web interface - -* fixed issue #304: do not clear AQL query text input when switching tabs in - web interface - -* fixed issue #303: added documentation about usage of var keyword in web interface - -* fixed issue #301: PATCH does not work in web interface - -# fixed issue #269: fix make distclean & clean - -* fixed issue #296: system collections not usable from AQL - -* fixed issue #295: deadlock on shutdown - -* added collection type label to web interface - -* fixed issue #290: the web interface now disallows creating non-edges in edge collections - when creating collections via the web interface, the collection type must also be - specified (default is document collection) - -* fixed issue #289: tab-completion does not insert any spaces - -* fixed issue #282: fix escaping in web interface - -* made AQL function NOT_NULL take any number of arguments. Will now return its - first argument that is not null, or null if all arguments are null. This is downwards - compatible. - -* changed misleading AQL function name NOT_LIST() to FIRST_LIST() and slightly changed - the behavior. The function will now return its first argument that is a list, or null - if none of the arguments are lists. - This is mostly downwards-compatible. The only change to the previous implementation in - 1.1-beta will happen if two arguments were passed and the 1st and 2nd arguments were - both no lists. In previous 1.1, the 2nd argument was returned as is, but now null - will be returned. - -* add AQL function FIRST_DOCUMENT(), with same behavior as FIRST_LIST(), but working - with documents instead of lists. - -* added UPGRADING help text - -* fixed issue #284: fixed Javascript errors when adding edges/vertices without own - attributes - -* fixed issue #283: AQL LENGTH() now works on documents, too - -* fixed issue #281: documentation for skip lists shows wrong example - -* fixed AQL optimizer bug, related to OR-combined conditions that filtered on the - same attribute but with different conditions - -* fixed issue #277: allow usage of collection names when creating edges - the fix of this issue also implies validation of collection names / ids passed to - the REST edge create method. edges with invalid collection ids or names in the - "from" or "to" values will be rejected and not saved - - -v1.1.beta2 (2012-11-13) ------------------------ - -* fixed arangoirb compilation - -* fixed doxygen - - -v1.1.beta1 (2012-10-24) ------------------------ - -* fixed AQL optimizer bug - -* WARNING: - - the user has changed from "arango" to "arangodb", the start script has changed from - "arangod" to "arangodb", the database directory has changed from "/var/arangodb" to - "/var/lib/arangodb" to be compliant with various Linux policies - - - In 1.1, we have introduced types for collections: regular documents go into document - collections, and edges go into edge collections. The prefixing (db.xxx vs. edges.xxx) - works slightly different in 1.1: edges.xxx can still be used to access collections, - however, it will not determine the type of existing collections anymore. To create an - edge collection 1.1, you can use db._createEdgeCollection() or edges._create(). - And there's of course also db._createDocumentCollection(). - db._create() is also still there and will create a document collection by default, - whereas edges._create() will create an edge collection. - - - the admin web interface that was previously available via the simple URL suffix / - is now available via a dedicated URL suffix only: /_admin/html - The reason for this is that routing and URLs are now subject to changes by the end user, - and only URLs parts prefixed with underscores (e.g. /_admin or /_api) are reserved - for ArangoDB's internal usage. - -* the server now handles requests with invalid Content-Length header values as follows: - - if Content-Length is negative, the server will respond instantly with HTTP 411 - (length required) - - - if Content-Length is positive but shorter than the supplied body, the server will - respond with HTTP 400 (bad request) - - - if Content-Length is positive but longer than the supplied body, the server will - wait for the client to send the missing bytes. The server allows 90 seconds for this - and will close the connection if the client does not send the remaining data - - - if Content-Length is bigger than the maximum allowed size (512 MB), the server will - fail with HTTP 413 (request entity too large). - - - if the length of the HTTP headers is greater than the maximum allowed size (1 MB), - the server will fail with HTTP 431 (request header fields too large) - -* issue #265: allow optional base64 encoding/decoding of action response data - -* issue #252: create _modules collection using arango-upgrade (note: arango-upgrade was - finally replaced by the `--upgrade` option for arangod) - -* issue #251: allow passing arbitrary options to V8 engine using new command line option: - --javascript.v8-options. Using this option, the Harmony features or other settings in - v8 can be enabled if the end user requires them - -* issue #248: allow AQL optimizer to pull out completely uncorrelated subqueries to the - top level, resulting in less repeated evaluation of the subquery - -* upgraded to Doxygen 1.8.0 - -* issue #247: added AQL function MERGE_RECURSIVE - -* issue #246: added clear() function in arangosh - -* issue #245: Documentation: Central place for naming rules/limits inside ArangoDB - -* reduced size of hash index elements by 50 %, allowing more index elements to fit in - memory - -* issue #235: GUI Shell throws Error:ReferenceError: db is not defined - -* issue #229: methods marked as "under construction" - -* issue #228: remove unfinished APIs (/_admin/config/*) - -* having the OpenSSL library installed is now a prerequisite to compiling ArangoDB - Also removed the --enable-ssl configure option because ssl is always required. - -* added AQL functions TO_LIST, NOT_LIST - -* issue #224: add optional Content-Id for batch requests - -* issue #221: more documentation on AQL explain functionality. Also added - ArangoStatement.explain() client method - -* added db._createStatement() method on server as well (was previously available - on the client only) - -* issue #219: continue in case of "document not found" error in PATHS() function - -* issue #213: make waitForSync overridable on specific actions - -* changed AQL optimizer to use indexes in more cases. Previously, indexes might - not have been used when in a reference expression the inner collection was - specified last. Example: FOR u1 IN users FOR u2 IN users FILTER u1._id == u2._id - Previously, this only checked whether an index could be used for u2._id (not - possible). It was not checked whether an index on u1._id could be used (possible). - Now, for expressions that have references/attribute names on both sides of the - above as above, indexes are checked for both sides. - -* issue #204: extend the CSV import by TSV and by user configurable - separator character(s) - -* issue #180: added support for batch operations - -* added startup option --server.backlog-size - this allows setting the value of the backlog for the listen() system call. - the default value is 10, the maximum value is platform-dependent - -* introduced new configure option "--enable-maintainer-mode" for - ArangoDB maintainers. this option replaces the previous compile switches - --with-boost-test, --enable-bison, --enable-flex and --enable-errors-dependency - the individual configure options have been removed. --enable-maintainer-mode - turns them all on. - -* removed potentially unused configure option --enable-memfail - -* fixed issue #197: HTML web interface calls /_admin/user-manager/session - -* fixed issue #195: VERSION file in database directory - -* fixed issue #193: REST API HEAD request returns a message body on 404 - -* fixed issue #188: intermittent issues with 1.0.0 - (server-side cursors not cleaned up in all cases, pthreads deadlock issue) - -* issue #189: key store should use ISO datetime format bug - -* issue #187: run arango-upgrade on server start (note: arango-upgrade was finally - replaced by the `--upgrade` option for arangod)n - -* fixed issue #183: strange unittest error - -* fixed issue #182: manual pages - -* fixed issue #181: use getaddrinfo - -* moved default database directory to "/var/lib/arangodb" in accordance with - http://www.pathname.com/fhs/pub/fhs-2.3.html - -* fixed issue #179: strange text in import manual - -* fixed issue #178: test for aragoimp is missing - -* fixed issue #177: a misleading error message was returned if unknown variables - were used in certain positions in an AQL query. - -* fixed issue #176: explain how to use AQL from the arangosh - -* issue #175: re-added hidden (and deprecated) option --server.http-port. This - option is only there to be downwards-compatible to Arango 1.0. - -* fixed issue #174: missing Documentation for `within` - -* fixed issue #170: add db..all().toArray() to arangosh help screen - -* fixed issue #169: missing argument in Simple Queries - -* added program arango-upgrade. This program must be run after installing ArangoDB - and after upgrading from a previous version of ArangoDB. The arango-upgrade script - will ensure all system collections are created and present in the correct state. - It will also perform any necessary data updates. - Note: arango-upgrade was finally replaced by the `--upgrade` option for arangod. - -* issue #153: edge collection should be a flag for a collection - collections now have a type so that the distinction between document and edge - collections can now be done at runtime using a collection's type value. - A collection's type can be queried in Javascript using the .type() method. - - When new collections are created using db._create(), they will be document - collections by default. When edge._create() is called, an edge collection will be created. - To explicitly create a collection of a specific/different type, use the methods - _createDocumentCollection() or _createEdgeCollection(), which are available for - both the db and the edges object. - The Javascript objects ArangoEdges and ArangoEdgesCollection have been removed - completely. - All internal and test code has been adjusted for this, and client code - that uses edges.* should also still work because edges is still there and creates - edge collections when _create() is called. - - INCOMPATIBLE CHANGE: Client code might still need to be changed in the following aspect: - Previously, collections did not have a type so documents and edges could be inserted - in the same collection. This is now disallowed. Edges can only be inserted into - edge collections now. As there were no collection types in 1.0, ArangoDB will perform - an automatic upgrade when migrating from 1.0 to 1.1. - The automatic upgrade will check every collection and determine its type as follows: - - if among the first 50 documents in the collection there are documents with - attributes "_from" and "_to", the collection is typed as an edge collection - - if among the first 50 documents in the collection there are no documents with - attributes "_from" and "_to", the collection is made as a document collection - -* issue #150: call V8 garbage collection on server periodically - -* issue #110: added support for partial updates - - The REST API for documents now offers an HTTP PATCH method to partially update - documents. Overwriting/replacing documents is still available via the HTTP PUT method - as before. The Javascript API in the shell also offers a new update() method in extension to - the previously existing replace() method. - - -v1.0.4 (2012-11-12) -------------------- - -* issue #275: strange error message in arangosh 1.0.3 at startup - - -v1.0.3 (2012-11-08) -------------------- - -* fixed AQL optimizer bug - -* issue #273: fixed segfault in arangosh on HTTP 40x - -* issue #265: allow optional base64 encoding/decoding of action response data - -* issue #252: _modules collection not created automatically - - -v1.0.2 (2012-10-22) -------------------- - -* repository CentOS-X.Y moved to CentOS-X, same for Debian - -* bugfix for rollback from edges - -* bugfix for hash indexes - -* bugfix for StringBuffer::erase_front - -* added autoload for modules - -* added AQL function TO_LIST - - -v1.0.1 (2012-09-30) -------------------- - -* draft for issue #165: front-end application howto - -* updated mruby to cf8fdea4a6598aa470e698e8cbc9b9b492319d - -* fix for issue #190: install doesn't create log directory - -* fix for issue #194: potential race condition between creating and dropping collections - -* fix for issue #193: REST API HEAD request returns a message body on 404 - -* fix for issue #188: intermittent issues with 1.0.0 - -* fix for issue #163: server cannot create collection because of abandoned files - -* fix for issue #150: call V8 garbage collection on server periodically - - -v1.0.0 (2012-08-17) -------------------- - -* fix for issue #157: check for readline and ncurses headers, not only libraries - - -v1.0.beta4 (2012-08-15) ------------------------ - -* fix for issue #152: fix memleak for barriers - - -v1.0.beta3 (2012-08-10) ------------------------ - -* fix for issue #151: Memleak, collection data not removed - -* fix for issue #149: Inconsistent port for admin interface - -* fix for issue #163: server cannot create collection because of abandoned files - -* fix for issue #157: check for readline and ncurses headers, not only libraries - -* fix for issue #108: db..truncate() inefficient - -* fix for issue #109: added startup note about cached collection names and how to - refresh them - -* fix for issue #156: fixed memleaks in /_api/import - -* fix for issue #59: added tests for /_api/import - -* modified return value for calls to /_api/import: now, the attribute "empty" is - returned as well, stating the number of empty lines in the input. Also changed the - return value of the error code attribute ("errorNum") from 1100 ("corrupted datafile") - to 400 ("bad request") in case invalid/unexpected JSON data was sent to the server. - This error code is more appropriate as no datafile is broken but just input data is - incorrect. - -* fix for issue #152: Memleak for barriers - -* fix for issue #151: Memleak, collection data not removed - -* value of --database.maximal-journal-size parameter is now validated on startup. If - value is smaller than the minimum value (currently 1048576), an error is thrown and - the server will not start. Before this change, the global value of maximal journal - size was not validated at server start, but only on collection level - -* increased sleep value in statistics creation loop from 10 to 500 microseconds. This - reduces accuracy of statistics values somewhere after the decimal points but saves - CPU time. - -* avoid additional sync() calls when writing partial shape data (attribute name data) - to disk. sync() will still be called when the shape marker (will be written after - the attributes) is written to disk - -* issue #147: added flag --database.force-sync-shapes to force synching of shape data - to disk. The default value is true so it is the same behavior as in version 1.0. - if set to false, shape data is synched to disk if waitForSync for the collection is - set to true, otherwise, shape data is not synched. - -* fix for issue #145: strange issue on Travis: added epsilon for numeric comparison in - geo index - -* fix for issue #136: adjusted message during indexing - -* issue #131: added timeout for HTTP keep-alive connections. The default value is 300 - seconds. There is a startup parameter server.keep-alive-timeout to configure the value. - Setting it to 0 will disable keep-alive entirely on the server. - -* fix for issue #137: AQL optimizer should use indexes for ref accesses with - 2 named attributes - - -v1.0.beta2 (2012-08-03) ------------------------ - -* fix for issue #134: improvements for centos RPM - -* fixed problem with disable-admin-interface in config file - - -v1.0.beta1 (2012-07-29) ------------------------ - -* fixed issue #118: We need a collection "debugger" - -* fixed issue #126: Access-Shaper must be cached - -* INCOMPATIBLE CHANGE: renamed parameters "connect-timeout" and "request-timeout" - for arangosh and arangoimp to "--server.connect-timeout" and "--server.request-timeout" - -* INCOMPATIBLE CHANGE: authorization is now required on the server side - Clients sending requests without HTTP authorization will be rejected with HTTP 401 - To allow backwards compatibility, the server can be started with the option - "--server.disable-authentication" - -* added options "--server.username" and "--server.password" for arangosh and arangoimp - These parameters must be used to specify the user and password to be used when - connecting to the server. If no password is given on the command line, arangosh/ - arangoimp will interactively prompt for a password. - If no user name is specified on the command line, the default user "root" will be - used. - -* added startup option "--server.ssl-cipher-list" to determine which ciphers to - use in SSL context. also added SSL_OP_CIPHER_SERVER_PREFERENCE to SSL default - options so ciphers are tried in server and not in client order - -* changed default SSL protocol to TLSv1 instead of SSLv2 - -* changed log-level of SSL-related messages - -* added SSL connections if server is compiled with OpenSSL support. Use --help-ssl - -* INCOMPATIBLE CHANGE: removed startup option "--server.admin-port". - The new endpoints feature (see --server.endpoint) allows opening multiple endpoints - anyway, and the distinction between admin and "other" endpoints can be emulated - later using privileges. - -* INCOMPATIBLE CHANGE: removed startup options "--port", "--server.port", and - "--server.http-port" for arangod. - These options have been replaced by the new "--server.endpoint" parameter - -* INCOMPATIBLE CHANGE: removed startup option "--server" for arangosh and arangoimp. - These options have been replaced by the new "--server.endpoint" parameter - -* Added "--server.endpoint" option to arangod, arangosh, and arangoimp. - For arangod, this option allows specifying the bind endpoints for the server - The server can be bound to one or multiple endpoints at once. For arangosh - and arangoimp, the option specifies the server endpoint to connect to. - The following endpoint syntax is currently supported: - - tcp://host:port or http@tcp://host:port (HTTP over IPv4) - - tcp://[host]:port or http@tcp://[host]:port (HTTP over IPv6) - - ssl://host:port or http@tcp://host:port (HTTP over SSL-encrypted IPv4) - - ssl://[host]:port or http@tcp://[host]:port (HTTP over SSL-encrypted IPv6) - - unix:///path/to/socket or http@unix:///path/to/socket (HTTP over UNIX socket) - - If no port is specified, the default port of 8529 will be used. - -* INCOMPATIBLE CHANGE: removed startup options "--server.require-keep-alive" and - "--server.secure-require-keep-alive". - The server will now behave as follows which should be more conforming to the - HTTP standard: - * if a client sends a "Connection: close" header, the server will close the - connection - * if a client sends a "Connection: keep-alive" header, the server will not - close the connection - * if a client does not send any "Connection" header, the server will assume - "keep-alive" if the request was an HTTP/1.1 request, and "close" if the - request was an HTTP/1.0 request - -* (minimal) internal optimizations for HTTP request parsing and response header - handling - -* fixed Unicode unescaping bugs for \f and surrogate pairs in BasicsC/strings.c - -* changed implementation of TRI_BlockCrc32 algorithm to use 8 bytes at a time - -* fixed issue #122: arangod doesn't start if cannot be created - -* fixed issue #121: wrong collection size reported - -* fixed issue #98: Unable to change journalSize - -* fixed issue #88: fds not closed - -* fixed escaping of document data in HTML admin front end - -* added HTTP basic authentication, this is always turned on - -* added server startup option --server.disable-admin-interface to turn off the - HTML admin interface - -* honor server startup option --database.maximal-journal-size when creating new - collections without specific journalsize setting. Previously, these - collections were always created with journal file sizes of 32 MB and the - --database.maximal-journal-size setting was ignored - -* added server startup option --database.wait-for-sync to control the default - behavior - -* renamed "--unit-tests" to "--javascript.unit-tests" - - -v1.0.alpha3 (2012-06-30) ------------------------- - -* fixed issue #116: createCollection=create option doesn't work - -* fixed issue #115: Compilation issue under OSX 10.7 Lion & 10.8 Mountain Lion - (homebrew) - -* fixed issue #114: image not found - -* fixed issue #111: crash during "make unittests" - -* fixed issue #104: client.js -> ARANGO_QUIET is not defined - - -v1.0.alpha2 (2012-06-24) ------------------------- - -* fixed issue #112: do not accept document with duplicate attribute names - -* fixed issue #103: Should we cleanup the directory structure - -* fixed issue #100: "count" attribute exists in cursor response with "count: - false" - -* fixed issue #84 explain command - -* added new MRuby version (2012-06-02) - -* added --log.filter - -* cleanup of command line options: -** --startup.directory => --javascript.startup-directory -** --quite => --quiet -** --gc.interval => --javascript.gc-interval -** --startup.modules-path => --javascript.modules-path -** --action.system-directory => --javascript.action-directory -** --javascript.action-threads => removed (is now the same pool as --server.threads) - -* various bug-fixes - -* support for import - -* added option SKIP_RANGES=1 for make unittests - -* fixed several range-related assertion failures in the AQL query optimizer - -* fixed AQL query optimizations for some edge cases (e.g. nested subqueries with - invalid constant filter expressions) - - -v1.0.alpha1 (2012-05-28) ------------------------- - -Alpha Release of ArangoDB 1.0 +* From 0bf3f22b26fec2d1857061c4f26dc5d8d8321275 Mon Sep 17 00:00:00 2001 From: Vadim Date: Thu, 30 Sep 2021 16:54:38 +0300 Subject: [PATCH 11/11] Update CHANGELOG --- CHANGELOG | 3570 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 3569 insertions(+), 1 deletion(-) diff --git a/CHANGELOG b/CHANGELOG index 243ec4da8ba9..72a7fb552be0 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -15540,4 +15540,3572 @@ v2.2.2 (2014-08-08) 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 + + +v2.2.1 (2014-07-24) +------------------- + +* fixed hanging write-ahead log recovery for certain cases that involved dropping + databases + +* fixed issue with --check-version: when creating a new database the check failed + +* issue #947 Foxx applicationContext missing some properties + +* fixed issue with --check-version: when creating a new database the check failed + +* 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. + +* issue #947: Foxx applicationContext missing some properties + +* (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. + + +v2.2.0 (2014-07-10) +------------------- + +* 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 atomically 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 recognize wrong _from and _to + attributes of edges + +* improved error detection and reporting in arangorestore + + +v2.1.1 (2014-06-06) +------------------- + +* fixed dfdb: should not start any other V8 threads + +* signature for collection functions was modified + + The basic change was the substitution of the input parameter of the + function by an generic options object which can contain multiple + option parameter of the function. + Following functions were modified + remove + removeBySample + replace + replaceBySample + update + updateBySample + + Old signature is yet supported but it will be removed in future versions + +v2.1.0 (2014-05-29) +------------------- + +* 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 first) + +* improved cluster dashboard + + +v2.1.0-rc2 (2014-05-25) +----------------------- + +* fixed issue #864: Inconsistent behavior of AQL REVERSE(list) function + + +v2.1.0-rc1 (XXXX-XX-XX) +----------------------- + +* 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 seldom used system collections on creation. + + This will make these collections use less disk space and mapped memory. + +* added AQL date functions + +* added AQL FLATTEN() list function + +* 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 behavior 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 + + +v2.0.8 (XXXX-XX-XX) +------------------- + +* fixed too-busy iteration over skiplists + + Even when a skiplist query was restricted by a limit clause, the skiplist + index was queried without the limit. this led to slower-than-necessary + execution times. + +* fixed timeout overflows on 32 bit systems + + this bug has led to problems when select was called with a high timeout + value (2000+ seconds) on 32bit systems that don't have a forgiving select + implementation. when the call was made on these systems, select failed + so no data would be read or sent over the connection + + this might have affected some cluster-internal operations. + +* fixed ETCD issues on 32 bit systems + + ETCD was non-functional on 32 bit systems at all. The first call to the + watch API crashed it. This was because atomic operations worked on data + structures that were not properly aligned on 32 bit systems. + +* fixed issue #848: db.someEdgeCollection.inEdge does not return correct + value when called the 2nd time after a .save to the edge collection + + +v2.0.7 (2014-05-05) +------------------- + +* 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. + + +v2.0.6 (2014-04-22) +------------------- + +* fixed issue #835: arangosh doesn't show correct database name + + + +v2.0.5 (2014-04-21) +------------------- + +* Fixed a caching problem in IE JS Shell + +* added cancelation for async jobs + +* upgraded to new gyp for V8 + +* new Windows installer + + +v2.0.4 (2014-04-14) +------------------- + +* fixed cluster authentication front-end issues for Firefox and IE, there are + still problems with Chrome + + +v2.0.3 (2014-04-14) +------------------- + +* fixed AQL optimizer bug + +* fixed front-end issues + +* added password change dialog + + +v2.0.2 (2014-04-06) +------------------- + +* during cluster startup, do not log (somewhat expected) connection errors with + log level error, but with log level info + +* fixed dashboard modals + +* fixed connection check for cluster planning front end: firefox does + not support async:false + +* document how to persist a cluster plan in order to relaunch an existing + cluster later + + +v2.0.1 (2014-03-31) +------------------- + +* make ArangoDB not send back a `WWW-Authenticate` header to a client in case the + client sends the `X-Omit-WWW-Authenticate` HTTP header. + + This is done to prevent browsers from showing their built-in HTTP authentication + dialog for AJAX requests that require authentication. + ArangoDB will still return an HTTP 401 (Unauthorized) if the request doesn't + contain valid credentials, but it will omit the `WWW-Authenticate` header, + allowing clients to bypass the browser's authentication dialog. + +* fixed isses in arango-dfdb: + + the dfdb was not able to unload certain system collections, so these couldn't be + inspected with the dfdb sometimes. Additionally, it did not truncate corrupt + markers from datafiles under some circumstances + +* added `changePassword` attribute for users + +* fixed non-working "save" button in collection edit view of web interface + clicking the save button did nothing. one had to press enter in one of the input + fields to send modified form data + +* fixed V8 compile error on MacOS X + +* prevent `body length: -9223372036854775808` being logged in development mode for + some Foxx HTTP responses + +* fixed several bugs in web interface dashboard + +* fixed issue #783: coffee script not working in manifest file + +* fixed issue #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 + + +v2.0.0 (2014-03-10) +------------------- + +* first 2.0 release + + +v2.0.0-rc2 (2014-03-07) +----------------------- + +* fixed cluster authorization + + +v2.0.0-rc1 (2014-02-28) +----------------------- + +* added sharding :-) + +* added collection._dbName attribute to query the name of the database from a collection + + 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 2.0 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 + +* 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 + var aqlfunctions = require("org/arangodb/aql/functions"); + aqlfunctions.register("myfunctions::checkedge", function (config, vertex, edge, path) { + return (edge.type !== 'dislikes'); // don't follow these edges + }, false); + + aqlfunctions.register("myfunctions::checkvertex", function (config, vertex, path) { + if (vertex.isDeleted || ! vertex.isActive) { + return [ "prune", "exclude" ]; // exclude these and don't follow them + } + return [ ]; // include everything else + }, false); + +* fail if invalid `strategy`, `order` or `itemOrder` attribute values + are passed to the AQL TRAVERSAL function. Omitting these attributes + is not considered an error, but specifying an invalid value for any + of these attributes will make an AQL query fail. + +* issue #751: Create database through API should return HTTP status code 201 + + By default, the server now returns HTTP 201 (created) when creating a new + database successfully. To keep compatibility with older ArangoDB versions, the + startup parameter `--server.default-api-compatibility` can be set to a value + of `10400` to indicate API compatibility with ArangoDB 1.4. The compatibility + can also be enforced by setting the `X-Arango-Version` HTTP header in a + client request to this API on a per-request basis. + +* allow direct access from the `db` object to collections whose names start + with an underscore (e.g. db._users). + + Previously, access to such collections via the `db` object was possible from + arangosh, but not from arangod (and thus Foxx and actions). The only way + to access such collections from these places was via the `db._collection()` + workaround. + +* allow `\n` (as well as `\r\n`) as line terminator in batch requests sent to + `/_api/batch` HTTP API. + +* use `--data-binary` instead of `--data` parameter in generated cURL examples + +* issue #703: Also show path of logfile for fm.config() + +* issue #675: Dropping a collection used in "graph" module breaks the graph + +* added "static" Graph.drop() method for graphs API + +* fixed issue #695: arangosh server.password error + +* use pretty-printing in `--console` mode by default + +* simplified ArangoDB startup options + + Some startup options are now superfluous or their usage is simplified. The + following options have been changed: + + * `--javascript.modules-path`: this option has been removed. The modules paths + are determined by arangod and arangosh automatically based on the value of + `--javascript.startup-directory`. + + If the option is set on startup, it is ignored so startup will not abort with + an error `unrecognized option`. + + * `--javascript.action-directory`: this option has been removed. The actions + directory is determined by arangod automatically based on the value of + `--javascript.startup-directory`. + + If the option is set on startup, it is ignored so startup will not abort with + an error `unrecognized option`. + + * `--javascript.package-path`: this option is still available but it is not + required anymore to set the standard package paths (e.g. `js/npm`). arangod + will automatically use this standard package path regardless of whether it + was specified via the options. + + It is possible to use this option to add additional package paths to the + standard value. + + Configuration files included with arangod are adjusted accordingly. + +* layout of the graphs tab adapted to better fit with the other tabs + +* database selection is moved to the bottom right corner of the web interface + +* removed priority queue index type + + this feature was never advertised nor documented nor tested. + +* display internal attributes in document source view of web interface + +* removed separate shape collections + + When upgrading to ArangoDB 2.0, existing collections will be converted to include + shapes and attribute markers in the datafiles instead of using separate files for + shapes. + + When a collection is converted, existing shapes from the SHAPES directory will + be written to a new datafile in the collection directory, and the SHAPES directory + will be removed afterwards. + + This saves up to 2 MB of memory and disk space for each collection + (savings are higher, the less different shapes there are in a collection). + Additionally, one less file descriptor per opened collection will be used. + + When creating a new collection, the amount of sync calls may be reduced. The same + may be true for documents with yet-unknown shapes. This may help performance + in these cases. + +* added AQL functions `NTH` and `POSITION` + +* added signal handler for arangosh to save last command in more cases + +* added extra prompt placeholders for arangosh: + - `%e`: current endpoint + - `%u`: current user + +* added arangosh option `--javascript.gc-interval` to control amount of + garbage collection performed by arangosh + +* fixed issue #651: Allow addEdge() to take vertex ids in the JS library + +* removed command-line option `--log.format` + + In previous versions, this option did not have an effect for most log messages, so + it got removed. + +* removed C++ logger implementation + + Logging inside ArangoDB is now done using the LOG_XXX() macros. The LOGGER_XXX() + macros are gone. + +* added collection status "loading" + + +v1.4.16 (XXXX-XX-XX) +-------------------- + +* fixed too eager datafile deletion + + this issue could have caused a crash when the compaction had marked datafiles as obsolete + and they were removed while "old" temporary query results still pointed to the old datafile + positions + +* fixed issue #826: Replication fails when a collection's configuration changes + + +v1.4.15 (2014-04-19) +-------------------- + +* bugfix for AQL query optimizer + + the following type of query was too eagerly optimized, leading to errors in code-generation: + + LET a = (FOR i IN [] RETURN i) LET b = (FOR i IN [] RETURN i) RETURN 1 + + the problem occurred when both lists in the subqueries were empty. In this case invalid code + was generated and the query couldn't be executed. + + +v1.4.14 (2014-04-05) +-------------------- + +* fixed race conditions during shape / attribute insertion + + A race condition could have led to spurious `cannot find attribute #xx` or + `cannot find shape #xx` (where xx is a number) warning messages being logged + by the server. This happened when a new attribute was inserted and at the same + time was queried by another thread. + + Also fixed a race condition that may have occurred when a thread tried to + access the shapes / attributes hash tables while they were resized. In this + cases, the shape / attribute may have been hashed to a wrong slot. + +* fixed a memory barrier / cpu synchronization problem with libev, affecting + Windows with Visual Studio 2013 (probably earlier versions are affected, too) + + The issue is described in detail here: + http://lists.schmorp.de/pipermail/libev/2014q1/002318.html + + +v1.4.13 (2014-03-14) +-------------------- + +* added diagnostic output for Foxx application upload + +* allow dump & restore from ArangoDB 1.4 with an ArangoDB 2.0 server + +* allow startup options `temp-path` and `default-language` to be specified from the arangod + configuration file and not only from the command line + +* fixed too eager compaction + + The compaction will now wait for several seconds before trying to re-compact the same + collection. Additionally, some other limits have been introduced for the compaction. + + +v1.4.12 (2014-03-05) +-------------------- + +* fixed display bug in web interface which caused the following problems: + - documents were displayed in web interface as being empty + - document attributes view displayed many attributes with content "undefined" + - document source view displayed many attributes with name "TYPEOF" and value "undefined" + - an alert popping up in the browser with message "Datatables warning..." + +* re-introduced old-style read-write locks to supports Windows versions older than + Windows 2008R2 and Windows 7. This should re-enable support for Windows Vista and + Windows 2008. + + +v1.4.11 (2014-02-27) +-------------------- + +* added SHORTEST_PATH AQL function + + this calculates the shortest paths between two vertices, using the Dijkstra + algorithm, employing a min-heap + + By default, ArangoDB does not know the distance between any two vertices and + will use a default distance of 1. A custom distance function can be registered + as an AQL user function to make the distance calculation use any document + attributes or custom logic: + + RETURN SHORTEST_PATH(cities, motorways, "cities/CGN", "cities/MUC", "outbound", { + paths: true, + distance: "myfunctions::citydistance" + }) + + // using the following custom distance function + var aqlfunctions = require("org/arangodb/aql/functions"); + aqlfunctions.register("myfunctions::distance", function (config, vertex1, vertex2, edge) { + return Math.sqrt(Math.pow(vertex1.x - vertex2.x) + Math.pow(vertex1.y - vertex2.y)); + }, false); + +* fixed bug in Graph.pathTo function + +* fixed small memleak in AQL optimizer + +* fixed access to potentially uninitialized variable when collection had a cap constraint + + +v1.4.10 (2014-02-21) +-------------------- + +* fixed graph constructor to allow graph with some parameter to be used + +* added node.js "events" and "stream" + +* updated npm packages + +* added loading of .json file + +* Fixed http return code in graph api with waitForSync parameter. + +* Fixed documentation in graph, simple and index api. + +* removed 2 tests due to change in ruby library. + +* issue #756: set access-control-expose-headers on CORS response + + the following headers are now whitelisted by ArangoDB in CORS responses: + - etag + - content-encoding + - content-length + - location + - server + - x-arango-errors + - x-arango-async-id + + +v1.4.9 (2014-02-07) +------------------- + +* return a document's current etag in response header for HTTP HEAD requests on + documents that return an HTTP 412 (precondition failed) error. This allows + retrieving the document's current revision easily. + +* added AQL function `SKIPLIST` to directly access skiplist indexes from AQL + + This is a shortcut method to use a skiplist index for retrieving specific documents in + indexed order. The function capability is rather limited, but it may be used + for several cases to speed up queries. The documents are returned in index order if + only one condition is used. + + /* return all documents with mycollection.created > 12345678 */ + FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ]] }) + RETURN doc + + /* return first document with mycollection.created > 12345678 */ + FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ]] }, 0, 1) + RETURN doc + + /* return all documents with mycollection.created between 12345678 and 123456790 */ + FOR doc IN SKIPLIST(mycollection, { created: [[ '>', 12345678 ], [ '<=', 123456790 ]] }) + RETURN doc + + /* return all documents with mycollection.a equal 1 and .b equal 2 */ + FOR doc IN SKIPLIST(mycollection, { a: [[ '==', 1 ]], b: [[ '==', 2 ]] }) + RETURN doc + + The function requires a skiplist index with the exact same attributes to + be present on the specified collection. All attributes present in the skiplist + index must be specified in the conditions specified for the `SKIPLIST` function. + Attribute declaration order is important, too: attributes must be specified in the + same order in the condition as they have been declared in the skiplist index. + +* added command-line option `--server.disable-authentication-unix-sockets` + + with this option, authentication can be disabled for all requests coming + in via UNIX domain sockets, enabling clients located on the same host as + the ArangoDB server to connect without authentication. + Other connections (e.g. TCP/IP) are not affected by this option. + + The default value for this option is `false`. + Note: this option is only supported on platforms that support Unix domain + sockets. + +* call global arangod instance destructor on shutdown + +* issue #755: TRAVERSAL does not use strategy, order and itemOrder options + + these options were not honored when configuring a traversal via the AQL + TRAVERSAL function. Now, these options are used if specified. + +* allow vertex and edge filtering with user-defined functions in TRAVERSAL, + 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 + var aqlfunctions = require("org/arangodb/aql/functions"); + aqlfunctions.register("myfunctions::checkedge", function (config, vertex, edge, path) { + return (edge.type !== 'dislikes'); // don't follow these edges + }, false); + + aqlfunctions.register("myfunctions::checkvertex", function (config, vertex, path) { + if (vertex.isDeleted || ! vertex.isActive) { + return [ "prune", "exclude" ]; // exclude these and don't follow them + } + return [ ]; // include everything else + }, false); + +* issue #748: add vertex filtering to AQL's TRAVERSAL[_TREE]() function + + +v1.4.8 (2014-01-31) +------------------- + +* install foxx apps in the web interface + +* fixed a segfault in the import API + + +v1.4.7 (2014-01-23) +------------------- + +* issue #744: Add usage example arangoimp from Command line + +* issue #738: added __dirname, __filename pseudo-globals. Fixes #733. (@by pluma) + +* mount all Foxx applications in system apps directory on startup + + +v1.4.6 (2014-01-20) +------------------- + +* issue #736: AQL function to parse collection and key from document handle + +* added fm.rescan() method for Foxx-Manager + +* fixed issue #734: foxx cookie and route problem + +* added method `fm.configJson` for arangosh + +* include `startupPath` in result of API `/_api/foxx/config` + + +v1.4.5 (2014-01-15) +------------------- + +* fixed issue #726: Alternate Windows Install Method + +* fixed issue #716: dpkg -P doesn't remove everything + +* fixed bugs in description of HTTP API `_api/index` + +* fixed issue #732: Rest API GET revision number + +* added missing documentation for several methods in HTTP API `/_api/edge/...` + +* fixed typos in description of HTTP API `_api/document` + +* defer evaluation of AQL subqueries and logical operators (lazy evaluation) + +* Updated font in WebFrontend, it now contains a version that renders properly on Windows + +* generally allow function return values as call parameters to AQL functions + +* fixed potential deadlock in global context method execution + +* added override file "arangod.conf.local" (and co) + + +v1.4.4 (2013-12-24) +------------------- + +* uid and gid are now set in the scripts, there is no longer a separate config file for + arangod when started from a script + +* foxx-manager is now an alias for arangosh + +* arango-dfdb is now an alias for arangod, moved from bin to sbin + +* changed from readline to linenoise for Windows + +* added --install-service and --uninstall-service for Windows + +* removed --daemon and --supervisor for Windows + +* arangosh and arangod now uses the config-file which maps the binary name, i. e. if you + rename arangosh to foxx-manager it will use the config file foxx-manager.conf + +* fixed lock file for Windows + +* fixed issue #711, #687: foxx-manager throws internal errors + +* added `--server.ssl-protocol` option for client tools + this allows connecting from arangosh, arangoimp, arangoimp etc. to an ArangoDB + server that uses a non-default value for `--server.ssl-protocol`. The default + value for the SSL protocol is 4 (TLSv1). If the server is configured to use a + different protocol, it was not possible to connect to it with the client tools. + +* added more detailed request statistics + + This adds the number of async-executed HTTP requests plus the number of HTTP + requests per individual HTTP method type. + +* added `--force` option for arangorestore + this option allows continuing a restore operation even if the server reports errors + in the middle of the restore operation + +* better error reporting for arangorestore + in case the server returned an HTTP error, arangorestore previously reported this + error as `internal error` without any details only. Now server-side errors are + reported by arangorestore with the server's error message + +* include more system collections in dumps produced by arangodump + previously some system collections were intentionally excluded from dumps, even if the + dump was run with `--include-system-collections`. for example, the collections `_aal`, + `_modules`, `_routing`, and `_users` were excluded. This makes sense in a replication + context but not always in a dump context. + When specifying `--include-system-collections`, arangodump will now include the above- + mentioned collections in the dump, too. Some other system collections are still excluded + even when the dump is run with `--include-system-collections`, for example `_replication` + and `_trx`. + +* fixed issue #701: ArangoStatement undefined in arangosh + +* fixed typos in configuration files + + +v1.4.3 (2013-11-25) +------------------- + +* fixed a segfault in the AQL optimizer, occurring when a constant non-list value was + used on the right-hand side of an IN operator that had a collection attribute on the + left-hand side + +* issue #662: + + Fixed access violation errors (crashes) in the Windows version, occurring under some + circumstances when accessing databases with multiple clients in parallel + +* fixed issue #681: Problem with ArchLinux PKGBUILD configuration + + +v1.4.2 (2013-11-20) +------------------- + +* fixed issue #669: Tiny documentation update + +* ported Windows version to use native Windows API SRWLocks (slim read-write locks) + and condition variables instead of homemade versions + + MSDN states the following about the compatibility of SRWLocks and Condition Variables: + + Minimum supported client: + Windows Server 2008 [desktop apps | Windows Store apps] + + Minimum supported server: + Windows Vista [desktop apps | Windows Store apps] + +* fixed issue #662: ArangoDB on Windows hanging + + This fixes a deadlock issue that occurred on Windows when documents were written to + a collection at the same time when some other thread tried to drop the collection. + +* fixed file-based logging in Windows + + the logger complained on startup if the specified log file already existed + +* fixed startup of server in daemon mode (`--daemon` startup option) + +* fixed a segfault in the AQL optimizer + +* issue #671: Method graph.measurement does not exist + +* changed Windows condition variable implementation to use Windows native + condition variables + + This is an attempt to fix spurious Windows hangs as described in issue #662. + +* added documentation for JavaScript traversals + +* added --code-page command-line option for Windows version of arangosh + +* fixed a problem when creating edges via the web interface. + + The problem only occurred if a collection was created with type "document + collection" via the web interface, and afterwards was dropped and re-created + with type "edge collection". If the web interface page was not reloaded, + the old collection type (document) was cached, making the subsequent creation + of edges into the (seeming-to-be-document) collection fail. + + The fix is to not cache the collection type in the web interface. Users of + an older version of the web interface can reload the collections page if they + are affected. + +* fixed a caching problem in arangosh: if a collection was created using the web + interface, and then removed via arangosh, arangosh did not actually drop the + collection due to caching. + + Because the `drop` operation was not carried out, this caused misleading error + messages when trying to re-create the collection (e.g. `cannot create collection: + duplicate name`). + +* fixed ALT-introduced characters for arangosh console input on Windows + + The Windows readline port was not able to handle characters that are built + using CTRL or ALT keys. Regular characters entered using the CTRL or ALT keys + were silently swallowed and not passed to the terminal input handler. + + This did not seem to cause problems for the US keyboard layout, but was a + severe issue for keyboard layouts that require the ALT (or ALT-GR) key to + construct characters. For example, entering the character `{` with a German + keyboard layout requires pressing ALT-GR + 9. + +* fixed issue #665: Hash/skiplist combo madness bit my ass + + this fixes a problem with missing/non-deterministic rollbacks of inserts in + case of a unique constraint violation into a collection with multiple secondary + indexes (with at least one of them unique) + +* fixed issue #664: ArangoDB installer on Windows requires drive c: + +* partly fixed issue #662: ArangoDB on Windows hanging + + This fixes dropping databases on Windows. In previous 1.4 versions on Windows, + one shape collection file was not unloaded and removed when dropping a database, + leaving one directory and one shape collection file in the otherwise-dropped + database directory. + +* fixed issue #660: updated documentation on indexes + + +v1.4.1 (2013-11-08) +------------------- + +* performance improvements for skip-list deletes + + +v1.4.1-rc1 (2013-11-07) +----------------------- + +* fixed issue #635: Web-Interface should have a "Databases" Menu for Management + +* fixed issue #624: Web-Interface is missing a Database selector + +* fixed segfault in bitarray query + +* fixed issue #656: Cannot create unique index through web interface + +* fixed issue #654: bitarray index makes server down + +* fixed issue #653: Slow query + +* fixed issue #650: Randomness of any() should be improved + +* made AQL `DOCUMENT()` function polymorphic and work with just one parameter. + + This allows using the `DOCUMENT` function like this: + + DOCUMENT('users/john') + DOCUMENT([ 'users/john', 'users/amy' ]) + + in addition to the existing use cases: + + DOCUMENT(users, 'users/john') + DOCUMENT(users, 'john') + DOCUMENT(users, [ 'users/john' ]) + DOCUMENT(users, [ 'users/john', 'users/amy' ]) + DOCUMENT(users, [ 'john', 'amy' ]) + +* simplified usage of ArangoDB batch API + + It is not necessary anymore to send the batch boundary in the HTTP `Content-Type` + header. Previously, the batch API expected the client to send a Content-Type header + of`multipart/form-data; boundary=`. This is still supported in + ArangoDB 2.0, but clients can now also omit this header. If the header is not + present in a client request, ArangoDB will ignore the request content type and + read the MIME boundary from the beginning of the request body. + + This also allows using the batch API with the Swagger "Try it out" feature (which is + not too good at sending a different or even dynamic content-type request header). + +* added API method GET `/_api/database/user` + + This returns the list of databases a specific user can see without changing the + username/passwd. + +* issue #424: Documentation about IDs needs to be upgraded + + +v1.4.0 (2013-10-29) +------------------- + +* fixed issue #648: /batch API is missing from Web Interface API Documentation (Swagger) + +* fixed issue #647: Icon tooltips missing + +* fixed issue #646: index creation in web interface + +* fixed issue #645: Allow jumping from edge to linked vertices + +* merged PR for issue #643: Some minor corrections and a link to "Downloads" + +* fixed issue #642: Completion of error handling + +* fixed issue #639: compiling v1.4 on maverick produces warnings on -Wstrict-null-sentinel + +* fixed issue #634: Web interface bug: Escape does not always propagate + +* fixed issue #620: added startup option `--server.default-api-compatibility` + + This adds the following changes to the ArangoDB server and clients: + - the server provides a new startup option `--server.default-api-compatibility`. + This option can be used to determine the compatibility of (some) server API + return values. The value for this parameter is a server version number, + calculated as follows: `10000 * major + 100 * minor` (e.g. `10400` for ArangoDB + 1.3). The default value is `10400` (1.4), the minimum allowed value is `10300` + (1.3). + + When setting this option to a value lower than the current server version, + the server might respond with old-style results to "old" clients, increasing + compatibility with "old" (non-up-to-date) clients. + + - the server will on each incoming request check for an HTTP header + `x-arango-version`. Clients can optionally set this header to the API + version number they support. For example, if a client sends the HTTP header + `x-arango-version: 10300`, the server will pick this up and might send ArangoDB + 1.3-style responses in some situations. + + Setting either the startup parameter or using the HTTP header (or both) allows + running "old" clients with newer versions of ArangoDB, without having to adjust + the clients too much. + + - the `location` headers returned by the server for the APIs `/_api/document/...` + and `/_api/collection/...` will have different values depending on the used API + version. If the API compatibility is `10300`, the `location` headers returned + will look like this: + + location: /_api/document/.... + + whereas when an API compatibility of `10400` or higher is used, the `location` + headers will look like this: + + location: /_db//_api/document/... + + Please note that even in the presence of this, old API versions still may not + be supported forever by the server. + +* fixed issue #643: Some minor corrections and a link to "Downloads" by @frankmayer + +* started issue #642: Completion of error handling + +* fixed issue #639: compiling v1.4 on maverick produces warnings on + -Wstrict-null-sentinel + +* fixed issue #621: Standard Config needs to be fixed + +* added function to manage indexes (web interface) + +* improved server shutdown time by signaling shutdown to applicationserver, + logging, cleanup and compactor threads + +* added foxx-manager `replace` command + +* added foxx-manager `installed` command (a more intuitive alias for `list`) + +* fixed issue #617: Swagger API is missing '/_api/version' + +* fixed issue #615: Swagger API: Some commands have no parameter entry forms + +* fixed issue #614: API : Typo in : Request URL /_api/database/current + +* fixed issue #609: Graph viz tool - different background color + +* fixed issue #608: arangosh config files - eventually missing in the manual + +* fixed issue #607: Admin interface: no core documentation + +* fixed issue #603: Aardvark Foxx App Manager + +* fixed a bug in type-mapping between AQL user functions and the AQL layer + + The bug caused errors like the following when working with collection documents + in an AQL user function: + + TypeError: Cannot assign to read only property '_id' of # + +* create less system collections when creating a new database + + This is achieved by deferring collection creation until the collections are actually + needed by ArangoDB. The following collections are affected by the change: + - `_fishbowl` + - `_structures` + + +v1.4.0-beta2 (2013-10-14) +------------------------- + +* fixed compaction on Windows + + The compaction on Windows did not ftruncate the cleaned datafiles to a smaller size. + This has been fixed so not only the content of the files is cleaned but also files + are re-created with potentially smaller sizes. + +* only the following system collections will be excluded from replication from now on: + - `_replication` + - `_trx` + - `_users` + - `_aal` + - `_fishbowl` + - `_modules` + - `_routing` + + Especially the following system collections will now be included in replication: + - `_aqlfunctions` + - `_graphs` + + In previous versions of ArangoDB, all system collections were excluded from the + replication. + + The change also caused a change in the replication logger and applier: + in previous versions of ArangoDB, only a collection's id was logged for an operation. + This has not caused problems for non-system collections but for system collections + there ids might differ. In addition to a collection id ArangoDB will now also log the + name of a collection for each replication event. + + The replication applier will now look for the collection name attribute in logged + events preferably. + +* added database selection to arango-dfdb + +* provide foxx-manager, arangodump, and arangorestore in Windows build + +* ArangoDB 1.4 will refuse to start if option `--javascript.app-path` is not set. + +* added startup option `--server.allow-method-override` + + This option can be set to allow overriding the HTTP request method in a request using + one of the following custom headers: + + - x-http-method-override + - x-http-method + - x-method-override + + This allows bypassing proxies and tools that would otherwise just let certain types of + requests pass. Enabling this option may impose a security risk, so it should only be + used in very controlled environments. + + The default value for this option is `false` (no method overriding allowed). + +* added "details" URL parameter for bulk import API + + Setting the `details` URL parameter to `true` in a call to POST `/_api/import` will make + the import return details about non-imported documents in the `details` attribute. If + `details` is `false` or omitted, no `details` attribute will be present in the response. + This is the same behavior that previous ArangoDB versions exposed. + +* added "complete" option for bulk import API + + Setting the `complete` URL parameter to `true` in a call to POST `/_api/import` will make + the import completely fail if at least one of documents cannot be imported successfully. + + It defaults to `false`, which will make ArangoDB continue importing the other documents + from the import even if some documents cannot be imported. This is the same behavior that + previous ArangoDB versions exposed. + +* added missing swagger documentation for `/_api/log` + +* calling `/_api/logs` (or `/_admin/logs`) is only permitted from the `_system` database now. + + Calling this API method for/from other database will result in an HTTP 400. + +' ported fix from https://github.com/novus/nvd3/commit/0894152def263b8dee60192f75f66700cea532cc + + This prevents JavaScript errors from occurring in Chrome when in the admin interface, + section "Dashboard". + +* show current database name in web interface (bottom right corner) + +* added missing documentation for /_api/import in swagger API docs + +* allow specification of database name for replication sync command replication applier + + This allows syncing from a master database with a different name than the slave database. + +* issue #601: Show DB in prompt + + arangosh now displays the database name as part of the prompt by default. + + Can change the prompt by using the `--prompt` option, e.g. + + > arangosh --prompt "my db is named \"%d\"> " + + +v1.4.0-beta1 (2013-10-01) +------------------------- + +* make the Foxx manager use per-database app directories + + Each database now has its own subdirectory for Foxx applications. Each database + can thus use different Foxx applications if required. A Foxx app for a specific + database resides in `/databases//`. + + System apps are shared between all databases. They reside in `/system/`. + +* only trigger an engine reset in development mode for URLs starting with `/dev/` + + This prevents ArangoDB from reloading all Foxx applications when it is not + actually necessary. + +* changed error code from 10 (bad parameter) to 1232 (invalid key generator) for + errors that are due to an invalid key generator specification when creating a new + collection + +* automatic detection of content-type / mime-type for Foxx assets based on filenames, + added possibility to override auto detection + +* added endpoint management API at `/_api/endpoint` + +* changed HTTP return code of PUT `/_api/cursor` from 400 to 404 in case a + non-existing cursor is referred to + +* issue #360: added support for asynchronous requests + + Incoming HTTP requests with the headers `x-arango-async: true` or + `x-arango-async: store` will be answered by the server instantly with a generic + HTTP 202 (Accepted) response. + + The actual requests will be queued and processed by the server asynchronously, + allowing the client to continue sending other requests without waiting for the + server to process the actually requested operation. + + The exact point in time when a queued request is executed is undefined. If an + error occurs during execution of an asynchronous request, the client will not + be notified by the server. + + The maximum size of the asynchronous task queue can be controlled using the new + option `--scheduler.maximal-queue-size`. If the queue contains this many number of + tasks and a new asynchronous request comes in, the server will reject it with an + HTTP 500 (internal server error) response. + + Results of incoming requests marked with header `x-arango-async: true` will be + discarded by the server immediately. Clients have no way of accessing the result + of such asynchronously executed request. This is just _fire and forget_. + + To later retrieve the result of an asynchronously executed request, clients can + mark a request with the header `x-arango-async: keep`. This makes the server + store the result of the request in memory until explicitly fetched by a client + via the `/_api/job` API. The `/_api/job` API also provides methods for basic + inspection of which pending or already finished requests there are on the server, + plus ways for garbage collecting unneeded results. + +* Added new option `--scheduler.maximal-queue-size`. + +* issue #590: Manifest Lint + +* added data dump and restore tools, arangodump and arangorestore. + + arangodump can be used to create a logical dump of an ArangoDB database, or + just dedicated collections. It can be used to dump both a collection's structure + (properties and indexes) and data (documents). + + arangorestore can be used to restore data from a dump created with arangodump. + arangorestore currently does not re-create any indexes, and doesn't yet handle + referenced documents in edges properly when doing just partial restores. + This will be fixed until 1.4 stable. + +* introduced `--server.database` option for arangosh, arangoimp, and arangob. + + The option allows these client tools to use a certain database for their actions. + In arangosh, the current database can be switched at any time using the command + + db._useDatabase(); + + When no database is specified, all client tools will assume they should use the + default database `_system`. This is done for downwards-compatibility reasons. + +* added basic multi database support (alpha) + + New databases can be created using the REST API POST `/_api/database` and the + shell command `db._createDatabase()`. + + The default database in ArangoDB is called `_system`. This database is always + present and cannot be deleted by the user. When an older version of ArangoDB is + upgraded to 1.4, the previously only database will automatically become the + `_system` database. + + New databases can be created with the above commands, and can be deleted with the + REST API DELETE `/_api/database/` or the shell command `db._dropDatabase();`. + + Deleting databases is still unstable in ArangoDB 1.4 alpha and might crash the + server. This will be fixed until 1.4 stable. + + To access a specific database via the HTTP REST API, the `/_db//` prefix + can be used in all URLs. ArangoDB will check if an incoming request starts with + this prefix, and will automatically pick the database name from it. If the prefix + is not there, ArangoDB will assume the request is made for the default database + (`_system`). This is done for downwards-compatibility reasons. + + That means, the following URL pathnames are logically identical: + + /_api/document/mycollection/1234 + /_db/_system/document/mycollection/1234 + + To access a different database (e.g. `test`), the URL pathname would look like this: + + /_db/test/document/mycollection/1234 + + New databases can also be created and existing databases can only be dropped from + within the default database (`_system`). It is not possible to drop the `_system` + database itself. + + Cross-database operations are unintended and unsupported. The intention of the + multi-database feature is to have the possibility to have a few databases managed + by ArangoDB in parallel, but to only access one database at a time from a connection + or a request. + + When accessing the web interface via the URL pathname `/_admin/html/` or `/_admin/aardvark`, + the web interface for the default database (`_system`) will be displayed. + To access the web interface for a different database, the database name can be + put into the URLs as a prefix, e.g. `/_db/test/_admin/html` or + `/_db/test/_admin/aardvark`. + + All internal request handlers and also all user-defined request handlers and actions + (including Foxx) will only get to see the unprefixed URL pathnames (i.e. excluding + any database name prefix). This is to ensure downwards-compatibility. + + To access the name of the requested database from any action (including Foxx), use + use `req.database`. + + For example, when calling the URL `/myapp/myaction`, the content of `req.database` + will be `_system` (the default database because no database got specified) and the + content of `req.url` will be `/myapp/myaction`. + + When calling the URL `/_db/test/myapp/myaction`, the content of `req.database` will be + `test`, and the content of `req.url` will still be `/myapp/myaction`. + +* Foxx now excludes files starting with . (dot) when bundling assets + + This mitigates problems with editor swap files etc. + +* made the web interface a Foxx application + + This change caused the files for the web interface to be moved from `html/admin` to + `js/apps/aardvark` in the file system. + + The base URL for the admin interface changed from `_admin/html/index.html` to + `_admin/aardvark/index.html`. + + The "old" redirection to `_admin/html/index.html` will now produce a 404 error. + + When starting ArangoDB with the `--upgrade` option, this will automatically be remedied + by putting in a redirection from `/` to `/_admin/aardvark/index.html`, and from + `/_admin/html/index.html` to `/_admin/aardvark/index.html`. + + This also obsoletes the following configuration (command-line) options: + - `--server.admin-directory` + - `--server.disable-admin-interface` + + when using these now obsolete options when the server is started, no error is produced + for downwards-compatibility. + +* changed User-Agent value sent by arangoimp, arangosh, and arangod from "VOC-Agent" to + "ArangoDB" + +* changed journal file creation behavior as follows: + + Previously, a journal file for a collection was always created when a collection was + created. When a journal filled up and became full, the current journal was made a + datafile, and a new (empty) journal was created automatically. There weren't many + intended situations when a collection did not have at least one journal. + + This is changed now as follows: + - when a collection is created, no journal file will be created automatically + - when there is a write into a collection without a journal, the journal will be + created lazily + - when there is a write into a collection with a full journal, a new journal will + be created automatically + + From the end user perspective, nothing should have changed, except that there is now + less disk usage for empty collections. Disk usage of infrequently updated collections + might also be reduced significantly by running the `rotate()` method of a collection, + and not writing into a collection subsequently. + +* added method `collection.rotate()` + + This allows premature rotation of a collection's current journal file into a (read-only) + datafile. The purpose of using `rotate()` is to prematurely allow compaction (which is + performed on datafiles only) on data, even if the journal was not filled up completely. + + Using `rotate()` may make sense in the following scenario: + + c = db._create("test"); + for (i = 0; i < 1000; ++i) { + c.save(...); // insert lots of data here + } + + ... + c.truncate(); // collection is now empty + // only data in datafiles will be compacted by following compaction runs + // all data in the current journal would not be compacted + + // calling rotate will make the current journal a datafile, and thus make it + // eligible for compaction + c.rotate(); + + Using `rotate()` may also be useful when data in a collection is known to not change + in the immediate future. After having completed all write operations on a collection, + performing a `rotate()` will reduce the size of the current journal to the actually + required size (remember that journals are pre-allocated with a specific size) before + making the journal a datafile. Thus `rotate()` may cause disk space savings, even if + the datafiles does not qualify for compaction after rotation. + + Note: rotating the journal is asynchronous, so that the actual rotation may be executed + after `rotate()` returns to the caller. + +* changed compaction to merge small datafiles together (up to 3 datafiles are merged in + a compaction run) + + In the regular case, this should leave less small datafiles stay around on disk and allow + using less file descriptors in total. + +* added AQL MINUS function + +* added AQL UNION_DISTINCT function (more efficient than combination of `UNIQUE(UNION())`) + +* updated mruby to 2013-08-22 + +* issue #587: Add db._create() in help for startup arangosh + +* issue #586: Share a link on installation instructions in the User Manual + +* issue #585: Bison 2.4 missing on Mac for custom build + +* issue #584: Web interface images broken in devel + +* issue #583: Small documentation update + +* issue #581: Parameter binding for attributes + +* issue #580: Small improvements (by @guidoreina) + +* issue #577: Missing documentation for collection figures in implementor manual + +* issue #576: Get disk usage for collections and graphs + + This extends the result of the REST API for /_api/collection/figures with + the attributes `compactors.count`, `compactors.fileSize`, `shapefiles.count`, + and `shapefiles.fileSize`. + +* issue #575: installing devel version on mac (low prio) + +* issue #574: Documentation (POST /_admin/routing/reload) + +* issue #558: HTTP cursors, allow count to ignore LIMIT + + +v1.4.0-alpha1 (2013-08-02) +-------------------------- + +* added replication. check online manual for details. + +* added server startup options `--server.disable-replication-logger` and + `--server.disable-replication-applier` + +* removed action deployment tool, this now handled with Foxx and its manager or + by kaerus node utility + +* fixed a server crash when using byExample / firstExample inside a transaction + and the collection contained a usable hash/skiplist index for the example + +* defineHttp now only expects a single context + +* added collection detail dialog (web interface) + + Shows collection properties, figures (datafiles, journals, attributes, etc.) + and indexes. + +* added documents filter (web interface) + + Allows searching for documents based on attribute values. One or many filter + conditions can be defined, using comparison operators such as '==', '<=', etc. + +* improved AQL editor (web interface) + + Editor supports keyboard shortcuts (Submit, Undo, Redo, Select). + Editor allows saving and reusing of user-defined queries. + Added example queries to AQL editor. + Added comment button. + +* added document import (web interface) + + Allows upload of JSON-data from files. Files must have an extension of .json. + +* added dashboard (web interface) + + Shows the status of replication and multiple system charts, e.g. + Virtual Memory Size, Request Time, HTTP Connections etc. + +* added API method `/_api/graph` to query all graphs with all properties. + +* added example queries in web interface AQL editor + +* added arango.reconnect() method for arangosh to dynamically switch server or + user name + +* added AQL range operator `..` + + The `..` operator can be used to easily iterate over a sequence of numeric + values. It will produce a list of values in the defined range, with both bounding + values included. + + Example: + + 2010..2013 + + will produce the following result: + + [ 2010, 2011, 2012, 2013 ] + +* added AQL RANGE function + +* added collection.first(count) and collection.last(count) document access functions + + These functions allow accessing the first or last n documents in a collection. The order + is determined by document insertion/update time. + +* added AQL INTERSECTION function + +* INCOMPATIBLE CHANGE: changed AQL user function namespace resolution operator from `:` to `::` + + AQL user-defined functions were introduced in ArangoDB 1.3, and the namespace resolution + operator for them was the single colon (`:`). A function call looked like this: + + RETURN mygroup:myfunc() + + The single colon caused an ambiguity in the AQL grammar, making it indistinguishable from + named attributes or the ternary operator in some cases, e.g. + + { mygroup:myfunc ? mygroup:myfunc } + + The change of the namespace resolution operator from `:` to `::` fixes this ambiguity. + + Existing user functions in the database will be automatically fixed when starting ArangoDB + 1.4 with the `--upgrade` option. However, queries using user-defined functions need to be + adjusted on the client side to use the new operator. + +* allow multiple AQL LET declarations separated by comma, e.g. + LET a = 1, b = 2, c = 3 + +* more useful AQL error messages + + The error position (line/column) is more clearly indicated for parse errors. + Additionally, if a query references a collection that cannot be found, the error + message will give a hint on the collection name + +* changed return value for AQL `DOCUMENT` function in case document is not found + + Previously, when the AQL `DOCUMENT` function was called with the id of a document and + the document could not be found, it returned `undefined`. This value is not part of the + JSON type system and this has caused some problems. + Starting with ArangoDB 1.4, the `DOCUMENT` function will return `null` if the document + looked for cannot be found. + + In case the function is called with a list of documents, it will continue to return all + found documents, and will not return `null` for non-found documents. This has not changed. + +* added single line comments for AQL + + Single line comments can be started with a double forward slash: `//`. + They end at the end of the line, or the end of the query string, whichever is first. + +* fixed documentation issues #567, #568, #571. + +* added collection.checksum() method to calculate CRC checksums for + collections + + This can be used to + - check if data in a collection has changed + - compare the contents of two collections on different ArangoDB instances + +* issue #565: add description line to aal.listAvailable() + +* fixed several out-of-memory situations when double freeing or invalid memory + accesses could happen + +* less msyncing during the creation of collections + + This is achieved by not syncing the initial (standard) markers in shapes collections. + After all standard markers are written, the shapes collection will get synced. + +* renamed command-line option `--log.filter` to `--log.source-filter` to avoid + misunderstandings + +* introduced new command-line option `--log.content-filter` to optionally restrict + logging to just specific log messages (containing the filter string, case-sensitive). + + For example, to filter on just log entries which contain `ArangoDB`, use: + + --log.content-filter "ArangoDB" + +* added optional command-line option `--log.requests-file` to log incoming HTTP + requests to a file. + + When used, all HTTP requests will be logged to the specified file, containing the + client IP address, HTTP method, requests URL, HTTP response code, and size of the + response body. + +* added a signal handler for SIGUSR1 signal: + + when ArangoDB receives this signal, it will respond all further incoming requests + with an HTTP 503 (Service Unavailable) error. This will be the case until another + SIGUSR1 signal is caught. This will make ArangoDB start serving requests regularly + again. Note: this is not implemented on Windows. + +* limited maximum request URI length to 16384 bytes: + + Incoming requests with longer request URIs will be responded to with an HTTP + 414 (Request-URI Too Long) error. + +* require version 1.0 or 1.1 in HTTP version signature of requests sent by clients: + + Clients sending requests with a non-HTTP 1.0 or non-HTTP 1.1 version number will + be served with an HTTP 505 (HTTP Version Not Supported) error. + +* updated manual on indexes: + + using system attributes such as `_id`, `_key`, `_from`, `_to`, `_rev` in indexes is + disallowed and will be rejected by the server. This was the case since ArangoDB 1.3, + but was not properly documented. + +* issue #563: can aal become a default object? + + aal is now a prefab object in arangosh + +* prevent certain system collections from being renamed, dropped, or even unloaded. + + Which restrictions there are for which system collections may vary from release to + release, but users should in general not try to modify system collections directly + anyway. + + Note: there are no such restrictions for user-created collections. + +* issue #559: added Foxx documentation to user manual + +* added server startup option `--server.authenticate-system-only`. This option can be + used to restrict the need for HTTP authentication to internal functionality and APIs, + such as `/_api/*` and `/_admin/*`. + Setting this option to `true` will thus force authentication for the ArangoDB APIs + and the web interface, but allow unauthenticated requests for other URLs (including + user defined actions and Foxx applications). + The default value of this option is `false`, meaning that if authentication is turned + on, authentication is still required for *all* incoming requests. Only by setting the + option to `true` this restriction is lifted and authentication becomes required for + URLs starting with `/_` only. + + Please note that authentication still needs to be enabled regularly by setting the + `--server.disable-authentication` parameter to `false`. Otherwise no authentication + will be required for any URLs as before. + +* protect collections against unloading when there are still document barriers around. + +* extended cap constraints to optionally limit the active data size in a collection to + a specific number of bytes. + + The arguments for creating a cap constraint are now: + `collection.ensureCapConstraint(, );` + + It is supported to specify just a count as in ArangoDB 1.3 and before, to specify + just a fileSize, or both. The first met constraint will trigger the automated + document removal. + +* added `db._exists(doc)` and `collection.exists(doc)` for easy document existence checks + +* added API `/_api/current-database` to retrieve information about the database the + client is currently connected to (note: the API `/_api/current-database` has been + removed in the meantime. The functionality is accessible via `/_api/database/current` + now). + +* ensure a proper order of tick values in datafiles/journals/compactors. + any new files written will have the _tick values of their markers in order. for + older files, there are edge cases at the beginning and end of the datafiles when + _tick values are not properly in order. + +* prevent caching of static pages in PathHandler. + whenever a static page is requested that is served by the general PathHandler, the + server will respond to HTTP GET requests with a "Cache-Control: max-age=86400" header. + +* added "doCompact" attribute when creating collections and to collection.properties(). + The attribute controls whether collection datafiles are compacted. + +* changed the HTTP return code from 400 to 404 for some cases when there is a referral + to a non-existing collection or document. + +* introduced error code 1909 `too many iterations` that is thrown when graph traversals + hit the `maxIterations` threshold. + +* optionally limit traversals to a certain number of iterations + the limitation can be achieved via the traversal API by setting the `maxIterations` + attribute, and also via the AQL `TRAVERSAL` and `TRAVERSAL_TREE` functions by setting + the same attribute. If traversals are not limited by the end user, a server-defined + limit for `maxIterations` may be used to prevent server-side traversals from running + endlessly. + +* added graph traversal API at `/_api/traversal` + +* added "API" link in web interface, pointing to REST API generated with Swagger + +* moved "About" link in web interface into "links" menu + +* allow incremental access to the documents in a collection from out of AQL + this allows reading documents from a collection chunks when a full collection scan + is required. memory usage might be must lower in this case and queries might finish + earlier if there is an additional LIMIT statement + +* changed AQL COLLECT to use a stable sort, so any previous SORT order is preserved + +* issue #547: Javascript error in the web interface + +* issue #550: Make AQL graph functions support key in addition to id + +* issue #526: Unable to escape when an errorneous command is entered into the js shell + +* issue #523: Graph and vertex methods for the javascript api + +* issue #517: Foxx: Route parameters with capital letters fail + +* issue #512: Binded Parameters for LIMIT + + +v1.3.3 (2013-08-01) +------------------- + +* issue #570: updateFishbowl() fails once + +* updated and fixed generated examples + +* issue #559: added Foxx documentation to user manual + +* added missing error reporting for errors that happened during import of edges + + +v1.3.2 (2013-06-21) +------------------- + +* fixed memleak in internal.download() + +* made the shape-collection journal size adaptive: + if too big shapes come in, a shape journal will be created with a big-enough size + automatically. the maximum size of a shape journal is still restricted, but to a + very big value that should never be reached in practice. + +* fixed a segfault that occurred when inserting documents with a shape size bigger + than the default shape journal size (2MB) + +* fixed a locking issue in collection.truncate() + +* fixed value overflow in accumulated filesizes reported by collection.figures() + +* issue #545: AQL FILTER unnecessary (?) loop + +* issue #549: wrong return code with --daemon + + +v1.3.1 (2013-05-24) +------------------- + +* removed currently unused _ids collection + +* fixed usage of --temp-path in aranogd and arangosh + +* issue #540: suppress return of temporary internal variables in AQL + +* issue #530: ReferenceError: ArangoError is not a constructor + +* issue #535: Problem with AQL user functions javascript API + +* set --javascript.app-path for test execution to prevent startup error + +* issue #532: Graph _edgesCache returns invalid data? + +* issue #531: Arangod errors + +* issue #529: Really weird transaction issue + +* fixed usage of --temp-path in aranogd and arangosh + + +v1.3.0 (2013-05-10) +------------------- + +* fixed problem on restart ("datafile-xxx is not sealed") when server was killed + during a compaction run + +* fixed leak when using cursors with very small batchSize + +* issue #508: `unregistergroup` function not mentioned in http interface docs + +* issue #507: GET /_api/aqlfunction returns code inside parentheses + +* fixed issue #489: Bug in aal.install + +* fixed issue 505: statistics not populated on MacOS + + +v1.3.0-rc1 (2013-04-24) +----------------------- + +* updated documentation for 1.3.0 + +* added node modules and npm packages + +* changed compaction to only compact datafiles with more at least 10% of dead + documents (byte size-wise) + +* issue #498: fixed reload of authentication info when using + `require("org/arangodb/users").reload()` + +* issue #495: Passing an empty array to create a document results in a + "phantom" document + +* added more precision for requests statistics figures + +* added "sum" attribute for individual statistics results in statistics API + at /_admin/statistics + +* made "limit" an optional parameter in AQL function NEAR(). + limit can now be either omitted completely, or set to 0. If so, an internal + default value (currently 100) will be applied for the limit. + +* issue #481 + +* added "attributes.count" to output of `collection.figures()` + this also affects the REST API /_api/collection//figures + +* added IndexedPropertyGetter for ShapedJson objects + +* added API for user-defined AQL functions + +* issue #475: A better error message for deleting a non-existent graph + +* issue #474: Web interface problems with the JS Shell + +* added missing documentation for AQL UNION function + +* added transaction support. + This provides ACID transactions for ArangoDB. Transactions can be invoked + using the `db._executeTransaction()` function, or the `/_api/transaction` + REST API. + +* switched to semantic versioning (at least for alpha & alpha naming) + +* added saveOrReplace() for server-side JS + +v1.3.alpha1 (2013-04-05) +------------------------ + +* cleanup of Module, Package, ArangoApp and modules "internal", "fs", "console" + +* use Error instead of string in throw to allow stack-trace + +* issue #454: error while creation of Collection + +* make `collection.count()` not recalculate the number of documents on the fly, but + use some internal document counters. + +* issue #457: invalid string value in web interface + +* make datafile id (datafile->_fid) identical to the numeric part of the filename. + E.g. the datafile `journal-123456.db` will now have a datafile marker with the same + fid (i.e. `123456`) instead of a different value. This change will only affect + datafiles that are created with 1.3 and not any older files. + The intention behind this change is to make datafile debugging easier. + +* consistently discard document attributes with reserved names (system attributes) + but without any known meaning, for example `_test`, `_foo`, ... + + Previously, these attributes were saved with the document regularly in some cases, + but were discarded in other cases. + Now these attributes are discarded consistently. "Real" system attributes such as + `_key`, `_from`, `_to` are not affected and will work as before. + + Additionally, attributes with an empty name (``) are discarded when documents are + saved. + + Though using reserved or empty attribute names in documents was not really and + consistently supported in previous versions of ArangoDB, this change might cause + an incompatibility for clients that rely on this feature. + +* added server startup flag `--database.force-sync-properties` to force syncing of + collection properties on collection creation, deletion and on property update. + The default value is true to mimic the behavior of previous versions of ArangoDB. + If set to false, collection properties are written to disk but no call to sync() + is made. + +* added detailed output of server version and components for REST APIs + `/_admin/version` and `/_api/version`. To retrieve this extended information, + call the REST APIs with URL parameter `details=true`. + +* issue #443: For git-based builds include commit hash in version + +* adjust startup log output to be more compact, less verbose + +* set the required minimum number of file descriptors to 256. + On server start, this number is enforced on systems that have rlimit. If the limit + cannot be enforced, starting the server will fail. + Note: 256 is considered to be the absolute minimum value. Depending on the use case + for ArangoDB, a much higher number of file descriptors should be used. + + To avoid checking & potentially changing the number of maximum open files, use the + startup option `--server.descriptors-minimum 0` + +* fixed shapedjson to json conversion for special numeric values (NaN, +inf, -inf). + Before, "NaN", "inf", or "-inf" were written into the JSONified output, but these + values are not allowed in JSON. Now, "null" is written to the JSONified output as + required. + +* added AQL functions VARIANCE_POPULATION(), VARIANCE_SAMPLE(), STDDEV_POPULATION(), + STDDEV_SAMPLE(), AVERAGE(), MEDIAN() to calculate statistical values for lists + +* added AQL SQRT() function + +* added AQL TRIM(), LEFT() and RIGHT() string functions + +* fixed issue #436: GET /_api/document on edge + +* make AQL REVERSE() and LENGTH() functions work on strings, too + +* disabled DOT generation in `make doxygen`. this speeds up docs generation + +* renamed startup option `--dispatcher.report-intervall` to `--dispatcher.report-interval` + +* renamed startup option `--scheduler.report-intervall` to `--scheduler.report-interval` + +* slightly changed output of REST API method /_admin/log. + Previously, the log messages returned also contained the date and log level, now + they will only contain the log message, and no date and log level information. + This information can be re-created by API users from the `timestamp` and `level` + attributes of the result. + +* removed configure option `--enable-zone-debug` + memory zone debugging is now automatically turned on when compiling with ArangoDB + `--enable-maintainer-mode` + +* removed configure option `--enable-arangob` + arangob is now always included in the build + + +v1.2.3 (XXXX-XX-XX) +------------------- + +* added optional parameter `edgexamples` for AQL function EDGES() and NEIGHBORS() + +* added AQL function NEIGHBORS() + +* added freebsd support + +* fixed firstExample() query with `_id` and `_key` attributes + +* issue triAGENS/ArangoDB-PHP#55: AQL optimizer may have mis-optimized duplicate + filter statements with limit + + +v1.2.2 (2013-03-26) +------------------- + +* fixed save of objects with common sub-objects + +* issue #459: fulltext internal memory allocation didn't scale well + This fix improves loading times for collections with fulltext indexes that have + lots of equal words indexed. + +* issue #212: auto-increment support + + The feature can be used by creating a collection with the extra `keyOptions` + attribute as follows: + + db._create("mycollection", { keyOptions: { type: "autoincrement", offset: 1, increment: 10, allowUserKeys: true } }); + + The `type` attribute will make sure the keys will be auto-generated if no + `_key` attribute is specified for a document. + + The `allowUserKeys` attribute determines whether users might still supply own + `_key` values with documents or if this is considered an error. + + The `increment` value determines the actual increment value, whereas the `offset` + value can be used to seed to value sequence with a specific starting value. + This will be useful later in a multi-master setup, when multiple servers can use + different auto-increment seed values and thus generate non-conflicting auto-increment values. + + The default values currently are: + + - `allowUserKeys`: `true` + - `offset`: `0` + - `increment`: `1` + + The only other available key generator type currently is `traditional`. + The `traditional` key generator will auto-generate keys in a fashion as ArangoDB + always did (some increasing integer value, with a more or less unpredictable + increment value). + + Note that for the `traditional` key generator there is only the option to disallow + user-supplied keys and give the server the sole responsibility for key generation. + This can be achieved by setting the `allowUserKeys` property to `false`. + + This change also introduces the following errors that API implementors may want to check + the return values for: + + - 1222: `document key unexpected`: will be raised when a document is created with + a `_key` attribute, but the underlying collection was set up with the `keyOptions` + attribute `allowUserKeys: false`. + + - 1225: `out of keys`: will be raised when the auto-increment key generator runs + out of keys. This may happen when the next key to be generated is 2^64 or higher. + In practice, this will only happen if the values for `increment` or `offset` are + not set appropriately, or if users are allowed to supply own keys, those keys + are near the 2^64 threshold, and later the auto-increment feature kicks in and + generates keys that cross that threshold. + + In practice it should not occur with proper configuration and proper usage of the + collections. + + This change may also affect the following REST APIs: + - POST `/_api/collection`: the server does now accept the optional `keyOptions` + attribute in the second parameter + - GET `/_api/collection/properties`: will return the `keyOptions` attribute as part + of the collection's properties. The previous optional attribute `createOptions` + is now gone. + +* fixed `ArangoStatement.explain()` method with bind variables + +* fixed misleading "cursor not found" error message in arangosh that occurred when + `count()` was called for client-side cursors + +* fixed handling of empty attribute names, which may have crashed the server under + certain circumstances before + +* fixed usage of invalid pointer in error message output when index description could + not be opened + + +v1.2.1 (2013-03-14) +------------------- + +* issue #444: please darken light color in arangosh + +* issue #442: pls update post install info on osx + +* fixed conversion of special double values (NaN, -inf, +inf) when converting from + shapedjson to JSON + +* fixed compaction of markers (location of _key was not updated correctly in memory, + leading to _keys pointing to undefined memory after datafile rotation) + +* fixed edge index key pointers to use document master pointer plus offset instead + of direct _key address + +* fixed case when server could not create any more journal or compactor files. + Previously a wrong status code may have been returned, and not being able to create + a new compactor file may have led to an infinite loop with error message + "could not create compactor". + +* fixed value truncation for numeric filename parts when renaming datafiles/journals + + +v1.2.0 (2013-03-01) +------------------- + +* by default statistics are now switch off; in order to enable comment out + the "disable-statistics = yes" line in "arangod.conf" + +* fixed issue #435: csv parser skips data at buffer border + +* added server startup option `--server.disable-statistics` to turn off statistics + gathering without recompilation of ArangoDB. + This partly addresses issue #432. + +* fixed dropping of indexes without collection name, e.g. + `db.xxx.dropIndex("123456");` + Dropping an index like this failed with an assertion error. + +* fixed issue #426: arangoimp should be able to import edges into edge collections + +* fixed issue #425: In case of conflict ArangoDB returns HTTP 400 Bad request + (with 1207 Error) instead of HTTP 409 Conflict + +* fixed too greedy token consumption in AQL for negative values: + e.g. in the statement `RETURN { a: 1 -2 }` the minus token was consumed as part + of the value `-2`, and not interpreted as the binary arithmetic operator + + +v1.2.beta3 (2013-02-22) +----------------------- + +* issue #427: ArangoDB Importer Manual has no navigation links (previous|home|next) + +* issue #319: Documentation missing for Emergency console and incomplete for datafile debugger. + +* issue #370: add documentation for reloadRouting and flushServerModules + +* issue #393: added REST API for user management at /_api/user + +* issue #393, #128: added simple cryptographic functions for user actions in module "crypto": + * require("org/arangodb/crypto").md5() + * require("org/arangodb/crypto").sha256() + * require("org/arangodb/crypto").rand() + +* added replaceByExample() Javascript and REST API method + +* added updateByExample() Javascript and REST API method + +* added optional "limit" parameter for removeByExample() Javascript and REST API method + +* fixed issue #413 + +* updated bundled V8 version from 3.9.4 to 3.16.14.1 + Note: the Windows version used a more recent version (3.14.0.1) and was not updated. + +* fixed issue #404: keep original request url in request object + + +v1.2.beta2 (2013-02-15) +----------------------- + +* fixed issue #405: 1.2 compile warnings + +* fixed issue #333: [debian] Group "arangodb" is not used when starting vie init.d script + +* added optional parameter 'excludeSystem' to GET /_api/collection + This parameter can be used to disable returning system collections in the list + of all collections. + +* added AQL functions KEEP() and UNSET() + +* fixed issue #348: "HTTP Interface for Administration and Monitoring" + documentation errors. + +* fix stringification of specific positive int64 values. Stringification of int64 + values with the upper 32 bits cleared and the 33rd bit set were broken. + +* issue #395: Collection properties() function should return 'isSystem' for + Javascript and REST API + +* make server stop after upgrade procedure when invoked with `--upgrade option`. + When started with the `--upgrade` option, the server will perfom + the upgrade, and then exit with a status code indicating the result of the + upgrade (0 = success, 1 = failure). To start the server regularly in either + daemon or console mode, the `--upgrade` option must not be specified. + This change was introduced to allow init.d scripts check the result of + the upgrade procedure, even in case an upgrade was successful. + this was introduced as part of issue #391. + +* added AQL function EDGES() + +* added more crash-protection when reading corrupted collections at startup + +* added documentation for AQL function CONTAINS() + +* added AQL function LIKE() + +* replaced redundant error return code 1520 (Unable to open collection) with error code + 1203 (Collection not found). These error codes have the same meanings, but one of + them was returned from AQL queries only, the other got thrown by other parts of + ArangoDB. Now, error 1203 (Collection not found) is used in AQL too in case a + non-existing collection is used. + +v1.2.beta1 (2013-02-01) +----------------------- + +* fixed issue #382: [Documentation error] Maschine... should be Machine... + +* unified history file locations for arangod, arangosh, and arangoirb. + - The readline history for arangod (emergency console) is now stored in file + $HOME/.arangod. It was stored in $HOME/.arango before. + - The readline history for arangosh is still stored in $HOME/.arangosh. + - The readline history for arangoirb is now stored in $HOME/.arangoirb. It was + stored in $HOME/.arango-mrb before. + +* fixed issue #381: _users user should have a unique constraint + +* allow negative list indexes in AQL to access elements from the end of a list, + e.g. ```RETURN values[-1]``` will return the last element of the `values` list. + +* collection ids, index ids, cursor ids, and document revision ids created and + returned by ArangoDB are now returned as strings with numeric content inside. + This is done to prevent some value overrun/truncation in any part of the + complete client/server workflow. + In ArangoDB 1.1 and before, these values were previously returned as + (potentially very big) integer values. This may cause problems (clipping, overrun, + precision loss) for clients that do not support big integers natively and store + such values in IEEE754 doubles internally. This type loses precision after about + 52 bits and is thus not safe to hold an id. + Javascript and 32 bit-PHP are examples for clients that may cause such problems. + Therefore, ids are now returned by ArangoDB as strings, with the string + content being the integer value as before. + + Example for documents ("_rev" attribute): + - Document returned by ArangoDB 1.1: { "_rev": 1234, ... } + - Document returned by ArangoDB 1.2: { "_rev": "1234", ... } + + Example for collections ("id" attribute / "_id" property): + - Collection returned by ArangoDB 1.1: { "id": 9327643, "name": "test", ... } + - Collection returned by ArangoDB 1.2: { "id": "9327643", "name": "test", ... } + + Example for cursors ("id" attribute): + - Collection returned by ArangoDB 1.1: { "id": 11734292, "hasMore": true, ... } + - Collection returned by ArangoDB 1.2: { "id": "11734292", "hasMore": true, ... } + +* global variables are not automatically available anymore when starting the + arangod Javascript emergency console (i.e. ```arangod --console```). + + Especially, the variables `db`, `edges`, and `internal` are not available + anymore. `db` and `internal` can be made available in 1.2 by + ```var db = require("org/arangodb").db;``` and + ```var internal = require("internal");```, respectively. + The reason for this change is to get rid of global variables in the server + because this will allow more specific inclusion of functionality. + + For convenience, the global variable `db` is still available by default in + arangosh. The global variable `edges`, which since ArangoDB 1.1 was kind of + a redundant wrapper of `db`, has been removed in 1.2 completely. + Please use `db` instead, and if creating an edge collection, use the explicit + ```db._createEdgeCollection()``` command. + +* issue #374: prevent endless redirects when calling admin interface with + unexpected URLs + +* issue #373: TRAVERSAL() `trackPaths` option does not work. Instead `paths` does work + +* issue #358: added support for CORS + +* honor optional waitForSync property for document removal, replace, update, and + save operations in arangosh. The waitForSync parameter for these operations + was previously honored by the REST API and on the server-side, but not when + the waitForSync parameter was specified for a document operation in arangosh. + +* calls to db.collection.figures() and /_api/collection//figures now + additionally return the number of shapes used in the collection in the + extra attribute "shapes.count" + +* added AQL TRAVERSAL_TREE() function to return a hierarchical result from a traversal + +* added AQL TRAVERSAL() function to return the results from a traversal + +* added AQL function ATTRIBUTES() to return the attribute names of a document + +* removed internal server-side AQL functions from global scope. + + Now the AQL internal functions can only be accessed via the exports of the + ahuacatl module, which can be included via ```require("org/arangodb/ahuacatl")```. + It shouldn't be necessary for clients to access this module at all, but + internal code may use this module. + + The previously global AQL-related server-side functions were moved to the + internal namespace. This produced the following function name changes on + the server: + + old name new name + ------------------------------------------------------ + AHUACATL_RUN => require("internal").AQL_QUERY + AHUACATL_EXPLAIN => require("internal").AQL_EXPLAIN + AHUACATL_PARSE => require("internal").AQL_PARSE + + Again, clients shouldn't have used these functions at all as there is the + ArangoStatement object to execute AQL queries. + +* fixed issue #366: Edges index returns strange description + +* added AQL function MATCHES() to check a document against a list of examples + +* added documentation and tests for db.collection.removeByExample + +* added --progress option for arangoimp. This will show the percentage of the input + file that has been processed by arangoimp while the import is still running. It can + be used as a rough indicator of progress for the entire import. + +* make the server log documents that cannot be imported via /_api/import into the + logfile using the warning log level. This may help finding illegal documents in big + import runs. + +* check on server startup whether the database directory and all collection directories + are writable. if not, the server startup will be aborted. this prevents serious + problems with collections being non-writable and this being detected at some pointer + after the server has been started + +* allow the following AQL constructs: FUNC(...)[...], FUNC(...).attribute + +* fixed issue #361: Bug in Admin Interface. Header disappears when clicking new collection + +* Added in-memory only collections + + Added collection creation parameter "isVolatile": + if set to true, the collection is created as an in-memory only collection, + meaning that all document data of that collection will reside in memory only, + and will not be stored permanently to disk. + This means that all collection data will be lost when the collection is unloaded + or the server is shut down. + As this collection type does not have datafile disk overhead for the regular + document operations, it may be faster than normal disk-backed collections. The + actual performance gains strongly depend on the underlying OS, filesystem, and + settings though. + This collection type should be used for caches only and not for any sensible data + that cannot be re-created otherwise. + Some platforms, namely Windows, currently do not support this collection type. + When creating an in-memory collection on such platform, an error message will be + returned by ArangoDB telling the user the platform does not support it. + + Note: in-memory collections are an experimental feature. The feature might + change drastically or even be removed altogether in a future version of ArangoDB. + +* fixed issue #353: Please include "pretty print" in Emergency Console + +* fixed issue #352: "pretty print" console.log + This was achieved by adding the dump() function for the "internal" object + +* reduced insertion time for edges index + Inserting into the edges index now avoids costly comparisons in case of a hash + collision, reducing the prefilling/loading timer for bigger edge collections + +* added fulltext queries to AQL via FULLTEXT() function. This allows search + fulltext indexes from an AQL query to find matching documents + +* added fulltext index type. This index type allows indexing words and prefixes of + words from a specific document attribute. The index can be queries using a + SimpleQueryFull object, the HTTP REST API at /_api/simple/fulltext, or via AQL + +* added collection.revision() method to determine whether a collection has changed. + The revision method returns a revision string that can be used by client programs + for equality/inequality comparisons. The value returned by the revision method + should be treated by clients as an opaque string and clients should not try to + figure out the sense of the revision id. This is still useful enough to check + whether data in a collection has changed. + +* issue #346: adaptively determine NUMBER_HEADERS_PER_BLOCK + +* issue #338: arangosh cursor positioning problems + +* issue #326: use limit optimization with filters + +* issue #325: use index to avoid sorting + +* issue #324: add limit optimization to AQL + +* removed arango-password script and added Javascript functionality to add/delete + users instead. The functionality is contained in module `users` and can be invoked + as follows from arangosh and arangod: + * require("users").save("name", "passwd"); + * require("users").replace("name", "newPasswd"); + * require("users").remove("name"); + * require("users").reload(); + These functions are intentionally not offered via the web interface. + This also addresses issue #313 + +* changed print output in arangosh and the web interface for JSON objects. + Previously, printing a JSON object in arangosh resulted in the attribute values + being printed as proper JSON, but attribute names were printed unquoted and + unescaped. This was fine for the purpose of arangosh, but lead to invalid + JSON being produced. Now, arangosh will produce valid JSON that can be used + to send it back to ArangoDB or use it with arangoimp etc. + +* fixed issue #300: allow importing documents via the REST /_api/import API + from a JSON list, too. + So far, the API only supported importing from a format that had one JSON object + on each line. This is sometimes inconvenient, e.g. when the result of an AQL + query or any other list is to be imported. This list is a JSON list and does not + necessary have a document per line if pretty-printed. + arangoimp now supports the JSON list format, too. However, the format requires + arangoimp and the server to read the entire dataset at once. If the dataset is + too big (bigger than --max-upload-size) then the import will be rejected. Even if + increased, the entire list must fit in memory on both the client and the server, + and this may be more resource-intensive than importing individual lines in chunks. + +* removed unused parameter --reuse-ids for arangoimp. This parameter did not have + any effect in 1.2, was never publicly announced and did evil (TM) things. + +* fixed issue #297 (partly): added whitespace between command line and + command result in arangosh, added shell colors for better usability + +* fixed issue #296: system collections not usable from AQL + +* fixed issue #295: deadlock on shutdown + +* fixed issue #293: AQL queries should exploit edges index + +* fixed issue #292: use index when filtering on _key in AQL + +* allow user-definable document keys + users can now define their own document keys by using the _key attribute + when creating new documents or edges. Once specified, the value of _key is + immutable. + The restrictions for user-defined key values are: + * the key must be at most 254 bytes long + * it must consist of the letters a-z (lower or upper case), the digits 0-9, + the underscore (_) or dash (-) characters only + * any other characters, especially multi-byte sequences, whitespace or + punctuation characters cannot be used inside key values + + Specifying a document key is optional when creating new documents. If no + document key is specified, ArangoDB will create a document key itself. + There are no guarantees about the format and pattern of auto-generated document + keys other than the above restrictions. + Clients should therefore treat auto-generated document keys as opaque values. + Keys can be used to look up and reference documents, e.g.: + * saving a document: `db.users.save({ "_key": "fred", ... })` + * looking up a document: `db.users.document("fred")` + * referencing other documents: `edges.relations.save("users/fred", "users/john", ...)` + + This change is downwards-compatible to ArangoDB 1.1 because in ArangoDB 1.1 + users were not able to define their own keys. If the user does not supply a _key + attribute when creating a document, ArangoDB 1.2 will still generate a key of + its own as ArangoDB 1.1 did. However, all documents returned by ArangoDB 1.2 will + include a _key attribute and clients should be able to handle that (e.g. by + ignoring it if not needed). Documents returned will still include the _id attribute + as in ArangoDB 1.1. + +* require collection names everywhere where a collection id was allowed in + ArangoDB 1.1 & 1.0 + This change requires clients to use a collection name in place of a collection id + at all places the client deals with collections. + Examples: + * creating edges: the _from and _to attributes must now contain collection names instead + of collection ids: `edges.relations.save("test/my-key1", "test/my-key2", ...)` + * retrieving edges: the returned _from and _to attributes now will contain collection + names instead of ids, too: _from: `test/fred` instead of `1234/3455` + * looking up documents: db.users.document("fred") or db._document("users/fred") + + Collection names must be used in REST API calls instead of collection ids, too. + This change is thus not completely downwards-compatible to ArangoDB 1.1. ArangoDB 1.1 + required users to use collection ids in many places instead of collection names. + This was unintuitive and caused overhead in cases when just the collection name was + known on client-side but not its id. This overhead can now be avoided so clients can + work with the collection names directly. There is no need to work with collection ids + on the client side anymore. + This change will likely require adjustments to API calls issued by clients, and also + requires a change in how clients handle the _id value of returned documents. Previously, + the _id value of returned documents contained the collection id, a slash separator and + the document number. Since 1.2, _id will contain the collection name, a slash separator + and the document key. The same applies to the _from and _to attribute values of edges + that are returned by ArangoDB. + + Also removed (now unnecessary) location header in responses of the collections REST API. + The location header was previously returned because it was necessary for clients. + When clients created a collection, they specified the collection name. The collection + id was generated on the server, but the client needed to use the server-generated + collection id for further API calls, e.g. when creating edges etc. Therefore, the + full collection URL, also containing the collection id, was returned by the server in + responses to the collection API, in the HTTP location header. + Returning the location header has become unnecessary in ArangoDB 1.2 because users + can access collections by name and do not need to care about collection ids. + + +v1.1.3 (2013-XX-XX) +------------------- + +* fix case when an error message was looked up for an error code but no error + message was found. In this case a NULL ptr was returned and not checked everywhere. + The place this error popped up was when inserting into a non-unique hash index + failed with a specific, invalid error code. + +* fixed issue #381: db._collection("_users").getIndexes(); + +* fixed issue #379: arango-password fatal issue javscript.startup-directory + +* fixed issue #372: Command-Line Options for the Authentication and Authorization + + +v1.1.2 (2013-01-20) +------------------- + +* upgraded to mruby 2013-01-20 583983385b81c21f82704b116eab52d606a609f4 + +* fixed issue #357: Some spelling and grammar errors + +* fixed issue #355: fix quotes in pdf manual + +* fixed issue #351: Strange arangosh error message for long running query + +* fixed randomly hanging connections in arangosh on MacOS + +* added "any" query method: this returns a random document from a collection. It + is also available via REST HTTP at /_api/simple/any. + +* added deployment tool + +* added getPeerVertex + +* small fix for logging of long messages: the last character of log messages longer + than 256 bytes was not logged. + +* fixed truncation of human-readable log messages for web interface: the trailing \0 + byte was not appended for messages longer than 256 bytes + +* fixed issue #341: ArangoDB crashes when stressed with Batch jobs + Contrary to the issue title, this did not have anything to do with batch jobs but + with too high memory usage. The memory usage of ArangoDB is now reduced for cases + when there are lots of small collections with few documents each + +* started with issue #317: Feature Request (from Google Groups): DATE handling + +* backported issue #300: Extend arangoImp to Allow importing result set-like + (list of documents) formatted files + +* fixed issue #337: "WaitForSync" on new collection does not work on Win/X64 + +* fixed issue #336: Collections REST API docs + +* fixed issue #335: mmap errors due to wrong memory address calculation + +* fixed issue #332: arangoimp --use-ids parameter seems to have no impact + +* added option '--server.disable-authentication' for arangosh as well. No more passwd + prompts if not needed + +* fixed issue #330: session logging for arangosh + +* fixed issue #329: Allow passing script file(s) as parameters for arangosh to run + +* fixed issue #328: 1.1 compile warnings + +* fixed issue #327: Javascript parse errors in front end + + +v1.1.1 (2012-12-18) +------------------- + +* fixed issue #339: DELETE /_api/cursor/cursor-identifier return incollect errorNum + + The fix for this has led to a signature change of the function actions.resultNotFound(). + The meaning of parameter #3 for This function has changed from the error message string + to the error code. The error message string is now parameter #4. + Any client code that uses this function in custom actions must be adjusted. + +* fixed issue #321: Problem upgrading arangodb 1.0.4 to 1.1.0 with Homebrew (OSX 10.8.2) + +* fixed issue #230: add navigation and search for online documentation + +* fixed issue #315: Strange result in PATH + +* fixed issue #323: Wrong function returned in error message of AQL CHAR_LENGTH() + +* fixed some log errors on startup / shutdown due to pid file handling and changing + of directories + + +v1.1.0 (2012-12-05) +------------------- + +* WARNING: + arangod now performs a database version check at startup. It will look for a file + named "VERSION" in its database directory. If the file is not present, arangod will + perform an automatic upgrade of the database directory. This should be the normal + case when upgrading from ArangoDB 1.0 to ArangoDB 1.1. + + If the VERSION file is present but is from an older version of ArangoDB, arangod + will refuse to start and ask the user to run a manual upgrade first. A manual upgrade + can be performed by starting arangod with the option `--upgrade`. + + This upgrade procedure shall ensure that users have full control over when they + perform any updates/upgrades of their data, and can plan backups accordingly. The + procedure also guarantees that the server is not run without any required system + collections or with in incompatible data state. + +* added AQL function DOCUMENT() to retrieve a document by its _id value + +* fixed issue #311: fixed segfault on unload + +* fixed issue #309: renamed stub "import" button from web interface + +* fixed issue #307: added WaitForSync column in collections list in in web interface + +* fixed issue #306: naming in web interface + +* fixed issue #304: do not clear AQL query text input when switching tabs in + web interface + +* fixed issue #303: added documentation about usage of var keyword in web interface + +* fixed issue #301: PATCH does not work in web interface + +# fixed issue #269: fix make distclean & clean + +* fixed issue #296: system collections not usable from AQL + +* fixed issue #295: deadlock on shutdown + +* added collection type label to web interface + +* fixed issue #290: the web interface now disallows creating non-edges in edge collections + when creating collections via the web interface, the collection type must also be + specified (default is document collection) + +* fixed issue #289: tab-completion does not insert any spaces + +* fixed issue #282: fix escaping in web interface + +* made AQL function NOT_NULL take any number of arguments. Will now return its + first argument that is not null, or null if all arguments are null. This is downwards + compatible. + +* changed misleading AQL function name NOT_LIST() to FIRST_LIST() and slightly changed + the behavior. The function will now return its first argument that is a list, or null + if none of the arguments are lists. + This is mostly downwards-compatible. The only change to the previous implementation in + 1.1-beta will happen if two arguments were passed and the 1st and 2nd arguments were + both no lists. In previous 1.1, the 2nd argument was returned as is, but now null + will be returned. + +* add AQL function FIRST_DOCUMENT(), with same behavior as FIRST_LIST(), but working + with documents instead of lists. + +* added UPGRADING help text + +* fixed issue #284: fixed Javascript errors when adding edges/vertices without own + attributes + +* fixed issue #283: AQL LENGTH() now works on documents, too + +* fixed issue #281: documentation for skip lists shows wrong example + +* fixed AQL optimizer bug, related to OR-combined conditions that filtered on the + same attribute but with different conditions + +* fixed issue #277: allow usage of collection names when creating edges + the fix of this issue also implies validation of collection names / ids passed to + the REST edge create method. edges with invalid collection ids or names in the + "from" or "to" values will be rejected and not saved + + +v1.1.beta2 (2012-11-13) +----------------------- + +* fixed arangoirb compilation + +* fixed doxygen + + +v1.1.beta1 (2012-10-24) +----------------------- + +* fixed AQL optimizer bug + +* WARNING: + - the user has changed from "arango" to "arangodb", the start script has changed from + "arangod" to "arangodb", the database directory has changed from "/var/arangodb" to + "/var/lib/arangodb" to be compliant with various Linux policies + + - In 1.1, we have introduced types for collections: regular documents go into document + collections, and edges go into edge collections. The prefixing (db.xxx vs. edges.xxx) + works slightly different in 1.1: edges.xxx can still be used to access collections, + however, it will not determine the type of existing collections anymore. To create an + edge collection 1.1, you can use db._createEdgeCollection() or edges._create(). + And there's of course also db._createDocumentCollection(). + db._create() is also still there and will create a document collection by default, + whereas edges._create() will create an edge collection. + + - the admin web interface that was previously available via the simple URL suffix / + is now available via a dedicated URL suffix only: /_admin/html + The reason for this is that routing and URLs are now subject to changes by the end user, + and only URLs parts prefixed with underscores (e.g. /_admin or /_api) are reserved + for ArangoDB's internal usage. + +* the server now handles requests with invalid Content-Length header values as follows: + - if Content-Length is negative, the server will respond instantly with HTTP 411 + (length required) + + - if Content-Length is positive but shorter than the supplied body, the server will + respond with HTTP 400 (bad request) + + - if Content-Length is positive but longer than the supplied body, the server will + wait for the client to send the missing bytes. The server allows 90 seconds for this + and will close the connection if the client does not send the remaining data + + - if Content-Length is bigger than the maximum allowed size (512 MB), the server will + fail with HTTP 413 (request entity too large). + + - if the length of the HTTP headers is greater than the maximum allowed size (1 MB), + the server will fail with HTTP 431 (request header fields too large) + +* issue #265: allow optional base64 encoding/decoding of action response data + +* issue #252: create _modules collection using arango-upgrade (note: arango-upgrade was + finally replaced by the `--upgrade` option for arangod) + +* issue #251: allow passing arbitrary options to V8 engine using new command line option: + --javascript.v8-options. Using this option, the Harmony features or other settings in + v8 can be enabled if the end user requires them + +* issue #248: allow AQL optimizer to pull out completely uncorrelated subqueries to the + top level, resulting in less repeated evaluation of the subquery + +* upgraded to Doxygen 1.8.0 + +* issue #247: added AQL function MERGE_RECURSIVE + +* issue #246: added clear() function in arangosh + +* issue #245: Documentation: Central place for naming rules/limits inside ArangoDB + +* reduced size of hash index elements by 50 %, allowing more index elements to fit in + memory + +* issue #235: GUI Shell throws Error:ReferenceError: db is not defined + +* issue #229: methods marked as "under construction" + +* issue #228: remove unfinished APIs (/_admin/config/*) + +* having the OpenSSL library installed is now a prerequisite to compiling ArangoDB + Also removed the --enable-ssl configure option because ssl is always required. + +* added AQL functions TO_LIST, NOT_LIST + +* issue #224: add optional Content-Id for batch requests + +* issue #221: more documentation on AQL explain functionality. Also added + ArangoStatement.explain() client method + +* added db._createStatement() method on server as well (was previously available + on the client only) + +* issue #219: continue in case of "document not found" error in PATHS() function + +* issue #213: make waitForSync overridable on specific actions + +* changed AQL optimizer to use indexes in more cases. Previously, indexes might + not have been used when in a reference expression the inner collection was + specified last. Example: FOR u1 IN users FOR u2 IN users FILTER u1._id == u2._id + Previously, this only checked whether an index could be used for u2._id (not + possible). It was not checked whether an index on u1._id could be used (possible). + Now, for expressions that have references/attribute names on both sides of the + above as above, indexes are checked for both sides. + +* issue #204: extend the CSV import by TSV and by user configurable + separator character(s) + +* issue #180: added support for batch operations + +* added startup option --server.backlog-size + this allows setting the value of the backlog for the listen() system call. + the default value is 10, the maximum value is platform-dependent + +* introduced new configure option "--enable-maintainer-mode" for + ArangoDB maintainers. this option replaces the previous compile switches + --with-boost-test, --enable-bison, --enable-flex and --enable-errors-dependency + the individual configure options have been removed. --enable-maintainer-mode + turns them all on. + +* removed potentially unused configure option --enable-memfail + +* fixed issue #197: HTML web interface calls /_admin/user-manager/session + +* fixed issue #195: VERSION file in database directory + +* fixed issue #193: REST API HEAD request returns a message body on 404 + +* fixed issue #188: intermittent issues with 1.0.0 + (server-side cursors not cleaned up in all cases, pthreads deadlock issue) + +* issue #189: key store should use ISO datetime format bug + +* issue #187: run arango-upgrade on server start (note: arango-upgrade was finally + replaced by the `--upgrade` option for arangod)n + +* fixed issue #183: strange unittest error + +* fixed issue #182: manual pages + +* fixed issue #181: use getaddrinfo + +* moved default database directory to "/var/lib/arangodb" in accordance with + http://www.pathname.com/fhs/pub/fhs-2.3.html + +* fixed issue #179: strange text in import manual + +* fixed issue #178: test for aragoimp is missing + +* fixed issue #177: a misleading error message was returned if unknown variables + were used in certain positions in an AQL query. + +* fixed issue #176: explain how to use AQL from the arangosh + +* issue #175: re-added hidden (and deprecated) option --server.http-port. This + option is only there to be downwards-compatible to Arango 1.0. + +* fixed issue #174: missing Documentation for `within` + +* fixed issue #170: add db..all().toArray() to arangosh help screen + +* fixed issue #169: missing argument in Simple Queries + +* added program arango-upgrade. This program must be run after installing ArangoDB + and after upgrading from a previous version of ArangoDB. The arango-upgrade script + will ensure all system collections are created and present in the correct state. + It will also perform any necessary data updates. + Note: arango-upgrade was finally replaced by the `--upgrade` option for arangod. + +* issue #153: edge collection should be a flag for a collection + collections now have a type so that the distinction between document and edge + collections can now be done at runtime using a collection's type value. + A collection's type can be queried in Javascript using the .type() method. + + When new collections are created using db._create(), they will be document + collections by default. When edge._create() is called, an edge collection will be created. + To explicitly create a collection of a specific/different type, use the methods + _createDocumentCollection() or _createEdgeCollection(), which are available for + both the db and the edges object. + The Javascript objects ArangoEdges and ArangoEdgesCollection have been removed + completely. + All internal and test code has been adjusted for this, and client code + that uses edges.* should also still work because edges is still there and creates + edge collections when _create() is called. + + INCOMPATIBLE CHANGE: Client code might still need to be changed in the following aspect: + Previously, collections did not have a type so documents and edges could be inserted + in the same collection. This is now disallowed. Edges can only be inserted into + edge collections now. As there were no collection types in 1.0, ArangoDB will perform + an automatic upgrade when migrating from 1.0 to 1.1. + The automatic upgrade will check every collection and determine its type as follows: + - if among the first 50 documents in the collection there are documents with + attributes "_from" and "_to", the collection is typed as an edge collection + - if among the first 50 documents in the collection there are no documents with + attributes "_from" and "_to", the collection is made as a document collection + +* issue #150: call V8 garbage collection on server periodically + +* issue #110: added support for partial updates + + The REST API for documents now offers an HTTP PATCH method to partially update + documents. Overwriting/replacing documents is still available via the HTTP PUT method + as before. The Javascript API in the shell also offers a new update() method in extension to + the previously existing replace() method. + + +v1.0.4 (2012-11-12) +------------------- + +* issue #275: strange error message in arangosh 1.0.3 at startup + + +v1.0.3 (2012-11-08) +------------------- + +* fixed AQL optimizer bug + +* issue #273: fixed segfault in arangosh on HTTP 40x + +* issue #265: allow optional base64 encoding/decoding of action response data + +* issue #252: _modules collection not created automatically + + +v1.0.2 (2012-10-22) +------------------- + +* repository CentOS-X.Y moved to CentOS-X, same for Debian + +* bugfix for rollback from edges + +* bugfix for hash indexes + +* bugfix for StringBuffer::erase_front + +* added autoload for modules + +* added AQL function TO_LIST + + +v1.0.1 (2012-09-30) +------------------- + +* draft for issue #165: front-end application howto + +* updated mruby to cf8fdea4a6598aa470e698e8cbc9b9b492319d + +* fix for issue #190: install doesn't create log directory + +* fix for issue #194: potential race condition between creating and dropping collections + +* fix for issue #193: REST API HEAD request returns a message body on 404 + +* fix for issue #188: intermittent issues with 1.0.0 + +* fix for issue #163: server cannot create collection because of abandoned files + +* fix for issue #150: call V8 garbage collection on server periodically + + +v1.0.0 (2012-08-17) +------------------- + +* fix for issue #157: check for readline and ncurses headers, not only libraries + + +v1.0.beta4 (2012-08-15) +----------------------- + +* fix for issue #152: fix memleak for barriers + + +v1.0.beta3 (2012-08-10) +----------------------- + +* fix for issue #151: Memleak, collection data not removed + +* fix for issue #149: Inconsistent port for admin interface + +* fix for issue #163: server cannot create collection because of abandoned files + +* fix for issue #157: check for readline and ncurses headers, not only libraries + +* fix for issue #108: db..truncate() inefficient + +* fix for issue #109: added startup note about cached collection names and how to + refresh them + +* fix for issue #156: fixed memleaks in /_api/import + +* fix for issue #59: added tests for /_api/import + +* modified return value for calls to /_api/import: now, the attribute "empty" is + returned as well, stating the number of empty lines in the input. Also changed the + return value of the error code attribute ("errorNum") from 1100 ("corrupted datafile") + to 400 ("bad request") in case invalid/unexpected JSON data was sent to the server. + This error code is more appropriate as no datafile is broken but just input data is + incorrect. + +* fix for issue #152: Memleak for barriers + +* fix for issue #151: Memleak, collection data not removed + +* value of --database.maximal-journal-size parameter is now validated on startup. If + value is smaller than the minimum value (currently 1048576), an error is thrown and + the server will not start. Before this change, the global value of maximal journal + size was not validated at server start, but only on collection level + +* increased sleep value in statistics creation loop from 10 to 500 microseconds. This + reduces accuracy of statistics values somewhere after the decimal points but saves + CPU time. + +* avoid additional sync() calls when writing partial shape data (attribute name data) + to disk. sync() will still be called when the shape marker (will be written after + the attributes) is written to disk + +* issue #147: added flag --database.force-sync-shapes to force synching of shape data + to disk. The default value is true so it is the same behavior as in version 1.0. + if set to false, shape data is synched to disk if waitForSync for the collection is + set to true, otherwise, shape data is not synched. + +* fix for issue #145: strange issue on Travis: added epsilon for numeric comparison in + geo index + +* fix for issue #136: adjusted message during indexing + +* issue #131: added timeout for HTTP keep-alive connections. The default value is 300 + seconds. There is a startup parameter server.keep-alive-timeout to configure the value. + Setting it to 0 will disable keep-alive entirely on the server. + +* fix for issue #137: AQL optimizer should use indexes for ref accesses with + 2 named attributes + + +v1.0.beta2 (2012-08-03) +----------------------- + +* fix for issue #134: improvements for centos RPM + +* fixed problem with disable-admin-interface in config file + + +v1.0.beta1 (2012-07-29) +----------------------- + +* fixed issue #118: We need a collection "debugger" + +* fixed issue #126: Access-Shaper must be cached + +* INCOMPATIBLE CHANGE: renamed parameters "connect-timeout" and "request-timeout" + for arangosh and arangoimp to "--server.connect-timeout" and "--server.request-timeout" + +* INCOMPATIBLE CHANGE: authorization is now required on the server side + Clients sending requests without HTTP authorization will be rejected with HTTP 401 + To allow backwards compatibility, the server can be started with the option + "--server.disable-authentication" + +* added options "--server.username" and "--server.password" for arangosh and arangoimp + These parameters must be used to specify the user and password to be used when + connecting to the server. If no password is given on the command line, arangosh/ + arangoimp will interactively prompt for a password. + If no user name is specified on the command line, the default user "root" will be + used. + +* added startup option "--server.ssl-cipher-list" to determine which ciphers to + use in SSL context. also added SSL_OP_CIPHER_SERVER_PREFERENCE to SSL default + options so ciphers are tried in server and not in client order + +* changed default SSL protocol to TLSv1 instead of SSLv2 + +* changed log-level of SSL-related messages + +* added SSL connections if server is compiled with OpenSSL support. Use --help-ssl + +* INCOMPATIBLE CHANGE: removed startup option "--server.admin-port". + The new endpoints feature (see --server.endpoint) allows opening multiple endpoints + anyway, and the distinction between admin and "other" endpoints can be emulated + later using privileges. + +* INCOMPATIBLE CHANGE: removed startup options "--port", "--server.port", and + "--server.http-port" for arangod. + These options have been replaced by the new "--server.endpoint" parameter + +* INCOMPATIBLE CHANGE: removed startup option "--server" for arangosh and arangoimp. + These options have been replaced by the new "--server.endpoint" parameter + +* Added "--server.endpoint" option to arangod, arangosh, and arangoimp. + For arangod, this option allows specifying the bind endpoints for the server + The server can be bound to one or multiple endpoints at once. For arangosh + and arangoimp, the option specifies the server endpoint to connect to. + The following endpoint syntax is currently supported: + - tcp://host:port or http@tcp://host:port (HTTP over IPv4) + - tcp://[host]:port or http@tcp://[host]:port (HTTP over IPv6) + - ssl://host:port or http@tcp://host:port (HTTP over SSL-encrypted IPv4) + - ssl://[host]:port or http@tcp://[host]:port (HTTP over SSL-encrypted IPv6) + - unix:///path/to/socket or http@unix:///path/to/socket (HTTP over UNIX socket) + + If no port is specified, the default port of 8529 will be used. + +* INCOMPATIBLE CHANGE: removed startup options "--server.require-keep-alive" and + "--server.secure-require-keep-alive". + The server will now behave as follows which should be more conforming to the + HTTP standard: + * if a client sends a "Connection: close" header, the server will close the + connection + * if a client sends a "Connection: keep-alive" header, the server will not + close the connection + * if a client does not send any "Connection" header, the server will assume + "keep-alive" if the request was an HTTP/1.1 request, and "close" if the + request was an HTTP/1.0 request + +* (minimal) internal optimizations for HTTP request parsing and response header + handling + +* fixed Unicode unescaping bugs for \f and surrogate pairs in BasicsC/strings.c + +* changed implementation of TRI_BlockCrc32 algorithm to use 8 bytes at a time + +* fixed issue #122: arangod doesn't start if cannot be created + +* fixed issue #121: wrong collection size reported + +* fixed issue #98: Unable to change journalSize + +* fixed issue #88: fds not closed + +* fixed escaping of document data in HTML admin front end + +* added HTTP basic authentication, this is always turned on + +* added server startup option --server.disable-admin-interface to turn off the + HTML admin interface + +* honor server startup option --database.maximal-journal-size when creating new + collections without specific journalsize setting. Previously, these + collections were always created with journal file sizes of 32 MB and the + --database.maximal-journal-size setting was ignored + +* added server startup option --database.wait-for-sync to control the default + behavior + +* renamed "--unit-tests" to "--javascript.unit-tests" + + +v1.0.alpha3 (2012-06-30) +------------------------ + +* fixed issue #116: createCollection=create option doesn't work + +* fixed issue #115: Compilation issue under OSX 10.7 Lion & 10.8 Mountain Lion + (homebrew) + +* fixed issue #114: image not found + +* fixed issue #111: crash during "make unittests" + +* fixed issue #104: client.js -> ARANGO_QUIET is not defined + + +v1.0.alpha2 (2012-06-24) +------------------------ + +* fixed issue #112: do not accept document with duplicate attribute names + +* fixed issue #103: Should we cleanup the directory structure + +* fixed issue #100: "count" attribute exists in cursor response with "count: + false" + +* fixed issue #84 explain command + +* added new MRuby version (2012-06-02) + +* added --log.filter + +* cleanup of command line options: +** --startup.directory => --javascript.startup-directory +** --quite => --quiet +** --gc.interval => --javascript.gc-interval +** --startup.modules-path => --javascript.modules-path +** --action.system-directory => --javascript.action-directory +** --javascript.action-threads => removed (is now the same pool as --server.threads) + +* various bug-fixes + +* support for import + +* added option SKIP_RANGES=1 for make unittests + +* fixed several range-related assertion failures in the AQL query optimizer + +* fixed AQL query optimizations for some edge cases (e.g. nested subqueries with + invalid constant filter expressions) + + +v1.0.alpha1 (2012-05-28) +------------------------ + +Alpha Release of ArangoDB 1.0