[Cluster-devel] cluster/group/dlm_controld action.c
rohara at sourceware.org
rohara at sourceware.org
Tue Jun 5 20:12:43 UTC 2007
CVSROOT: /cvs/cluster
Module name: cluster
Branch: RHEL5
Changes by: rohara at sourceware.org 2007-06-05 20:12:43
Modified files:
group/dlm_controld: action.c
Log message:
New lockspace config for external dlm.
Changed get_weight to look for node weight in lockspace config.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/dlm_controld/action.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.8.2.3&r2=1.8.2.4
--- cluster/group/dlm_controld/action.c 2007/05/04 21:14:32 1.8.2.3
+++ cluster/group/dlm_controld/action.c 2007/06/05 20:12:43 1.8.2.4
@@ -205,12 +205,16 @@
/* when not set in cluster.conf, a node's default weight is 1 */
+#define MASTER_PATH "/cluster/dlm/lockspace[@name=\"%s\"]/master"
#define WEIGHT_PATH "/cluster/clusternodes/clusternode[@name=\"%s\"]/@weight"
-static int get_weight(int cd, int nodeid)
+#define MASTER_NAME MASTER_PATH "/@name"
+#define MASTER_WEIGHT MASTER_PATH "[@name=\"%s\"]/@weight"
+
+static int get_weight(int cd, int nodeid, char *lockspace)
{
char path[PATH_MAX], *str, *name;
- int error, w;
+ int error, weight, flag = 0, count = 0;
name = nodeid2name(nodeid);
if (!name) {
@@ -219,15 +223,48 @@
}
memset(path, 0, PATH_MAX);
- sprintf(path, WEIGHT_PATH, name);
+ sprintf(path, MASTER_NAME, lockspace);
- error = ccs_get(cd, path, &str);
- if (error || !str)
- return 1;
+ while (1)
+ {
+ error = ccs_get_list(cd, path, &str);
+ if (error || !str) {
+ break;
+ }
+ count++;
+ if (strcmp(str, name) == 0) {
+ flag = 1;
+ }
+ free(str);
+ }
- w = atoi(str);
- free(str);
- return w;
+ if (count > 0) {
+ if (flag) {
+ memset(path, 0, PATH_MAX);
+ sprintf(path, MASTER_WEIGHT, lockspace, name);
+
+ error = ccs_get(cd, path, &str);
+ if (error || !str)
+ return 1;
+
+ weight = atoi(str);
+ free(str);
+ return weight;
+ } else {
+ return 0;
+ }
+ } else {
+ memset(path, 0, PATH_MAX);
+ sprintf(path, WEIGHT_PATH, name);
+
+ error = ccs_get(cd, path, &str);
+ if (error || !str)
+ return 1;
+
+ weight = atoi(str);
+ free(str);
+ return weight;
+ }
}
int set_members(char *name, int new_count, int *new_members)
@@ -346,7 +383,7 @@
if (!cd)
cd = open_ccs();
- w = get_weight(cd, id);
+ w = get_weight(cd, id, name);
memset(path, 0, PATH_MAX);
snprintf(path, PATH_MAX, "%s/%s/nodes/%d/weight",
More information about the Cluster-devel
mailing list