Skip to content

Commit b7839b2

Browse files
LimiNodeclaude
andcommitted
fix(mdbx): correct read_recent limit and fix test timestamps
- read_recent now reads full range then takes the last limit records instead of delegating limit to read_range which returns oldest first - Test uses LOGIT_CURRENT_TIMESTAMP_MS() as now for period and limit checks - Add limited_desc assertion to verify Descending with limit Co-Authored-By: Claude Opus 4.8 <[email protected]>
1 parent a8ca0a0 commit b7839b2

2 files changed

Lines changed: 17 additions & 4 deletions

File tree

include/logit_cpp/logit/loggers/MdbxLogger.hpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,12 @@ namespace logit {
224224
LogReadOrder order = LogReadOrder::Ascending) const override {
225225
const int64_t now_ms = LOGIT_CURRENT_TIMESTAMP_MS();
226226
const int64_t from_ms = (period_ms > 0) ? (now_ms - period_ms) : 0;
227-
auto records = read_range(from_ms, now_ms + 1, limit);
227+
auto records = read_range(from_ms, now_ms + 1, 0);
228+
if (limit > 0 && records.size() > limit) {
229+
records.erase(
230+
records.begin(),
231+
records.begin() + static_cast<std::ptrdiff_t>(records.size() - limit));
232+
}
228233
if (order == LogReadOrder::Descending && !records.empty()) {
229234
std::reverse(records.begin(), records.end());
230235
}

tests/mdbx_logger_test.cpp

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -265,9 +265,10 @@ void test_read_recent() {
265265
config.async = false;
266266

267267
logit::MdbxLogger logger(config);
268-
logger.log(make_record(logit::LogLevel::LOG_LVL_INFO, 1000, 70), "old");
269-
logger.log(make_record(logit::LogLevel::LOG_LVL_INFO, 2000, 71), "mid");
270-
logger.log(make_record(logit::LogLevel::LOG_LVL_INFO, 3000, 72), "new");
268+
const int64_t now = LOGIT_CURRENT_TIMESTAMP_MS();
269+
logger.log(make_record(logit::LogLevel::LOG_LVL_INFO, now - 3000, 70), "old");
270+
logger.log(make_record(logit::LogLevel::LOG_LVL_INFO, now - 1000, 71), "mid");
271+
logger.log(make_record(logit::LogLevel::LOG_LVL_INFO, now, 72), "new");
271272

272273
auto all_asc = logger.read_recent(0, 0, logit::LogReadOrder::Ascending);
273274
assert(all_asc.size() == 3);
@@ -281,6 +282,13 @@ void test_read_recent() {
281282

282283
auto limited = logger.read_recent(2, 0, logit::LogReadOrder::Ascending);
283284
assert(limited.size() == 2);
285+
assert(limited[0].message == "mid");
286+
assert(limited[1].message == "new");
287+
288+
auto limited_desc = logger.read_recent(2, 0, logit::LogReadOrder::Descending);
289+
assert(limited_desc.size() == 2);
290+
assert(limited_desc[0].message == "new");
291+
assert(limited_desc[1].message == "mid");
284292

285293
auto period = logger.read_recent(10, 1500, logit::LogReadOrder::Ascending);
286294
assert(period.size() == 2);

0 commit comments

Comments
 (0)