bluefs->get_block_device_size(BlueFS::BDEV_DB) - SUPER_RESERVED);
}
bluefs_layout.shared_bdev = BlueFS::BDEV_SLOW;
- bluefs_layout.single_shared_device = false;
+ bluefs_layout.dedicated_db = true;
} else {
r = -errno;
if (::lstat(bfn.c_str(), &st) == -1) {
bluefs->get_block_device_size(BlueFS::BDEV_WAL) -
BDEV_LABEL_BLOCK_SIZE);
}
- bluefs_layout.single_shared_device = false;
+ bluefs_layout.dedicated_wal = true;
} else {
r = 0;
if (::lstat(bfn.c_str(), &st) != -1) {
bdev->collect_metadata("bluestore_bdev_", pm);
if (bluefs) {
(*pm)["bluefs"] = "1";
+ // this value is for backward compatibility only
(*pm)["bluefs_single_shared_device"] = \
- stringify((int)bluefs_layout.single_shared_device);
+ stringify((int)bluefs_layout.single_shared_device());
+ (*pm)["bluefs_dedicated_db"] = \
+ stringify((int)bluefs_layout.dedicated_db);
+ (*pm)["bluefs_dedicated_wal"] = \
+ stringify((int)bluefs_layout.dedicated_wal);
bluefs->collect_metadata(pm, bluefs_layout.shared_bdev);
} else {
(*pm)["bluefs"] = "0";
// can rely on the bluefs commit to flush the device and make
// deferred aios stable. that means that if we do have done deferred
// txcs AND we are not on a single device, we need to force a flush.
- if (bluefs_layout.single_shared_device && bluefs) {
+ if (bluefs && bluefs_layout.single_shared_device()) {
if (aios) {
force_flush = true;
} else if (kv_committing.empty() && deferred_stable.empty()) {
ostream& operator<<(ostream& out, const bluefs_fnode_t& file);
struct bluefs_layout_t {
- unsigned shared_bdev = 0; ///< which bluefs bdev we are sharing
- bool single_shared_device = true;
+ unsigned shared_bdev = 0; ///< which bluefs bdev we are sharing
+ bool dedicated_db = false; ///< whether block.db is present
+ bool dedicated_wal = false; ///< whether block.wal is present
+
+ bool single_shared_device() const {
+ return !dedicated_db && !dedicated_wal;
+ }
};
struct bluefs_super_t {