关于java客户端创建tag并建立对应的索引,怎么能在资源完全创建成功之后返回一个值呢?

3秒是吗

是的,但是这是我本地的配置哦,是默认值,实际的最好你自己再确认一下

这个问题还是没有解决,因为我现在是1.0版本,请问2.0版本有解决这个问题吗?我不止sleep了一个heartbeat_interval_secs的时间,我再让程序多sleep一段时间都仍然会出现这种问题

就是我show tags都出现了我所需要创建的tag,并且我用show tags进行了查询,查到了我创建的tag,然后我再用lookup语句进行查询,都还是会报错,还是要等“一段时间”才能查,
应该是show tag能查到了,但是索引还没有完全建立,之前说的sleep一段时间行不通,没有解决。
请问2.0版本这个问题是否解决了?

heartbeat_interval_secs设置的是多少?storage,meta,graph都有这个设置项。
show tag index 是直接扫的磁盘,lookup是读取的cache,如果新创建了一个索引,需要等一个heartbeat_interval_secs的时间才能同步到cache。
“show tags” 是验证tag是否存在,这里应该检查一下index。

这里有一些关于index的CI测试用例,请参考

STORAGE和GRAPH设置的heartbeat_interval_secs都是3,meta的没有看见。我的确是让程序sleep过一段heartbeat_interval_secs时间之后才进行lookup查询的。
另外请问下java代码有检查index是否创建好的代码吗

能贴一下 meta,graph,storage的log吗?执行失败那个时间段的就行。

你创建完索引再做插入,不需要等待,直接查询,查不出来,那是bug。
假如你是插入完数据,进行创建索引,那么需要周期查看rebuild的结果,你可以通过在代码里面尝试周期获取 index 的rebuild状态( SHOW TAG INDEX STATUS;),成功了,才能去读数据,失败直接返回,至于尝试的超时时间看你的数据量。

1赞

我刚刚查询失败时间的三个日志
过程就是创建tag,创建索引,lookup查询.

创建tag,创建索引,没有插入数据,但是立即lookup会报错,等一会lookup会成功返回空结果,因为我没插入数据呢还,见下图:

这中间隔了两秒钟,这样能否确认是索引没建好的问题呢?

从报错原因看,graphd已经拿到这个index信息,可能storage还没更新,所以报这个错了。你要在创建完index后做查询的话,等两个heartbeat周期后再做插入或者查询稳妥点。

请问下怎么看出来graphd拿到了index的信息呢?
另外请问这是1.0版本的bug吗?如果是的话2.0版本是否还有呢?

这是创建tag时候的逻辑,先创建了tag,再创建了index

这不是bug,这是设计就是这样的,数据插入和查询的时候,用的index 信息是从缓存拿的,缓存是周期更新的,怎么看出graphd拿到,是通过看代码的。

你创建tag后,可以理解创建index,但是后面做数据插入或者查询的时候,等两个周期的heartbeat之后再做。就不会因为缓存还没加载index而失败。

明白了,可是index信息是从缓存拿的,那缓存加载好index之后,没有对应返回信息吗?

目前没有。但是我想可以有这样的需求,比如可以通过meta获取一个更新表,表里面是每个graphd和storage向meta更新元数据的情况的时间。

好的 明白了,请问一下我贴的这个日志的这三个服务的错误信息是什么意思能稍微说下吗?

浙ICP备20010487号