-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
meta version conflict in heavy set/delete workload #1333
Comments
good job. |
blackwidow 现在是 storage ,那里面 ttl version 都是 4 个字节,这 ttl 四个字节也不合理,到 2038 年也会超时,后面也得改进。 |
好的 |
相关 issue #1099 社区已经给出一个解决方案 https://github.com/OpenAtomFoundation/pika/pull/1413/files 你先学习下, 这个是限制下时间长度,不要溢出。也不能算作最终的解决方法。 尽量在不改动字段长度的情况下,解决这个问题。 保持对老版本数据格式的兼容度很重要。 |
大概有如下解决方案: 1 一劳永逸的把 ttl 和 version 改为 int64,但是怎么 “保持对老版本数据格式的兼容” 是个难题; 2 我在想这么一种解决方案,在不改动 version 和 ttl 目前长度是 4B 的情况下,pika 内置一个特殊 kv {key: “pika_start_up_time", value: "pika 第一次启动时间”} 不管 pika 重启多少次,都保持第一次启动的值。假设是 20 0000 0000 如果当前 ttl 和 version 值小于 20 0000 0000,显然其正确值应该是 ttl + max_int32 和 version + max_int32;如果大于 20 0000 0000 ,那就没问题。在物理时间长度来说,可以保持 50 年内没啥差错 3 通过 Pika 版本号来解决这个问题。那就在 pika 数据中内置一个 {key: “pika_start_up_version", value: "pika 第一次实例的版本号“},毕竟使用当前数据的 pika 实例可能不是这个数据的第一个生产者。 |
首先这个主题内的这个问题和你版本号是4 是8没关系,本质是时间戳不唯一,用户一边写一边删,就会有看见旧数据的问题 dongdongwcpp 反馈重放log可能存在一边写一边删的场景 其次时间戳长度切换,value = 实际用户value + ttl 4B + version 4B ,扣掉用户value剩下的长度做个判断 等于8就是旧的,新的value改ttl为8,这样就区分开了 |
|
显荣:暂时搁置 |
meta version will conflict in heavy set/delete workload,the code was:
https://github.com/OpenAtomFoundation/pika/blob/unstable/src/blackwidow/src/base_meta_value_format.h#L31
Minimal reproduce step
just set and delete and set a hash with five fields;
how to fix
I will submit a pr to fix this
The text was updated successfully, but these errors were encountered: