X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fscripts%2Flmc2csv.pl;h=60cd5d9853c372890d1e648b99fa17e1c44df3de;hb=59a81cdb1d8ea8372f0e4fa2fb56cd7406cb8c10;hp=73da5fe315fe7adc37666261842e184aab3fd55c;hpb=073e67f1647008c721d452ee3862c3f643f6c248;p=fs%2Flustre-release.git diff --git a/lustre/scripts/lmc2csv.pl b/lustre/scripts/lmc2csv.pl index 73da5fe..60cd5d9 100644 --- a/lustre/scripts/lmc2csv.pl +++ b/lustre/scripts/lmc2csv.pl @@ -18,6 +18,7 @@ sub get_arg_val { return $foo[1]; } } + return undef; } sub get_arg { @@ -39,6 +40,9 @@ sub add_net { $net->{"nid"} = get_arg_val("nid", \@_); $net->{"nettype"} = get_arg_val("nettype", \@_); $net->{"port"} = get_arg_val("port", \@_); + # note that this is not standard lmc syntax. it's an extension to it + # to handle something that lmc never had to deal with. + $net->{"iface"} = get_arg_val("iface", \@_); if ($#_ > 0) { print STDERR "Unknown arguments to \"--add net\": @_\n"; exit(1); @@ -49,10 +53,14 @@ sub add_net { sub add_mds { my $mds = {}; $mds->{"node"} = get_arg_val("node", \@_); - $mds->{"mds"} = get_arg_val("mds", \@_); + $mds->{"name"} = get_arg_val("mds", \@_); $mds->{"fstype"} = get_arg_val("fstype", \@_); $mds->{"dev"} = get_arg_val("dev", \@_); $mds->{"size"} = get_arg_val("size", \@_); + $mds->{"lmv"} = get_arg_val("lmv", \@_); + $mds->{"failover"} = get_arg("failover", \@_); + $mds->{"failout"} = get_arg("failout", \@_); + $mds->{"inode_size"} = get_arg_val("inode_size", \@_); if ($#_ > 0) { print STDERR "Unknown arguments to \"--add mds\": @_\n"; exit(1); @@ -62,8 +70,9 @@ sub add_mds { sub add_lov { my $lov = {}; - $lov->{"lov"} = get_arg_val("lov", \@_); + $lov->{"name"} = get_arg_val("lov", \@_); $lov->{"mds"} = get_arg_val("mds", \@_); + $lov->{"lmv"} = get_arg_val("lmv", \@_); $lov->{"stripe_sz"} = get_arg_val("stripe_sz", \@_); $lov->{"stripe_cnt"} = get_arg_val("stripe_cnt", \@_); $lov->{"stripe_pattern"} = get_arg_val("stripe_pattern", \@_); @@ -77,13 +86,15 @@ sub add_lov { sub add_ost { my $ost = {}; $ost->{"node"} = get_arg_val("node", \@_); - $ost->{"ost"} = get_arg_val("ost", \@_); + $ost->{"name"} = get_arg_val("ost", \@_); $ost->{"fstype"} = get_arg_val("fstype", \@_); $ost->{"dev"} = get_arg_val("dev", \@_); $ost->{"size"} = get_arg_val("size", \@_); $ost->{"lov"} = get_arg_val("lov", \@_); $ost->{"mountfsoptions"} = get_arg_val("mountfsoptions", \@_); $ost->{"failover"} = get_arg("failover", \@_); + $ost->{"failout"} = get_arg("failout", \@_); + $ost->{"inode_size"} = get_arg_val("inode_size", \@_); if ($#_ > 0) { print STDERR "Unknown arguments to \"--add ost\": @_\n"; exit(1); @@ -97,6 +108,7 @@ sub add_mtpt { $mtpt->{"path"} = get_arg_val("path", \@_); $mtpt->{"mds"} = get_arg_val("mds", \@_); $mtpt->{"lov"} = get_arg_val("lov", \@_); + $mtpt->{"lmv"} = get_arg_val("lmv", \@_); if ($#_ > 0) { print STDERR "Unknown arguments to \"--add mtpt\": @_\n"; exit(1); @@ -106,23 +118,32 @@ sub add_mtpt { no strict 'refs'; -sub find_obj { +sub find_objs { my $type = shift; my $key = shift; my $value = shift; my @objs = @_; + my @found_objs; foreach my $obj (@objs) { - if ($obj->{$key} eq $value) { - return $obj; + if (defined($obj->{$key}) && defined($value) + && $obj->{$key} eq $value) { + push(@found_objs, $obj); } } + + return @found_objs; } sub lnet_options { my $net = shift; - my $options_str = "options lnet networks=" . $net->{"nettype"} . + my $networks = $net->{"nettype"}; + if (defined($net->{"iface"})) { + my $iface = $net->{"iface"}; + $networks .= "($iface)"; + } + my $options_str = "options lnet networks=" . $networks . " accept=all"; if (defined($net->{"port"})) { $options_str .= " accept_port=" . $net->{"port"}; @@ -161,68 +182,171 @@ while(<>) { # link lovs to mdses foreach my $lov (@{$objs{"lov"}}) { - my $mds = find_obj("mds", "mds", $lov->{"mds"}, @{$objs{"mds"}}); - $mds->{"lov"} = $lov; + foreach my $mds (find_objs("mds", "name", $lov->{"mds"}, @{$objs{"mds"}})) { + if ($mds) { + $mds->{"lov"} = $lov; + } + } + # try via lmvs as well + foreach my $mds (find_objs("mds", "lmv", $lov->{"lmv"}, @{$objs{"mds"}})) { + if ($mds) { + $mds->{"lov"} = $lov; + } + } +} + +# create lmvs and link them to mdses +foreach my $mds (@{$objs{"mds"}}) { + my $lmv; + my @lmvs = find_objs("lmv", "name", $mds->{"lmv"}, @{$objs{"lmv"}}); + if ($#lmvs < 0) { + $lmv = {}; + $lmv->{"name"} = $mds->{"lmv"}; + push(@{$objs{"lmv"}}, $lmv); + } else { + $lmv = pop(@lmvs); + } + $mds->{"lmv"} = $lmv; } + +# link mtpts to lovs and lmvs or mdses +foreach my $mtpt (@{$objs{"mtpt"}}) { + foreach my $mds (find_objs("mds", "name", $mtpt->{"mds"}, @{$objs{"mds"}})) { + if ($mds) { + $mds->{"mtpt"} = $mtpt; + } + } + foreach my $lmv (find_objs("lmv", "name", $mtpt->{"lmv"}, @{$objs{"lmv"}})) { + if ($lmv) { + $lmv->{"mtpt"} = $mtpt; + } + } + foreach my $lov (find_objs("lov", "name", $mtpt->{"lov"}, @{$objs{"lov"}})) { + if ($lov) { + $lov->{"mtpt"} = $mtpt; + } + } +} + # XXX could find failover pairs of osts and mdts here and link them to # one another and then fill in their details in the csv generators below my $COUNT = 1; foreach my $mds (@{$objs{"mds"}}) { # find the net for this node - my $net = find_obj("net", "node", $mds->{"node"}, @{$objs{"net"}}); + my @nets = find_objs("net", "node", $mds->{"node"}, @{$objs{"net"}}); + my $lmv = $mds->{"lmv"}; my $lov = $mds->{"lov"}; - my $mkfs_options=""; + my $mtpt; + if ($lmv) { + $mtpt = $mds->{"lmv"}->{"mtpt"}; + } else { + $mtpt = $mds->{"mtpt"}; + } + my $fmt_options=""; if (defined($lov->{"stripe_sz"})) { - $mkfs_options .= "lov.stripesize=" . $lov->{"stripe_sz"} . " "; + $fmt_options .= "lov.stripesize=" . $lov->{"stripe_sz"} . " "; } if (defined($lov->{"stripe_cnt"})) { - $mkfs_options .= "lov.stripecount=" . $lov->{"stripe_cnt"} . " "; + $fmt_options .= "lov.stripecount=" . $lov->{"stripe_cnt"} . " "; } if (defined($lov->{"stripe_pattern"})) { - $mkfs_options .= "lov.stripetype=" . $lov->{"stripe_pattern"} . " "; + $fmt_options .= "lov.stripetype=" . $lov->{"stripe_pattern"} . " "; + } + if (defined($mds->{"failover"}) & $mds->{"failover"}) { + $fmt_options .= "failover.mode=failover" . " "; + } + if (defined($mds->{"failout"}) & $mds->{"failout"}) { + $fmt_options .= "failover.mode=failout" . " "; + } + chop($fmt_options); + if ($fmt_options ne "") { + $fmt_options = " --param=\"$fmt_options\""; + } + + my $mkfs_options=""; + if (defined($mds->{"inode_size"})) { + $mkfs_options .= "-I " . $mds->{"inode_size"} . " "; } chop($mkfs_options); - if ($mkfs_options ne "") { - $mkfs_options = " --param=\"$mkfs_options\""; + + my $fs_name=""; + my $mount_point = "$MOUNTPT/" . $mds->{"name"}; + if (defined($mtpt->{"node"})) { + $fs_name = $mtpt->{"node"}; + $mount_point .= "_" . $mtpt->{"node"}; } if ($COUNT == 1) { # mgs/mdt - printf "%s,%s,%s,$MOUNTPT/%s,mgs|mdt,,,,--device-size=%s --noformat%s,,noauto\n", + printf "%s,%s,%s,%s,mgs|mdt,%s,,,--device-size=%s --noformat%s,%s,\n", $mds->{"node"}, - lnet_options($net), + lnet_options($nets[0]), $mds->{"dev"}, - $mds->{"mds"}, + $mount_point, + $fs_name, $mds->{"size"}, + $fmt_options, $mkfs_options; - push(@mgses, $net->{"nid"}); + push(@mgses, $nets[0]->{"nid"}); } else { # mdt - printf "%s,%s,%s,$MOUNTPT/%s,mdt,,\"%s\",,--device-size=%s --noformat,,noauto\n", + printf "%s,%s,%s,%s,mdt,%s,\"%s\",,--device-size=%s --noformat%s,%s,\n", $mds->{"node"}, - lnet_options($net), + lnet_options($nets[0]), $mds->{"dev"}, - $mds->{"mds"}, + $mount_point, + $fs_name, join(",", @mgses), - $mds->{"size"}; + $mds->{"size"}, + $fmt_options, + $mkfs_options; } $COUNT++; } foreach my $ost (@{$objs{"ost"}}) { - # find the net for this node - my $mount_opts="noauto"; + my $mount_opts=""; if (defined($ost->{"mountfsoptions"})) { - $mount_opts .= "," . $ost->{"mountfsoptions"}; + $mount_opts .= "\"" . $ost->{"mountfsoptions"} . "\""; + } + my $fmt_options=""; + if (defined($ost->{"failover"}) & $ost->{"failover"}) { + $fmt_options .= "failover.mode=failover" . " "; + } + if (defined($ost->{"failout"}) & $ost->{"failout"}) { + $fmt_options .= "failover.mode=failout" . " "; + } + chop($fmt_options); + if ($fmt_options ne "") { + $fmt_options = " --param=\"$fmt_options\""; + } + + my $mkfs_options=""; + if (defined($ost->{"inode_size"})) { + $mkfs_options .= "-I " . $ost->{"inode_size"} . " "; } - my $net = find_obj("net", "node", $ost->{"node"}, @{$objs{"net"}}); - printf "%s,%s,%s,$MOUNTPT/%s,ost,,\"%s\",,--device-size=%s --noformat,,\"%s\"\n", + chop($mkfs_options); + + $ost->{"lov"} = (find_objs("lov", "name", $ost->{"lov"}, @{$objs{"lov"}}))[0]; + my $fs_name=""; + my $mount_point = "$MOUNTPT/" . $ost->{"name"}, + my $mtpt = $ost->{"lov"}->{"mtpt"}; + if (defined($mtpt->{"node"})) { + $fs_name = $mtpt->{"node"}; + $mount_point .= "_" . $mtpt->{"node"}; + } + # find the net for this node + my @nets = find_objs("net", "node", $ost->{"node"}, @{$objs{"net"}}); + printf "%s,%s,%s,%s,ost,%s,\"%s\",,--device-size=%s --noformat%s,%s,%s\n", $ost->{"node"}, - lnet_options($net), + lnet_options($nets[0]), $ost->{"dev"}, - $ost->{"ost"}, + $mount_point, + $fs_name, join(",", @mgses), $ost->{"size"}, + $fmt_options, + $mkfs_options, $mount_opts; }