Begin to debug ... all of this stuff :)
This commit is contained in:
+23
-23
@@ -40,18 +40,18 @@ void blockstore::calc_lengths(spp::sparse_hash_map<std::string, std::string> & c
|
||||
meta_len = block_count * sizeof(clean_disk_entry);
|
||||
if (meta_area < meta_len)
|
||||
{
|
||||
throw new std::runtime_error("Metadata area is too small");
|
||||
throw std::runtime_error("Metadata area is too small");
|
||||
}
|
||||
metadata_buf_size = stoull(config["meta_buf_size"]);
|
||||
metadata_buf_size = strtoull(config["meta_buf_size"].c_str(), NULL, 10);
|
||||
if (metadata_buf_size < 65536)
|
||||
{
|
||||
metadata_buf_size = 4*1024*1024;
|
||||
}
|
||||
// requested journal size
|
||||
uint64_t journal_wanted = stoull(config["journal_size"]);
|
||||
uint64_t journal_wanted = strtoull(config["journal_size"].c_str(), NULL, 10);
|
||||
if (journal_wanted > journal.len)
|
||||
{
|
||||
throw new std::runtime_error("Requested journal_size is too large");
|
||||
throw std::runtime_error("Requested journal_size is too large");
|
||||
}
|
||||
else if (journal_wanted > 0)
|
||||
{
|
||||
@@ -59,7 +59,7 @@ void blockstore::calc_lengths(spp::sparse_hash_map<std::string, std::string> & c
|
||||
}
|
||||
if (journal.len < MIN_JOURNAL_SIZE)
|
||||
{
|
||||
throw new std::runtime_error("Journal is too small");
|
||||
throw std::runtime_error("Journal is too small");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ void check_size(int fd, uint64_t *size, std::string name)
|
||||
struct stat st;
|
||||
if (fstat(fd, &st) < 0)
|
||||
{
|
||||
throw new std::runtime_error("Failed to stat "+name);
|
||||
throw std::runtime_error("Failed to stat "+name);
|
||||
}
|
||||
if (S_ISREG(st.st_mode))
|
||||
{
|
||||
@@ -81,40 +81,40 @@ void check_size(int fd, uint64_t *size, std::string name)
|
||||
ioctl(fd, BLKGETSIZE64, size) < 0 ||
|
||||
sectsize != 512)
|
||||
{
|
||||
throw new std::runtime_error(name+" sector is not equal to 512 bytes");
|
||||
throw std::runtime_error(name+" sector is not equal to 512 bytes");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new std::runtime_error(name+" is neither a file nor a block device");
|
||||
throw std::runtime_error(name+" is neither a file nor a block device");
|
||||
}
|
||||
}
|
||||
|
||||
void blockstore::open_data(spp::sparse_hash_map<std::string, std::string> & config)
|
||||
{
|
||||
data_offset = stoull(config["data_offset"]);
|
||||
data_offset = strtoull(config["data_offset"].c_str(), NULL, 10);
|
||||
if (data_offset % DISK_ALIGNMENT)
|
||||
{
|
||||
throw new std::runtime_error("data_offset not aligned");
|
||||
throw std::runtime_error("data_offset not aligned");
|
||||
}
|
||||
data_fd = open(config["data_device"].c_str(), O_DIRECT|O_RDWR);
|
||||
if (data_fd == -1)
|
||||
{
|
||||
throw new std::runtime_error("Failed to open data device");
|
||||
throw std::runtime_error("Failed to open data device");
|
||||
}
|
||||
check_size(data_fd, &data_size, "data device");
|
||||
if (data_offset >= data_size)
|
||||
{
|
||||
throw new std::runtime_error("data_offset exceeds device size");
|
||||
throw std::runtime_error("data_offset exceeds device size");
|
||||
}
|
||||
}
|
||||
|
||||
void blockstore::open_meta(spp::sparse_hash_map<std::string, std::string> & config)
|
||||
{
|
||||
meta_offset = stoull(config["meta_offset"]);
|
||||
meta_offset = strtoull(config["meta_offset"].c_str(), NULL, 10);
|
||||
if (meta_offset % DISK_ALIGNMENT)
|
||||
{
|
||||
throw new std::runtime_error("meta_offset not aligned");
|
||||
throw std::runtime_error("meta_offset not aligned");
|
||||
}
|
||||
if (config["meta_device"] != "")
|
||||
{
|
||||
@@ -122,12 +122,12 @@ void blockstore::open_meta(spp::sparse_hash_map<std::string, std::string> & conf
|
||||
meta_fd = open(config["meta_device"].c_str(), O_DIRECT|O_RDWR);
|
||||
if (meta_fd == -1)
|
||||
{
|
||||
throw new std::runtime_error("Failed to open metadata device");
|
||||
throw std::runtime_error("Failed to open metadata device");
|
||||
}
|
||||
check_size(meta_fd, &meta_size, "metadata device");
|
||||
if (meta_offset >= meta_size)
|
||||
{
|
||||
throw new std::runtime_error("meta_offset exceeds device size");
|
||||
throw std::runtime_error("meta_offset exceeds device size");
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -136,24 +136,24 @@ void blockstore::open_meta(spp::sparse_hash_map<std::string, std::string> & conf
|
||||
meta_size = 0;
|
||||
if (meta_offset >= data_size)
|
||||
{
|
||||
throw new std::runtime_error("meta_offset exceeds device size");
|
||||
throw std::runtime_error("meta_offset exceeds device size");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void blockstore::open_journal(spp::sparse_hash_map<std::string, std::string> & config)
|
||||
{
|
||||
journal.offset = stoull(config["journal_offset"]);
|
||||
journal.offset = strtoull(config["journal_offset"].c_str(), NULL, 10);
|
||||
if (journal.offset % DISK_ALIGNMENT)
|
||||
{
|
||||
throw new std::runtime_error("journal_offset not aligned");
|
||||
throw std::runtime_error("journal_offset not aligned");
|
||||
}
|
||||
if (config["journal_device"] != "")
|
||||
{
|
||||
journal.fd = open(config["journal_device"].c_str(), O_DIRECT|O_RDWR);
|
||||
if (journal.fd == -1)
|
||||
{
|
||||
throw new std::runtime_error("Failed to open journal device");
|
||||
throw std::runtime_error("Failed to open journal device");
|
||||
}
|
||||
check_size(journal.fd, &journal.device_size, "metadata device");
|
||||
}
|
||||
@@ -163,10 +163,10 @@ void blockstore::open_journal(spp::sparse_hash_map<std::string, std::string> & c
|
||||
journal.device_size = 0;
|
||||
if (journal.offset >= data_size)
|
||||
{
|
||||
throw new std::runtime_error("journal_offset exceeds device size");
|
||||
throw std::runtime_error("journal_offset exceeds device size");
|
||||
}
|
||||
}
|
||||
journal.sector_count = stoull(config["journal_sector_buffer_count"]);
|
||||
journal.sector_count = strtoull(config["journal_sector_buffer_count"].c_str(), NULL, 10);
|
||||
if (!journal.sector_count)
|
||||
{
|
||||
journal.sector_count = 32;
|
||||
@@ -175,6 +175,6 @@ void blockstore::open_journal(spp::sparse_hash_map<std::string, std::string> & c
|
||||
journal.sector_info = (journal_sector_info_t*)calloc(journal.sector_count, sizeof(journal_sector_info_t));
|
||||
if (!journal.sector_buf || !journal.sector_info)
|
||||
{
|
||||
throw new std::bad_alloc();
|
||||
throw std::bad_alloc();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user