2014-12-04 101 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