[Ocfs2-tools-commits] jlbec commits r688 - trunk/o2cb_ctl

svn-commits at oss.oracle.com svn-commits at oss.oracle.com
Fri Mar 18 17:35:49 CST 2005


Author: jlbec
Signed-off-by: manish
Date: 2005-03-18 17:35:47 -0600 (Fri, 18 Mar 2005)
New Revision: 688

Modified:
   trunk/o2cb_ctl/o2cb_config.c
   trunk/o2cb_ctl/o2cb_ctl.c
Log:

o Teach o2cb_ctl to create clusters

Signed-off-by: manish



Modified: trunk/o2cb_ctl/o2cb_config.c
===================================================================
--- trunk/o2cb_ctl/o2cb_config.c	2005-03-18 23:05:57 UTC (rev 687)
+++ trunk/o2cb_ctl/o2cb_config.c	2005-03-18 23:35:47 UTC (rev 688)
@@ -414,6 +414,10 @@
     O2CBCluster *cluster;
 
     g_return_val_if_fail(config != NULL, NULL);
+    
+    cluster = o2cb_config_get_cluster_by_name(config, name);
+    if (cluster)
+        return NULL;
 
     cluster = g_new(O2CBCluster, 1);
 
@@ -529,6 +533,10 @@
 
     g_return_val_if_fail(cluster != NULL, NULL);
 
+    node = o2cb_cluster_get_node_by_name(cluster, name);
+    if (node)
+        return NULL;
+
     node = g_new(O2CBNode, 1);
 
     node->n_name = g_strdup(name);

Modified: trunk/o2cb_ctl/o2cb_ctl.c
===================================================================
--- trunk/o2cb_ctl/o2cb_ctl.c	2005-03-18 23:05:57 UTC (rev 687)
+++ trunk/o2cb_ctl/o2cb_ctl.c	2005-03-18 23:35:47 UTC (rev 688)
@@ -784,6 +784,107 @@
     return rc;
 }  /* run_change() */
 
+static gint run_create_clusters(O2CBContext *ctxt)
+{
+    gint rc = 0;
+    O2CBCluster *cluster;
+    errcode_t err;
+    gchar *name;
+    GList *list;
+
+    list = ctxt->oc_objects;
+    while (list)
+    {
+        name = list->data;
+        cluster = o2cb_config_get_cluster_by_name(ctxt->oc_config,
+                                                  name);
+        if (cluster)
+        {
+            rc = -EEXIST;
+            fprintf(stderr,
+                    PROGNAME ": Cluster \"%s\" already exists\n",
+                    name);
+            break;
+        }
+
+        cluster = o2cb_config_add_cluster(ctxt->oc_config, name);
+        if (!cluster)
+        {
+            rc = -ENOMEM;
+            fprintf(stderr,
+                    PROGNAME ": Unable to add cluster \"%s\"\n",
+                    name);
+            break;
+        }
+
+        if (ctxt->oc_modify_running)
+        {
+            err = o2cb_create_cluster(name);
+            if (err)
+            {
+                if (err != O2CB_ET_CLUSTER_EXISTS)
+                {
+                    rc = -EIO;
+                    com_err(PROGNAME, err, "while setting cluster name");
+                    break;
+                }
+            }
+            else
+                fprintf(stdout, "Cluster %s created\n", name);
+        }
+
+        list = list->next;
+    }
+
+    return rc;
+}
+
+static gint run_create(O2CBContext *ctxt)
+{
+    gint rc;
+
+    if (!ctxt->oc_type || !ctxt->oc_objects)
+    {
+        fprintf(stderr,
+                PROGNAME ": Operation \'-C\' requires an object and an object type\n");
+        return -EINVAL;
+    } 
+
+    rc = validate_attrs(ctxt);
+    if (rc)
+        return rc;
+
+    rc = load_config(ctxt);
+    if (rc)
+        return rc;
+
+    if (ctxt->oc_type == O2CB_TYPE_NODE)
+    {
+        rc = -ENOTSUP;
+        fprintf(stderr,
+                PROGNAME ": Node creation not yet supported\n");
+        goto out_error;
+    }
+    else if (ctxt->oc_type == O2CB_TYPE_CLUSTER)
+    {
+        rc = run_create_clusters(ctxt);
+        if (rc)
+            goto out_error;
+    }
+    else
+    {
+        rc = -EINVAL;
+        fprintf(stderr,
+                PROGNAME ": Invalid object type!\n");
+        goto out_error;
+    }
+
+    rc = write_config(ctxt);
+
+out_error:
+    return rc;
+}  /* run_change() */
+
 gint main(gint argc, gchar *argv[])
 {
     int rc;
@@ -803,6 +904,9 @@
             break;
 
         case O2CB_OP_CREATE:
+            rc = run_create(&ctxt);
+            break;
+
         case O2CB_OP_DELETE:
         case O2CB_OP_INFO:
             rc = -ENOTSUP;



More information about the Ocfs2-tools-commits mailing list