Skip to content

Commit 707c111

Browse files
authored
Add lock for log dev read api's. (#612)
Avoid concurrent access to journal vdev for truncate, write and read api's from different threads.
1 parent c4a0697 commit 707c111

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

src/lib/logstore/log_dev.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,7 @@ int64_t LogDev::append_async(logstore_id_t store_id, logstore_seq_num_t seq_num,
264264
}
265265

266266
log_buffer LogDev::read(const logdev_key& key) {
267+
std::unique_lock lg = flush_guard();
267268
auto buf = sisl::make_byte_array(initial_read_size, m_flush_size_multiple, sisl::buftag::logread);
268269
auto ec = m_vdev_jd->sync_pread(buf->bytes(), initial_read_size, key.dev_offset);
269270
if (ec) {
@@ -292,6 +293,7 @@ log_buffer LogDev::read(const logdev_key& key) {
292293
}
293294

294295
void LogDev::read_record_header(const logdev_key& key, serialized_log_record& return_record_header) {
296+
std::unique_lock lg = flush_guard();
295297
auto buf = sisl::make_byte_array(initial_read_size, m_flush_size_multiple, sisl::buftag::logread);
296298
auto ec = m_vdev_jd->sync_pread(buf->bytes(), initial_read_size, key.dev_offset);
297299
if (ec) LOGERROR("Failed to read from Journal vdev log_dev={} {} {}", m_logdev_id, ec.value(), ec.message());

0 commit comments

Comments
 (0)