forked from arangodb/arangodb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGELOG
7963 lines (5290 loc) · 314 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
devel
-----
* added a memory expection of V8 memory gets to low
* fixed epoch computation in hybrid logical clock
* fixed thread affinity
* replaced require("internal").db by require("@arangodb").db
* added option `--skip-lines` for arangoimp
this allows skipping the first few lines from the import file in case the
CSV or TSV import are used
* fixed periodic jobs: there should be only one instance running - even if it
runs longer than the period
* improved performance of primary index and edge index lookups
* optimizations for AQL `[*]` operator in case no filter, no projection and
no offset/limit are used
* added AQL function `OUTERSECTION` to return the symmetric difference of its
input arguments
* Foxx manifests of installed services are now saved to disk with indentation
* Foxx tests and scripts in development mode should now always respect updated
files instead of loading stale modules
* When disabling Foxx development mode the setup script is now re-run
* Foxx now provides an easy way to directly serve GraphQL requests using the
`@arangodb/foxx/graphql` module and the bundled `graphql-sync` dependency
* Foxx OAuth2 module now correctly passes the `access_token` to the OAuth2 server
* added iconv-lite and timezone modules
v3.0.5 (XXXX-XX-XX)
-------------------
* execute AQL ternary operator via C++ if possible
* fixed issue #1977
* fixed extraction of _id attribute in AQL traversal conditions
* fix SSL agency endpoint
v3.0.4 (2016-08-01)
-------------------
* added missing lock for periodic jobs access
* fix multiple foxx related cluster issues
* fix handling of empty AQL query strings
* fixed issue in `INTERSECTION` AQL function with duplicate elements
in the source arrays
* fixed issue #1970
* fixed issue #1968
* fixed issue #1967
* fixed issue #1962
* fixed issue #1959
* replaced require("internal").db by require("@arangodb").db
* fixed issue #1954
* fixed issue #1953
* fixed issue #1950
* fixed issue #1949
* fixed segfault in V8, by backporting https://bugs.chromium.org/p/v8/issues/detail?id=5033
* Foxx OAuth2 module now correctly passes the `access_token` to the OAuth2 server
v3.0.3 (2016-07-17)
-------------------
* fixed issue #1942
* fixed issue #1941
* fixed array index batch insertion issues for hash indexes that caused problems when
no elements remained for insertion
* fixed AQL MERGE() function with External objects originating from traversals
* fixed some logfile recovery errors with error message "document not found"
* fixed issue #1937
* fixed issue #1936
* improved performance of arangorestore in clusters with synchronous
replication
v3.0.2 (2016-07-09)
-------------------
* fixed assertion failure in case multiple remove operations were used in the same query
* fixed upsert behavior in case upsert was used in a loop with the same document example
* fixed issue #1930
* don't expose local file paths in Foxx error messages.
* fixed issue #1929
* make arangodump dump the attribute `isSystem` when dumping the structure
of a collection, additionally make arangorestore not fail when the attribute
is missing
* fixed "Could not extract custom attribute" issue when using COLLECT with
MIN/MAX functions in some contexts
* honor presence of persistent index for sorting
* make AQL query optimizer not skip "use-indexes-rule", even if enough
plans have been created already
* make AQL optimizer not skip "use-indexes-rule", even if enough execution plans
have been created already
* fix double precision value loss in VelocyPack JSON parser
* added missing SSL support for arangorestore
* improved cluster import performance
* fix Foxx thumbnails on DC/OS
* fix Foxx configuration not being saved
* fix Foxx app access from within the frontend on DC/OS
* add option --default-replication-factor to arangorestore and simplify
the control over the number of shards when restoring
* fix a bug in the VPack -> V8 conversion if special attributes _key,
_id, _rev, _from and _to had non-string values, which is allowed
below the top level
* fix malloc_usable_size for darwin
v3.0.1 (XXXX-XX-XX)
-------------------
* increase max. number of collections in AQL queries from 32 to 256
* fixed issue #1916: header "authorization" is required" when opening
services page
* fixed issue #1915: Explain: member out of range
* fixed issue #1914: fix unterminated buffer
* don't remove lockfile if we are the same (now stale) pid
fixes docker setups (our pid will always be 1)
* do not use revision id comparisons in compaction for determining whether a
revision is obsolete, but marker memory addresses
this ensures revision ids don't matter when compacting documents
* escape Unicode characters in JSON HTTP responses
this converts UTF-8 characters in HTTP responses of arangod into `\uXXXX`
escape sequences. This makes the HTTP responses fit into the 7 bit ASCII
character range, which speeds up HTTP response parsing for some clients,
namely node.js/v8
* add write before read collections when starting a user transaction
this allows specifying the same collection in both read and write mode without
unintended side effects
* fixed buffer overrun that occurred when building very large result sets
* index lookup optimizations for primary index and edge index
* fixed "collection is a nullptr" issue when starting a traversal from a transaction
* enable /_api/import on coordinator servers
v3.0.0 (2016-06-22)
-------------------
* minor GUI fixxes
* fix for replication and nonces
v3.0.0-rc3 (2016-06-19)
-----------------------
* renamed various Foxx errors to no longer refer to Foxx services as apps
* adjusted various error messages in Foxx to be more informative
* specifying "files" in a Foxx manifest to be mounted at the service root
no longer results in 404s when trying to access non-file routes
* undeclared path parameters in Foxx no longer break the service
* trusted reverse proxy support is now handled more consistently
* ArangoDB request compatibility and user are now exposed in Foxx
* all bundled NPM modules have been upgraded to their latest versions
v3.0.0-rc2 (2015-06-12)
-----------------------
* added option `--server.max-packet-size` for client tools
* renamed option `--server.ssl-protocol` to `--ssl.protocol` in client tools
(was already done for arangod, but overlooked for client tools)
* fix handling of `--ssl.protocol` value 5 (TLS v1.2) in client tools, which
claimed to support it but didn't
v3.0.0-rc1 (2015-06-10)
-----------------------
* forward ported V8 Comparator bugfix for inline heuristics from
https://github.com/v8/v8/commit/5ff7901e24c2c6029114567de5a08ed0f1494c81
* changed to-string conversion for AQL objects and arrays, used by the AQL
function `TO_STRING()` and implicit to-string casts in AQL
- arrays are now converted into their JSON-stringify equivalents, e.g.
- `[ ]` is now converted to `[]`
- `[ 1, 2, 3 ]` is now converted to `[1,2,3]`
- `[ "test", 1, 2 ] is now converted to `["test",1,2]`
Previous versions of ArangoDB converted arrays with no members into the
empty string, and non-empty arrays into a comma-separated list of member
values, without the surrounding angular brackets. Additionally, string
array members were not enclosed in quotes in the result string:
- `[ ]` was converted to ``
- `[ 1, 2, 3 ]` was converted to `1,2,3`
- `[ "test", 1, 2 ] was converted to `test,1,2`
- objects are now converted to their JSON-stringify equivalents, e.g.
- `{ }` is converted to `{}`
- `{ a: 1, b: 2 }` is converted to `{"a":1,"b":2}`
- `{ "test" : "foobar" }` is converted to `{"test":"foobar"}`
Previous versions of ArangoDB always converted objects into the string
`[object Object]`
This change affects also the AQL functions `CONCAT()` and `CONCAT_SEPARATOR()`
which treated array values differently in previous versions. Previous versions
of ArangoDB automatically flattened array values on the first level of the array,
e.g. `CONCAT([1, 2, 3, [ 4, 5, 6 ]])` produced `1,2,3,4,5,6`. Now this will produce
`[1,2,3,[4,5,6]]`. To flatten array members on the top level, you can now use
the more explicit `CONCAT(FLATTEN([1, 2, 3, [4, 5, 6]], 1))`.
* added C++ implementations for AQL functions `SLICE()`, `CONTAINS()` and
`RANDOM_TOKEN()`
* as a consequence of the upgrade to V8 version 5, the implementation of the
JavaScript `Buffer` object had to be changed. JavaScript `Buffer` objects in
ArangoDB now always store their data on the heap. There is no shared pool
for small Buffer values, and no pointing into existing Buffer data when
extracting slices. This change may increase the cost of creating Buffers with
short contents or when peeking into existing Buffers, but was required for
safer memory management and to prevent leaks.
* the `db` object's function `_listDatabases()` was renamed to just `_databases()`
in order to make it more consistent with the existing `_collections()` function.
Additionally the `db` object's `_listEndpoints()` function was renamed to just
`_endpoints()`.
* changed default value of `--server.authentication` from `false` to `true` in
configuration files etc/relative/arangod.conf and etc/arangodb/arangod.conf.in.
This means the server will be started with authentication enabled by default,
requiring all client connections to provide authentication data when connecting
to ArangoDB. Authentication can still be turned off via setting the value of
`--server.authentication` to `false` in ArangoDB's configuration files or by
specifying the option on the command-line.
* Changed result format for querying all collections via the API GET `/_api/collection`.
Previous versions of ArangoDB returned an object with an attribute named `collections`
and an attribute named `names`. Both contained all available collections, but
`collections` contained the collections as an array, and `names` contained the
collections again, contained in an object in which the attribute names were the
collection names, e.g.
```
{
"collections": [
{"id":"5874437","name":"test","isSystem":false,"status":3,"type":2},
{"id":"17343237","name":"something","isSystem":false,"status":3,"type":2},
...
],
"names": {
"test": {"id":"5874437","name":"test","isSystem":false,"status":3,"type":2},
"something": {"id":"17343237","name":"something","isSystem":false,"status":3,"type":2},
...
}
}
```
This result structure was redundant, and therefore has been simplified to just
```
{
"result": [
{"id":"5874437","name":"test","isSystem":false,"status":3,"type":2},
{"id":"17343237","name":"something","isSystem":false,"status":3,"type":2},
...
]
}
```
in ArangoDB 3.0.
* added AQL functions `TYPENAME()` and `HASH()`
* renamed arangob tool to arangobench
* added AQL string comparison operator `LIKE`
The operator can be used to compare strings like this:
value LIKE search
The operator is currently implemented by calling the already existing AQL
function `LIKE`.
This change also makes `LIKE` an AQL keyword. Using `LIKE` in either case as
an attribute or collection name in AQL thus requires quoting.
* make AQL optimizer rule "remove-unnecessary-calculations" fire in more cases
The rule will now remove calculations that are used exactly once in other
expressions (e.g. `LET a = doc RETURN a.value`) and calculations,
or calculations that are just references (e.g. `LET a = b`).
* renamed AQL optimizer rule "merge-traversal-filter" to "optimize-traversals"
Additionally, the optimizer rule will remove unused edge and path result variables
from the traversal in case they are specified in the `FOR` section of the traversal,
but not referenced later in the query. This saves constructing edges and paths
results.
* added AQL optimizer rule "inline-subqueries"
This rule can pull out certain subqueries that are used as an operand to a `FOR`
loop one level higher, eliminating the subquery completely. For example, the query
FOR i IN (FOR j IN [1,2,3] RETURN j) RETURN i
will be transformed by the rule to:
FOR i IN [1,2,3] RETURN i
The query
FOR name IN (FOR doc IN _users FILTER doc.status == 1 RETURN doc.name) LIMIT 2 RETURN name
will be transformed into
FOR tmp IN _users FILTER tmp.status == 1 LIMIT 2 RETURN tmp.name
The rule will only fire when the subquery is used as an operand to a `FOR` loop, and
if the subquery does not contain a `COLLECT` with an `INTO` variable.
* added new endpoint "srv://" for DNS service records
* The result order of the AQL functions VALUES and ATTRIBUTES has never been
guaranteed and it only had the "correct" ordering by accident when iterating
over objects that were not loaded from the database. This accidental behavior
is now changed by introduction of VelocyPack. No ordering is guaranteed unless
you specify the sort parameter.
* removed configure option `--enable-logger`
* added AQL array comparison operators
All AQL comparison operators now also exist in an array variant. In the
array variant, the operator is preceded with one of the keywords *ALL*, *ANY*
or *NONE*. Using one of these keywords changes the operator behavior to
execute the comparison operation for all, any, or none of its left hand
argument values. It is therefore expected that the left hand argument
of an array operator is an array.
Examples:
[ 1, 2, 3 ] ALL IN [ 2, 3, 4 ] // false
[ 1, 2, 3 ] ALL IN [ 1, 2, 3 ] // true
[ 1, 2, 3 ] NONE IN [ 3 ] // false
[ 1, 2, 3 ] NONE IN [ 23, 42 ] // true
[ 1, 2, 3 ] ANY IN [ 4, 5, 6 ] // false
[ 1, 2, 3 ] ANY IN [ 1, 42 ] // true
[ 1, 2, 3 ] ANY == 2 // true
[ 1, 2, 3 ] ANY == 4 // false
[ 1, 2, 3 ] ANY > 0 // true
[ 1, 2, 3 ] ANY <= 1 // true
[ 1, 2, 3 ] NONE < 99 // false
[ 1, 2, 3 ] NONE > 10 // true
[ 1, 2, 3 ] ALL > 2 // false
[ 1, 2, 3 ] ALL > 0 // true
[ 1, 2, 3 ] ALL >= 3 // false
["foo", "bar"] ALL != "moo" // true
["foo", "bar"] NONE == "bar" // false
["foo", "bar"] ANY == "foo" // true
* improved AQL optimizer to remove unnecessary sort operations in more cases
* allow enclosing AQL identifiers in forward ticks in addition to using
backward ticks
This allows for convenient writing of AQL queries in JavaScript template strings
(which are delimited with backticks themselves), e.g.
var q = `FOR doc IN ´collection´ RETURN doc.´name´`;
* allow to set `print.limitString` to configure the number of characters
to output before truncating
* make logging configurable per log "topic"
`--log.level <level>` sets the global log level to <level>, e.g. `info`,
`debug`, `trace`.
`--log.level topic=<level>` sets the log level for a specific topic.
Currently, the following topics exist: `collector`, `compactor`, `mmap`,
`performance`, `queries`, and `requests`. `performance` and `requests` are
set to FATAL by default. `queries` is set to info. All others are
set to the global level by default.
The new log option `--log.output <definition>` allows directing the global
or per-topic log output to different outputs. The output definition
"<definition>" can be one of
"-" for stdin
"+" for stderr
"syslog://<syslog-facility>"
"syslog://<syslog-facility>/<application-name>"
"file://<relative-path>"
The option can be specified multiple times in order to configure the output
for different log topics. To set up a per-topic output configuration, use
`--log.output <topic>=<definition>`, e.g.
queries=file://queries.txt
logs all queries to the file "queries.txt".
* the option `--log.requests-file` is now deprecated. Instead use
`--log.level requests=info`
`--log.output requests=file://requests.txt`
* the option `--log.facility` is now deprecated. Instead use
`--log.output requests=syslog://facility`
* the option `--log.performance` is now deprecated. Instead use
`--log.level performance=trace`
* removed option `--log.source-filter`
* removed configure option `--enable-logger`
* change collection directory names to include a random id component at the end
The new pattern is `collection-<id>-<random>`, where `<id>` is the collection
id and `<random>` is a random number. Previous versions of ArangoDB used a
pattern `collection-<id>` without the random number.
ArangoDB 3.0 understands both the old and name directory name patterns.
* removed mostly unused internal spin-lock implementation
* removed support for pre-Windows 7-style locks. This removes compatibility for
Windows versions older than Windows 7 (e.g. Windows Vista, Windows XP) and
Windows 2008R2 (e.g. Windows 2008).
* changed names of sub-threads started by arangod
* added option `--default-number-of-shards` to arangorestore, allowing creating
collections with a specifiable number of shards from a non-cluster dump
* removed support for CoffeeScript source files
* removed undocumented SleepAndRequeue
* added WorkMonitor to inspect server threads
* when downloading a Foxx service from the web interface the suggested filename
is now based on the service's mount path instead of simply "app.zip"
* the `@arangodb/request` response object now stores the parsed JSON response
body in a property `json` instead of `body` when the request was made using the
`json` option. The `body` instead contains the response body as a string.
* the Foxx API has changed significantly, 2.8 services are still supported
using a backwards-compatible "legacy mode"
v2.8.11 (XXXX-XX-XX)
--------------------
* fixed issue #1937
v2.8.10 (2016-07-01)
--------------------
* make sure next local _rev value used for a document is at least as high as the
_rev value supplied by external sources such as replication
* make adding a collection in both read- and write-mode to a transaction behave as
expected (write includes read). This prevents the `unregister collection used in
transaction` error
* fixed sometimes invalid result for `byExample(...).count()` when an index plus
post-filtering was used
* fixed "collection is a nullptr" issue when starting a traversal from a transaction
* honor the value of startup option `--database.wait-for-sync` (that is used to control
whether new collections are created with `waitForSync` set to `true` by default) also
when creating collections via the HTTP API (and thus the ArangoShell). When creating
a collection via these mechanisms, the option was ignored so far, which was inconsistent.
* fixed issue #1826: arangosh --javascript.execute: internal error (geo index issue)
* fixed issue #1823: Arango crashed hard executing very simple query on windows
v2.8.9 (2016-05-13)
-------------------
* fixed escaping and quoting of extra parameters for executables in Mac OS X App
* added "waiting for" status variable to web interface collection figures view
* fixed undefined behavior in query cache invaldation
* fixed access to /_admin/statistics API in case statistics are disable via option
`--server.disable-statistics`
* Foxx manager will no longer fail hard when Foxx store is unreachable unless installing
a service from the Foxx store (e.g. when behind a firewall or GitHub is unreachable).
v2.8.8 (2016-04-19)
-------------------
* fixed issue #1805: Query: internal error (location: arangod/Aql/AqlValue.cpp:182).
Please report this error to arangodb.com (while executing)
* allow specifying collection name prefixes for `_from` and `_to` in arangoimp:
To avoid specifying complete document ids (consisting of collection names and document
keys) for *_from* and *_to* values when importing edges with arangoimp, there are now
the options *--from-collection-prefix* and *--to-collection-prefix*.
If specified, these values will be automatically prepended to each value in *_from*
(or *_to* resp.). This allows specifying only document keys inside *_from* and/or *_to*.
*Example*
> arangoimp --from-collection-prefix users --to-collection-prefix products ...
Importing the following document will then create an edge between *users/1234* and
*products/4321*:
```js
{ "_from" : "1234", "_to" : "4321", "desc" : "users/1234 is connected to products/4321" }
```
* requests made with the interactive system API documentation in the web interface
(Swagger) will now respect the active database instead of always using `_system`
v2.8.7 (2016-04-07)
-------------------
* optimized primary=>secondary failover
* fix to-boolean conversion for documents in AQL
* expose the User-Agent HTTP header from the ArangoShell since Github seems to
require it now, and we use the ArangoShell for fetching Foxx repositories from Github
* work with http servers that only send
* fixed potential race condition between compactor and collector threads
* fix removal of temporary directories on arangosh exit
* javadoc-style comments in Foxx services are no longer interpreted as
Foxx comments outside of controller/script/exports files (#1748)
* removed remaining references to class syntax for Foxx Model and Repository
from the documentation
* added a safe-guard for corrupted master-pointer
v2.8.6 (2016-03-23)
-------------------
* arangosh can now execute JavaScript script files that contain a shebang
in the first line of the file. This allows executing script files directly.
Provided there is a script file `/path/to/script.js` with the shebang
`#!arangosh --javascript.execute`:
> cat /path/to/script.js
#!arangosh --javascript.execute
print("hello from script.js");
If the script file is made executable
> chmod a+x /path/to/script.js
it can be invoked on the shell directly and use arangosh for its execution:
> /path/to/script.js
hello from script.js
This did not work in previous versions of ArangoDB, as the whole script contents
(including the shebang) were treated as JavaScript code.
Now shebangs in script files will now be ignored for all files passed to arangosh's
`--javascript.execute` parameter.
The alternative way of executing a JavaScript file with arangosh still works:
> arangosh --javascript.execute /path/to/script.js
hello from script.js
* added missing reset of traversal state for nested traversals.
The state of nested traversals (a traversal in an AQL query that was
located in a repeatedly executed subquery or inside another FOR loop)
was not reset properly, so that multiple invocations of the same nested
traversal with different start vertices led to the nested traversal
always using the start vertex provided on the first invocation.
* fixed issue #1781: ArangoDB startup time increased tremendously
* fixed issue #1783: SIGHUP should rotate the log
v2.8.5 (2016-03-XX)
-------------------
* Add OpenSSL handler for TLS V1.2 as sugested by kurtkincaid in #1771
* fixed issue #1765 (The webinterface should display the correct query time)
and #1770 (Display ACTUAL query time in aardvark's AQL editor)
* Windows: the unhandled exception handler now calls the windows logging
facilities directly without locks.
This fixes lockups on crashes from the logging framework.
* improve nullptr handling in logger.
* added new endpoint "srv://" for DNS service records
v2.8.4 (2016-03-01)
-------------------
* global modules are no longer incorrectly resolved outside the ArangoDB
JavaScript directory or the Foxx service's root directory (issue #1577)
* improved error messages from Foxx and JavaScript (issues #1564, #1565, #1744)
v2.8.3 (2016-02-22)
-------------------
* fixed AQL filter condition collapsing for deeply-nested cases, potentially
enabling usage of indexes in some dedicated cases
* added parentheses in AQL explain command output to correctly display precedence
of logical and arithmetic operators
* Foxx Model event listeners defined on the model are now correctly invoked by
the Repository methods (issue #1665)
* Deleting a Foxx service in the frontend should now always succeed even if the
files no longer exist on the file system (issue #1358)
* Routing actions loaded from the database no longer throw exceptions when
trying to load other modules using "require"
v2.8.2 (2016-02-09)
-------------------
* the continuous replication applier will now prevent the master's WAL logfiles
from being removed if they are still needed by the applier on the slave. This
should help slaves that suffered from masters garbage collection WAL logfiles
which would have been needed by the slave later.
The initial synchronization will block removal of still needed WAL logfiles
on the master for 10 minutes initially, and will extend this period when further
requests are made to the master. Initial synchronization hands over its handle
for blocking logfile removal to the continuous replication when started via
the *setupReplication* function. In this case, continuous replication will
extend the logfile removal blocking period for the required WAL logfiles when
the slave makes additional requests.
All handles that block logfile removal will time out automatically after at
most 5 minutes should a master not be contacted by the slave anymore (e.g. in
case the slave's replication is turned off, the slaves loses the connection
to the master or the slave goes down).
* added all-in-one function *setupReplication* to synchronize data from master
to slave and start the continuous replication:
require("@arangodb/replication").setupReplication(configuration);
The command will return when the initial synchronization is finished and the
continuous replication has been started, or in case the initial synchronization
has failed.
If the initial synchronization is successful, the command will store the given
configuration on the slave. It also configures the continuous replication to start
automatically if the slave is restarted, i.e. *autoStart* is set to *true*.
If the command is run while the slave's replication applier is already running,
it will first stop the running applier, drop its configuration and do a
resynchronization of data with the master. It will then use the provided configration,
overwriting any previously existing replication configuration on the slave.
The following example demonstrates how to use the command for setting up replication
for the *_system* database. Note that it should be run on the slave and not the
master:
db._useDatabase("_system");
require("@arangodb/replication").setupReplication({
endpoint: "tcp://master.domain.org:8529",
username: "myuser",
password: "mypasswd",
verbose: false,
includeSystem: false,
incremental: true,
autoResync: true
});
* the *sync* and *syncCollection* functions now always start the data synchronization
as an asynchronous server job. The call to *sync* or *syncCollection* will block
until synchronization is either complete or has failed with an error. The functions
will automatically poll the slave periodically for status updates.
The main benefit is that the connection to the slave does not need to stay open
permanently and is thus not affected by timeout issues. Additionally the caller does
not need to query the synchronization status from the slave manually as this is
now performed automatically by these functions.
* fixed undefined behavior when explaining some types of AQL traversals, fixed
display of some types of traversals in AQL explain output
v2.8.1 (2016-01-29)
-------------------
* Improved AQL Pattern matching by allowing to specify a different traversal
direction for one or many of the edge collections.
FOR v, e, p IN OUTBOUND @start @@ec1, INBOUND @@ec2, @@ec3
will traverse *ec1* and *ec3* in the OUTBOUND direction and for *ec2* it will use
the INBOUND direction. These directions can be combined in arbitrary ways, the
direction defined after *IN [steps]* will we used as default direction and can
be overriden for specific collections.
This feature is only available for collection lists, it is not possible to
combine it with graph names.
* detect more types of transaction deadlocks early
* fixed display of relational operators in traversal explain output
* fixed undefined behavior in AQL function `PARSE_IDENTIFIER`
* added "engines" field to Foxx services generated in the admin interface
* added AQL function `IS_SAME_COLLECTION`:
*IS_SAME_COLLECTION(collection, document)*: Return true if *document* has the same
collection id as the collection specified in *collection*. *document* can either be
a [document handle](../Glossary/README.md#document-handle) string, or a document with
an *_id* attribute. The function does not validate whether the collection actually
contains the specified document, but only compares the name of the specified collection
with the collection name part of the specified document.
If *document* is neither an object with an *id* attribute nor a *string* value,
the function will return *null* and raise a warning.
/* true */
IS_SAME_COLLECTION('_users', '_users/my-user')
IS_SAME_COLLECTION('_users', { _id: '_users/my-user' })
/* false */
IS_SAME_COLLECTION('_users', 'foobar/baz')
IS_SAME_COLLECTION('_users', { _id: 'something/else' })
v2.8.0 (2016-01-25)
-------------------
* avoid recursive locking
v2.8.0-beta8 (2016-01-19)
-------------------------
* improved internal datafile statistics for compaction and compaction triggering
conditions, preventing excessive growth of collection datafiles under some
workloads. This should also fix issue #1596.
* renamed AQL optimizer rule `remove-collect-into` to `remove-collect-variables`
* fixed primary and edge index lookups prematurely aborting searches when the
specified id search value contained a different collection than the collection
the index was created for
v2.8.0-beta7 (2016-01-06)
-------------------------
* added vm.runInThisContext
* added AQL keyword `AGGREGATE` for use in AQL `COLLECT` statement
Using `AGGREGATE` allows more efficient aggregation (incrementally while building
the groups) than previous versions of AQL, which built group aggregates afterwards
from the total of all group values.
`AGGREGATE` can be used inside a `COLLECT` statement only. If used, it must follow
the declaration of grouping keys:
FOR doc IN collection
COLLECT gender = doc.gender AGGREGATE minAge = MIN(doc.age), maxAge = MAX(doc.age)
RETURN { gender, minAge, maxAge }
or, if no grouping keys are used, it can follow the `COLLECT` keyword:
FOR doc IN collection
COLLECT AGGREGATE minAge = MIN(doc.age), maxAge = MAX(doc.age)
RETURN {
minAge, maxAge
}
Only specific expressions are allowed on the right-hand side of each `AGGREGATE`
assignment:
- on the top level the expression must be a call to one of the supported aggregation
functions `LENGTH`, `MIN`, `MAX`, `SUM`, `AVERAGE`, `STDDEV_POPULATION`, `STDDEV_SAMPLE`,
`VARIANCE_POPULATION`, or `VARIANCE_SAMPLE`
- the expression must not refer to variables introduced in the `COLLECT` itself
* Foxx: mocha test paths with wildcard characters (asterisks) now work on Windows
* reserved AQL keyword `NONE` for future use
* web interface: fixed a graph display bug concerning dashboard view
* web interface: fixed several bugs during the dashboard initialize process
* web interface: included several bugfixes: #1597, #1611, #1623
* AQL query optimizer now converts `LENGTH(collection-name)` to an optimized
expression that returns the number of documents in a collection
* adjusted the behavior of the expansion (`[*]`) operator in AQL for non-array values
In ArangoDB 2.8, calling the expansion operator on a non-array value will always
return an empty array. Previous versions of ArangoDB expanded non-array values by
calling the `TO_ARRAY()` function for the value, which for example returned an
array with a single value for boolean, numeric and string input values, and an array
with the object's values for an object input value. This behavior was inconsistent
with how the expansion operator works for the array indexes in 2.8, so the behavior
is now unified:
- if the left-hand side operand of `[*]` is an array, the array will be returned as
is when calling `[*]` on it
- if the left-hand side operand of `[*]` is not an array, an empty array will be
returned by `[*]`
AQL queries that rely on the old behavior can be changed by either calling `TO_ARRAY`
explicitly or by using the `[*]` at the correct position.
The following example query will change its result in 2.8 compared to 2.7:
LET values = "foo" RETURN values[*]
In 2.7 the query has returned the array `[ "foo" ]`, but in 2.8 it will return an
empty array `[ ]`. To make it return the array `[ "foo" ]` again, an explicit
`TO_ARRAY` function call is needed in 2.8 (which in this case allows the removal
of the `[*]` operator altogether). This also works in 2.7:
LET values = "foo" RETURN TO_ARRAY(values)
Another example:
LET values = [ { name: "foo" }, { name: "bar" } ]
RETURN values[*].name[*]
The above returned `[ [ "foo" ], [ "bar" ] ] in 2.7. In 2.8 it will return
`[ [ ], [ ] ]`, because the value of `name` is not an array. To change the results
to the 2.7 style, the query can be changed to
LET values = [ { name: "foo" }, { name: "bar" } ]
RETURN values[* RETURN TO_ARRAY(CURRENT.name)]
The above also works in 2.7.
The following types of queries won't change:
LET values = [ 1, 2, 3 ] RETURN values[*]
LET values = [ { name: "foo" }, { name: "bar" } ] RETURN values[*].name
LET values = [ { names: [ "foo", "bar" ] }, { names: [ "baz" ] } ] RETURN values[*].names[*]
LET values = [ { names: [ "foo", "bar" ] }, { names: [ "baz" ] } ] RETURN values[*].names[**]
* slightly adjusted V8 garbage collection strategy so that collection eventually
happens in all contexts that hold V8 external references to documents and
collections.
also adjusted default value of `--javascript.gc-frequency` from 10 seconds to
15 seconds, as less internal operations are carried out in JavaScript.
* fixes for AQL optimizer and traversal
* added `--create-collection-type` option to arangoimp
This allows specifying the type of the collection to be created when
`--create-collection` is set to `true`.
v2.8.0-beta2 (2015-12-16)
-------------------------
* added AQL query optimizer rule "sort-in-values"
This rule pre-sorts the right-hand side operand of the `IN` and `NOT IN`
operators so the operation can use a binary search with logarithmic complexity
instead of a linear search. The rule is applied when the right-hand side
operand of an `IN` or `NOT IN` operator in a filter condition is a variable that
is defined in a different loop/scope than the operator itself. Additionally,
the filter condition must consist of solely the `IN` or `NOT IN` operation
in order to avoid any side-effects.
* changed collection status terminology in web interface for collections for
which an unload request has been issued from `in the process of being unloaded`
to `will be unloaded`.
* unloading a collection via the web interface will now trigger garbage collection
in all v8 contexts and force a WAL flush. This increases the chances of perfoming
the unload faster.
* added the following attributes to the result of `collection.figures()` and the
corresponding HTTP API at `PUT /_api/collection/<name>/figures`:
- `documentReferences`: The number of references to documents in datafiles
that JavaScript code currently holds. This information can be used for
debugging compaction and unload issues.
- `waitingFor`: An optional string value that contains information about
which object type is at the head of the collection's cleanup queue. This
information can be used for debugging compaction and unload issues.
- `compactionStatus.time`: The point in time the compaction for the collection
was last executed. This information can be used for debugging compaction
issues.
- `compactionStatus.message`: The action that was performed when the compaction
was last run for the collection. This information can be used for debugging
compaction issues.
Note: `waitingFor` and `compactionStatus` may be empty when called on a coordinator
in a cluster.
* the compaction will now provide queryable status info that can be used to track
its progress. The compaction status is displayed in the web interface, too.