[Cluster-devel] cluster/dlm/tests/usertest Makefile alternate- ...
teigland at sourceware.org
teigland at sourceware.org
Wed Jan 31 18:47:41 UTC 2007
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: teigland at sourceware.org 2007-01-31 18:47:41
Modified files:
dlm/tests/usertest: Makefile
Added files:
dlm/tests/usertest: alternate-lvb.c
Log message:
test program like gfs's 'alternate' but using an lvb instead of a file.
nodes take turns incrementing the counter in the lvb
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/tests/usertest/alternate-lvb.c.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/tests/usertest/Makefile.diff?cvsroot=cluster&r1=1.7&r2=1.8
/cvs/cluster/cluster/dlm/tests/usertest/alternate-lvb.c,v --> standard output
revision 1.1
--- cluster/dlm/tests/usertest/alternate-lvb.c
+++ - 2007-01-31 18:47:41.809138000 +0000
@@ -0,0 +1,177 @@
+/******************************************************************************
+*******************************************************************************
+**
+** Copyright 2001 Sistina Software, Inc.
+**
+** This is free software released under the GNU General Public License.
+** There is no warranty for this software. See the file COPYING for
+** details.
+**
+*******************************************************************************
+******************************************************************************/
+
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <string.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <time.h>
+#include <sys/time.h>
+#include <syslog.h>
+#include <asm/types.h>
+#include <sys/socket.h>
+#include <sys/poll.h>
+#include <sys/un.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/errno.h>
+
+#include "libdlm.h"
+
+#define die(fmt, args...) \
+do \
+{ \
+ fprintf(stderr, "%s: ", prog_name); \
+ fprintf(stderr, fmt, ##args); \
+ exit(EXIT_FAILURE); \
+} \
+while (0)
+
+static char *prog_name;
+static dlm_lshandle_t *dh;
+static int verbose;
+
+static struct dlm_lksb lksb;
+static char lvb[32];
+
+int main(int argc, char *argv[])
+{
+ unsigned long long offset;
+ unsigned long long num, last_num = 0;
+ unsigned int id, clients, sleep = 0;
+ unsigned long long skip = 0;
+ char *name;
+ int rv;
+
+ prog_name = argv[0];
+ verbose = 0;
+
+ if (argc < 5)
+ die("name offset id clients [sleep]\n");
+
+ name = argv[1];
+ offset = atoll(argv[2]);
+ id = atoi(argv[3]);
+ clients = atoi(argv[4]);
+
+ if (argc > 5)
+ sleep = atoi(argv[5]);
+
+ printf("Joining \"alternate\" lockspace...\n");
+
+ dh = dlm_create_lockspace("alternate", 0600);
+ if (!dh) {
+ printf("dlm_create_lockspace error %d %d\n", (int) dh, errno);
+ return -ENOTCONN;
+ }
+
+ rv = dlm_ls_pthread_init(dh);
+ if (rv < 0) {
+ printf("dlm_ls_pthread_init error %d %d\n", rv, errno);
+ dlm_release_lockspace("alternate", dh, 1);
+ return rv;
+ }
+
+ memset(&lksb, 0, sizeof(lksb));
+ memset(&lvb, 0, sizeof(lvb));
+ lksb.sb_lvbptr = lvb;
+
+ if (verbose)
+ printf("request NL\n");
+
+ rv = dlm_ls_lock_wait(dh, LKM_NLMODE, &lksb, LKF_VALBLK,
+ name, strlen(name), 0, NULL, NULL, NULL);
+
+ while (1) {
+ if (verbose)
+ printf("convert NL->PR\n");
+
+ rv = dlm_ls_lock_wait(dh, LKM_PRMODE, &lksb,
+ LKF_VALBLK | LKF_CONVERT,
+ name, strlen(name),
+ 0, NULL, NULL, NULL);
+ if (rv)
+ printf("lock1 error: %d %d\n", rv, lksb.sb_status);
+
+ memcpy(&num, &lvb, sizeof(num));
+
+ if (verbose)
+ printf("read lvb %llu\n", num);
+
+ /* it's our turn */
+ if (num % clients == id) {
+ if (last_num && last_num + clients != num + 1)
+ die("bad: num %llu last_num %llu\n",
+ num, last_num);
+
+ if (verbose)
+ printf("convert PR->EX\n");
+
+ rv = dlm_ls_lock_wait(dh, LKM_EXMODE, &lksb,
+ LKF_VALBLK | LKF_CONVERT,
+ name, strlen(name),
+ 0, NULL, NULL, NULL);
+ if (rv)
+ printf("lock2 error: %d %d\n", rv,
+ lksb.sb_status);
+
+ memcpy(&num, &lvb, sizeof(num));
+ if (num % clients != id)
+ die("bad2: num %llu\n", num);
+
+ num++;
+
+ memcpy(&lvb, &num, sizeof(num));
+ printf("%llu %llu\n", num, skip);
+
+ if (verbose)
+ printf("convert EX->NL\n");
+
+ rv = dlm_ls_lock_wait(dh, LKM_NLMODE, &lksb,
+ LKF_VALBLK | LKF_CONVERT,
+ name, strlen(name),
+ 0, NULL, NULL, NULL);
+ if (rv)
+ printf("lock3 error: %d %d\n", rv,
+ lksb.sb_status);
+
+ last_num = num;
+ skip = 0;
+ } else {
+ skip++;
+
+ if (verbose)
+ printf("convert PR->NL, skip %llu\n", skip);
+
+ rv = dlm_ls_lock_wait(dh, LKM_NLMODE, &lksb,
+ LKF_VALBLK | LKF_CONVERT,
+ name, strlen(name),
+ 0, NULL, NULL, NULL);
+ if (rv)
+ printf("lock4 error: %d %d\n", rv,
+ lksb.sb_status);
+ }
+
+ if (sleep)
+ usleep(sleep);
+ }
+
+ dlm_ls_unlock_wait(dh, lksb.sb_lkid, 0, &lksb);
+ dlm_release_lockspace("alternate", dh, 1);
+
+ exit(EXIT_SUCCESS);
+}
+
--- cluster/dlm/tests/usertest/Makefile 2007/01/09 14:17:37 1.7
+++ cluster/dlm/tests/usertest/Makefile 2007/01/31 18:47:41 1.8
@@ -12,7 +12,7 @@
top_srcdir = ../../..
UNINSTALL=${top_srcdir}/scripts/uninstall.pl
-BINARIES=dlmtest asttest lstest pingtest lvb dlmtest2 flood
+BINARIES=dlmtest asttest lstest pingtest lvb dlmtest2 flood alternate-lvb
all: $(BINARIES)
@@ -32,6 +32,9 @@
dlmtest2: dlmtest2.c
$(CC) $(CFLAGS) -o $@ $< -ldlm -lpthread
+alternate-lvb: alternate-lvb.c
+ $(CC) $(CFLAGS) -o $@ $< -ldlm -lpthread
+
flood: flood.c
$(CC) $(CFLAGS) -o $@ $< -ldlm -lpthread
More information about the Cluster-devel
mailing list