tikv使用client-c请求rawput接口,请求丢失

TIKV:版本v5.2.0
OS:Linux 环境
client-c:master分支,但几个月没更新了

测试程序通过client-c rawput接口请求写入数据(打开了for_cas字段)

现象:
1、多个客户端进程,每个进度单线程调用RawPut接口,每次测试前都清空服务端数据,发现偶尔某个进程的请求全部丢失(比较奇怪为什么整个丢失)(丢失是通过grpc-snoop工具抓服务端端口统计接口的调用次数,抓包统计的调用数缺口刚好是丢失请求的进程的请求数);
2、并不是每次测试都会出现,需要重复几次到十几次;
3、出现丢失请求时该客户端进程应答返回会比较慢大概二三十毫秒(服务端没收到请求却能返回应答比较奇怪),请求成功的进程几毫秒;
4、最终结果是服务器没数据,却告诉客户端写入成功。

怀疑是client-c的问题或者grpc的问题,望各路大神指定下会是哪里出的问题,业务马上就要发布了测试出这个问题,大佬紧急支持。grpc请求丢失.zip (3.1 MB)

3 个赞

image
附件是丢失请求的日志(20211222170133_scan_bgo_5.log)和grpc-snoop服务端口日志,服务器只有一个tikv-server服务端口是20160

可以查询关键字1M_a_{数值},找其中一条看即可,测试的时候打开了GRPC_TRACE=all GRPC_VERBOSITY=debug,会有很多grpc相关的日志,帮忙分析下原因,请求到底发出去没,为什么服务端口没收到请求,客户端却直接应答回去了?

补充:测试发现单机tikv和测试程序在相同的机器上没有出现丢失现象,跨机器才容易出现,看起来是哪里协议的问题

不好意思,乌龙了,应用层失误,运行过程中去改pd 的地址失败,导致重新连接某些程序连接到了默认的本地的tikv,恰好本地有部署个tikv,数据都写到了本地:triumph:

1 个赞

借楼 问下client-c编译一直出现cmake错误 直接进去thirty编译第三方也有报错比如protoc必须3.8版本的 高版本还不行 是不是非root用户编译会出问题啊 有对应的编译步骤文档吗 多谢

我们都是在root用户下编译,cmake环境也有影响,建议用cmake3,编译client-c会缺很多依赖的包得一个个安装或编译安装

按照你说的方法 我在阿里云新装了一套 grpc编译的动态库 最后自己写的测试程序连接libkv_client.a库出现一堆grpc相关的错误 你那边grpc那些依赖库都是动态还是静态库呢,这些都没使用文档 遇到错误太难搞了 哈哈

大佬 可否加个微信详细聊下 client-c相关的编译用法呢 我这边测试程序有很多问题需要请教 多谢

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