#22417·etcd

client/v3/leasing: 删除缓存的密钥后清除 RangeResponse.Count

作者: gluedtea创建于 2026年9月11日更新于 2026年9月11日
标签type/bug

错误报告标准

发生了什么事?

客户端的租赁缓存清除了GetResponse'。 当缓存密钥被删除时 Kvs' , 但无法清除 GetResponse' 。 数".

由于缓存的回复复制了原回复元数据,一个密钥可以在保留上一个计数的同时被作为删除而返回:

页:1 put ("k","v") (中文(简体) ). 租赁。 获取( “ k” ) - > Kvs=[ k], 计数= 1 租赁。 删除 ("k") 租赁。 获取( "k" ) - > Kvs=[], 计数=1


这影响了缓存读取的反应语义. `国家 ' 应代表范围响应中的密钥数,因此当密钥已不存在时应为零。


你想怎样?



删除缓存密钥后, 将随后的“ 离开 ” 。 获取`应该返回:

页:1
Kvs=[] (中文(简体) ).
数=0

我们如何复制(尽可能少和准确)?

开始 ,错误:=lkv.Put(ctx,"k","v"). 需要。没有错误( t, 错误)

resp, 错误 := lkv.Get(ctx, "k") 需要。没有错误( t, 错误) 需要.equal(t, int64(1), resp.Count) (中文(简体) ).

, 错误 = lkv.Delete(ctx, "k") 需要。没有错误( t, 错误)

resp, 错误 = lkv.Get(ctx, "k") 需要。没有错误( t, 错误) 要求。 空( t, resp. Kvs) 要求。 零(t, resp.Count) (英语).


最后的断言在解决之前没有成功,因为`resp.Count'仍然是`1'。


还有什么需要我们知道的吗?




问题在缓存删除路径中的“客户/v3/离开/cache.go”。 目标就是设定"利. 反应" 数=0,加上 " li. " 。 (原始内容存档于2018-09-26). Kvs'.


QQ Etcd 版本( 请在下面运行命令)

< 细节>

控制台
$等 -- -- version
主页 @ e041c4fa2


$等dctl 版本
v3.8.0-α.0-309-ge041c4fa2 (中文(简体) ).

</详情>

Etcd 配置(命令行旗或环境变量)

< 细节>

默认客户端租赁配置 。

</详情>

QQ Etcd 调试信息( 请在下面运行命令, 在输出中随意混淆 IP 地址或 FQDN)

< 细节>

控制台 $等dctl 成员列表 -w表 不适用。 这是一个客户端缓存响应问题.

$等dctl -- endpoints -- -- 成员列表 > 端点状态 - w 表格 在这里粘贴输出


</详情>


QQ 相关日志输出

贝壳
无。