zoukankan      html  css  js  c++  java
  • 解决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();
  • 相关阅读:
    玩转渗透神器Kali:Kali Linux作为主系统使用的正确姿势TIPS
    知道创宇研发技能表v2.2
    我对什么都感兴趣,可我迷茫了(转载)
    防御性编程
    防御性编程技巧
    移动安全技术如何未雨绸缪?
    1054. 求平均值 (20)
    1053. 住房空置率 (20)
    1052. 卖个萌 (20)
    1051. 复数乘法 (15)
  • 原文地址:https://www.cnblogs.com/jiyuqi/p/8398887.html
Copyright © 2011-2022 走看看