Fix colocated offsets

blocking-uring-test
Vitaliy Filippov 2020-01-06 02:57:08 +03:00
parent 2709574c93
commit f3e3f8f005
1 changed files with 8 additions and 8 deletions

View File

@ -23,22 +23,22 @@ void blockstore_impl_t::calc_lengths(blockstore_config_t & config)
} }
// meta // meta
meta_area = (meta_fd == data_fd ? data_size : meta_size) - meta_offset; meta_area = (meta_fd == data_fd ? data_size : meta_size) - meta_offset;
if (meta_fd == data_fd && meta_offset < data_offset) if (meta_fd == data_fd && meta_offset <= data_offset)
{ {
meta_area = data_offset - meta_offset; meta_area = data_offset - meta_offset;
} }
if (meta_fd == journal.fd && meta_offset < journal.offset) if (meta_fd == journal.fd && meta_offset <= journal.offset)
{ {
meta_area = meta_area < journal.offset-meta_offset meta_area = meta_area < journal.offset-meta_offset
? meta_area : journal.offset-meta_offset; ? meta_area : journal.offset-meta_offset;
} }
// journal // journal
journal.len = (journal.fd == data_fd ? data_size : (journal.fd == meta_fd ? meta_size : journal.device_size)) - journal.offset; journal.len = (journal.fd == data_fd ? data_size : (journal.fd == meta_fd ? meta_size : journal.device_size)) - journal.offset;
if (journal.fd == data_fd && journal.offset < data_offset) if (journal.fd == data_fd && journal.offset <= data_offset)
{ {
journal.len = data_offset - journal.offset; journal.len = data_offset - journal.offset;
} }
if (journal.fd == meta_fd && journal.offset < meta_offset) if (journal.fd == meta_fd && journal.offset <= meta_offset)
{ {
journal.len = journal.len < meta_offset-journal.offset journal.len = journal.len < meta_offset-journal.offset
? journal.len : meta_offset-journal.offset; ? journal.len : meta_offset-journal.offset;
@ -48,7 +48,7 @@ void blockstore_impl_t::calc_lengths(blockstore_config_t & config)
meta_len = ((block_count - 1 + 512 / sizeof(clean_disk_entry)) / (512 / sizeof(clean_disk_entry))) * 512; meta_len = ((block_count - 1 + 512 / sizeof(clean_disk_entry)) / (512 / sizeof(clean_disk_entry))) * 512;
if (meta_area < meta_len) if (meta_area < meta_len)
{ {
throw std::runtime_error("Metadata area is too small"); throw std::runtime_error("Metadata area is too small, need at least "+std::to_string(meta_len)+" bytes");
} }
metadata_buf_size = strtoull(config["meta_buf_size"].c_str(), NULL, 10); metadata_buf_size = strtoull(config["meta_buf_size"].c_str(), NULL, 10);
if (metadata_buf_size < 65536) if (metadata_buf_size < 65536)
@ -74,7 +74,7 @@ void blockstore_impl_t::calc_lengths(blockstore_config_t & config)
} }
if (journal.len < MIN_JOURNAL_SIZE) if (journal.len < MIN_JOURNAL_SIZE)
{ {
throw std::runtime_error("Journal is too small"); throw std::runtime_error("Journal is too small, need at least "+std::to_string(MIN_JOURNAL_SIZE)+" bytes");
} }
if (journal.inmemory) if (journal.inmemory)
{ {
@ -137,7 +137,7 @@ void blockstore_impl_t::open_meta(blockstore_config_t & config)
{ {
throw std::runtime_error("meta_offset not aligned"); throw std::runtime_error("meta_offset not aligned");
} }
if (config["meta_device"] != "") if (config["meta_device"] != "" && config["meta_device"] != config["data_device"])
{ {
meta_offset = 0; meta_offset = 0;
meta_fd = open(config["meta_device"].c_str(), O_DIRECT|O_RDWR); meta_fd = open(config["meta_device"].c_str(), O_DIRECT|O_RDWR);
@ -169,7 +169,7 @@ void blockstore_impl_t::open_journal(blockstore_config_t & config)
{ {
throw std::runtime_error("journal_offset not aligned"); throw std::runtime_error("journal_offset not aligned");
} }
if (config["journal_device"] != "") if (config["journal_device"] != "" && config["journal_device"] != config["meta_device"])
{ {
journal.fd = open(config["journal_device"].c_str(), O_DIRECT|O_RDWR); journal.fd = open(config["journal_device"].c_str(), O_DIRECT|O_RDWR);
if (journal.fd == -1) if (journal.fd == -1)