解決Janusgraph索引狀態不變更的問題


JanusGraph的索引因為要同步不同實例及不同后端的數據,因此不是實時能夠完成的,視配置,網絡和數據量不同,建立/生效索引通常需要一段時間,這也是為什么創建索引時會創建wait()的原因。

在實踐中,我們經常遇到timeout()異常的出現,這一方面有數據量,網絡,配置的原因,另外一方面,如果系統中有未關閉的事務或者無效的實例,均會導致索引創建阻塞,不斷等待,最后超時。下面是我們團隊在使用JansuGraph總結出的,解決索引超時的實踐,希望對后來者有所幫助。

自身Bug

JanusGraph現在發布的版本0.1.1/0.1.0中存在一個bug,也即如果將已經創建的屬性key加入新創建的索引中,索引狀態始終保持在INSTLLED,不會切換到REGISTERED狀態,該問題在github上有,最為簡單的解決方案是升級JansuGraph到主干。0.2.0的發布時間尚未確定。

存在沒有關閉的Transaction

如果圖中存在有沒有關系的Transaction,則索引狀態不會變更,雖然在官方文檔中提到了使用:
graph.tx().rollback()
 
但該方法只能關閉當前事務,對系統中其他打開的事務無效,可以使用下面的語句替換:

for(i=0;i<graph.getOpenTransactions().size();i++) {graph.getOpenTransactions().getAt(i).rollback()}

存在幽靈實例

使用下面的語句查詢:
mgmt = graph.openManagement()
mgmt.getOpenInstances();
mgmt.commit();
使用下面的語句關閉:
mgmt = graph.openManagement();
ids = mgmt.getOpenInstances();
for(String id : ids){if(!id.contains("(")){mgmt.forceCloseInstance(id)}};
mgmt.commit();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM