enable using a device for bluestore block db/wal

we reuse the 'journal_dev' parameter for bluestores block.db
and add a new parameter 'wal_dev' for bluestores write ahead log

if only journal_dev is given, use it for both db and wal

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2017-07-31 15:15:23 +02:00 committed by Fabian Grünbichler
parent 87eb0fc205
commit 8d64bd8c3b

View File

@ -175,7 +175,12 @@ __PACKAGE__->register_method ({
type => 'string',
},
journal_dev => {
description => "Block device name for journal.",
description => "Block device name for journal (filestore) or block.db (bluestore).",
optional => 1,
type => 'string',
},
wal_dev => {
description => "Block device name for block.wal (bluestore only).",
optional => 1,
type => 'string',
},
@ -209,10 +214,23 @@ __PACKAGE__->register_method ({
PVE::CephTools::setup_pve_symlinks();
my $bluestore = $param->{bluestore} // 0;
my $journal_dev;
my $wal_dev;
if ($param->{journal_dev} && ($param->{journal_dev} ne $param->{dev})) {
$journal_dev = PVE::Diskmanage::verify_blockdev_path($param->{journal_dev});
# if only journal is given, also put the wal there
$wal_dev = $journal_dev;
}
if ($param->{wal_dev} &&
($param->{wal_dev} ne $param->{dev}) &&
(!$param->{journal_dev} || $param->{wal_dev} ne $param->{journal_dev})) {
raise_param_exc({ 'wal_dev' => "can only be set with paramater 'bluestore'"})
if !$bluestore;
$wal_dev = PVE::Diskmanage::verify_blockdev_path($param->{wal_dev});
}
$param->{dev} = PVE::Diskmanage::verify_blockdev_path($param->{dev});
@ -255,20 +273,32 @@ __PACKAGE__->register_method ({
my $cmd = ['ceph-disk', 'prepare', '--zap-disk',
'--cluster', $ccname, '--cluster-uuid', $fsid ];
if ($param->{bluestore}) {
if ($bluestore) {
print "create OSD on $devpath (bluestore)\n";
push @$cmd, '--bluestore';
if ($journal_dev) {
print "using device '$journal_dev' for block.db\n";
push @$cmd, '--block.db', $journal_dev;
}
if ($wal_dev) {
print "using device '$wal_dev' for block.wal\n";
push @$cmd, '--block.wal', $wal_dev;
}
push @$cmd, $devpath;
} else {
print "create OSD on $devpath ($fstype)\n";
push @$cmd, '--filestore', '--fs-type', $fstype;
}
if ($journal_dev) {
print "using device '$journal_dev' for journal\n";
push @$cmd, '--journal-dev', $devpath, $journal_dev;
} else {
push @$cmd, $devpath;
}
}
run_command($cmd);
};