关于graphd service停掉后,再启动,查询结果与之前不一致的问题

nebula graph版本:3.3.0
nebula studio版本:3.5.0
部署方式:分布式
是否为线上版本:N

我们的graphd,metad,storage服务部署情况如下:
image

情况描述:
我用python连接nebula,执行两个nGQL语句,如下:

def JD_degree_count(community_num:int,degree:int):
    config = Config()
    connection_pool = ConnectionPool()
    ok = connection_pool.init([('192.168.200.101',9669),('192.168.200.112',9669),('192.168.200.114',9669)], config) # ('192.168.200.101', 9669),('192.168.200.100',9669),
    with connection_pool.session_context('root', 'nebula') as session:
        session.execute('use ldbc')  
        for i in range(degree):
            result = session.execute(f'LOOKUP ON partition WHERE partition.louvain=={community_num} YIELD id(vertex) AS id \
        | GO {degree+1} STEPS FROM $-.id OVER * YIELD $-.id AS src, id($$) AS dst \
        | YIELD $-.src AS id, count($-.dst) AS out_degree{degree+1}')
            res_df = result_to_df(result)  
            if i == 0:
                tmp = res_df.copy()
                continue      
    connection_pool.close()
    res_df = tmp.merge(res_df,on='id',how='left')
    res_df = res_df.groupby('id').filter(lambda x:x["out_degree2"] > x["out_degree1"])
    res_df["out_degree_sum"] = res_df["out_degree1"]+res_df["out_degree2"]
    res_df = res_df.sort_values(by="out_degree_sum",ascending=False).reset_index(drop=True)
    return res_df

res = JD_degree_count(94,2)

结果运行一会之后,发生如下报错Connect 192.168.200.101:9669 failed: socket error connecting to host 192.168.200.101, port 9669 (('192.168.200.101', 9669)): timeout('timed out')

然后我去101服务器上查询graphd状态,是退出状态,我随即将它又启动了起来。
然后查询我之前查过的一个语句:

LOOKUP ON partition WHERE partition.louvain==94 YIELD id(vertex) AS id

结果是8556条


但是之前查询是16000多条:

查询101日志:
进入logs文件夹,查看 graphd-stderr.log


执行tail -200 graphd-stderr.log,查看日志后200行:

在上面报错中,11:15之前的我记得是我在nebula studio中查询时的报错,应该和本次问题没关系。。

随后,我尝试将刚才挂掉的graphd服务所在节点(101),其他服务也都重启了下,./nebula.service restart all
然后再去查询刚才nGQL语句,结果又正常了,是16000多:

要不,这个帖子先放着?等你数据再不正常了再更新下?:thinking: 可能是数据没有同步过来。

可以的 目前就是这么个情况 如果graphd服务挂了之后 我需要在这个节点重启metad graphd storage三个服务 查询才是正常的。只重启graphd,查询结果不太对。。

这个 lookup 是fanout 到所有存储上,少的那次可能是有部分存储节点挂了
cc @spw 这样是可能的吧?

我也感觉是这样,跟存储有关。只是看5个节点的storage服务,倒是没有挂掉的情况,或许有可能和磁盘有关?

没有挂掉是进程状态,还是从 meta 那边看(后者是 show hosts storage)?

行 要是再出现这个情况的话 我就查一下meta服务 看看正常不

嗯嗯

SHOW HOSTS STORAGE

OK 感谢您!

1 个赞

如果配置了

accept_partial_success = true

就可以仅返回成功的结果;否则一旦有 storaged 失败,就会返回失败。

1 个赞

原来如此,学到了:+1:t2:

PS:

如果开启 accept_partial_success 时,如果部分成功,会返回一个特殊的错误码。
studio 最好当有这个特殊错误码时报一个 warning.

比如 console

keyword: Got Partial result

1 个赞

原来如此:+1:t2:

在哪个配置文件中看这个呢?
另外,

这个在哪改呢?

Graphd 的配置,参考

OK 感谢!

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。