int get_image_options(const boost::program_options::variables_map &vm,
bool get_format, librbd::ImageOptions *opts) {
- uint64_t order, features, stripe_unit, stripe_count, object_size;
+ uint64_t order, features = 0, stripe_unit, stripe_count, object_size;
+ bool order_specified = true;
bool features_specified = false;
+ bool stripe_specified = false;
if (vm.count(at::IMAGE_ORDER)) {
order = vm[at::IMAGE_ORDER].as<uint64_t>();
object_size = vm[at::IMAGE_OBJECT_SIZE].as<uint64_t>();
order = std::round(std::log2(object_size));
} else {
- order = g_conf->rbd_default_order;
+ order_specified = false;
}
if (vm.count(at::IMAGE_FEATURES)) {
features = vm[at::IMAGE_FEATURES].as<uint64_t>();
features_specified = true;
- } else {
- features = g_conf->rbd_default_features;
}
if (vm.count(at::IMAGE_STRIPE_UNIT)) {
stripe_unit = vm[at::IMAGE_STRIPE_UNIT].as<uint64_t>();
- } else {
- stripe_unit = g_conf->rbd_default_stripe_unit;
+ stripe_specified = true;
}
if (vm.count(at::IMAGE_STRIPE_COUNT)) {
stripe_count = vm[at::IMAGE_STRIPE_COUNT].as<uint64_t>();
- } else {
- stripe_count = g_conf->rbd_default_stripe_count;
+ stripe_specified = true;
}
if ((stripe_unit != 0 && stripe_count == 0) ||
if (vm.count(at::IMAGE_SHARED) && vm[at::IMAGE_SHARED].as<bool>()) {
features &= ~RBD_FEATURES_SINGLE_CLIENT;
+ features_specified = true;
}
if (get_format) {
- uint64_t format;
+ uint64_t format = 0;
bool format_specified = false;
if (vm.count(at::IMAGE_NEW_FORMAT)) {
format = 2;
} else if (vm.count(at::IMAGE_FORMAT)) {
format = vm[at::IMAGE_FORMAT].as<uint32_t>();
format_specified = true;
- } else {
- format = g_conf->rbd_default_format;
}
if (format == 1) {
std::cerr << "rbd: image format 1 is deprecated" << std::endl;
if (format_specified) {
int r = g_conf->set_val("rbd_default_format", stringify(format));
assert(r == 0);
+ opts->set(RBD_IMAGE_OPTION_FORMAT, format);
}
-
- opts->set(RBD_IMAGE_OPTION_FORMAT, format);
}
- opts->set(RBD_IMAGE_OPTION_ORDER, order);
- opts->set(RBD_IMAGE_OPTION_FEATURES, features);
- opts->set(RBD_IMAGE_OPTION_STRIPE_UNIT, stripe_unit);
- opts->set(RBD_IMAGE_OPTION_STRIPE_COUNT, stripe_count);
+ if (order_specified)
+ opts->set(RBD_IMAGE_OPTION_ORDER, order);
+ if (features_specified)
+ opts->set(RBD_IMAGE_OPTION_FEATURES, features);
+ if (stripe_specified) {
+ opts->set(RBD_IMAGE_OPTION_STRIPE_UNIT, stripe_unit);
+ opts->set(RBD_IMAGE_OPTION_STRIPE_COUNT, stripe_count);
+ }
int r = get_journal_options(vm, opts);
if (r < 0) {