2014-12-04 100 views
1

使用ArangoDB 2.3.1。看来我的游标在几分钟内即将到期。我希望他们能够持续一个小时。ArangoDB光标超时

{ 
    "query": 'removed actual query', 
    "count": true, 
    "batchSize": 5, 
    "ttl": 3600000 
} 

我的理解是,TTL参数应该告诉服务器来保持服务器为3600000毫秒或1小时:我如下设置我的AQL查询对象与TTL参数。但它会在约60秒内过期。实际上,我已经尝试将TTL更改为几个不同的数字,但它似乎没有做任何事情。有任何想法吗?

更新:我从阿朗戈收到实际的错误是“光标未找到”

+0

根据手册,游标的TTL以秒为单位,而不是毫秒。 – 2014-12-05 02:23:50

+0

TTL应该保持光标处于活动状态,以便稍后再调用。如果连接超时,ttl将不会产生影响。 – 2014-12-05 02:26:37

+0

来自Arango的实际错误是“游标未找到”,所以我认为这意味着游标超时并且不再可用。任何想法如何我可以延长这个超时? – skinneejoe 2014-12-05 15:49:46

回答

0

您是否尝试过使用超时指令?

--server.keep-alive-timeout=X

其中X是秒。

或者你可以在服务器部分插入到这一点你arangod.conf文件

keep-alive-timout=X

根据手册

允许指定timout的HTTP保持活动连接。超时值必须以秒为单位。达到超时时,服务器将自动关闭空闲保持连接连接。

+0

尝试了此操作,但仍收到“未找到光标”错误。 – skinneejoe 2014-12-05 15:49:01

4

大家都说得对。但我认为这是在2.3的错误:

--- a/arangod/V8Server/v8-vocbase.cpp 
+++ b/arangod/V8Server/v8-vocbase.cpp 
@@ -1216,13 +1216,13 @@ static v8::Handle<v8::Value> JS_ExecuteAql (v8::Arguments const& argv) { 

    optionName = v8::String::New("ttl"); 
    if (argValue->Has(optionName)) { 
-  ttl = TRI_ObjectToBoolean(argValue->Get(optionName)); 
+  ttl = TRI_ObjectToDouble(argValue->Get(optionName)); 
     ttl = (ttl <= 0.0 ? 30.0 : ttl); 
    } 

TTL是双,所以它应该被浇铸为双,而不是一个布尔值。 不幸的是,将一个bool分配给double在C++中是有效的,因此编译器没有投诉。

+1

修复将与2.3.2 – stj 2014-12-05 08:19:00

+0

一起发货有关如何在2.3.2之前解决或解决此问题的任何想法?谢谢! – skinneejoe 2014-12-05 15:50:39

+0

将它置于2.3.2之前的唯一方法是将源代码固定在上面的位置并重新编译。但是,2.3.2应该很快(下周)可用。 – stj 2014-12-05 17:40:06