mirror of https://gitee.com/bigwinds/arangodb
6249 lines
250 KiB
Plaintext
6249 lines
250 KiB
Plaintext
v2.7.0 (XXXX-XX-XX)
|
|
-------------------
|
|
|
|
* new logfiles and datafiles are now created non-sparse
|
|
|
|
This prevents SIGBUS signals being raised when memory of a sparse datafile is accessed
|
|
and the disk is full and the accessed file part is not actually disk-backed. In
|
|
this case the mapped memory region is not necessarily backed by physical memory, and
|
|
accessing the memory may raise SIGBUS and crash arangod.
|
|
|
|
* the `internal.download()` function and the module `org/arangodb/request` used some
|
|
internal library function that handled the sending of HTTP requests from inside of
|
|
ArangoDB. This library unconditionally set an HTTP header `Accept-Encoding: gzip`
|
|
in all outgoing HTTP requests.
|
|
|
|
This has been fixed in 2.7, so `Accept-Encoding: gzip` is not set automatically anymore.
|
|
Additionally, the header `User-Agent: ArangoDB` is not set automatically either. If
|
|
client applications desire to send these headers, they are free to add it when
|
|
constructing the requests using the `download` function or the request module.
|
|
|
|
* fixed issue #1436: org/arangodb/request advertises deflate without supporting it
|
|
|
|
* added template string generator function `aqlQuery` for generating AQL queries
|
|
|
|
This can be used to generate safe AQL queries with JavaScript parameter
|
|
variables or expressions easily:
|
|
|
|
var name = 'test';
|
|
var attributeName = '_key';
|
|
var query = aqlQuery`FOR u IN users FILTER u.name == ${name} RETURN u.${attributeName}`;
|
|
db._query(query);
|
|
|
|
* report memory usage for document header data (revision id, pointer to data etc.)
|
|
in `db.collection.figures()`. The memory used for document headers will now
|
|
show up in the already existing attribute `indexes.size`. Due to that, the index
|
|
sizes reported by `figures()` in 2.7 will be higher than those reported by 2.6,
|
|
but the 2.7 values are more accurate.
|
|
|
|
* IMPORTANT CHANGE: the filenames in dumps created by arangodump now contain
|
|
not only the name of the dumped collection, but also an additional 32-digit hash
|
|
value. This is done to prevent overwriting dump files in case-insensitive file
|
|
systems when there exist multiple collections with the same name (but with
|
|
different cases).
|
|
|
|
For example, if a database has two collections: `test` and `Test`, previous
|
|
versions of ArangoDB created the files
|
|
|
|
* `test.structure.json` and `test.data.json` for collection `test`
|
|
* `Test.structure.json` and `Test.data.json` for collection `Test`
|
|
|
|
This did not work for case-insensitive filesystems, because the files for the
|
|
second collection would have overwritten the files of the first. arangodump in
|
|
2.7 will create the following filenames instead:
|
|
|
|
* `test_098f6bcd4621d373cade4e832627b4f6.structure.json` and `test_098f6bcd4621d373cade4e832627b4f6.data.json`
|
|
* `Test_0cbc6611f5540bd0809a388dc95a615b.structure.json` and `Test_0cbc6611f5540bd0809a388dc95a615b.data.json`
|
|
|
|
These filenames will be unambiguous even in case-insensitive filesystems.
|
|
|
|
* IMPORTANT CHANGE: make arangod actually close lingering client connections
|
|
when idle for at least the duration specified via `--server.keep-alive-timeout`.
|
|
In previous versions of ArangoDB, connections were not closed by the server
|
|
when the timeout was reached and the client was still connected. Now the
|
|
connection is properly closed by the server in case of timeout. Client
|
|
applications relying on the old behavior may now need to reconnect to the
|
|
server when their idle connections time out and get closed (note: connections
|
|
being idle for a long time may be closed by the OS or firewalls anyway -
|
|
client applications should be aware of that and try to reconnect).
|
|
|
|
* IMPORTANT CHANGE: when starting arangod, the server will drop the process
|
|
privileges to the specified values in options `--server.uid` and `--server.gid`
|
|
instantly after parsing the startup options.
|
|
|
|
That means when either `--server.uid` or `--server.gid` are set, the privilege
|
|
change may happen earlier at startup. This may prevent binding the server to
|
|
and endpoint with a port number lower than 1024, if the user has no privileges
|
|
for that. Previous versions of ArangoDB changed the privileges later, so some
|
|
startup actions were still carried out under the invoking user (i.e. likely
|
|
*root* when started via init.d or system scripts) and especially binding to
|
|
low ports was still possible there.
|
|
|
|
The default privileges for user *arangodb* will not be sufficient for binding
|
|
to port numbers lower than 1024. To have an ArangoDB 2.7 bind to a port number
|
|
lower than 1024, it needs to be started with either a different privileged user,
|
|
or the privileges of the *arangodb* user have to raised manually beforehand.
|
|
|
|
* added AQL optimizer rule `patch-update-statements`
|
|
|
|
* Linux startup scripts and systemd configuration for arangod now try to
|
|
adjust the NOFILE (number of open files) limits for the process. The limit
|
|
value is set to 131072 (128k) when ArangoDB is started via start/stop
|
|
commands
|
|
|
|
* When ArangoDB is started/stopped manually via the start/stop commands, the
|
|
main process will wait for up to 10 seconds after it forks the supervisor
|
|
and arangod child processes. If the startup fails within that period, the
|
|
start/stop script will fail with an exit code other than zero. If the
|
|
startup of the supervisor or arangod is still ongoing after 10 seconds,
|
|
the main program will still return with exit code 0. The limit of 10 seconds
|
|
is arbitrary because the time required for a startup is not known in advance.
|
|
|
|
* added startup option `--database.throw-collection-not-loaded-error`
|
|
|
|
Accessing a not-yet loaded collection will automatically load a collection
|
|
on first access. This flag controls what happens in case an operation
|
|
would need to wait for another thread to finalize loading a collection. If
|
|
set to *true*, then the first operation that accesses an unloaded collection
|
|
will load it. Further threads that try to access the same collection while
|
|
it is still loading immediately fail with an error (1238, *collection not loaded*).
|
|
This is to prevent all server threads from being blocked while waiting on the
|
|
same collection to finish loading. When the first thread has completed loading
|
|
the collection, the collection becomes regularly available, and all operations
|
|
from that point on can be carried out normally, and error 1238 will not be
|
|
thrown anymore for that collection.
|
|
|
|
If set to *false*, the first thread that accesses a not-yet loaded collection
|
|
will still load it. Other threads that try to access the collection while
|
|
loading will not fail with error 1238 but instead block until the collection
|
|
is fully loaded. This configuration might lead to all server threads being
|
|
blocked because they are all waiting for the same collection to complete
|
|
loading. Setting the option to *true* will prevent this from happening, but
|
|
requires clients to catch error 1238 and react on it (maybe by scheduling
|
|
a retry for later).
|
|
|
|
The default value is *false*.
|
|
|
|
* added better control-C support in arangosh
|
|
|
|
When CTRL-C is pressed in arangosh, it will now print a `^C` first. Pressing
|
|
CTRL-C again will reset the prompt if something was entered before, or quit
|
|
arangosh if no command was entered directly before.
|
|
|
|
This affects the arangosh version build with Readline-support only.
|
|
|
|
The MacOS version of ArangoDB for Homebrew now depends on Readline, too. The
|
|
Homebrew formula has been changed accordingly.
|
|
When self-compiling ArangoDB on MacOS without Homebrew, Readline now is a
|
|
prerequisite.
|
|
|
|
* increased default value collection-specific `indexBuckets` value from 1 to 16
|
|
|
|
Collections created from 2.7 on will use the new default if not overridden on
|
|
collection creation or later using `collection.properties({ indexBuckets: ... })`.
|
|
|
|
The `indexBuckets` value determines the number of buckets to use when creating
|
|
an edges index in the collection, and it may be used in future versions of ArangoDB
|
|
for other index types, too.
|
|
|
|
* allow parallel processing of multiple buckets when loading edge indexes
|
|
|
|
Buckets will be built in parallel if the collection has an `indexBuckets` value
|
|
greater than 1 and the collection contains a significant amount of documents/edges.
|
|
|
|
* changed HTTP client to use poll instead of select on Linux and MacOS
|
|
|
|
This affects the ArangoShell and user-defined JavaScript code running inside
|
|
arangod that initiates its own HTTP calls.
|
|
|
|
Using poll instead of select allows using arbitrary high file descriptors
|
|
(bigger than the compiled in FD_SETSIZE). Server connections are still handled using
|
|
epoll, which has never been affected by FD_SETSIZE.
|
|
|
|
* implemented AQL `LIKE` function using ICU regexes
|
|
|
|
* add `RETURN DISTINCT` for AQL queries to return unique results:
|
|
|
|
FOR doc IN collection
|
|
RETURN DISTINCT doc.status
|
|
|
|
* removed `createNamedQueue()` and `addJob()` functions from org/arangodb/tasks
|
|
|
|
* moved dispatcher to atomic implementation
|
|
|
|
* added shorthand notation for attribute names in AQL object literals:
|
|
|
|
LET name = "Peter"
|
|
LET age = 42
|
|
RETURN { name, age }
|
|
|
|
The above is the shorthand equivalent of the generic form
|
|
|
|
LET name = "Peter"
|
|
LET age = 42
|
|
RETURN { name : name, age : age }
|
|
|
|
* removed configure option `--enable-timings`
|
|
|
|
This option did not have any effect.
|
|
|
|
* removed configure option `--enable-figures`
|
|
|
|
This option was removed to simplify some statistics code.
|
|
|
|
* removed run-time manipulation methods for server endpoints:
|
|
|
|
* `db._removeEndpoint()`
|
|
* `db._configureEndpoint()`
|
|
* HTTP POST `/_api/endpoint`
|
|
* HTTP DELETE `/_api/endpoint`
|
|
|
|
* AQL query result cache
|
|
|
|
The query result cache can optionally cache the complete results of all or selected AQL queries.
|
|
It can be operated in the following modes:
|
|
|
|
* `off`: the cache is disabled. No query results will be stored
|
|
* `on`: the cache will store the results of all AQL queries unless their `cache`
|
|
attribute flag is set to `false`
|
|
* `demand`: the cache will store the results of AQL queries that have their
|
|
`cache` attribute set to `true`, but will ignore all others
|
|
|
|
The mode can be set at server startup using the `--database.query-cache-mode` configuration
|
|
option and later changed at runtime.
|
|
|
|
The following HTTP REST APIs have been added for controlling the query cache:
|
|
|
|
* HTTP GET `/_api/query-cache/properties`: returns the global query cache configuration
|
|
* HTTP PUT `/_api/query-cache/properties`: modifies the global query cache configuration
|
|
* HTTP DELETE `/_api/query-cache`: invalidates all results in the query cache
|
|
|
|
The following JavaScript functions have been added for controlling the query cache:
|
|
|
|
* `require("org/arangodb/aql/cache").properties()`: returns the global query cache configuration
|
|
* `require("org/arangodb/aql/cache").properties(properties)`: modifies the global query cache configuration
|
|
* `require("org/arangodb/aql/cache").clear()`: invalidates all results in the query cache
|
|
|
|
* do not link arangoimp against V8
|
|
|
|
* AQL function call arguments optimization
|
|
|
|
This will lead to arguments in function calls inside AQL queries will not be copied but passed
|
|
by reference. This may speed up calls to functions with bigger argument values or queries that
|
|
calls functions a lot of times.
|
|
|
|
* upgraded V8 version to 4.3.61
|
|
|
|
* removed deprecated AQL `SKIPLIST` function.
|
|
|
|
This function was introduced in older versions of ArangoDB with a less powerful query optimizer to
|
|
retrieve data from a skiplist index using a `LIMIT` clause. It was marked as deprecated in ArangoDB
|
|
2.6.
|
|
|
|
Since ArangoDB 2.3 the behavior of the `SKIPLIST` function can be emulated using regular AQL
|
|
constructs, e.g.
|
|
|
|
FOR doc IN @@collection
|
|
FILTER doc.value >= @value
|
|
SORT doc.value DESC
|
|
LIMIT 1
|
|
RETURN doc
|
|
|
|
* the `skip()` function for simple queries does not accept negative input any longer.
|
|
This feature was deprecated in 2.6.0.
|
|
|
|
* fix exception handling
|
|
|
|
In some cases JavaScript exceptions would re-throw without information of the original problem.
|
|
Now the original exception is logged for failure analysis.
|
|
|
|
* based REST API method PUT `/_api/simple/all` on the cursor API and make its use AQL internally.
|
|
|
|
The change speeds up this REST API method and will lead to additional query information being
|
|
returned by the REST API. Clients can use this extra information or ignore it.
|
|
|
|
* Foxx Queue job success/failure handlers arguments have changed from `(jobId, jobData, result, jobFailures)` to `(result, jobData, job)`.
|
|
|
|
* added Foxx Queue job options `repeatTimes`, `repeatUntil` and `repeatDelay`.
|
|
|
|
* added Foxx manifest configuration type `password`.
|
|
|
|
* fixed handling of default values in Foxx manifest configurations
|
|
|
|
* fixed handling of optional parameters in Foxx manifest configurations
|
|
|
|
* added verbose Foxx manifest dependency format
|
|
|
|
* added optional Foxx dependencies
|
|
|
|
* converted Foxx constructors to classes
|
|
|
|
* updated chai to 3.0.
|
|
|
|
|
|
v2.6.8 (XXXX-XX-XX)
|
|
-------------------
|
|
|
|
* ARM only:
|
|
|
|
The ArangoDB packages for ARM require the kernel to allow unaligned memory access.
|
|
How the kernel handles unaligned memory access is configurable at runtime by
|
|
checking and adjusting the contents `/proc/cpu/alignment`.
|
|
|
|
In order to operate on ARM, ArangoDB requires the bit 1 to be set. This will
|
|
make the kernel trap and adjust unaligned memory accesses. If this bit is not
|
|
set, the kernel may send a SIGBUS signal to ArangoDB and terminate it.
|
|
|
|
To set bit 1 in `/proc/cpu/alignment` use the following command as a privileged
|
|
user (e.g. root):
|
|
|
|
echo "2" > /proc/cpu/alignment
|
|
|
|
Note that this setting affects all user processes and not just ArangoDB. Setting
|
|
the alignment with the above command will also not make the setting permanent,
|
|
so it will be lost after a restart of the system. In order to make the setting
|
|
permanent, it should be executed during system startup or before starting arangod.
|
|
|
|
The ArangoDB start/stop scripts do not adjust the alignment setting, but rely on
|
|
the environment to have the correct alignment setting already. The reason for this
|
|
is that the alignment settings also affect all other user processes (which ArangoDB
|
|
is not aware of) and thus may have side-effects outside of ArangoDB. It is therefore
|
|
more reasonable to have the system administrator carry out the change.
|
|
|
|
|
|
v2.6.7 (2015-08-25)
|
|
-------------------
|
|
|
|
* improved AssocMulti index performance when resizing.
|
|
|
|
This makes the edge index perform less I/O when under memory pressure.
|
|
|
|
|
|
v2.6.6 (2015-08-23)
|
|
-------------------
|
|
|
|
* added startup option `--server.additional-threads` to create separate queues
|
|
for slow requests.
|
|
|
|
|
|
v2.6.5 (2015-08-17)
|
|
-------------------
|
|
|
|
* added startup option `--database.throw-collection-not-loaded-error`
|
|
|
|
Accessing a not-yet loaded collection will automatically load a collection
|
|
on first access. This flag controls what happens in case an operation
|
|
would need to wait for another thread to finalize loading a collection. If
|
|
set to *true*, then the first operation that accesses an unloaded collection
|
|
will load it. Further threads that try to access the same collection while
|
|
it is still loading immediately fail with an error (1238, *collection not loaded*).
|
|
This is to prevent all server threads from being blocked while waiting on the
|
|
same collection to finish loading. When the first thread has completed loading
|
|
the collection, the collection becomes regularly available, and all operations
|
|
from that point on can be carried out normally, and error 1238 will not be
|
|
thrown anymore for that collection.
|
|
|
|
If set to *false*, the first thread that accesses a not-yet loaded collection
|
|
will still load it. Other threads that try to access the collection while
|
|
loading will not fail with error 1238 but instead block until the collection
|
|
is fully loaded. This configuration might lead to all server threads being
|
|
blocked because they are all waiting for the same collection to complete
|
|
loading. Setting the option to *true* will prevent this from happening, but
|
|
requires clients to catch error 1238 and react on it (maybe by scheduling
|
|
a retry for later).
|
|
|
|
The default value is *false*.
|
|
|
|
* fixed busy wait loop in scheduler threads that sometimes consumed 100% CPU while
|
|
waiting for events on connections closed unexpectedly by the client side
|
|
|
|
* handle attribute `indexBuckets` when restoring collections via arangorestore.
|
|
Previously the `indexBuckets` attribute value from the dump was ignored, and the
|
|
server default value for `indexBuckets` was used when restoring a collection.
|
|
|
|
* fixed "EscapeValue already set error" crash in V8 actions that might have occurred when
|
|
canceling V8-based operations.
|
|
|
|
|
|
v2.6.4 (2015-08-01)
|
|
-------------------
|
|
|
|
* V8: Upgrade to version 4.1.0.27 - this is intended to be the stable V8 version.
|
|
|
|
* fixed issue #1424: Arango shell should not processing arrows pushing on keyboard
|
|
|
|
|
|
v2.6.3 (2015-07-21)
|
|
-------------------
|
|
|
|
* issue #1409: Document values with null character truncated
|
|
|
|
|
|
v2.6.2 (2015-07-04)
|
|
-------------------
|
|
|
|
* fixed issue #1383: bindVars for HTTP API doesn't work with empty string
|
|
|
|
* fixed handling of default values in Foxx manifest configurations
|
|
|
|
* fixed handling of optional parameters in Foxx manifest configurations
|
|
|
|
* fixed a reference error being thrown in Foxx queues when a function-based job type is used that is not available and no options object is passed to queue.push
|
|
|
|
|
|
v2.6.1 (2015-06-24)
|
|
-------------------
|
|
|
|
* Add missing swagger files to cmake build. fixes #1368
|
|
|
|
* fixed documentation errors
|
|
|
|
|
|
v2.6.0 (2015-06-20)
|
|
-------------------
|
|
|
|
* using negative values for `SimpleQuery.skip()` is deprecated.
|
|
This functionality will be removed in future versions of ArangoDB.
|
|
|
|
* The following simple query functions are now deprecated:
|
|
|
|
* collection.near
|
|
* collection.within
|
|
* collection.geo
|
|
* collection.fulltext
|
|
* collection.range
|
|
* collection.closedRange
|
|
|
|
This also lead to the following REST API methods being deprecated from now on:
|
|
|
|
* PUT /_api/simple/near
|
|
* PUT /_api/simple/within
|
|
* PUT /_api/simple/fulltext
|
|
* PUT /_api/simple/range
|
|
|
|
It is recommended to replace calls to these functions or APIs with equivalent AQL queries,
|
|
which are more flexible because they can be combined with other operations:
|
|
|
|
FOR doc IN NEAR(@@collection, @latitude, @longitude, @limit)
|
|
RETURN doc
|
|
|
|
FOR doc IN WITHIN(@@collection, @latitude, @longitude, @radius, @distanceAttributeName)
|
|
RETURN doc
|
|
|
|
FOR doc IN FULLTEXT(@@collection, @attributeName, @queryString, @limit)
|
|
RETURN doc
|
|
|
|
FOR doc IN @@collection
|
|
FILTER doc.value >= @left && doc.value < @right
|
|
LIMIT @skip, @limit
|
|
RETURN doc`
|
|
|
|
The above simple query functions and REST API methods may be removed in future versions
|
|
of ArangoDB.
|
|
|
|
* deprecated now-obsolete AQL `SKIPLIST` function
|
|
|
|
The function was introduced in older versions of ArangoDB with a less powerful query optimizer to
|
|
retrieve data from a skiplist index using a `LIMIT` clause.
|
|
|
|
Since 2.3 the same goal can be achieved by using regular AQL constructs, e.g.
|
|
|
|
FOR doc IN collection FILTER doc.value >= @value SORT doc.value DESC LIMIT 1 RETURN doc
|
|
|
|
* fixed issues when switching the database inside tasks and during shutdown of database cursors
|
|
|
|
These features were added during 2.6 alpha stage so the fixes affect devel/2.6-alpha builds only
|
|
|
|
* issue #1360: improved foxx-manager help
|
|
|
|
* added `--enable-tcmalloc` configure option.
|
|
|
|
When this option is set, arangod and the client tools will be linked against tcmalloc, which replaces
|
|
the system allocator. When the option is set, a tcmalloc library must be present on the system under
|
|
one of the names `libtcmalloc`, `libtcmalloc_minimal` or `libtcmalloc_debug`.
|
|
|
|
As this is a configure option, it is supported for manual builds on Linux-like systems only. tcmalloc
|
|
support is currently experimental.
|
|
|
|
* issue #1353: Windows: HTTP API - incorrect path in errorMessage
|
|
|
|
* issue #1347: added option `--create-database` for arangorestore.
|
|
|
|
Setting this option to `true` will now create the target database if it does not exist. When creating
|
|
the target database, the username and passwords passed to arangorestore will be used to create an
|
|
initial user for the new database.
|
|
|
|
* issue #1345: advanced debug information for User Functions
|
|
|
|
* issue #1341: Can't use bindvars in UPSERT
|
|
|
|
* fixed vulnerability in JWT implementation.
|
|
|
|
* changed default value of option `--database.ignore-datafile-errors` from `true` to `false`
|
|
|
|
If the new default value of `false` is used, then arangod will refuse loading collections that contain
|
|
datafiles with CRC mismatches or other errors. A collection with datafile errors will then become
|
|
unavailable. This prevents follow up errors from happening.
|
|
|
|
The only way to access such collection is to use the datafile debugger (arango-dfdb) and try to repair
|
|
or truncate the datafile with it.
|
|
|
|
If `--database.ignore-datafile-errors` is set to `true`, then collections will become available
|
|
even if parts of their data cannot be loaded. This helps availability, but may cause (partial) data
|
|
loss and follow up errors.
|
|
|
|
* added server startup option `--server.session-timeout` for controlling the timeout of user sessions
|
|
in the web interface
|
|
|
|
* add sessions and cookie authentication for ArangoDB's web interface
|
|
|
|
ArangoDB's built-in web interface now uses sessions. Session information ids are stored in cookies,
|
|
so clients using the web interface must accept cookies in order to use it
|
|
|
|
* web interface: display query execution time in AQL editor
|
|
|
|
* web interface: renamed AQL query *submit* button to *execute*
|
|
|
|
* web interface: added query explain feature in AQL editor
|
|
|
|
* web interface: demo page added. only working if demo data is available, hidden otherwise
|
|
|
|
* web interface: added support for custom app scripts with optional arguments and results
|
|
|
|
* web interface: mounted apps that need to be configured are now indicated in the app overview
|
|
|
|
* web interface: added button for running tests to app details
|
|
|
|
* web interface: added button for configuring app dependencies to app details
|
|
|
|
* web interface: upgraded API documentation to use Swagger 2
|
|
|
|
* INCOMPATIBLE CHANGE
|
|
|
|
removed startup option `--log.severity`
|
|
|
|
The docs for `--log.severity` mentioned lots of severities (e.g. `exception`, `technical`, `functional`, `development`)
|
|
but only a few severities (e.g. `all`, `human`) were actually used, with `human` being the default and `all` enabling the
|
|
additional logging of requests. So the option pretended to control a lot of things which it actually didn't. Additionally,
|
|
the option `--log.requests-file` was around for a long time already, also controlling request logging.
|
|
|
|
Because the `--log.severity` option effectively did not control that much, it was removed. A side effect of removing the
|
|
option is that 2.5 installations which used `--log.severity all` will not log requests after the upgrade to 2.6. This can
|
|
be adjusted by setting the `--log.requests-file` option.
|
|
|
|
* add backtrace to fatal log events
|
|
|
|
* added optional `limit` parameter for AQL function `FULLTEXT`
|
|
|
|
* make fulltext index also index text values contained in direct sub-objects of the indexed
|
|
attribute.
|
|
|
|
Previous versions of ArangoDB only indexed the attribute value if it was a string. Sub-attributes
|
|
of the index attribute were ignored when fulltext indexing.
|
|
|
|
Now, if the index attribute value is an object, the object's values will each be included in the
|
|
fulltext index if they are strings. If the index attribute value is an array, the array's values
|
|
will each be included in the fulltext index if they are strings.
|
|
|
|
For example, with a fulltext index present on the `translations` attribute, the following text
|
|
values will now be indexed:
|
|
|
|
var c = db._create("example");
|
|
c.ensureFulltextIndex("translations");
|
|
c.insert({ translations: { en: "fox", de: "Fuchs", fr: "renard", ru: "лиса" } });
|
|
c.insert({ translations: "Fox is the English translation of the German word Fuchs" });
|
|
c.insert({ translations: [ "ArangoDB", "document", "database", "Foxx" ] });
|
|
|
|
c.fulltext("translations", "лиса").toArray(); // returns only first document
|
|
c.fulltext("translations", "Fox").toArray(); // returns first and second documents
|
|
c.fulltext("translations", "prefix:Fox").toArray(); // returns all three documents
|
|
|
|
* added batch document removal and lookup commands:
|
|
|
|
collection.lookupByKeys(keys)
|
|
collection.removeByKeys(keys)
|
|
|
|
These commands can be used to perform multi-document lookup and removal operations efficiently
|
|
from the ArangoShell. The argument to these operations is an array of document keys.
|
|
|
|
Also added HTTP APIs for batch document commands:
|
|
|
|
* PUT /_api/simple/lookup-by-keys
|
|
* PUT /_api/simple/remove-by-keys
|
|
|
|
* properly prefix document address URLs with the current database name for calls to the REST
|
|
API method GET `/_api/document?collection=...` (that method will return partial URLs to all
|
|
documents in the collection).
|
|
|
|
Previous versions of ArangoDB returned the URLs starting with `/_api/` but without the current
|
|
database name, e.g. `/_api/document/mycollection/mykey`. Starting with 2.6, the response URLs
|
|
will include the database name as well, e.g. `/_db/_system/_api/document/mycollection/mykey`.
|
|
|
|
* added dedicated collection export HTTP REST API
|
|
|
|
ArangoDB now provides a dedicated collection export API, which can take snapshots of entire
|
|
collections more efficiently than the general-purpose cursor API. The export API is useful
|
|
to transfer the contents of an entire collection to a client application. It provides optional
|
|
filtering on specific attributes.
|
|
|
|
The export API is available at endpoint `POST /_api/export?collection=...`. The API has the
|
|
same return value structure as the already established cursor API (`POST /_api/cursor`).
|
|
|
|
An introduction to the export API is given in this blog post:
|
|
http://jsteemann.github.io/blog/2015/04/04/more-efficient-data-exports/
|
|
|
|
* subquery optimizations for AQL queries
|
|
|
|
This optimization avoids copying intermediate results into subqueries that are not required
|
|
by the subquery.
|
|
|
|
A brief description can be found here:
|
|
http://jsteemann.github.io/blog/2015/05/04/subquery-optimizations/
|
|
|
|
* return value optimization for AQL queries
|
|
|
|
This optimization avoids copying the final query result inside the query's main `ReturnNode`.
|
|
|
|
A brief description can be found here:
|
|
http://jsteemann.github.io/blog/2015/05/04/return-value-optimization-for-aql/
|
|
|
|
* speed up AQL queries containing big `IN` lists for index lookups
|
|
|
|
`IN` lists used for index lookups had performance issues in previous versions of ArangoDB.
|
|
These issues have been addressed in 2.6 so using bigger `IN` lists for filtering is much
|
|
faster.
|
|
|
|
A brief description can be found here:
|
|
http://jsteemann.github.io/blog/2015/05/07/in-list-improvements/
|
|
|
|
* allow `@` and `.` characters in document keys, too
|
|
|
|
This change also leads to document keys being URL-encoded when returned in HTTP `location`
|
|
response headers.
|
|
|
|
* added alternative implementation for AQL COLLECT
|
|
|
|
The alternative method uses a hash table for grouping and does not require its input elements
|
|
to be sorted. It will be taken into account by the optimizer for `COLLECT` statements that do
|
|
not use an `INTO` clause.
|
|
|
|
In case a `COLLECT` statement can use the hash table variant, the optimizer will create an extra
|
|
plan for it at the beginning of the planning phase. In this plan, no extra `SORT` node will be
|
|
added in front of the `COLLECT` because the hash table variant of `COLLECT` does not require
|
|
sorted input. Instead, a `SORT` node will be added after it to sort its output. This `SORT` node
|
|
may be optimized away again in later stages. If the sort order of the result is irrelevant to
|
|
the user, adding an extra `SORT null` after a hash `COLLECT` operation will allow the optimizer to
|
|
remove the sorts altogether.
|
|
|
|
In addition to the hash table variant of `COLLECT`, the optimizer will modify the original plan
|
|
to use the regular `COLLECT` implementation. As this implementation requires sorted input, the
|
|
optimizer will insert a `SORT` node in front of the `COLLECT`. This `SORT` node may be optimized
|
|
away in later stages.
|
|
|
|
The created plans will then be shipped through the regular optimization pipeline. In the end,
|
|
the optimizer will pick the plan with the lowest estimated total cost as usual. The hash table
|
|
variant does not require an up-front sort of the input, and will thus be preferred over the
|
|
regular `COLLECT` if the optimizer estimates many input elements for the `COLLECT` node and
|
|
cannot use an index to sort them.
|
|
|
|
The optimizer can be explicitly told to use the regular *sorted* variant of `COLLECT` by
|
|
suffixing a `COLLECT` statement with `OPTIONS { "method" : "sorted" }`. This will override the
|
|
optimizer guesswork and only produce the *sorted* variant of `COLLECT`.
|
|
|
|
A blog post on the new `COLLECT` implementation can be found here:
|
|
http://jsteemann.github.io/blog/2015/04/22/collecting-with-a-hash-table/
|
|
|
|
* refactored HTTP REST API for cursors
|
|
|
|
The HTTP REST API for cursors (`/_api/cursor`) has been refactored to improve its performance
|
|
and use less memory.
|
|
|
|
A post showing some of the performance improvements can be found here:
|
|
http://jsteemann.github.io/blog/2015/04/01/improvements-for-the-cursor-api/
|
|
|
|
* simplified return value syntax for data-modification AQL queries
|
|
|
|
ArangoDB 2.4 since version allows to return results from data-modification AQL queries. The
|
|
syntax for this was quite limited and verbose:
|
|
|
|
FOR i IN 1..10
|
|
INSERT { value: i } IN test
|
|
LET inserted = NEW
|
|
RETURN inserted
|
|
|
|
The `LET inserted = NEW RETURN inserted` was required literally to return the inserted
|
|
documents. No calculations could be made using the inserted documents.
|
|
|
|
This is now more flexible. After a data-modification clause (e.g. `INSERT`, `UPDATE`, `REPLACE`,
|
|
`REMOVE`, `UPSERT`) there can follow any number of `LET` calculations. These calculations can
|
|
refer to the pseudo-values `OLD` and `NEW` that are created by the data-modification statements.
|
|
|
|
This allows returning projections of inserted or updated documents, e.g.:
|
|
|
|
FOR i IN 1..10
|
|
INSERT { value: i } IN test
|
|
RETURN { _key: NEW._key, value: i }
|
|
|
|
Still not every construct is allowed after a data-modification clause. For example, no functions
|
|
can be called that may access documents.
|
|
|
|
More information can be found here:
|
|
http://jsteemann.github.io/blog/2015/03/27/improvements-for-data-modification-queries/
|
|
|
|
* added AQL `UPSERT` statement
|
|
|
|
This adds an `UPSERT` statement to AQL that is a combination of both `INSERT` and `UPDATE` /
|
|
`REPLACE`. The `UPSERT` will search for a matching document using a user-provided example.
|
|
If no document matches the example, the *insert* part of the `UPSERT` statement will be
|
|
executed. If there is a match, the *update* / *replace* part will be carried out:
|
|
|
|
UPSERT { page: 'index.html' } /* search example */
|
|
INSERT { page: 'index.html', pageViews: 1 } /* insert part */
|
|
UPDATE { pageViews: OLD.pageViews + 1 } /* update part */
|
|
IN pageViews
|
|
|
|
`UPSERT` can be used with an `UPDATE` or `REPLACE` clause. The `UPDATE` clause will perform
|
|
a partial update of the found document, whereas the `REPLACE` clause will replace the found
|
|
document entirely. The `UPDATE` or `REPLACE` parts can refer to the pseudo-value `OLD`, which
|
|
contains all attributes of the found document.
|
|
|
|
`UPSERT` statements can optionally return values. In the following query, the return
|
|
attribute `found` will return the found document before the `UPDATE` was applied. If no
|
|
document was found, `found` will contain a value of `null`. The `updated` result attribute will
|
|
contain the inserted / updated document:
|
|
|
|
UPSERT { page: 'index.html' } /* search example */
|
|
INSERT { page: 'index.html', pageViews: 1 } /* insert part */
|
|
UPDATE { pageViews: OLD.pageViews + 1 } /* update part */
|
|
IN pageViews
|
|
RETURN { found: OLD, updated: NEW }
|
|
|
|
A more detailed description of `UPSERT` can be found here:
|
|
http://jsteemann.github.io/blog/2015/03/27/preview-of-the-upsert-command/
|
|
|
|
* adjusted default configuration value for `--server.backlog-size` from 10 to 64.
|
|
|
|
* issue #1231: bug xor feature in AQL: LENGTH(null) == 4
|
|
|
|
This changes the behavior of the AQL `LENGTH` function as follows:
|
|
|
|
- if the single argument to `LENGTH()` is `null`, then the result will now be `0`. In previous
|
|
versions of ArangoDB, the result of `LENGTH(null)` was `4`.
|
|
|
|
- if the single argument to `LENGTH()` is `true`, then the result will now be `1`. In previous
|
|
versions of ArangoDB, the result of `LENGTH(true)` was `4`.
|
|
|
|
- if the single argument to `LENGTH()` is `false`, then the result will now be `0`. In previous
|
|
versions of ArangoDB, the result of `LENGTH(false)` was `5`.
|
|
|
|
The results of `LENGTH()` with string, numeric, array object argument values do not change.
|
|
|
|
* issue #1298: Bulk import if data already exists (#1298)
|
|
|
|
This change extends the HTTP REST API for bulk imports as follows:
|
|
|
|
When documents are imported and the `_key` attribute is specified for them, the import can be
|
|
used for inserting and updating/replacing documents. Previously, the import could be used for
|
|
inserting new documents only, and re-inserting a document with an existing key would have failed
|
|
with a *unique key constraint violated* error.
|
|
|
|
The above behavior is still the default. However, the API now allows controlling the behavior
|
|
in case of a unique key constraint error via the optional URL parameter `onDuplicate`.
|
|
|
|
This parameter can have one of the following values:
|
|
|
|
- `error`: when a unique key constraint error occurs, do not import or update the document but
|
|
report an error. This is the default.
|
|
|
|
- `update`: when a unique key constraint error occurs, try to (partially) update the existing
|
|
document with the data specified in the import. This may still fail if the document would
|
|
violate secondary unique indexes. Only the attributes present in the import data will be
|
|
updated and other attributes already present will be preserved. The number of updated documents
|
|
will be reported in the `updated` attribute of the HTTP API result.
|
|
|
|
- `replace`: when a unique key constraint error occurs, try to fully replace the existing
|
|
document with the data specified in the import. This may still fail if the document would
|
|
violate secondary unique indexes. The number of replaced documents will be reported in the
|
|
`updated` attribute of the HTTP API result.
|
|
|
|
- `ignore`: when a unique key constraint error occurs, ignore this error. There will be no
|
|
insert, update or replace for the particular document. Ignored documents will be reported
|
|
separately in the `ignored` attribute of the HTTP API result.
|
|
|
|
The result of the HTTP import API will now contain the attributes `ignored` and `updated`, which
|
|
contain the number of ignored and updated documents respectively. These attributes will contain a
|
|
value of zero unless the `onDuplicate` URL parameter is set to either `update` or `replace`
|
|
(in this case the `updated` attribute may contain non-zero values) or `ignore` (in this case the
|
|
`ignored` attribute may contain a non-zero value).
|
|
|
|
To support the feature, arangoimp also has a new command line option `--on-duplicate` which can
|
|
have one of the values `error`, `update`, `replace`, `ignore`. The default value is `error`.
|
|
|
|
A few examples for using arangoimp with the `--on-duplicate` option can be found here:
|
|
http://jsteemann.github.io/blog/2015/04/14/updating-documents-with-arangoimp/
|
|
|
|
* changed behavior of `db._query()` in the ArangoShell:
|
|
|
|
if the command's result is printed in the shell, the first 10 results will be printed. Previously
|
|
only a basic description of the underlying query result cursor was printed. Additionally, if the
|
|
cursor result contains more than 10 results, the cursor is assigned to a global variable `more`,
|
|
which can be used to iterate over the cursor result.
|
|
|
|
Example:
|
|
|
|
arangosh [_system]> db._query("FOR i IN 1..15 RETURN i")
|
|
[object ArangoQueryCursor, count: 15, hasMore: true]
|
|
|
|
[
|
|
1,
|
|
2,
|
|
3,
|
|
4,
|
|
5,
|
|
6,
|
|
7,
|
|
8,
|
|
9,
|
|
10
|
|
]
|
|
|
|
type 'more' to show more documents
|
|
|
|
|
|
arangosh [_system]> more
|
|
[object ArangoQueryCursor, count: 15, hasMore: false]
|
|
|
|
[
|
|
11,
|
|
12,
|
|
13,
|
|
14,
|
|
15
|
|
]
|
|
|
|
* Disallow batchSize value 0 in HTTP `POST /_api/cursor`:
|
|
|
|
The HTTP REST API `POST /_api/cursor` does not accept a `batchSize` parameter value of
|
|
`0` any longer. A batch size of 0 never made much sense, but previous versions of ArangoDB
|
|
did not check for this value. Now creating a cursor using a `batchSize` value 0 will
|
|
result in an HTTP 400 error response
|
|
|
|
* REST Server: fix memory leaks when failing to add jobs
|
|
|
|
* 'EDGES' AQL Function
|
|
|
|
The AQL function `EDGES` got a new fifth option parameter.
|
|
Right now only one option is available: 'includeVertices'. This is a boolean parameter
|
|
that allows to modify the result of the `EDGES` function.
|
|
Default is 'includeVertices: false' which does not have any effect.
|
|
'includeVertices: true' modifies the result, such that
|
|
{vertex: <vertexDocument>, edge: <edgeDocument>} is returned.
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
The result format of the AQL function `NEIGHBORS` has been changed.
|
|
Before it has returned an array of objects containing 'vertex' and 'edge'.
|
|
Now it will only contain the vertex directly.
|
|
Also an additional option 'includeData' has been added.
|
|
This is used to define if only the 'vertex._id' value should be returned (false, default),
|
|
or if the vertex should be looked up in the collection and the complete JSON should be returned
|
|
(true).
|
|
Using only the id values can lead to significantly improved performance if this is the only information
|
|
required.
|
|
|
|
In order to get the old result format prior to ArangoDB 2.6, please use the function EDGES instead.
|
|
Edges allows for a new option 'includeVertices' which, set to true, returns exactly the format of NEIGHBORS.
|
|
Example:
|
|
|
|
NEIGHBORS(<vertexCollection>, <edgeCollection>, <vertex>, <direction>, <example>)
|
|
|
|
This can now be achieved by:
|
|
|
|
EDGES(<edgeCollection>, <vertex>, <direction>, <example>, {includeVertices: true})
|
|
|
|
If you are nesting several NEIGHBORS steps you can speed up their performance in the following way:
|
|
|
|
Old Example:
|
|
|
|
FOR va IN NEIGHBORS(Users, relations, 'Users/123', 'outbound') FOR vc IN NEIGHBORS(Products, relations, va.vertex._id, 'outbound') RETURN vc
|
|
|
|
This can now be achieved by:
|
|
|
|
FOR va IN NEIGHBORS(Users, relations, 'Users/123', 'outbound') FOR vc IN NEIGHBORS(Products, relations, va, 'outbound', null, {includeData: true}) RETURN vc
|
|
^^^^ ^^^^^^^^^^^^^^^^^^^
|
|
Use intermediate directly include Data for final
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
The AQL function `GRAPH_NEIGHBORS` now provides an additional option `includeData`.
|
|
This option allows controlling whether the function should return the complete vertices
|
|
or just their IDs. Returning only the IDs instead of the full vertices can lead to
|
|
improved performance .
|
|
|
|
If provided, `includeData` is set to `true`, all vertices in the result will be returned
|
|
with all their attributes. The default value of `includeData` is `false`.
|
|
This makes the default function results incompatible with previous versions of ArangoDB.
|
|
|
|
To get the old result style in ArangoDB 2.6, please set the options as follows in calls
|
|
to `GRAPH_NEIGHBORS`:
|
|
|
|
GRAPH_NEIGHBORS(<graph>, <vertex>, { includeData: true })
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
The AQL function `GRAPH_COMMON_NEIGHBORS` now provides an additional option `includeData`.
|
|
This option allows controlling whether the function should return the complete vertices
|
|
or just their IDs. Returning only the IDs instead of the full vertices can lead to
|
|
improved performance .
|
|
|
|
If provided, `includeData` is set to `true`, all vertices in the result will be returned
|
|
with all their attributes. The default value of `includeData` is `false`.
|
|
This makes the default function results incompatible with previous versions of ArangoDB.
|
|
|
|
To get the old result style in ArangoDB 2.6, please set the options as follows in calls
|
|
to `GRAPH_COMMON_NEIGHBORS`:
|
|
|
|
GRAPH_COMMON_NEIGHBORS(<graph>, <vertexExamples1>, <vertexExamples2>, { includeData: true }, { includeData: true })
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
The AQL function `GRAPH_SHORTEST_PATH` now provides an additional option `includeData`.
|
|
This option allows controlling whether the function should return the complete vertices
|
|
and edges or just their IDs. Returning only the IDs instead of full vertices and edges
|
|
can lead to improved performance .
|
|
|
|
If provided, `includeData` is set to `true`, all vertices and edges in the result will
|
|
be returned with all their attributes. There is also an optional parameter `includePath` of
|
|
type object.
|
|
It has two optional sub-attributes `vertices` and `edges`, both of type boolean.
|
|
Both can be set individually and the result will include all vertices on the path if
|
|
`includePath.vertices == true` and all edges if `includePath.edges == true` respectively.
|
|
|
|
The default value of `includeData` is `false`, and paths are now excluded by default.
|
|
This makes the default function results incompatible with previous versions of ArangoDB.
|
|
|
|
To get the old result style in ArangoDB 2.6, please set the options as follows in calls
|
|
to `GRAPH_SHORTEST_PATH`:
|
|
|
|
GRAPH_SHORTEST_PATH(<graph>, <source>, <target>, { includeData: true, includePath: { edges: true, vertices: true } })
|
|
|
|
The attributes `startVertex` and `vertex` that were present in the results of `GRAPH_SHORTEST_PATH`
|
|
in previous versions of ArangoDB will not be produced in 2.6. To calculate these attributes in 2.6,
|
|
please extract the first and last elements from the `vertices` result attribute.
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
The AQL function `GRAPH_DISTANCE_TO` will now return only the id the destination vertex
|
|
in the `vertex` attribute, and not the full vertex data with all vertex attributes.
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
All graph measurements functions in JavaScript module `general-graph` that calculated a
|
|
single figure previously returned an array containing just the figure. Now these functions
|
|
will return the figure directly and not put it inside an array.
|
|
|
|
The affected functions are:
|
|
|
|
* `graph._absoluteEccentricity`
|
|
* `graph._eccentricity`
|
|
* `graph._absoluteCloseness`
|
|
* `graph._closeness`
|
|
* `graph._absoluteBetweenness`
|
|
* `graph._betweenness`
|
|
* `graph._radius`
|
|
* `graph._diameter`
|
|
|
|
* Create the `_graphs` collection in new databases with `waitForSync` attribute set to `false`
|
|
|
|
The previous `waitForSync` value was `true`, so default the behavior when creating and dropping
|
|
graphs via the HTTP REST API changes as follows if the new settings are in effect:
|
|
|
|
* `POST /_api/graph` by default returns `HTTP 202` instead of `HTTP 201`
|
|
* `DELETE /_api/graph/graph-name` by default returns `HTTP 202` instead of `HTTP 201`
|
|
|
|
If the `_graphs` collection still has its `waitForSync` value set to `true`, then the HTTP status
|
|
code will not change.
|
|
|
|
* Upgraded ICU to version 54; this increases performance in many places.
|
|
based on https://code.google.com/p/chromium/issues/detail?id=428145
|
|
|
|
* added support for HTTP push aka chunked encoding
|
|
|
|
* issue #1051: add info whether server is running in service or user mode?
|
|
|
|
This will add a "mode" attribute to the result of the result of HTTP GET `/_api/version?details=true`
|
|
|
|
"mode" can have the following values:
|
|
|
|
- `standalone`: server was started manually (e.g. on command-line)
|
|
- `service`: service is running as Windows service, in daemon mode or under the supervisor
|
|
|
|
* improve system error messages in Windows port
|
|
|
|
* increased default value of `--server.request-timeout` from 300 to 1200 seconds for client tools
|
|
(arangosh, arangoimp, arangodump, arangorestore)
|
|
|
|
* increased default value of `--server.connect-timeout` from 3 to 5 seconds for client tools
|
|
(arangosh, arangoimp, arangodump, arangorestore)
|
|
|
|
* added startup option `--server.foxx-queues-poll-interval`
|
|
|
|
This startup option controls the frequency with which the Foxx queues manager is checking
|
|
the queue (or queues) for jobs to be executed.
|
|
|
|
The default value is `1` second. Lowering this value will result in the queue manager waking
|
|
up and checking the queues more frequently, which may increase CPU usage of the server.
|
|
When not using Foxx queues, this value can be raised to save some CPU time.
|
|
|
|
* added startup option `--server.foxx-queues`
|
|
|
|
This startup option controls whether the Foxx queue manager will check queue and job entries.
|
|
Disabling this option can reduce server load but will prevent jobs added to Foxx queues from
|
|
being processed at all.
|
|
|
|
The default value is `true`, enabling the Foxx queues feature.
|
|
|
|
* make Foxx queues really database-specific.
|
|
|
|
Foxx queues were and are stored in a database-specific collection `_queues`. However, a global
|
|
cache variable for the queues led to the queue names being treated database-independently, which
|
|
was wrong.
|
|
|
|
Since 2.6, Foxx queues names are truly database-specific, so the same queue name can be used in
|
|
two different databases for two different queues. Until then, it is advisable to think of queues
|
|
as already being database-specific, and using the database name as a queue name prefix to be
|
|
avoid name conflicts, e.g.:
|
|
|
|
var queueName = "myQueue";
|
|
var Foxx = require("org/arangodb/foxx");
|
|
Foxx.queues.create(db._name() + ":" + queueName);
|
|
|
|
* added support for Foxx queue job types defined as app scripts.
|
|
|
|
The old job types introduced in 2.4 are still supported but are known to cause issues in 2.5
|
|
and later when the server is restarted or the job types are not defined in every thread.
|
|
|
|
The new job types avoid this issue by storing an explicit mount path and script name rather
|
|
than an assuming the job type is defined globally. It is strongly recommended to convert your
|
|
job types to the new script-based system.
|
|
|
|
* renamed Foxx sessions option "sessionStorageApp" to "sessionStorage". The option now also accepts session storages directly.
|
|
|
|
* Added the following JavaScript methods for file access:
|
|
* fs.copyFile() to copy single files
|
|
* fs.copyRecursive() to copy directory trees
|
|
* fs.chmod() to set the file permissions (non-Windows only)
|
|
|
|
* Added process.env for accessing the process environment from JavaScript code
|
|
|
|
* Cluster: kickstarter shutdown routines will more precisely follow the shutdown of its nodes.
|
|
|
|
* Cluster: don't delete agency connection objects that are currently in use.
|
|
|
|
* Cluster: improve passing along of HTTP errors
|
|
|
|
* fixed issue #1247: debian init script problems
|
|
|
|
* multi-threaded index creation on collection load
|
|
|
|
When a collection contains more than one secondary index, they can be built in memory in
|
|
parallel when the collection is loaded. How many threads are used for parallel index creation
|
|
is determined by the new configuration parameter `--database.index-threads`. If this is set
|
|
to 0, indexes are built by the opening thread only and sequentially. This is equivalent to
|
|
the behavior in 2.5 and before.
|
|
|
|
* speed up building up primary index when loading collections
|
|
|
|
* added `count` attribute to `parameters.json` files of collections. This attribute indicates
|
|
the number of live documents in the collection on unload. It is read when the collection is
|
|
(re)loaded to determine the initial size for the collection's primary index
|
|
|
|
* removed remainders of MRuby integration, removed arangoirb
|
|
|
|
* simplified `controllers` property in Foxx manifests. You can now specify a filename directly
|
|
if you only want to use a single file mounted at the base URL of your Foxx app.
|
|
|
|
* simplified `exports` property in Foxx manifests. You can now specify a filename directly if
|
|
you only want to export variables from a single file in your Foxx app.
|
|
|
|
* added support for node.js-style exports in Foxx exports. Your Foxx exports file can now export
|
|
arbitrary values using the `module.exports` property instead of adding properties to the
|
|
`exports` object.
|
|
|
|
* added `scripts` property to Foxx manifests. You should now specify the `setup` and `teardown`
|
|
files as properties of the `scripts` object in your manifests and can define custom,
|
|
app-specific scripts that can be executed from the web interface or the CLI.
|
|
|
|
* added `tests` property to Foxx manifests. You can now define test cases using the `mocha`
|
|
framework which can then be executed inside ArangoDB.
|
|
|
|
* updated `joi` package to 6.0.8.
|
|
|
|
* added `extendible` package.
|
|
|
|
* added Foxx model lifecycle events to repositories. See #1257.
|
|
|
|
* speed up resizing of edge index.
|
|
|
|
* allow to split an edge index into buckets which are resized individually.
|
|
This is controlled by the `indexBuckets` attribute in the `properties`
|
|
of the collection.
|
|
|
|
* fix a cluster deadlock bug in larger clusters by marking a thread waiting
|
|
for a lock on a DBserver as blocked
|
|
|
|
|
|
v2.5.6 (XXXX-XX-XX)
|
|
-------------------
|
|
|
|
* potentially fixed issue #1313: Wrong metric calculation at dashboard
|
|
|
|
Escape whitespace in process name when scanning /proc/pid/stats
|
|
|
|
This fixes statistics values read from that file
|
|
|
|
* Fixed variable naming in AQL `COLLECT INTO` results in case the COLLECT is placed
|
|
in a subquery which itself is followed by other constructs that require variables
|
|
|
|
|
|
v2.5.5 (2015-05-29)
|
|
-------------------
|
|
|
|
* fixed vulnerability in JWT implementation.
|
|
|
|
* fixed format string for reading /proc/pid/stat
|
|
|
|
* take into account barriers used in different V8 contexts
|
|
|
|
|
|
v2.5.4 (2015-05-14)
|
|
-------------------
|
|
|
|
* added startup option `--log.performance`: specifying this option at startup will log
|
|
performance-related info messages, mainly timings via the regular logging mechanisms
|
|
|
|
* cluster fixes
|
|
|
|
* fix for recursive copy under Windows
|
|
|
|
|
|
v2.5.3 (2015-04-29)
|
|
-------------------
|
|
|
|
* Fix fs.move to work across filesystem borders; Fixes Foxx app installation problems;
|
|
issue #1292.
|
|
|
|
* Fix Foxx app install when installed on a different drive on Windows
|
|
|
|
* issue #1322: strange AQL result
|
|
|
|
* issue #1318: Inconsistent db._create() syntax
|
|
|
|
* issue #1315: queries to a collection fail with an empty response if the
|
|
collection contains specific JSON data
|
|
|
|
* issue #1300: Make arangodump not fail if target directory exists but is empty
|
|
|
|
* allow specifying higher values than SOMAXCONN for `--server.backlog-size`
|
|
|
|
Previously, arangod would not start when a `--server.backlog-size` value was
|
|
specified that was higher than the platform's SOMAXCONN header value.
|
|
|
|
Now, arangod will use the user-provided value for `--server.backlog-size` and
|
|
pass it to the listen system call even if the value is higher than SOMAXCONN.
|
|
If the user-provided value is higher than SOMAXCONN, arangod will log a warning
|
|
on startup.
|
|
|
|
* Fixed a cluster deadlock bug. Mark a thread that is in a RemoteBlock as
|
|
blocked to allow for additional dispatcher threads to be started.
|
|
|
|
* Fix locking in cluster by using another ReadWriteLock class for collections.
|
|
|
|
* Add a second DispatcherQueue for AQL in the cluster. This fixes a
|
|
cluster-AQL thread explosion bug.
|
|
|
|
|
|
v2.5.2 (2015-04-11)
|
|
-------------------
|
|
|
|
* modules stored in _modules are automatically flushed when changed
|
|
|
|
* added missing query-id parameter in documentation of HTTP DELETE `/_api/query` endpoint
|
|
|
|
* added iterator for edge index in AQL queries
|
|
|
|
this change may lead to less edges being read when used together with a LIMIT clause
|
|
|
|
* make graph viewer in web interface issue less expensive queries for determining
|
|
a random vertex from the graph, and for determining vertex attributes
|
|
|
|
* issue #1285: syntax error, unexpected $undefined near '@_to RETURN obj
|
|
|
|
this allows AQL bind parameter names to also start with underscores
|
|
|
|
* moved /_api/query to C++
|
|
|
|
* issue #1289: Foxx models created from database documents expose an internal method
|
|
|
|
* added `Foxx.Repository#exists`
|
|
|
|
* parallelize initialization of V8 context in multiple threads
|
|
|
|
* fixed a possible crash when the debug-level was TRACE
|
|
|
|
* cluster: do not initialize statistics collection on each
|
|
coordinator, this fixes a race condition at startup
|
|
|
|
* cluster: fix a startup race w.r.t. the _configuration collection
|
|
|
|
* search for db:// JavaScript modules only after all local files have been
|
|
considered, this speeds up the require command in a cluster considerably
|
|
|
|
* general cluster speedup in certain areas
|
|
|
|
|
|
v2.5.1 (2015-03-19)
|
|
-------------------
|
|
|
|
* fixed bug that caused undefined behavior when an AQL query was killed inside
|
|
a calculation block
|
|
|
|
* fixed memleaks in AQL query cleanup in case out-of-memory errors are thrown
|
|
|
|
* by default, Debian and RedHat packages are built with debug symbols
|
|
|
|
* added option `--database.ignore-logfile-errors`
|
|
|
|
This option controls how collection datafiles with a CRC mismatch are treated.
|
|
|
|
If set to `false`, CRC mismatch errors in collection datafiles will lead
|
|
to a collection not being loaded at all. If a collection needs to be loaded
|
|
during WAL recovery, the WAL recovery will also abort (if not forced with
|
|
`--wal.ignore-recovery-errors true`). Setting this flag to `false` protects
|
|
users from unintentionally using a collection with corrupted datafiles, from
|
|
which only a subset of the original data can be recovered.
|
|
|
|
If set to `true`, CRC mismatch errors in collection datafiles will lead to
|
|
the datafile being partially loaded. All data up to until the mismatch will
|
|
be loaded. This will enable users to continue with collection datafiles
|
|
that are corrupted, but will result in only a partial load of the data.
|
|
The WAL recovery will still abort when encountering a collection with a
|
|
corrupted datafile, at least if `--wal.ignore-recovery-errors` is not set to
|
|
`true`.
|
|
|
|
The default value is *true*, so for collections with corrupted datafiles
|
|
there might be partial data loads once the WAL recovery has finished. If
|
|
the WAL recovery will need to load a collection with a corrupted datafile,
|
|
it will still stop when using the default values.
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
make the arangod server refuse to start if during startup it finds a non-readable
|
|
`parameter.json` file for a database or a collection.
|
|
|
|
Stopping the startup process in this case requires manual intervention (fixing
|
|
the unreadable files), but prevents follow-up errors due to ignored databases or
|
|
collections from happening.
|
|
|
|
* datafiles and `parameter.json` files written by arangod are now created with read and write
|
|
privileges for the arangod process user, and with read and write privileges for the arangod
|
|
process group.
|
|
|
|
Previously, these files were created with user read and write permissions only.
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
abort WAL recovery if one of the collection's datafiles cannot be opened
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
never try to raise the privileges after dropping them, this can lead to a race condition while
|
|
running the recovery
|
|
|
|
If you require to run ArangoDB on a port lower than 1024, you must run ArangoDB as root.
|
|
|
|
* fixed inefficiencies in `remove` methods of general-graph module
|
|
|
|
* added option `--database.slow-query-threshold` for controlling the default AQL slow query
|
|
threshold value on server start
|
|
|
|
* add system error strings for Windows on many places
|
|
|
|
* rework service startup so we announce 'RUNNING' only when we're finished starting.
|
|
|
|
* use the Windows eventlog for FATAL and ERROR - log messages
|
|
|
|
* fix service handling in NSIS Windows installer, specify human readable name
|
|
|
|
* add the ICU_DATA environment variable to the fatal error messages
|
|
|
|
* fixed issue #1265: arangod crashed with SIGSEGV
|
|
|
|
* fixed issue #1241: Wildcards in examples
|
|
|
|
|
|
v2.5.0 (2015-03-09)
|
|
-------------------
|
|
|
|
* installer fixes for Windows
|
|
|
|
* fix for downloading Foxx
|
|
|
|
* fixed issue #1258: http pipelining not working?
|
|
|
|
|
|
v2.5.0-beta4 (2015-03-05)
|
|
-------------------------
|
|
|
|
* fixed issue #1247: debian init script problems
|
|
|
|
|
|
v2.5.0-beta3 (2015-02-27)
|
|
-------------------------
|
|
|
|
* fix Windows install path calculation in arango
|
|
|
|
* fix Windows logging of long strings
|
|
|
|
* fix possible undefinedness of const strings in Windows
|
|
|
|
|
|
v2.5.0-beta2 (2015-02-23)
|
|
-------------------------
|
|
|
|
* fixed issue #1256: agency binary not found #1256
|
|
|
|
* fixed issue #1230: API: document/col-name/_key and cursor return different floats
|
|
|
|
* front-end: dashboard tries not to (re)load statistics if user has no access
|
|
|
|
* V8: Upgrade to version 3.31.74.1
|
|
|
|
* etcd: Upgrade to version 2.0 - This requires go 1.3 to compile at least.
|
|
|
|
* refuse to startup if ICU wasn't initialized, this will i.e. prevent errors from being printed,
|
|
and libraries from being loaded.
|
|
|
|
* front-end: unwanted removal of index table header after creating new index
|
|
|
|
* fixed issue #1248: chrome: applications filtering not working
|
|
|
|
* fixed issue #1198: queries remain in aql editor (front-end) if you navigate through different tabs
|
|
|
|
* Simplify usage of Foxx
|
|
|
|
Thanks to our user feedback we learned that Foxx is a powerful, yet rather complicated concept.
|
|
With this release we tried to make it less complicated while keeping all its strength.
|
|
That includes a rewrite of the documentation as well as some code changes as listed below:
|
|
|
|
* Moved Foxx applications to a different folder.
|
|
|
|
The naming convention now is: <app-path>/_db/<dbname>/<mountpoint>/APP
|
|
Before it was: <app-path>/databases/<dbname>/<appname>:<appversion>
|
|
This caused some trouble as apps where cached based on name and version and updates did not apply.
|
|
Hence the path on filesystem and the app's access URL had no relation to one another.
|
|
Now the path on filesystem is identical to the URL (except for slashes and the appended APP)
|
|
|
|
* Rewrite of Foxx routing
|
|
|
|
The routing of Foxx has been exposed to major internal changes we adjusted because of user feedback.
|
|
This allows us to set the development mode per mountpoint without having to change paths and hold
|
|
apps at separate locations.
|
|
|
|
* Foxx Development mode
|
|
|
|
The development mode used until 2.4 is gone. It has been replaced by a much more mature version.
|
|
This includes the deprecation of the javascript.dev-app-path parameter, which is useless since 2.5.
|
|
Instead of having two separate app directories for production and development, apps now reside in
|
|
one place, which is used for production as well as for development.
|
|
Apps can still be put into development mode, changing their behavior compared to production mode.
|
|
Development mode apps are still reread from disk at every request, and still they ship more debug
|
|
output.
|
|
|
|
This change has also made the startup options `--javascript.frontend-development-mode` and
|
|
`--javascript.dev-app-path` obsolete. The former option will not have any effect when set, and the
|
|
latter option is only read and used during the upgrade to 2.5 and does not have any effects later.
|
|
|
|
* Foxx install process
|
|
|
|
Installing Foxx apps has been a two step process: import them into ArangoDB and mount them at a
|
|
specific mountpoint. These operations have been joined together. You can install an app at one
|
|
mountpoint, that's it. No fetch, mount, unmount, purge cycle anymore. The commands have been
|
|
simplified to just:
|
|
|
|
* install: get your Foxx app up and running
|
|
* uninstall: shut it down and erase it from disk
|
|
|
|
* Foxx error output
|
|
|
|
Until 2.4 the errors produced by Foxx were not optimal. Often, the error message was just
|
|
`unable to parse manifest` and contained only an internal stack trace.
|
|
In 2.5 we made major improvements there, including a much more fine-grained error output that
|
|
helps you debug your Foxx apps. The error message printed is now much closer to its source and
|
|
should help you track it down.
|
|
|
|
Also we added the default handlers for unhandled errors in Foxx apps:
|
|
|
|
* You will get a nice internal error page whenever your Foxx app is called but was not installed
|
|
due to any error
|
|
* You will get a proper error message when having an uncaught error appears in any app route
|
|
|
|
In production mode the messages above will NOT contain any information about your Foxx internals
|
|
and are safe to be exposed to third party users.
|
|
In development mode the messages above will contain the stacktrace (if available), making it easier for
|
|
your in-house devs to track down errors in the application.
|
|
|
|
* added `console` object to Foxx apps. All Foxx apps now have a console object implementing
|
|
the familiar Console API in their global scope, which can be used to log diagnostic
|
|
messages to the database.
|
|
|
|
* added `org/arangodb/request` module, which provides a simple API for making HTTP requests
|
|
to external services.
|
|
|
|
* added optimizer rule `propagate-constant-attributes`
|
|
|
|
This rule will look inside `FILTER` conditions for constant value equality comparisons,
|
|
and insert the constant values in other places in `FILTER`s. For example, the rule will
|
|
insert `42` instead of `i.value` in the second `FILTER` of the following query:
|
|
|
|
FOR i IN c1 FOR j IN c2 FILTER i.value == 42 FILTER j.value == i.value RETURN 1
|
|
|
|
* added `filtered` value to AQL query execution statistics
|
|
|
|
This value indicates how many documents were filtered by `FilterNode`s in the AQL query.
|
|
Note that `IndexRangeNode`s can also filter documents by selecting only the required ranges
|
|
from the index. The `filtered` value will not include the work done by `IndexRangeNode`s,
|
|
but only the work performed by `FilterNode`s.
|
|
|
|
* added support for sparse hash and skiplist indexes
|
|
|
|
Hash and skiplist indexes can optionally be made sparse. Sparse indexes exclude documents
|
|
in which at least one of the index attributes is either not set or has a value of `null`.
|
|
|
|
As such documents are excluded from sparse indexes, they may contain fewer documents than
|
|
their non-sparse counterparts. This enables faster indexing and can lead to reduced memory
|
|
usage in case the indexed attribute does occur only in some, but not all documents of the
|
|
collection. Sparse indexes will also reduce the number of collisions in non-unique hash
|
|
indexes in case non-existing or optional attributes are indexed.
|
|
|
|
In order to create a sparse index, an object with the attribute `sparse` can be added to
|
|
the index creation commands:
|
|
|
|
db.collection.ensureHashIndex(attributeName, { sparse: true });
|
|
db.collection.ensureHashIndex(attributeName1, attributeName2, { sparse: true });
|
|
db.collection.ensureUniqueConstraint(attributeName, { sparse: true });
|
|
db.collection.ensureUniqueConstraint(attributeName1, attributeName2, { sparse: true });
|
|
|
|
db.collection.ensureSkiplist(attributeName, { sparse: true });
|
|
db.collection.ensureSkiplist(attributeName1, attributeName2, { sparse: true });
|
|
db.collection.ensureUniqueSkiplist(attributeName, { sparse: true });
|
|
db.collection.ensureUniqueSkiplist(attributeName1, attributeName2, { sparse: true });
|
|
|
|
Note that in place of the above specialized index creation commands, it is recommended to use
|
|
the more general index creation command `ensureIndex`:
|
|
|
|
```js
|
|
db.collection.ensureIndex({ type: "hash", sparse: true, unique: true, fields: [ attributeName ] });
|
|
db.collection.ensureIndex({ type: "skiplist", sparse: false, unique: false, fields: [ "a", "b" ] });
|
|
```
|
|
|
|
When not explicitly set, the `sparse` attribute defaults to `false` for new indexes.
|
|
|
|
This causes a change in behavior when creating a unique hash index without specifying the
|
|
sparse flag: in 2.4, unique hash indexes were implicitly sparse, always excluding `null` values.
|
|
There was no option to control this behavior, and sparsity was neither supported for non-unique
|
|
hash indexes nor skiplists in 2.4. This implicit sparsity of unique hash indexes was considered
|
|
an inconsistency, and therefore the behavior was cleaned up in 2.5. As of 2.5, indexes will
|
|
only be created sparse if sparsity is explicitly requested. Existing unique hash indexes from 2.4
|
|
or before will automatically be migrated so they are still sparse after the upgrade to 2.5.
|
|
|
|
Geo indexes are implicitly sparse, meaning documents without the indexed location attribute or
|
|
containing invalid location coordinate values will be excluded from the index automatically. This
|
|
is also a change when compared to pre-2.5 behavior, when documents with missing or invalid
|
|
coordinate values may have caused errors on insertion when the geo index' `unique` flag was set
|
|
and its `ignoreNull` flag was not.
|
|
|
|
This was confusing and has been rectified in 2.5. The method `ensureGeoConstaint()` now does the
|
|
same as `ensureGeoIndex()`. Furthermore, the attributes `constraint`, `unique`, `ignoreNull` and
|
|
`sparse` flags are now completely ignored when creating geo indexes.
|
|
|
|
The same is true for fulltext indexes. There is no need to specify non-uniqueness or sparsity for
|
|
geo or fulltext indexes. They will always be non-unique and sparse.
|
|
|
|
As sparse indexes may exclude some documents, they cannot be used for every type of query.
|
|
Sparse hash indexes cannot be used to find documents for which at least one of the indexed
|
|
attributes has a value of `null`. For example, the following AQL query cannot use a sparse
|
|
index, even if one was created on attribute `attr`:
|
|
|
|
FOR doc In collection
|
|
FILTER doc.attr == null
|
|
RETURN doc
|
|
|
|
If the lookup value is non-constant, a sparse index may or may not be used, depending on
|
|
the other types of conditions in the query. If the optimizer can safely determine that
|
|
the lookup value cannot be `null`, a sparse index may be used. When uncertain, the optimizer
|
|
will not make use of a sparse index in a query in order to produce correct results.
|
|
|
|
For example, the following queries cannot use a sparse index on `attr` because the optimizer
|
|
will not know beforehand whether the comparison values for `doc.attr` will include `null`:
|
|
|
|
FOR doc In collection
|
|
FILTER doc.attr == SOME_FUNCTION(...)
|
|
RETURN doc
|
|
|
|
FOR other IN otherCollection
|
|
FOR doc In collection
|
|
FILTER doc.attr == other.attr
|
|
RETURN doc
|
|
|
|
Sparse skiplist indexes can be used for sorting if the optimizer can safely detect that the
|
|
index range does not include `null` for any of the index attributes.
|
|
|
|
* inspection of AQL data-modification queries will now detect if the data-modification part
|
|
of the query can run in lockstep with the data retrieval part of the query, or if the data
|
|
retrieval part must be executed before the data modification can start.
|
|
|
|
Executing the two in lockstep allows using much smaller buffers for intermediate results
|
|
and starts the actual data-modification operations much earlier than if the two phases
|
|
were executed separately.
|
|
|
|
* Allow dynamic attribute names in AQL object literals
|
|
|
|
This allows using arbitrary expressions to construct attribute names in object
|
|
literals specified in AQL queries. To disambiguate expressions and other unquoted
|
|
attribute names, dynamic attribute names need to be enclosed in brackets (`[` and `]`).
|
|
Example:
|
|
|
|
FOR i IN 1..100
|
|
RETURN { [ CONCAT('value-of-', i) ] : i }
|
|
|
|
* make AQL optimizer rule "use-index-for-sort" remove sort also in case a non-sorted
|
|
index (e.g. a hash index) is used for only equality lookups and all sort attributes
|
|
are covered by the index.
|
|
|
|
Example that does not require an extra sort (needs hash index on `value`):
|
|
|
|
FOR doc IN collection FILTER doc.value == 1 SORT doc.value RETURN doc
|
|
|
|
Another example that does not require an extra sort (with hash index on `value1`, `value2`):
|
|
|
|
FOR doc IN collection FILTER doc.value1 == 1 && doc.value2 == 2 SORT doc.value1, doc.value2 RETURN doc
|
|
|
|
* make AQL optimizer rule "use-index-for-sort" remove sort also in case the sort criteria
|
|
excludes the left-most index attributes, but the left-most index attributes are used
|
|
by the index for equality-only lookups.
|
|
|
|
Example that can use the index for sorting (needs skiplist index on `value1`, `value2`):
|
|
|
|
FOR doc IN collection FILTER doc.value1 == 1 SORT doc.value2 RETURN doc
|
|
|
|
* added selectivity estimates for primary index, edge index, and hash index
|
|
|
|
The selectivity estimates are returned by the `GET /_api/index` REST API method
|
|
in a sub-attribute `selectivityEstimate` for each index that supports it. This
|
|
attribute will be omitted for indexes that do not provide selectivity estimates.
|
|
If provided, the selectivity estimate will be a numeric value between 0 and 1.
|
|
|
|
Selectivity estimates will also be reported in the result of `collection.getIndexes()`
|
|
for all indexes that support this. If no selectivity estimate can be determined for
|
|
an index, the attribute `selectivityEstimate` will be omitted here, too.
|
|
|
|
The web interface also shows selectivity estimates for each index that supports this.
|
|
|
|
Currently the following index types can provide selectivity estimates:
|
|
- primary index
|
|
- edge index
|
|
- hash index (unique and non-unique)
|
|
|
|
No selectivity estimates will be provided when running in cluster mode.
|
|
|
|
* fixed issue #1226: arangod log issues
|
|
|
|
* added additional logger if arangod is started in foreground mode on a tty
|
|
|
|
* added AQL optimizer rule "move-calculations-down"
|
|
|
|
* use exclusive native SRWLocks on Windows instead of native mutexes
|
|
|
|
* added AQL functions `MD5`, `SHA1`, and `RANDOM_TOKEN`.
|
|
|
|
* reduced number of string allocations when parsing certain AQL queries
|
|
|
|
parsing numbers (integers or doubles) does not require a string allocation
|
|
per number anymore
|
|
|
|
* RequestContext#bodyParam now accepts arbitrary joi schemas and rejects invalid (but well-formed) request bodies.
|
|
|
|
* enforce that AQL user functions are wrapped inside JavaScript function () declarations
|
|
|
|
AQL user functions were always expected to be wrapped inside a JavaScript function, but previously
|
|
this was not enforced when registering a user function. Enforcing the AQL user functions to be contained
|
|
inside functions prevents functions from doing some unexpected things that may have led to undefined
|
|
behavior.
|
|
|
|
* Windows service uninstalling: only remove service if it points to the currently running binary,
|
|
or --force was specified.
|
|
|
|
* Windows (debug only): print stacktraces on crash and run minidump
|
|
|
|
* Windows (cygwin): if you run arangosh in a cygwin shell or via ssh we will detect this and use
|
|
the appropriate output functions.
|
|
|
|
* Windows: improve process management
|
|
|
|
* fix IPv6 reverse ip lookups - so far we only did IPv4 addresses.
|
|
|
|
* improve join documentation, add outer join example
|
|
|
|
* run jslint for unit tests too, to prevent "memory leaks" by global js objects with native code.
|
|
|
|
* fix error logging for exceptions - we wouldn't log the exception message itself so far.
|
|
|
|
* improve error reporting in the http client (Windows & *nix)
|
|
|
|
* improve error reports in cluster
|
|
|
|
* Standard errors can now contain custom messages.
|
|
|
|
|
|
v2.4.7 (XXXX-XX-XX)
|
|
-------------------
|
|
|
|
* fixed issue #1282: Geo WITHIN_RECTANGLE for nested lat/lng
|
|
|
|
|
|
v2.4.6 (2015-03-18)
|
|
-------------------
|
|
|
|
* added option `--database.ignore-logfile-errors`
|
|
|
|
This option controls how collection datafiles with a CRC mismatch are treated.
|
|
|
|
If set to `false`, CRC mismatch errors in collection datafiles will lead
|
|
to a collection not being loaded at all. If a collection needs to be loaded
|
|
during WAL recovery, the WAL recovery will also abort (if not forced with
|
|
`--wal.ignore-recovery-errors true`). Setting this flag to `false` protects
|
|
users from unintentionally using a collection with corrupted datafiles, from
|
|
which only a subset of the original data can be recovered.
|
|
|
|
If set to `true`, CRC mismatch errors in collection datafiles will lead to
|
|
the datafile being partially loaded. All data up to until the mismatch will
|
|
be loaded. This will enable users to continue with a collection datafiles
|
|
that are corrupted, but will result in only a partial load of the data.
|
|
The WAL recovery will still abort when encountering a collection with a
|
|
corrupted datafile, at least if `--wal.ignore-recovery-errors` is not set to
|
|
`true`.
|
|
|
|
The default value is *true*, so for collections with corrupted datafiles
|
|
there might be partial data loads once the WAL recovery has finished. If
|
|
the WAL recovery will need to load a collection with a corrupted datafile,
|
|
it will still stop when using the default values.
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
make the arangod server refuse to start if during startup it finds a non-readable
|
|
`parameter.json` file for a database or a collection.
|
|
|
|
Stopping the startup process in this case requires manual intervention (fixing
|
|
the unreadable files), but prevents follow-up errors due to ignored databases or
|
|
collections from happening.
|
|
|
|
* datafiles and `parameter.json` files written by arangod are now created with read and write
|
|
privileges for the arangod process user, and with read and write privileges for the arangod
|
|
process group.
|
|
|
|
Previously, these files were created with user read and write permissions only.
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
abort WAL recovery if one of the collection's datafiles cannot be opened
|
|
|
|
* INCOMPATIBLE CHANGE:
|
|
|
|
never try to raise the privileges after dropping them, this can lead to a race condition while
|
|
running the recovery
|
|
|
|
If you require to run ArangoDB on a port lower than 1024, you must run ArangoDB as root.
|
|
|
|
* fixed inefficiencies in `remove` methods of general-graph module
|
|
|
|
* added option `--database.slow-query-threshold` for controlling the default AQL slow query
|
|
threshold value on server start
|
|
|
|
|
|
v2.4.5 (2015-03-16)
|
|
-------------------
|
|
|
|
* added elapsed time to HTTP request logging output (`--log.requests-file`)
|
|
|
|
* added AQL current and slow query tracking, killing of AQL queries
|
|
|
|
This change enables retrieving the list of currently running AQL queries inside the selected database.
|
|
AQL queries with an execution time beyond a certain threshold can be moved to a "slow query" facility
|
|
and retrieved from there. Queries can also be killed by specifying the query id.
|
|
|
|
This change adds the following HTTP REST APIs:
|
|
|
|
- `GET /_api/query/current`: for retrieving the list of currently running queries
|
|
- `GET /_api/query/slow`: for retrieving the list of slow queries
|
|
- `DELETE /_api/query/slow`: for clearing the list of slow queries
|
|
- `GET /_api/query/properties`: for retrieving the properties for query tracking
|
|
- `PUT /_api/query/properties`: for adjusting the properties for query tracking
|
|
- `DELETE /_api/query/<id>`: for killing an AQL query
|
|
|
|
The following JavaScript APIs have been added:
|
|
|
|
- require("org/arangodb/aql/queries").current();
|
|
- require("org/arangodb/aql/queries").slow();
|
|
- require("org/arangodb/aql/queries").clearSlow();
|
|
- require("org/arangodb/aql/queries").properties();
|
|
- require("org/arangodb/aql/queries").kill();
|
|
|
|
* fixed issue #1265: arangod crashed with SIGSEGV
|
|
|
|
* fixed issue #1241: Wildcards in examples
|
|
|
|
* fixed comment parsing in Foxx controllers
|
|
|
|
|
|
v2.4.4 (2015-02-24)
|
|
-------------------
|
|
|
|
* fixed the generation template for foxx apps. It now does not create deprecated functions anymore
|
|
|
|
* add custom visitor functionality for `GRAPH_NEIGHBORS` function, too
|
|
|
|
* increased default value of traversal option *maxIterations* to 100 times of its previous
|
|
default value
|
|
|
|
|
|
v2.4.3 (2015-02-06)
|
|
-------------------
|
|
|
|
* fix multi-threading with openssl when running under Windows
|
|
|
|
* fix timeout on socket operations when running under Windows
|
|
|
|
* Fixed an error in Foxx routing which caused some apps that worked in 2.4.1 to fail with status 500: `undefined is not a function` errors in 2.4.2
|
|
This error was occurring due to seldom internal rerouting introduced by the malformed application handler.
|
|
|
|
|
|
v2.4.2 (2015-01-30)
|
|
-------------------
|
|
|
|
* added custom visitor functionality for AQL traversals
|
|
|
|
This allows more complex result processing in traversals triggered by AQL. A few examples
|
|
are shown in [this article](http://jsteemann.github.io/blog/2015/01/28/using-custom-visitors-in-aql-graph-traversals/).
|
|
|
|
* improved number of results estimated for nodes of type EnumerateListNode and SubqueryNode
|
|
in AQL explain output
|
|
|
|
* added AQL explain helper to explain arbitrary AQL queries
|
|
|
|
The helper function prints the query execution plan and the indexes to be used in the
|
|
query. It can be invoked from the ArangoShell or the web interface as follows:
|
|
|
|
require("org/arangodb/aql/explainer").explain(query);
|
|
|
|
* enable use of indexes for certain AQL conditions with non-equality predicates, in
|
|
case the condition(s) also refer to indexed attributes
|
|
|
|
The following queries will now be able to use indexes:
|
|
|
|
FILTER a.indexed == ... && a.indexed != ...
|
|
FILTER a.indexed == ... && a.nonIndexed != ...
|
|
FILTER a.indexed == ... && ! (a.indexed == ...)
|
|
FILTER a.indexed == ... && ! (a.nonIndexed == ...)
|
|
FILTER a.indexed == ... && ! (a.indexed != ...)
|
|
FILTER a.indexed == ... && ! (a.nonIndexed != ...)
|
|
FILTER (a.indexed == ... && a.nonIndexed == ...) || (a.indexed == ... && a.nonIndexed == ...)
|
|
FILTER (a.indexed == ... && a.nonIndexed != ...) || (a.indexed == ... && a.nonIndexed != ...)
|
|
|
|
* Fixed spuriously occurring "collection not found" errors when running queries on local
|
|
collections on a cluster DB server
|
|
|
|
* Fixed upload of Foxx applications to the server for apps exceeding approx. 1 MB zipped.
|
|
|
|
* Malformed Foxx applications will now return a more useful error when any route is requested.
|
|
|
|
In Production a Foxx app mounted on /app will display an html page on /app/* stating a 503 Service temporarily not available.
|
|
It will not state any information about your Application.
|
|
Before it was a 404 Not Found without any information and not distinguishable from a correct not found on your route.
|
|
|
|
In Development Mode the html page also contains information about the error occurred.
|
|
|
|
* Unhandled errors thrown in Foxx routes are now handled by the Foxx framework itself.
|
|
|
|
In Production the route will return a status 500 with a body {error: "Error statement"}.
|
|
In Development the route will return a status 500 with a body {error: "Error statement", stack: "..."}
|
|
|
|
Before, it was status 500 with a plain text stack including ArangoDB internal routing information.
|
|
|
|
* The Applications tab in web interface will now request development apps more often.
|
|
So if you have a fixed a syntax error in your app it should always be visible after reload.
|
|
|
|
|
|
v2.4.1 (2015-01-19)
|
|
-------------------
|
|
|
|
* improved WAL recovery output
|
|
|
|
* fixed certain OR optimizations in AQL optimizer
|
|
|
|
* better diagnostics for arangoimp
|
|
|
|
* fixed invalid result of HTTP REST API method `/_admin/foxx/rescan`
|
|
|
|
* fixed possible segmentation fault when passing a Buffer object into a V8 function
|
|
as a parameter
|
|
|
|
* updated AQB module to 1.8.0.
|
|
|
|
|
|
v2.4.0 (2015-01-13)
|
|
-------------------
|
|
|
|
* updated AQB module to 1.7.0.
|
|
|
|
* fixed V8 integration-related crashes
|
|
|
|
* make `fs.move(src, dest)` also fail when both `src` and `dest` are
|
|
existing directories. This ensures the same behavior of the move operation
|
|
on different platforms.
|
|
|
|
* fixed AQL insert operation for multi-shard collections in cluster
|
|
|
|
* added optional return value for AQL data-modification queries.
|
|
This allows returning the documents inserted, removed or updated with the query, e.g.
|
|
|
|
FOR doc IN docs REMOVE doc._key IN docs LET removed = OLD RETURN removed
|
|
FOR doc IN docs INSERT { } IN docs LET inserted = NEW RETURN inserted
|
|
FOR doc IN docs UPDATE doc._key WITH { } IN docs LET previous = OLD RETURN previous
|
|
FOR doc IN docs UPDATE doc._key WITH { } IN docs LET updated = NEW RETURN updated
|
|
|
|
The variables `OLD` and `NEW` are automatically available when a `REMOVE`, `INSERT`,
|
|
`UPDATE` or `REPLACE` statement is immediately followed by a `LET` statement.
|
|
Note that the `LET` and `RETURN` statements in data-modification queries are not as
|
|
flexible as the general versions of `LET` and `RETURN`. When returning documents from
|
|
data-modification operations, only a single variable can be assigned using `LET`, and
|
|
the assignment can only be either `OLD` or `NEW`, but not an arbitrary expression. The
|
|
`RETURN` statement also allows using the just-created variable only, and no arbitrary
|
|
expressions.
|
|
|
|
|
|
v2.4.0-beta1 (2014-12-26)
|
|
--------------------------
|
|
|
|
* fixed superstates in FoxxGenerator
|
|
|
|
* fixed issue #1065: Aardvark: added creation of documents and edges with _key property
|
|
|
|
* fixed issue #1198: Aardvark: current AQL editor query is now cached
|
|
|
|
* Upgraded V8 version from 3.16.14 to 3.29.59
|
|
|
|
The built-in version of V8 has been upgraded from 3.16.14 to 3.29.59.
|
|
This activates several ES6 (also dubbed *Harmony* or *ES.next*) features in
|
|
ArangoDB, both in the ArangoShell and the ArangoDB server. They can be
|
|
used for scripting and in server-side actions such as Foxx routes, traversals
|
|
etc.
|
|
|
|
The following ES6 features are available in ArangoDB 2.4 by default:
|
|
|
|
* iterators
|
|
* the `of` operator
|
|
* symbols
|
|
* predefined collections types (Map, Set etc.)
|
|
* typed arrays
|
|
|
|
Many other ES6 features are disabled by default, but can be made available by
|
|
starting arangod or arangosh with the appropriate options:
|
|
|
|
* arrow functions
|
|
* proxies
|
|
* generators
|
|
* String, Array, and Number enhancements
|
|
* constants
|
|
* enhanced object and numeric literals
|
|
|
|
To activate all these ES6 features in arangod or arangosh, start it with
|
|
the following options:
|
|
|
|
arangosh --javascript.v8-options="--harmony --harmony_generators"
|
|
|
|
More details on the available ES6 features can be found in
|
|
[this blog](https://jsteemann.github.io/blog/2014/12/19/using-es6-features-in-arangodb/).
|
|
|
|
* Added Foxx generator for building Hypermedia APIs
|
|
|
|
A more detailed description is [here](https://www.arangodb.com/2014/12/08/building-hypermedia-apis-foxxgenerator)
|
|
|
|
* New `Applications` tab in web interface:
|
|
|
|
The `applications` tab got a complete redesign.
|
|
It will now only show applications that are currently running on ArangoDB.
|
|
For a selected application, a new detailed view has been created.
|
|
This view provides a better overview of the app:
|
|
* author
|
|
* license
|
|
* version
|
|
* contributors
|
|
* download links
|
|
* API documentation
|
|
|
|
To install a new application, a new dialog is now available.
|
|
It provides the features already available in the console application `foxx-manager` plus some more:
|
|
* install an application from Github
|
|
* install an application from a zip file
|
|
* install an application from ArangoDB's application store
|
|
* create a new application from scratch: this feature uses a generator to
|
|
create a Foxx application with pre-defined CRUD methods for a given list
|
|
of collections. The generated Foxx app can either be downloaded as a zip file or
|
|
be installed on the server. Starting with a new Foxx app has never been easier.
|
|
|
|
* fixed issue #1102: Aardvark: Layout bug in documents overview
|
|
|
|
The documents overview was entirely destroyed in some situations on Firefox.
|
|
We replaced the plugin we used there.
|
|
|
|
* fixed issue #1168: Aardvark: pagination buttons jumping
|
|
|
|
* fixed issue #1161: Aardvark: Click on Import JSON imports previously uploaded file
|
|
|
|
* removed configure options `--enable-all-in-one-v8`, `--enable-all-in-one-icu`,
|
|
and `--enable-all-in-one-libev`.
|
|
|
|
* global internal rename to fix naming incompatibilities with JSON:
|
|
|
|
Internal functions with names containing `array` have been renamed to `object`,
|
|
internal functions with names containing `list` have been renamed to `array`.
|
|
The renaming was mainly done in the C++ parts. The documentation has also been
|
|
adjusted so that the correct JSON type names are used in most places.
|
|
|
|
The change also led to the addition of a few function aliases in AQL:
|
|
|
|
* `TO_LIST` now is an alias of the new `TO_ARRAY`
|
|
* `IS_LIST` now is an alias of the new `IS_ARRAY`
|
|
* `IS_DOCUMENT` now is an alias of the new `IS_OBJECT`
|
|
|
|
The changed also renamed the option `mergeArrays` to `mergeObjects` for AQL
|
|
data-modification query options and HTTP document modification API
|
|
|
|
* AQL: added optimizer rule "remove-filter-covered-by-index"
|
|
|
|
This rule removes FilterNodes and CalculationNodes from an execution plan if the
|
|
filter is already covered by a previous IndexRangeNode. Removing the CalculationNode
|
|
and the FilterNode will speed up query execution because the query requires less
|
|
computation.
|
|
|
|
* AQL: added optimizer rule "remove-sort-rand"
|
|
|
|
This rule removes a `SORT RAND()` expression from a query and moves the random
|
|
iteration into the appropriate `EnumerateCollectionNode`. This is more efficient
|
|
than individually enumerating and then sorting randomly.
|
|
|
|
* AQL: range optimizations for IN and OR
|
|
|
|
This change enables usage of indexes for several additional cases. Filters containing
|
|
the `IN` operator can now make use of indexes, and multiple OR- or AND-combined filter
|
|
conditions can now also use indexes if the filters are accessing the same indexed
|
|
attribute.
|
|
|
|
Here are a few examples of queries that can now use indexes but couldn't before:
|
|
|
|
FOR doc IN collection
|
|
FILTER doc.indexedAttribute == 1 || doc.indexedAttribute > 99
|
|
RETURN doc
|
|
|
|
FOR doc IN collection
|
|
FILTER doc.indexedAttribute IN [ 3, 42 ] || doc.indexedAttribute > 99
|
|
RETURN doc
|
|
|
|
FOR doc IN collection
|
|
FILTER (doc.indexedAttribute > 2 && doc.indexedAttribute < 10) ||
|
|
(doc.indexedAttribute > 23 && doc.indexedAttribute < 42)
|
|
RETURN doc
|
|
|
|
* fixed issue #500: AQL parentheses issue
|
|
|
|
This change allows passing subqueries as AQL function parameters without using
|
|
duplicate brackets (e.g. `FUNC(query)` instead of `FUNC((query))`
|
|
|
|
* added optional `COUNT` clause to AQL `COLLECT`
|
|
|
|
This allows more efficient group count calculation queries, e.g.
|
|
|
|
FOR doc IN collection
|
|
COLLECT age = doc.age WITH COUNT INTO length
|
|
RETURN { age: age, count: length }
|
|
|
|
A count-only query is also possible:
|
|
|
|
FOR doc IN collection
|
|
COLLECT WITH COUNT INTO length
|
|
RETURN length
|
|
|
|
* fixed missing makeDirectory when fetching a Foxx application from a zip file
|
|
|
|
* fixed issue #1134: Change the default endpoint to localhost
|
|
|
|
This change will modify the IP address ArangoDB listens on to 127.0.0.1 by default.
|
|
This will make new ArangoDB installations unaccessible from clients other than
|
|
localhost unless changed. This is a security feature.
|
|
|
|
To make ArangoDB accessible from any client, change the server's configuration
|
|
(`--server.endpoint`) to either `tcp://0.0.0.0:8529` or the server's publicly
|
|
visible IP address.
|
|
|
|
* deprecated `Repository#modelPrototype`. Use `Repository#model` instead.
|
|
|
|
* IMPORTANT CHANGE: by default, system collections are included in replication and all
|
|
replication API return values. This will lead to user accounts and credentials
|
|
data being replicated from master to slave servers. This may overwrite
|
|
slave-specific database users.
|
|
|
|
If this is undesired, the `_users` collection can be excluded from replication
|
|
easily by setting the `includeSystem` attribute to `false` in the following commands:
|
|
|
|
* replication.sync({ includeSystem: false });
|
|
* replication.applier.properties({ includeSystem: false });
|
|
|
|
This will exclude all system collections (including `_aqlfunctions`, `_graphs` etc.)
|
|
from the initial synchronization and the continuous replication.
|
|
|
|
If this is also undesired, it is also possible to specify a list of collections to
|
|
exclude from the initial synchronization and the continuous replication using the
|
|
`restrictCollections` attribute, e.g.:
|
|
|
|
replication.applier.properties({
|
|
includeSystem: true,
|
|
restrictType: "exclude",
|
|
restrictCollections: [ "_users", "_graphs", "foo" ]
|
|
});
|
|
|
|
The HTTP API methods for fetching the replication inventory and for dumping collections
|
|
also support the `includeSystem` control flag via a URL parameter.
|
|
|
|
* removed DEPRECATED replication methods:
|
|
* `replication.logger.start()`
|
|
* `replication.logger.stop()`
|
|
* `replication.logger.properties()`
|
|
* HTTP PUT `/_api/replication/logger-start`
|
|
* HTTP PUT `/_api/replication/logger-stop`
|
|
* HTTP GET `/_api/replication/logger-config`
|
|
* HTTP PUT `/_api/replication/logger-config`
|
|
|
|
* fixed issue #1174, which was due to locking problems in distributed
|
|
AQL execution
|
|
|
|
* improved cluster locking for AQL avoiding deadlocks
|
|
|
|
* use DistributeNode for modifying queries with REPLACE and UPDATE, if
|
|
possible
|
|
|
|
|
|
v2.3.6 (2015-XX-XX)
|
|
-------------------
|
|
|
|
* fixed AQL subquery optimization that produced wrong result when multiple subqueries
|
|
directly followed each other and and a directly following `LET` statement did refer
|
|
to any but the first subquery.
|
|
|
|
|
|
v2.3.5 (2015-01-16)
|
|
-------------------
|
|
|
|
* fixed intermittent 404 errors in Foxx apps after mounting or unmounting apps
|
|
|
|
* fixed issue #1200: Expansion operator results in "Cannot call method 'forEach' of null"
|
|
|
|
* fixed issue #1199: Cannot unlink root node of plan
|
|
|
|
|
|
v2.3.4 (2014-12-23)
|
|
-------------------
|
|
|
|
* fixed cerberus path for MyArangoDB
|
|
|
|
|
|
v2.3.3 (2014-12-17)
|
|
-------------------
|
|
|
|
* fixed error handling in instantiation of distributed AQL queries, this
|
|
also fixes a bug in cluster startup with many servers
|
|
|
|
* issue #1185: parse non-fractional JSON numbers with exponent (e.g. `4e-261`)
|
|
|
|
* issue #1159: allow --server.request-timeout and --server.connect-timeout of 0
|
|
|
|
|
|
v2.3.2 (2014-12-09)
|
|
-------------------
|
|
|
|
* fixed issue #1177: Fix bug in the user app's storage
|
|
|
|
* fixed issue #1173: AQL Editor "Save current query" resets user password
|
|
|
|
* fixed missing makeDirectory when fetching a Foxx application from a zip file
|
|
|
|
* put in warning about default changed: fixed issue #1134: Change the default endpoint to localhost
|
|
|
|
* fixed issue #1163: invalid fullCount value returned from AQL
|
|
|
|
* fixed range operator precedence
|
|
|
|
* limit default maximum number of plans created by AQL optimizer to 256 (from 1024)
|
|
|
|
* make AQL optimizer not generate an extra plan if an index can be used, but modify
|
|
existing plans in place
|
|
|
|
* fixed AQL cursor ttl (time-to-live) issue
|
|
|
|
Any user-specified cursor ttl value was not honored since 2.3.0.
|
|
|
|
* fixed segfault in AQL query hash index setup with unknown shapes
|
|
|
|
* fixed memleaks
|
|
|
|
* added AQL optimizer rule for removing `INTO` from a `COLLECT` statement if not needed
|
|
|
|
* fixed issue #1131
|
|
|
|
This change provides the `KEEP` clause for `COLLECT ... INTO`. The `KEEP` clause
|
|
allows controlling which variables will be kept in the variable created by `INTO`.
|
|
|
|
* fixed issue #1147, must protect dispatcher ID for etcd
|
|
|
|
v2.3.1 (2014-11-28)
|
|
-------------------
|
|
|
|
* recreate password if missing during upgrade
|
|
|
|
* fixed issue #1126
|
|
|
|
* fixed non-working subquery index optimizations
|
|
|
|
* do not restrict summary of Foxx applications to 60 characters
|
|
|
|
* fixed display of "required" path parameters in Foxx application documentation
|
|
|
|
* added more optimizations of constants values in AQL FILTER conditions
|
|
|
|
* fixed invalid or-to-in optimization for FILTERs containing comparisons
|
|
with boolean values
|
|
|
|
* fixed replication of `_graphs` collection
|
|
|
|
* added AQL list functions `PUSH`, `POP`, `UNSHIFT`, `SHIFT`, `REMOVE_VALUES`,
|
|
`REMOVE_VALUE`, `REMOVE_NTH` and `APPEND`
|
|
|
|
* added AQL functions `CALL` and `APPLY` to dynamically call other functions
|
|
|
|
* fixed AQL optimizer cost estimation for LIMIT node
|
|
|
|
* prevent Foxx queues from permanently writing to the journal even when
|
|
server is idle
|
|
|
|
* fixed AQL COLLECT statement with INTO clause, which copied more variables
|
|
than v2.2 and thus lead to too much memory consumption.
|
|
This deals with #1107.
|
|
|
|
* fixed AQL COLLECT statement, this concerned every COLLECT statement,
|
|
only the first group had access to the values of the variables before
|
|
the COLLECT statement. This deals with #1127.
|
|
|
|
* fixed some AQL internals, where sometimes too many items were
|
|
fetched from upstream in the presence of a LIMIT clause. This should
|
|
generally improve performance.
|
|
|
|
|
|
v2.3.0 (2014-11-18)
|
|
-------------------
|
|
|
|
* fixed syslog flags. `--log.syslog` is deprecated and setting it has no effect,
|
|
`--log.facility` now works as described. Application name has been changed from
|
|
`triagens` to `arangod`. It can be changed using `--log.application`. The syslog
|
|
will only contain the actual log message. The datetime prefix is omitted.
|
|
|
|
* fixed deflate in SimpleHttpClient
|
|
|
|
* fixed issue #1104: edgeExamples broken or changed
|
|
|
|
* fixed issue #1103: Error while importing user queries
|
|
|
|
* fixed issue #1100: AQL: HAS() fails on doc[attribute_name]
|
|
|
|
* fixed issue #1098: runtime error when creating graph vertex
|
|
|
|
* hide system applications in **Applications** tab by default
|
|
|
|
Display of system applications can be toggled by using the *system applications*
|
|
toggle in the UI.
|
|
|
|
* added HTTP REST API for managing tasks (`/_api/tasks`)
|
|
|
|
* allow passing character lists as optional parameter to AQL functions `TRIM`,
|
|
`LTRIM` and `RTRIM`
|
|
|
|
These functions now support trimming using custom character lists. If no character
|
|
lists are specified, all whitespace characters will be removed as previously:
|
|
|
|
TRIM(" foobar\t \r\n ") // "foobar"
|
|
TRIM(";foo;bar;baz, ", "; ") // "foo;bar;baz"
|
|
|
|
* added AQL string functions `LTRIM`, `RTRIM`, `FIND_FIRST`, `FIND_LAST`, `SPLIT`,
|
|
`SUBSTITUTE`
|
|
|
|
* added AQL functions `ZIP`, `VALUES` and `PERCENTILE`
|
|
|
|
* made AQL functions `CONCAT` and `CONCAT_SEPARATOR` work with list arguments
|
|
|
|
* dynamically create extra dispatcher threads if required
|
|
|
|
* fixed issue #1097: schemas in the API docs no longer show required properties as optional
|
|
|
|
|
|
v2.3.0-beta2 (2014-11-08)
|
|
-------------------------
|
|
|
|
* front-end: new icons for uploading and downloading JSON documents into a collection
|
|
|
|
* front-end: fixed documents pagination css display error
|
|
|
|
* front-end: fixed flickering of the progress view
|
|
|
|
* front-end: fixed missing event for documents filter function
|
|
|
|
* front-end: jsoneditor: added CMD+Return (Mac) CTRL+Return (Linux/Win) shortkey for
|
|
saving a document
|
|
|
|
* front-end: added information tooltip for uploading json documents.
|
|
|
|
* front-end: added database management view to the collapsed navigation menu
|
|
|
|
* front-end: added collection truncation feature
|
|
|
|
* fixed issue #1086: arangoimp: Odd errors if arguments are not given properly
|
|
|
|
* performance improvements for AQL queries that use JavaScript-based expressions
|
|
internally
|
|
|
|
* added AQL geo functions `WITHIN_RECTANGLE` and `IS_IN_POLYGON`
|
|
|
|
* fixed non-working query results download in AQL editor of web interface
|
|
|
|
* removed debug print message in AQL editor query export routine
|
|
|
|
* fixed issue #1075: Aardvark: user name required even if auth is off #1075
|
|
|
|
The fix for this prefills the username input field with the current user's
|
|
account name if any and `root` (the default username) otherwise. Additionally,
|
|
the tooltip text has been slightly adjusted.
|
|
|
|
* fixed issue #1069: Add 'raw' link to swagger ui so that the raw swagger
|
|
json can easily be retrieved
|
|
|
|
This adds a link to the Swagger API docs to an application's detail view in
|
|
the **Applications** tab of the web interface. The link produces the Swagger
|
|
JSON directly. If authentication is turned on, the link requires authentication,
|
|
too.
|
|
|
|
* documentation updates
|
|
|
|
|
|
v2.3.0-beta1 (2014-11-01)
|
|
-------------------------
|
|
|
|
* added dedicated `NOT IN` operator for AQL
|
|
|
|
Previously, a `NOT IN` was only achievable by writing a negated `IN` condition:
|
|
|
|
FOR i IN ... FILTER ! (i IN [ 23, 42 ]) ...
|
|
|
|
This can now alternatively be expressed more intuitively as follows:
|
|
|
|
FOR i IN ... FILTER i NOT IN [ 23, 42 ] ...
|
|
|
|
* added alternative logical operator syntax for AQL
|
|
|
|
Previously, the logical operators in AQL could only be written as:
|
|
- `&&`: logical and
|
|
- `||`: logical or
|
|
- `!`: negation
|
|
|
|
ArangoDB 2.3 introduces the alternative variants for these operators:
|
|
- `AND`: logical and
|
|
- `OR`: logical or
|
|
- `NOT`: negation
|
|
|
|
The new syntax is just an alternative to the old syntax, allowing easier
|
|
migration from SQL. The old syntax is still fully supported and will be.
|
|
|
|
* improved output of `ArangoStatement.parse()` and POST `/_api/query`
|
|
|
|
If an AQL query can be parsed without problems, The return value of
|
|
`ArangoStatement.parse()` now contains an attribute `ast` with the abstract
|
|
syntax tree of the query (before optimizations). Though this is an internal
|
|
representation of the query and is subject to change, it can be used to inspect
|
|
how ArangoDB interprets a given query.
|
|
|
|
* improved `ArangoStatement.explain()` and POST `/_api/explain`
|
|
|
|
The commands for explaining AQL queries have been improved.
|
|
|
|
* added command-line option `--javascript.v8-contexts` to control the number of
|
|
V8 contexts created in arangod.
|
|
|
|
Previously, the number of V8 contexts was equal to the number of server threads
|
|
(as specified by option `--server.threads`).
|
|
|
|
However, it may be sensible to create different amounts of threads and V8
|
|
contexts. If the option is not specified, the number of V8 contexts created
|
|
will be equal to the number of server threads. Thus no change in configuration
|
|
is required to keep the old behavior.
|
|
|
|
If you are using the default config files or merge them with your local config
|
|
files, please review if the default number of server threads is okay in your
|
|
environment. Additionally you should verify that the number of V8 contexts
|
|
created (as specified in option `--javascript.v8-contexts`) is okay.
|
|
|
|
* the number of server.threads specified is now the minimum of threads
|
|
started. There are situation in which threads are waiting for results of
|
|
distributed database servers. In this case the number of threads is
|
|
dynamically increased.
|
|
|
|
* removed index type "bitarray"
|
|
|
|
Bitarray indexes were only half-way documented and integrated in previous versions
|
|
of ArangoDB so their benefit was limited. The support for bitarray indexes has
|
|
thus been removed in ArangoDB 2.3. It is not possible to create indexes of type
|
|
"bitarray" with ArangoDB 2.3.
|
|
|
|
When a collection is opened that contains a bitarray index definition created
|
|
with a previous version of ArangoDB, ArangoDB will ignore it and log the following
|
|
warning:
|
|
|
|
index type 'bitarray' is not supported in this version of ArangoDB and is ignored
|
|
|
|
Future versions of ArangoDB may automatically remove such index definitions so the
|
|
warnings will eventually disappear.
|
|
|
|
* removed internal "_admin/modules/flush" in order to fix requireApp
|
|
|
|
* added basic support for handling binary data in Foxx
|
|
|
|
Requests with binary payload can be processed in Foxx applications by
|
|
using the new method `res.rawBodyBuffer()`. This will return the unparsed request
|
|
body as a Buffer object.
|
|
|
|
There is now also the method `req.requestParts()` available in Foxx to retrieve
|
|
the individual components of a multipart HTTP request.
|
|
|
|
Buffer objects can now be used when setting the response body of any Foxx action.
|
|
Additionally, `res.send()` has been added as a convenience method for returning
|
|
strings, JSON objects or buffers from a Foxx action:
|
|
|
|
res.send("<p>some HTML</p>");
|
|
res.send({ success: true });
|
|
res.send(new Buffer("some binary data"));
|
|
|
|
The convenience method `res.sendFile()` can now be used to easily return the
|
|
contents of a file from a Foxx action:
|
|
|
|
res.sendFile(applicationContext.foxxFilename("image.png"));
|
|
|
|
`fs.write` now accepts not only strings but also Buffer objects as second parameter:
|
|
|
|
fs.write(filename, "some data");
|
|
fs.write(filename, new Buffer("some binary data"));
|
|
|
|
`fs.readBuffer` can be used to return the contents of a file in a Buffer object.
|
|
|
|
* improved performance of insertion into non-unique hash indexes significantly in case
|
|
many duplicate keys are used in the index
|
|
|
|
* issue #1042: set time zone in log output
|
|
|
|
the command-line option `--log.use-local-time` was added to print dates and times in
|
|
the server-local timezone instead of UTC
|
|
|
|
* command-line options that require a boolean value now validate the
|
|
value given on the command-line
|
|
|
|
This prevents issues if no value is specified for an option that
|
|
requires a boolean value. For example, the following command-line would
|
|
have caused trouble in 2.2, because `--server.endpoint` would have been
|
|
used as the value for the `--server.disable-authentication` options
|
|
(which requires a boolean value):
|
|
|
|
arangod --server.disable-authentication --server.endpoint tcp://127.0.0.1:8529 data
|
|
|
|
In 2.3, running this command will fail with an error and requires to
|
|
be modified to:
|
|
|
|
arangod --server.disable-authentication true --server.endpoint tcp://127.0.0.1:8529 data
|
|
|
|
* improved performance of CSV import in arangoimp
|
|
|
|
* fixed issue #1027: Stack traces are off-by-one
|
|
|
|
* fixed issue #1026: Modules loaded in different files within the same app
|
|
should refer to the same module
|
|
|
|
* fixed issue #1025: Traversal not as expected in undirected graph
|
|
|
|
* added a _relation function in the general-graph module.
|
|
|
|
This deprecated _directedRelation and _undirectedRelation.
|
|
ArangoDB does not offer any constraints for undirected edges
|
|
which caused some confusion of users how undirected relations
|
|
have to be handled. Relation now only supports directed relations
|
|
and the user can actively simulate undirected relations.
|
|
|
|
* changed return value of Foxx.applicationContext#collectionName:
|
|
|
|
Previously, the function could return invalid collection names because
|
|
invalid characters were not replaced in the application name prefix, only
|
|
in the collection name passed.
|
|
|
|
Now, the function replaces invalid characters also in the application name
|
|
prefix, which might to slightly different results for application names that
|
|
contained any characters outside the ranges [a-z], [A-Z] and [0-9].
|
|
|
|
* prevent XSS in AQL editor and logs view
|
|
|
|
* integrated tutorial into ArangoShell and web interface
|
|
|
|
* added option `--backslash-escape` for arangoimp when running CSV file imports
|
|
|
|
* front-end: added download feature for (filtered) documents
|
|
|
|
* front-end: added download feature for the results of a user query
|
|
|
|
* front-end: added function to move documents to another collection
|
|
|
|
* front-end: added sort-by attribute to the documents filter
|
|
|
|
* front-end: added sorting feature to database, graph management and user management view.
|
|
|
|
* issue #989: front-end: Databases view not refreshing after deleting a database
|
|
|
|
* issue #991: front-end: Database search broken
|
|
|
|
* front-end: added infobox which shows more information about a document (_id, _rev, _key) or
|
|
an edge (_id, _rev, _key, _from, _to). The from and to attributes are clickable and redirect
|
|
to their document location.
|
|
|
|
* front-end: added edit-mode for deleting multiple documents at the same time.
|
|
|
|
* front-end: added delete button to the detailed document/edge view.
|
|
|
|
* front-end: added visual feedback for saving documents/edges inside the editor (error/success).
|
|
|
|
* front-end: added auto-focusing for the first input field in a modal.
|
|
|
|
* front-end: added validation for user input in a modal.
|
|
|
|
* front-end: user defined queries are now stored inside the database and are bound to the current
|
|
user, instead of using the local storage functionality of the browsers. The outcome of this is
|
|
that user defined queries are now independently usable from any device. Also queries can now be
|
|
edited through the standard document editor of the front-end through the _users collection.
|
|
|
|
* front-end: added import and export functionality for user defined queries.
|
|
|
|
* front-end: added new keywords and functions to the aql-editor theme
|
|
|
|
* front-end: applied tile-style to the graph view
|
|
|
|
* front-end: now using the new graph api including multi-collection support
|
|
|
|
* front-end: foxx apps are now deletable
|
|
|
|
* front-end: foxx apps are now installable and updateable through github, if github is their
|
|
origin.
|
|
|
|
* front-end: added foxx app version control. Multiple versions of a single foxx app are now
|
|
installable and easy to manage and are also arranged in groups.
|
|
|
|
* front-end: the user-set filter of a collection is now stored until the user navigates to
|
|
another collection.
|
|
|
|
* front-end: fetching and filtering of documents, statistics, and query operations are now
|
|
handled with asynchronous ajax calls.
|
|
|
|
* front-end: added progress indicator if the front-end is waiting for a server operation.
|
|
|
|
* front-end: fixed wrong count of documents in the documents view of a collection.
|
|
|
|
* front-end: fixed unexpected styling of the manage db view and navigation.
|
|
|
|
* front-end: fixed wrong handling of select fields in a modal view.
|
|
|
|
* front-end: fixed wrong positioning of some tooltips.
|
|
|
|
* automatically call `toJSON` function of JavaScript objects (if present)
|
|
when serializing them into database documents. This change allows
|
|
storing JavaScript date objects in the database in a sensible manner.
|
|
|
|
|
|
v2.2.7 (2014-11-19)
|
|
-------------------
|
|
|
|
* fixed issue #998: Incorrect application URL for non-system Foxx apps
|
|
|
|
* fixed issue #1079: AQL editor: keyword WITH in UPDATE query is not highlighted
|
|
|
|
* fix memory leak in cluster nodes
|
|
|
|
* fixed registration of AQL user-defined functions in Web UI (JS shell)
|
|
|
|
* fixed error display in Web UI for certain errors
|
|
(now error message is printed instead of 'undefined')
|
|
|
|
* fixed issue #1059: bug in js module console
|
|
|
|
* fixed issue #1056: "fs": zip functions fail with passwords
|
|
|
|
* fixed issue #1063: Docs: measuring unit of --wal.logfile-size?
|
|
|
|
* fixed issue #1062: Docs: typo in 14.2 Example data
|
|
|
|
|
|
v2.2.6 (2014-10-20)
|
|
-------------------
|
|
|
|
* fixed issue #972: Compilation Issue
|
|
|
|
* fixed issue #743: temporary directories are now unique and one can read
|
|
off the tool that created them, if empty, they are removed atexit
|
|
|
|
* Highly improved performance of all AQL GRAPH_* functions.
|
|
|
|
* Orphan collections in general graphs can now be found via GRAPH_VERTICES
|
|
if either "any" or no direction is defined
|
|
|
|
* Fixed documentation for AQL function GRAPH_NEIGHBORS.
|
|
The option "vertexCollectionRestriction" is meant to filter the target
|
|
vertices only, and should not filter the path.
|
|
|
|
* Fixed a bug in GRAPH_NEIGHBORS which enforced only empty results
|
|
under certain conditions
|
|
|
|
|
|
v2.2.5 (2014-10-09)
|
|
-------------------
|
|
|
|
* fixed issue #961: allow non-JSON values in undocument request bodies
|
|
|
|
* fixed issue 1028: libicu is now statically linked
|
|
|
|
* fixed cached lookups of collections on the server, which may have caused spurious
|
|
problems after collection rename operations
|
|
|
|
|
|
v2.2.4 (2014-10-01)
|
|
-------------------
|
|
|
|
* fixed accessing `_from` and `_to` attributes in `collection.byExample` and
|
|
`collection.firstExample`
|
|
|
|
These internal attributes were not handled properly in the mentioned functions, so
|
|
searching for them did not always produce documents
|
|
|
|
* fixed issue #1030: arangoimp 2.2.3 crashing, not logging on large Windows CSV file
|
|
|
|
* fixed issue #1025: Traversal not as expected in undirected graph
|
|
|
|
* fixed issue #1020
|
|
|
|
This requires re-introducing the startup option `--database.force-sync-properties`.
|
|
|
|
This option can again be used to force fsyncs of collection, index and database properties
|
|
stored as JSON strings on disk in files named `parameter.json`. Syncing these files after
|
|
a write may be necessary if the underlying storage does not sync file contents by itself
|
|
in a "sensible" amount of time after a file has been written and closed.
|
|
|
|
The default value is `true` so collection, index and database properties will always be
|
|
synced to disk immediately. This affects creating, renaming and dropping collections as
|
|
well as creating and dropping databases and indexes. Each of these operations will perform
|
|
an additional fsync on the `parameter.json` file if the option is set to `true`.
|
|
|
|
It might be sensible to set this option to `false` for workloads that create and drop a
|
|
lot of collections (e.g. test runs).
|
|
|
|
Document operations such as creating, updating and dropping documents are not affected
|
|
by this option.
|
|
|
|
* fixed issue #1016: AQL editor bug
|
|
|
|
* fixed issue #1014: WITHIN function returns wrong distance
|
|
|
|
* fixed AQL shortest path calculation in function `GRAPH_SHORTEST_PATH` to return
|
|
complete vertex objects instead of just vertex ids
|
|
|
|
* allow changing of attributes of documents stored in server-side JavaScript variables
|
|
|
|
Previously, the following did not work:
|
|
|
|
var doc = db.collection.document(key);
|
|
doc._key = "abc"; // overwriting internal attributes not supported
|
|
doc.value = 123; // overwriting existing attributes not supported
|
|
|
|
Now, modifying documents stored in server-side variables (e.g. `doc` in the above case)
|
|
is supported. Modifying the variables will not update the documents in the database,
|
|
but will modify the JavaScript object (which can be written back to the database using
|
|
`db.collection.update` or `db.collection.replace`)
|
|
|
|
* fixed issue #997: arangoimp apparently doesn't support files >2gig on Windows
|
|
|
|
large file support (requires using `_stat64` instead of `stat`) is now supported on
|
|
Windows
|
|
|
|
|
|
v2.2.3 (2014-09-02)
|
|
-------------------
|
|
|
|
* added `around` for Foxx controller
|
|
|
|
* added `type` option for HTTP API `GET /_api/document?collection=...`
|
|
|
|
This allows controlling the type of results to be returned. By default, paths to
|
|
documents will be returned, e.g.
|
|
|
|
[
|
|
`/_api/document/test/mykey1`,
|
|
`/_api/document/test/mykey2`,
|
|
...
|
|
]
|
|
|
|
To return a list of document ids instead of paths, the `type` URL parameter can be
|
|
set to `id`:
|
|
|
|
[
|
|
`test/mykey1`,
|
|
`test/mykey2`,
|
|
...
|
|
]
|
|
|
|
To return a list of document keys only, the `type` URL parameter can be set to `key`:
|
|
|
|
[
|
|
`mykey1`,
|
|
`mykey2`,
|
|
...
|
|
]
|
|
|
|
|
|
* properly capitalize HTTP response header field names in case the `x-arango-async`
|
|
HTTP header was used in a request.
|
|
|
|
* fixed several documentation issues
|
|
|
|
* speedup for several general-graph functions, AQL functions starting with `GRAPH_`
|
|
and traversals
|
|
|
|
|
|
v2.2.2 (2014-08-08)
|
|
-------------------
|
|
|
|
* allow storing non-reserved attribute names starting with an underscore
|
|
|
|
Previous versions of ArangoDB parsed away all attribute names that started with an
|
|
underscore (e.g. `_test', '_foo', `_bar`) on all levels of a document (root level
|
|
and sub-attribute levels). While this behavior was documented, it was unintuitive and
|
|
prevented storing documents inside other documents, e.g.:
|
|
|
|
{
|
|
"_key" : "foo",
|
|
"_type" : "mydoc",
|
|
"references" : [
|
|
{
|
|
"_key" : "something",
|
|
"_rev" : "...",
|
|
"value" : 1
|
|
},
|
|
{
|
|
"_key" : "something else",
|
|
"_rev" : "...",
|
|
"value" : 2
|
|
}
|
|
]
|
|
}
|
|
|
|
In the above example, previous versions of ArangoDB removed all attributes and
|
|
sub-attributes that started with underscores, meaning the embedded documents would lose
|
|
some of their attributes. 2.2.2 should preserve such attributes, and will also allow
|
|
storing user-defined attribute names on the top-level even if they start with underscores
|
|
(such as `_type` in the above example).
|
|
|
|
* fix conversion of JavaScript String, Number and Boolean objects to JSON.
|
|
|
|
Objects created in JavaScript using `new Number(...)`, `new String(...)`, or
|
|
`new Boolean(...)` were not converted to JSON correctly.
|
|
|
|
* fixed a race condition on task registration (i.e. `require("org/arangodb/tasks").register()`)
|
|
|
|
this race condition led to undefined behavior when a just-created task with no offset and
|
|
no period was instantly executed and deleted by the task scheduler, before the `register`
|
|
function returned to the caller.
|
|
|
|
* changed run-tests.sh to execute all suitable tests.
|
|
|
|
* switch to new version of gyp
|
|
|
|
* fixed upgrade button
|
|
|
|
|
|
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: <data> 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: <data> 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.<collection>.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/<collection>/<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/<username>`
|
|
|
|
* 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(<name>)`
|
|
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=<some boundary value>`. 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/<database name>/_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 #<ShapedJson>
|
|
|
|
* 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 `<app-path>/databases/<database-name>/<app-name>`.
|
|
|
|
System apps are shared between all databases. They reside in `<app-path>/system/<app-name>`.
|
|
|
|
* 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(<name>);
|
|
|
|
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(<name>)`.
|
|
|
|
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/<name>` or the shell command `db._dropDatabase(<name>);`.
|
|
|
|
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/<name>/` 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(<host>) 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(<withData>) 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(<count>, <byteSize>);`
|
|
|
|
It is supported to specify just a count as in ArangoDB 1.3 and before, to specify
|
|
just a fileSize, or both. The first met constraint will trigger the automated
|
|
document removal.
|
|
|
|
* added `db._exists(doc)` and `collection.exists(doc)` for easy document existence checks
|
|
|
|
* added API `/_api/current-database` to retrieve information about the database the
|
|
client is currently connected to (note: the API `/_api/current-database` has been
|
|
removed in the meantime. The functionality is accessible via `/_api/database/current`
|
|
now).
|
|
|
|
* ensure a proper order of tick values in datafiles/journals/compactors.
|
|
any new files written will have the _tick values of their markers in order. for
|
|
older files, there are edge cases at the beginning and end of the datafiles when
|
|
_tick values are not properly in order.
|
|
|
|
* prevent caching of static pages in PathHandler.
|
|
whenever a static page is requested that is served by the general PathHandler, the
|
|
server will respond to HTTP GET requests with a "Cache-Control: max-age=86400" header.
|
|
|
|
* added "doCompact" attribute when creating collections and to collection.properties().
|
|
The attribute controls whether collection datafiles are compacted.
|
|
|
|
* changed the HTTP return code from 400 to 404 for some cases when there is a referral
|
|
to a non-existing collection or document.
|
|
|
|
* introduced error code 1909 `too many iterations` that is thrown when graph traversals
|
|
hit the `maxIterations` threshold.
|
|
|
|
* optionally limit traversals to a certain number of iterations
|
|
the limitation can be achieved via the traversal API by setting the `maxIterations`
|
|
attribute, and also via the AQL `TRAVERSAL` and `TRAVERSAL_TREE` functions by setting
|
|
the same attribute. If traversals are not limited by the end user, a server-defined
|
|
limit for `maxIterations` may be used to prevent server-side traversals from running
|
|
endlessly.
|
|
|
|
* added graph traversal API at `/_api/traversal`
|
|
|
|
* added "API" link in web interface, pointing to REST API generated with Swagger
|
|
|
|
* moved "About" link in web interface into "links" menu
|
|
|
|
* allow incremental access to the documents in a collection from out of AQL
|
|
this allows reading documents from a collection chunks when a full collection scan
|
|
is required. memory usage might be must lower in this case and queries might finish
|
|
earlier if there is an additional LIMIT statement
|
|
|
|
* changed AQL COLLECT to use a stable sort, so any previous SORT order is preserved
|
|
|
|
* issue #547: Javascript error in the web interface
|
|
|
|
* issue #550: Make AQL graph functions support key in addition to id
|
|
|
|
* issue #526: Unable to escape when an errorneous command is entered into the js shell
|
|
|
|
* issue #523: Graph and vertex methods for the javascript api
|
|
|
|
* issue #517: Foxx: Route parameters with capital letters fail
|
|
|
|
* issue #512: Binded Parameters for LIMIT
|
|
|
|
|
|
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/<name>/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/<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 resultset-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.<coll_name>.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 <collection>.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.<collection>.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 <log.file> 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
|