forked from arangodb/arangodb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCHANGELOG
3595 lines (2377 loc) · 141 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
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 issue with --check-version: when creating a new database the check failed
* issue #947 Foxx applicationContext missing some properties
* added startup option `--wal.suppress-shape-information`
Setting this option to `true` will reduce memory and disk space usage and require
less CPU time when modifying documents or edges. It should therefore be turned on
for standalone ArangoDB servers. However, for servers that are used as replication
masters, setting this option to `true` will effectively disable the usage of the
write-ahead log for replication, so it should be set to `false` for any replication
master servers.
The default value for this option is `false`.
* added optional `ttl` attribute to specify result cursor expiration for HTTP API method
`POST /_api/cursor`
The `ttl` attribute can be used to prevent cursor results from timing out too early.
* (reported by Christian Neubauer):
The problem was that in Google's V8, signed and unsigned chars are not always declared cleanly.
so we need to force v8 to compile with forced signed chars which is done by the Flag:
-fsigned-char
at least it is enough to follow the instructions of compiling arango on rasperry
and add "CFLAGS='-fsigned-char'" to the make command of V8 and remove the armv7=0
* Fixed a bug with the replication client. In the case of single document
transactions the collection was not write locked.
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 atomcially and durably committed. All data-modifying
operations inside transactions (insert, update, remove) will write their
operations into the write-ahead log directly, making transactions with multiple
operations also require less physical memory than in previous versions of ArangoDB,
that required all transaction data to fit into RAM.
The `_trx` system collection is not used anymore in ArangoDB 2.2 and its usage is
discouraged.
The data in the write-ahead log can also be used in the replication context.
The `_replication` collection that was used in previous versions of ArangoDB to
store all changes on the server is not used anymore in ArangoDB 2.2. Instead,
slaves can read from a master's write-ahead log to get informed about most
recent changes. This removes the need to store data-modifying operations in
both the actual place and the `_replication` collection.
* removed startup option `--server.disable-replication-logger`
This option is superfluous in ArangoDB 2.2. There is no dedicated replication
logger in ArangoDB 2.2. There is now always the write-ahead log, and it is also
used as the server's replication log. Specifying the startup option
`--server.disable-replication-logger` will do nothing in ArangoDB 2.2, but the
option should not be used anymore as it might be removed in a future version.
* changed behavior of replication logger
There is no dedicated replication logger in ArangoDB 2.2 as there is the
write-ahead log now. The existing APIs for starting and stopping the replication
logger still exist in ArangoDB 2.2 for downwards-compatibility, but calling
the start or stop operations are no-ops in ArangoDB 2.2. When querying the
replication logger status via the API, the server will always report that the
replication logger is running. Configuring the replication logger is a no-op
in ArangoDB 2.2, too. Changing the replication logger configuration has no
effect. Instead, the write-ahead log configuration can be changed.
* removed MRuby integration for arangod
ArangoDB had an experimental MRuby integration in some of the publish builds.
This wasn't continuously developed, and so it has been removed in ArangoDB 2.2.
This change has led to the following startup options being superfluous:
- `--ruby.gc-interval`
- `--ruby.action-directory`
- `--ruby.modules-path`
- `--ruby.startup-directory`
Specifying these startup options will do nothing in ArangoDB 2.2, but the
options should be avoided from now on as they might be removed in future versions.
* reclaim index memory when last document in collection is deleted
Previously, deleting documents from a collection did not lead to index sizes being
reduced. Instead, the already allocated index memory was re-used when a collection
was refilled.
Now, index memory for primary indexes and hash indexes is reclaimed instantly when
the last document from a collection is removed.
* inlined and optimized functions in hash indexes
* added AQL TRANSLATE function
This function can be used to perform lookups from static lists, e.g.
LET countryNames = { US: "United States", UK: "United Kingdom", FR: "France" }
RETURN TRANSLATE("FR", countryNames)
* fixed datafile debugger
* fixed check-version for empty directory
* moved try/catch block to the top of routing chain
* added mountedApp function for foxx-manager
* fixed issue #883: arango 2.1 - when starting multi-machine cluster, UI web
does not change to cluster overview
* fixed dfdb: should not start any other V8 threads
* cleanup of version-check, added module org/arangodb/database-version,
added --check-version option
* fixed issue #881: [2.1.0] Bombarded (every 10 sec or so) with
"WARNING format string is corrupt" when in non-system DB Dashboard
* specialized primary index implementation to allow faster hash table
rebuilding and reduce lookups in datafiles for the actual value of `_key`.
* issue #862: added `--overwrite` option to arangoimp
* removed number of property lookups for documents during AQL queries that
access documents
* prevent buffering of long print results in arangosh's and arangod's print
command
this change will emit buffered intermediate print results and discard the
output buffer to quickly deliver print results to the user, and to prevent
constructing very large buffers for large results
* removed sorting of attribute names for use in a collection's shaper
sorting attribute names was done on document insert to keep attributes
of a collection in sorted order for faster comparisons. The sort order
of attributes was only used in one particular and unlikely case, so it
was removed. Collections with many different attribute names should
benefit from this change by faster inserts and slightly less memory usage.
* fixed a bug in arangodump which got the collection name in _from and _to
attributes of edges wrong (all were "_unknown")
* fixed a bug in arangorestore which did not recognise wrong _from and _to
attributes of edges
* improved error detection and reporting in arangorestore
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 seldomly used system collections on creation.
This will make these collections use less disk space and mapped memory.
* added AQL date functions
* added AQL FLATTEN() 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 behaviour in jobs API: previously, querying the status
of an async job via the API HTTP PUT `/_api/job/job-id` removed a currently
executing async job from the list of queryable jobs on the server.
Now, when querying the result of an async job that is still executing,
the job is kept in the list of queryable jobs so its result can be fetched
by a subsequent request.
* use a new data structure for the edge index of an edge collection. This
improves the performance for the creation of the edge index and in
particular speeds up removal of edges in graphs. Note however that
this change might change the order in which edges starting at
or ending in a vertex are returned. However, this order was never
guaranteed anyway and it is not sensible to guarantee any particular
order.
* provide a size hint to edge and hash indexes when initially filling them
this will lead to less re-allocations when populating these indexes
this may speed up building indexes when opening an existing collection
* don't requeue identical context methods in V8 threads in case a method is
already registered
* removed arangod command line option `--database.remove-on-compacted`
* export the sort attribute for graph traversals to the HTTP interface
* add support for arangodump/arangorestore for clusters
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 optimiser
the following type of query was too eagerly optimised, 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 spurios `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.