ideawu / ssdb

SSDB - A fast NoSQL database, an alternative to Redis
http://ssdb.io/
BSD 3-Clause "New" or "Revised" License
8.19k stars 1.4k forks source link

list容量的问题,极端情况下,一直rpush,并且lpop, 可能list只有几个元素,但是却无法rpush新的元素 #1404

Closed lqxhub closed 3 years ago

lqxhub commented 3 years ago
const uint64_t QFRONT_SEQ = 2;
const uint64_t QBACK_SEQ  = 3;
const uint64_t QITEM_MIN_SEQ = 10000;
const uint64_t QITEM_MAX_SEQ = 9223372036854775807ULL;
const uint64_t QITEM_SEQ_INIT = QITEM_MAX_SEQ/2;

我在 t_queue.h 文件中看到了这些定义, list在leveldb中是通过seq计算list元素中的位置的, 极端情况下 一直rpush,并且lpop, 最后可能list中只有很少的几个元素, 但是seq已经到了 max值, 导致 list无法rpush

ideawu commented 3 years ago

你的理论分析得很对, 但实践上不可能遇到, 因为63位整数在所有能想到的实际场景中永远不会被用完.