Whamcloud - gitweb
LU-13004 ptlrpc: Allow BULK_BUF_KIOV to accept a kvec
[fs/lustre-release.git] / lustre / scripts / lmc2csv.pl
index 86959bb..60cd5d9 100644 (file)
@@ -3,7 +3,7 @@
 # vim:expandtab:shiftwidth=4:softtabstop=4:tabstop=4:
 
 #
-# convert an lmc batch file to a csv file for lustre_config.sh
+# convert an lmc batch file to a csv file for lustre_config
 #
 use strict; use warnings;
 
@@ -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;
 }