mirror of https://gitee.com/bigwinds/arangodb
Merge branch 'devel' of https://github.com/arangodb/arangodb into engine-api
This commit is contained in:
commit
691dac7a73
11
CHANGELOG
11
CHANGELOG
|
@ -1,7 +1,7 @@
|
||||||
devel
|
devel
|
||||||
-----
|
-----
|
||||||
|
|
||||||
* AQL Breaking Change in Cluster:
|
* AQL breaking change in cluster:
|
||||||
The SHORTEST_PATH statement using edge-collection names instead
|
The SHORTEST_PATH statement using edge-collection names instead
|
||||||
of a graph name now requires to explicitly name the vertex-collection names
|
of a graph name now requires to explicitly name the vertex-collection names
|
||||||
within the AQL query in the cluster. It can be done by adding `WITH <name>`
|
within the AQL query in the cluster. It can be done by adding `WITH <name>`
|
||||||
|
@ -44,8 +44,9 @@ devel
|
||||||
advantage that it is more composable, and will also honor any `LIMIT` values
|
advantage that it is more composable, and will also honor any `LIMIT` values
|
||||||
used in the AQL query.
|
used in the AQL query.
|
||||||
|
|
||||||
* added KB, MB, GB prefix for integer parameters, % for integer parameters
|
* potential fix for shutdown hangs on OSX
|
||||||
|
|
||||||
|
* added KB, MB, GB prefix for integer parameters, % for integer parameters
|
||||||
with a base value
|
with a base value
|
||||||
|
|
||||||
* added JEMALLOC 4.5.0
|
* added JEMALLOC 4.5.0
|
||||||
|
@ -229,6 +230,12 @@ v3.2.alpha1 (2017-02-05)
|
||||||
|
|
||||||
* generated Foxx services now use swagger tags
|
* generated Foxx services now use swagger tags
|
||||||
|
|
||||||
|
v3.1.19 (XXXX-XX-XX)
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
|
||||||
|
* Fixed a StackOverflow issue in Traversal and ShortestPath. Occured if many (>1000) input
|
||||||
|
values in a row do not return any result. Fixes issue: #2445
|
||||||
|
|
||||||
v3.1.19 (XXXX-XX-XX)
|
v3.1.19 (XXXX-XX-XX)
|
||||||
--------------------
|
--------------------
|
||||||
|
|
|
@ -10,6 +10,8 @@ or using Docker containers.
|
||||||
|
|
||||||
- [Single instance](Single.md)
|
- [Single instance](Single.md)
|
||||||
- [Cluster: DC/OS, Apache Mesos and Marathon](Mesos.md)
|
- [Cluster: DC/OS, Apache Mesos and Marathon](Mesos.md)
|
||||||
|
- [Cluster: Generic & Docker](ArangoDBStarter.md)
|
||||||
|
- [Advanced Topics](Advanced.md)
|
||||||
- [Cluster: Test setup on a local machine](Local.md)
|
- [Cluster: Test setup on a local machine](Local.md)
|
||||||
- [Cluster: Starting processes on different machines](Distributed.md)
|
- [Cluster: Starting processes on different machines](Distributed.md)
|
||||||
- [Cluster: Launching an ArangoDB cluster using Docker containers](Docker.md)
|
- [Cluster: Launching an ArangoDB cluster using Docker containers](Docker.md)
|
||||||
|
|
|
@ -123,10 +123,12 @@
|
||||||
* [Deployment](Deployment/README.md)
|
* [Deployment](Deployment/README.md)
|
||||||
* [Single instance](Deployment/Single.md)
|
* [Single instance](Deployment/Single.md)
|
||||||
* [Cluster: Mesos, DC/OS](Deployment/Mesos.md)
|
* [Cluster: Mesos, DC/OS](Deployment/Mesos.md)
|
||||||
* [Cluster: Local test](Deployment/Local.md)
|
* [Cluster: Generic & Docker](Deployment/ArangoDBStarter.md)
|
||||||
|
* [Advanced Topics](Deployment/Advanced.md)
|
||||||
|
* [Standalone Agency](Deployment/Agency.md)
|
||||||
|
* [Cluster: Local test setups](Deployment/Local.md)
|
||||||
* [Cluster: Processes](Deployment/Distributed.md)
|
* [Cluster: Processes](Deployment/Distributed.md)
|
||||||
* [Cluster: Docker](Deployment/Docker.md)
|
* [Cluster: Docker](Deployment/Docker.md)
|
||||||
* [Agency](Deployment/Agency.md)
|
|
||||||
#
|
#
|
||||||
* [Administration](Administration/README.md)
|
* [Administration](Administration/README.md)
|
||||||
* [Web Interface](Administration/WebInterface/README.md)
|
* [Web Interface](Administration/WebInterface/README.md)
|
||||||
|
|
|
@ -287,6 +287,7 @@ bool ShortestPathBlock::nextPath(AqlItemBlock const* items) {
|
||||||
AqlItemBlock* ShortestPathBlock::getSome(size_t, size_t atMost) {
|
AqlItemBlock* ShortestPathBlock::getSome(size_t, size_t atMost) {
|
||||||
DEBUG_BEGIN_BLOCK();
|
DEBUG_BEGIN_BLOCK();
|
||||||
traceGetSomeBegin();
|
traceGetSomeBegin();
|
||||||
|
while (true) {
|
||||||
if (_done) {
|
if (_done) {
|
||||||
traceGetSomeEnd(nullptr);
|
traceGetSomeEnd(nullptr);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -316,9 +317,7 @@ AqlItemBlock* ShortestPathBlock::getSome(size_t, size_t atMost) {
|
||||||
returnBlock(cur);
|
returnBlock(cur);
|
||||||
_pos = 0;
|
_pos = 0;
|
||||||
}
|
}
|
||||||
auto r = getSome(atMost, atMost);
|
continue;
|
||||||
traceGetSomeEnd(r);
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,6 +362,7 @@ AqlItemBlock* ShortestPathBlock::getSome(size_t, size_t atMost) {
|
||||||
clearRegisters(res.get());
|
clearRegisters(res.get());
|
||||||
traceGetSomeEnd(res.get());
|
traceGetSomeEnd(res.get());
|
||||||
return res.release();
|
return res.release();
|
||||||
|
}
|
||||||
|
|
||||||
// cppcheck-suppress style
|
// cppcheck-suppress style
|
||||||
DEBUG_END_BLOCK();
|
DEBUG_END_BLOCK();
|
||||||
|
|
|
@ -354,6 +354,7 @@ AqlItemBlock* TraversalBlock::getSome(size_t, // atLeast,
|
||||||
size_t atMost) {
|
size_t atMost) {
|
||||||
DEBUG_BEGIN_BLOCK();
|
DEBUG_BEGIN_BLOCK();
|
||||||
traceGetSomeBegin();
|
traceGetSomeBegin();
|
||||||
|
while (true) {
|
||||||
if (_done) {
|
if (_done) {
|
||||||
traceGetSomeEnd(nullptr);
|
traceGetSomeEnd(nullptr);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
@ -391,9 +392,7 @@ AqlItemBlock* TraversalBlock::getSome(size_t, // atLeast,
|
||||||
} else {
|
} else {
|
||||||
initializePaths(cur, _pos);
|
initializePaths(cur, _pos);
|
||||||
}
|
}
|
||||||
auto r = getSome(atMost, atMost);
|
continue;
|
||||||
traceGetSomeEnd(r);
|
|
||||||
return r;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -448,6 +447,7 @@ AqlItemBlock* TraversalBlock::getSome(size_t, // atLeast,
|
||||||
clearRegisters(res.get());
|
clearRegisters(res.get());
|
||||||
traceGetSomeEnd(res.get());
|
traceGetSomeEnd(res.get());
|
||||||
return res.release();
|
return res.release();
|
||||||
|
}
|
||||||
|
|
||||||
// cppcheck-suppress style
|
// cppcheck-suppress style
|
||||||
DEBUG_END_BLOCK();
|
DEBUG_END_BLOCK();
|
||||||
|
|
|
@ -825,7 +825,10 @@ void HeartbeatThread::syncDBServerStatusQuo() {
|
||||||
_backgroundJobScheduledOrRunning = true;
|
_backgroundJobScheduledOrRunning = true;
|
||||||
|
|
||||||
// the JobGuard is in the operator() of HeartbeatBackgroundJob
|
// the JobGuard is in the operator() of HeartbeatBackgroundJob
|
||||||
_ioService->post(HeartbeatBackgroundJob(shared_from_this(), TRI_microtime()));
|
if (!isStopping() && !_ioService->stopped()) {
|
||||||
|
_ioService->
|
||||||
|
post(HeartbeatBackgroundJob(shared_from_this(), TRI_microtime()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
|
@ -1514,6 +1514,22 @@ function complexInternaSuite () {
|
||||||
assertEqual(found, amount);
|
assertEqual(found, amount);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
testTailRecursion: function () {
|
||||||
|
// This test is to make sure their is no
|
||||||
|
// inifinite callstack in getSome() API
|
||||||
|
let query = `
|
||||||
|
WITH ${vn}
|
||||||
|
FOR id IN 0..100000
|
||||||
|
FOR v IN OUTBOUND CONCAT('${vn}/foobar', id) ${en}
|
||||||
|
RETURN v
|
||||||
|
`;
|
||||||
|
|
||||||
|
let res = db._query(query);
|
||||||
|
assertEqual(res.count(), 0);
|
||||||
|
// With inifinit callstack in getSome this
|
||||||
|
// test will segfault
|
||||||
|
},
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue