[Ocfs2-tools-commits] jlbec commits r512 - trunk/clusterbo
svn-commits at oss.oracle.com
svn-commits at oss.oracle.com
Mon Dec 27 13:31:13 CST 2004
Author: jlbec
Date: 2004-12-27 13:31:10 -0600 (Mon, 27 Dec 2004)
New Revision: 512
Modified:
trunk/clusterbo/o2cb_config.c
trunk/clusterbo/o2cb_ctl.c
Log:
o First attempt to replace clusterbo data init functionality.
Modified: trunk/clusterbo/o2cb_config.c
===================================================================
--- trunk/clusterbo/o2cb_config.c 2004-12-24 02:02:04 UTC (rev 511)
+++ trunk/clusterbo/o2cb_config.c 2004-12-27 19:31:10 UTC (rev 512)
@@ -160,6 +160,7 @@
if (!iter)
goto out_error;
+ rc = 0;
while (j_iterator_has_more(iter))
{
cfs = (JConfigStanza *)j_iterator_get_next(iter);
@@ -284,6 +285,7 @@
j_config_set_attribute(cfs, "node_count", count);
g_free(count);
+ rc = 0;
list = config->c_nodes;
while (list)
{
Modified: trunk/clusterbo/o2cb_ctl.c
===================================================================
--- trunk/clusterbo/o2cb_ctl.c 2004-12-24 02:02:04 UTC (rev 511)
+++ trunk/clusterbo/o2cb_ctl.c 2004-12-27 19:31:10 UTC (rev 512)
@@ -36,6 +36,8 @@
#include "jiterator.h"
#include "o2cb_config.h"
+#include "o2cb.h"
+
#define PROGNAME "o2cb_ctl"
#define O2CB_CONFIG_FILE "/etc/cluster.conf"
@@ -300,7 +302,7 @@
mi = mu = mo = mz = FALSE;
opterr = 0;
- while ((c = getopt(argc, argv, ":hVCDIHidozl:n:t:a:-:")) != EOF)
+ while ((c = getopt(argc, argv, ":hVCDIHiuozl:n:t:a:-:")) != EOF)
{
switch (c)
{
@@ -409,6 +411,7 @@
rc = append_attr(ctxt, optarg);
if (rc)
return rc;
+ break;
case '?':
fprintf(stderr, PROGNAME ": Invalid option: \'-%c\'\n",
@@ -424,6 +427,9 @@
break;
default:
+ fprintf(stderr,
+ PROGNAME ":Shouldn't get here %c %c\n",
+ optopt, c);
return -EINVAL;
break;
}
@@ -492,6 +498,23 @@
return 0;
} /* load_config() */
+static gint write_config(O2CBContext *ctxt)
+{
+ gint rc;
+
+ g_return_val_if_fail(ctxt->oc_config != NULL, -EINVAL);
+
+ rc = o2cb_config_store(ctxt->oc_config, O2CB_CONFIG_FILE);
+ if (rc)
+ {
+ fprintf(stderr,
+ PROGNAME ": Unable to store cluster configuration file \"%s\": %s\n",
+ O2CB_CONFIG_FILE, g_strerror(-rc));
+ }
+
+ return rc;
+} /* write_config() */
+
static gint find_objects_for_type(O2CBContext *ctxt)
{
fprintf(stderr,
@@ -561,6 +584,130 @@
return rc;
} /* find_type_for_objects() */
+static gint online_cluster(O2CBContext *ctxt)
+{
+ gint rc;
+ gchar *name, *node_name;
+ JIterator *iter;
+ GList *list = NULL, *l;
+ O2CBNode *node;
+ nm_node_info *node_i;
+ struct in_addr addr;
+
+ rc = -ENOMEM;
+ name = o2cb_config_get_cluster_name(ctxt->oc_config);
+ if (!name)
+ goto out_error;
+
+ iter = o2cb_config_get_nodes(ctxt->oc_config);
+ if (!iter)
+ goto out_error;
+
+ rc = 0;
+ while (j_iterator_has_more(iter))
+ {
+ node = (O2CBNode *)j_iterator_get_next(iter);
+ rc = -ENOMEM;
+ node_i = g_new0(nm_node_info, 1);
+ if (!node_i)
+ break;
+ list = g_list_append(list, node_i);
+ node_i->node_num = o2cb_node_get_number(node);
+ node_name = o2cb_node_get_name(node);
+ if (!node_name)
+ break;
+ /* Ignore truncation */
+ g_strlcpy(node_i->node_name, node_name, NM_MAX_NAME_LEN);
+ g_free(node_name);
+ node_i->ifaces[0].ip_port = htons(o2cb_node_get_port(node));
+ rc = o2cb_node_get_ipv4(node, &addr);
+ if (rc)
+ break;
+ node_i->ifaces[0].addr_u.ip_addr4 = addr.s_addr;
+ rc = 0;
+ }
+ j_iterator_free(iter);
+ if (rc)
+ goto out_error;
+
+ rc = o2cb_set_cluster_name(name);
+ if (rc)
+ goto out_error;
+
+ l = list;
+ while (l)
+ {
+ node_i = (nm_node_info *)l->data;
+ rc = o2cb_add_node(node_i);
+ if (rc)
+ goto out_error;
+ l = l->next;
+ }
+
+ rc = o2cb_activate_cluster();
+ if (rc)
+ goto out_error;
+ rc = o2cb_activate_networking();
+ if (rc)
+ goto out_error;
+
+out_error:
+ g_free(name);
+
+ while (list)
+ {
+ node_i = (nm_node_info *)list->data;
+ list = g_list_delete_link(list, list);
+
+ g_free(node_i);
+ }
+
+ return rc;
+} /* online_cluster() */
+
+static gint offline_cluster(O2CBContext *ctxt)
+{
+ fprintf(stderr,
+ PROGNAME ": Offline of cluster not supported yet\n");
+ return -ENOTSUP;
+} /* offline_cluster() */
+
+static gint run_change_cluster(O2CBContext *ctxt)
+{
+ gint rc;
+ const gchar *val;
+
+ if (attr_set(ctxt, "name"))
+ {
+ if (ctxt->oc_modify_running)
+ {
+ fprintf(stderr,
+ PROGNAME ": Cannot change name of a running cluster\n");
+ return -EINVAL;
+ }
+ val = attr_string(ctxt, "name", NULL);
+ if (!val || !*val)
+ {
+ fprintf(stderr,
+ PROGNAME ": Empty name for cluster\n");
+ return -EINVAL;
+ }
+ rc = o2cb_config_set_cluster_name(ctxt->oc_config, val);
+ if (rc)
+ return rc;
+ }
+ /* FIXME: Should perhaps store config before changing online info */
+ if (attr_set(ctxt, "online"))
+ {
+ if (attr_boolean(ctxt, "online", FALSE))
+ rc = online_cluster(ctxt);
+ else
+ rc = offline_cluster(ctxt);
+ }
+
+ return 0;
+} /* run_change_cluster() */
+
static gint run_change(O2CBContext *ctxt)
{
gint rc;
@@ -572,6 +719,10 @@
return -EINVAL;
}
+ rc = validate_attrs(ctxt);
+ if (rc)
+ return rc;
+
rc = load_config(ctxt);
if (rc)
return rc;
@@ -580,31 +731,40 @@
{
rc = find_objects_for_type(ctxt);
if (rc)
- return rc;
+ goto out_error;
}
else if (ctxt->oc_objects && !ctxt->oc_type)
{
rc = find_type_for_objects(ctxt);
if (rc)
- return rc;
+ goto out_error;
}
if (ctxt->oc_type == O2CB_TYPE_NODE)
{
+ rc = -ENOTSUP;
fprintf(stderr,
PROGNAME ": Node changes not yet supported\n");
- return -ENOTSUP;
+ goto out_error;
}
else if (ctxt->oc_type == O2CB_TYPE_CLUSTER)
{
+ rc = run_change_cluster(ctxt);
+ if (rc)
+ goto out_error;
}
else
{
+ rc = -EINVAL;
fprintf(stderr,
PROGNAME ": Invalid object type!\n");
- return -EINVAL;
+ goto out_error;
}
+
+ rc = write_config(ctxt);
+
+out_error:
return rc;
} /* run_change() */
@@ -644,6 +804,8 @@
break;
}
+ if (ctxt.oc_config)
+ o2cb_config_free(ctxt.oc_config);
clear_attrs(&ctxt);
return 0;
More information about the Ocfs2-tools-commits
mailing list