nebula 2.0.1查询特定语句,导致graphd服务崩溃

版本:nebula 2.0.1. (graph、meta、storage均是2.0.1)
测试方法:

CREATE SPACE test( PARTITION_NUM =10, REPLICA_FACTOR =1,vid_type=int64);
use test;
CREATE TAG knowledgePoint(id STRING , listingStatus string);
CREATE EDGE parent(p1 int);
INSERT VERTEX knowledgePoint(id ,listingStatus) VALUES 101:("KP111","ok");
INSERT VERTEX knowledgePoint(id ,listingStatus) VALUES 102:("KP222","ok");
INSERT EDGE parent(p1) VALUES 101->102:(2021);
CREATE TAG INDEX i01 on knowledgePoint(id(30));
REBUILD TAG INDEX i01;

等待索引创建完成

lookup on knowledgePoint where knowledgePoint.id == 'KP111';

可以查询出数据

lookup on knowledgePoint where knowledgePoint.id == 'KP111' | GO 1 to 10 steps FROM $-.VertexID OVER parent YIELD parent._dst as dstId, $$.knowledgePoint.id, $$.knowledgePoint.listingStatus;

导致graph服务宕机

宕机信息:

*** Aborted at 1638259669 (unix time) try "date -d @1638259669" if you are using GNU date ***
PC: @     0x5591a91b769a nebula::opt::Optimizer::convertToGroup()
*** SIGSEGV (@0x18) received by PID 1338 (TID 0x7fbecd0fe700) from PID 24; stack trace: ***
    @     0x7fbee8abf6ff (unknown)
    @     0x5591a91b769a nebula::opt::Optimizer::convertToGroup()
    @     0x5591a91b78e9 nebula::opt::Optimizer::convertToGroup()
    @     0x5591a91b78e9 nebula::opt::Optimizer::convertToGroup()
    @     0x5591a91b78e9 nebula::opt::Optimizer::convertToGroup()
    @     0x5591a91b78e9 nebula::opt::Optimizer::convertToGroup()
    @     0x5591a91b78e9 nebula::opt::Optimizer::convertToGroup()
    @     0x5591a91b797a nebula::opt::Optimizer::convertToGroup()
    @     0x5591a91b78e9 nebula::opt::Optimizer::convertToGroup()
    @     0x5591a91b7a99 nebula::opt::Optimizer::prepare()
    @     0x5591a91b7b86 nebula::opt::Optimizer::findBestPlan()
    @     0x5591a90b7cae nebula::graph::QueryInstance::findBestPlan()
    @     0x5591a90ba18c nebula::graph::QueryInstance::validateAndOptimize()
    @     0x5591a90ba513 nebula::graph::QueryInstance::execute()
    @     0x5591a90b5099 nebula::graph::QueryEngine::execute()
    @     0x5591a90ad01b nebula::graph::GraphService::future_execute()
    @     0x5591a93ab4ed (unknown)
    @     0x5591a90821f3 apache::thrift::concurrency::FunctionRunner::run()
    @     0x5591a9091c48 apache::thrift::concurrency::ThreadManager::ImplT<>::Worker<>::run()
    @     0x5591a9d1307f apache::thrift::concurrency::PthreadThread::threadMain()
    @     0x7fbee8ab7e14 start_thread
    @     0x7fbee87e0fec __clone

请问有修复的pr吗?采用的是开源版本代码编译

就算lookup on knowledgePoint where knowledgePoint.id == ‘KP111’; 修改为 KR333,这里查询的是空值,依然也会导致graph崩溃。 可能是类型问题。vid_type为int64, 2.0.1的版本很多地方处理都不完善,之前也遇到一些问题,社区都在修复,能不能看看,这个问题

和类型无关,我试了试go 10 steps不会触发core,但是一旦有to,比如go 1 to 2 steps就会core,估计是这部分优化计划哪里没写好

1 个赞

我这边觉得与跳数无关,因为我试了 go 1 to 2 steps以及10,不管多少跳都会导致graph崩溃

你也是用2.0.1复现的吗

是的,我在2.0.1复现的。
graph代码:https://github.com/vesoft-inc/nebula-graph/tree/v2.0.1
storage以及 meta代码:GitHub - vesoft-inc/nebula-common at v2.0.1 以及 https://github.com/vesoft-inc/nebula-storage/tree/v2.0.1

lookup on knowledgePoint where knowledgePoint.id == ‘KP111’ | GO 10 steps FROM $-.VertexID OVER parent YIELD parent._dst as dstId, $$.knowledgePoint.id, $$.knowledgePoint.listingStatus;

确实。我试了,非类型问题。 如果是go 10 steps不会core ,目前这个问题有解决方案吗?

这个问题在2.5修复了。你可以用2.5测试一下。

能否给一下2.5怎么修复的的pr给我们看下。 目前我们基于公司规则,暂时只能上2.0.1

1.1.0,2.0.1, 这样的版本,2.5公司还没开始采用。也就没测试。我们目前业务是准备从1.1.0升级到2.0.1,滞后社区的最新版本。比较紧急需要2.5这个问题如何修复的pr或者相关代码

我这里问题解决了,原因是govalidator在validateStarts时,当from是kInputProperty类型的时候没有把它放到exprProps_里,只需要在validateStarts结束后把它加上就好了。

1 个赞

:+1:

我昨晚一直看这块代码,未得要义,能否贴出来给我看看

2.0.1 之后,对go的执行计划整体做了一次重构,目前在2.0.1 之后的版本里这个问题已经修复了,应该是在重构过程中顺带修复了

1 个赞

你们的sworduo说他已经自己改了一点就修复了。govalidator在validateStarts时,当from是kInputProperty类型的时候没有把它放到exprProps_里,只需要在validateStarts结束后把它加上就好了。 我们目前还没发一下子升级2.5版本,能否让您同事把他说的这块修改截图一下,我确实在这块还没看懂。。

:sweat_smile: 他是社区好心用户,问题好像不是出现在validateStarts那里,我安装一下2.0.1的版本调试一下看看先

1 个赞

是的,2.5重构后变化太多了。我没法从2.5里面找到这里的具体修改

:sweat_smile: 2.5版本的执行计划改成类似优化器那种pattern match的模式,和2.0的基本是两套东西,看得很不直观 :joy:

弄的怎么样了,大佬

这样的修改,也会导致正常的语句查询不出数据,虽然避免了core dump问题。。。