return $foo[1];
}
}
+ return undef;
}
sub get_arg {
$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);
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);
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", \@_);
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);
$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);
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"};
# 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;
}