[Cluster-devel] cluster/dlm/tests/usertest Makefile flood.c
pcaulfield at sourceware.org
pcaulfield at sourceware.org
Tue Jan 9 14:17:37 UTC 2007
CVSROOT: /cvs/cluster
Module name: cluster
Changes by: pcaulfield at sourceware.org 2007-01-09 14:17:37
Modified files:
dlm/tests/usertest: Makefile
Added files:
dlm/tests/usertest: flood.c
Log message:
Add flood program back.
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/tests/usertest/flood.c.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/dlm/tests/usertest/Makefile.diff?cvsroot=cluster&r1=1.6&r2=1.7
--- cluster/dlm/tests/usertest/flood.c 2005/12/13 11:20:23 1.1
+++ cluster/dlm/tests/usertest/flood.c 2007/01/09 14:17:37 1.2
@@ -0,0 +1,163 @@
+/* Flood the DLM !
+ but not too much...
+*/
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/uio.h>
+#include <sys/poll.h>
+#include <netinet/in.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <fcntl.h>
+#include <netdb.h>
+#include <limits.h>
+#include <unistd.h>
+#include <errno.h>
+#include <getopt.h>
+
+#include "libdlm.h"
+
+static pthread_cond_t cond;
+static pthread_mutex_t mutex;
+
+static int count = 0;
+
+static void usage(char *prog, FILE *file)
+{
+ fprintf(file, "Usage:\n");
+ fprintf(file, "%s [mcnpquhV] <lockname>\n", prog);
+ fprintf(file, "\n");
+ fprintf(file, " -V Show version of %s\n", prog);
+ fprintf(file, " -h Show this help information\n");
+ fprintf(file, " -m <num> Maximum number of locks to hold (default MAX_INT)\n");
+ fprintf(file, " -i <num> Show progress in <n> increments (default 1000)\n");
+ fprintf(file, " -n <num> Number of resources (default 10)\n");
+ fprintf(file, " -q Quit\n");
+
+
+ fprintf(file, "\n");
+
+}
+
+static void ast_routine(void *arg)
+{
+ struct dlm_lksb *lksb = arg;
+
+ if (lksb->sb_status == 0) {
+ dlm_unlock(lksb->sb_lkid, 0, lksb, lksb);
+ return;
+ }
+
+ if (lksb->sb_status == EUNLOCK) {
+ count--;
+ free(lksb);
+ }
+
+}
+
+int main(int argc, char *argv[])
+{
+ int flags = 0;
+ int lockops = 0;
+ int maxlocks = INT_MAX;
+ int rescount = 10;
+ int increment = 1000;
+ int quiet = 0;
+ int status;
+ int i;
+ int mode = LKM_CRMODE;
+ signed char opt;
+ char **resources;
+
+ /* Deal with command-line arguments */
+ opterr = 0;
+ optind = 0;
+ while ((opt=getopt(argc,argv,"?m:i:qn:vV")) != EOF)
+ {
+ switch(opt)
+ {
+ case 'h':
+ usage(argv[0], stdout);
+ exit(0);
+
+ case '?':
+ usage(argv[0], stderr);
+ exit(0);
+
+ case 'm':
+ maxlocks = atoi(optarg);
+ break;
+
+ case 'i':
+ increment = atoi(optarg);
+ break;
+
+ case 'n':
+ rescount = atoi(optarg);
+ break;
+
+ case 'q':
+ quiet = 1;
+ break;
+
+ case 'V':
+ printf("\nflood version 0.2\n\n");
+ exit(1);
+ break;
+ }
+ }
+
+ resources = malloc(sizeof(char*) * rescount);
+ for (i=0; i < rescount; i++) {
+ char resname[256];
+ sprintf(resname, "TESTLOCK%d", i);
+ resources[i] = strdup(resname);
+ }
+
+ pthread_cond_init(&cond, NULL);
+ pthread_mutex_init(&mutex, NULL);
+ pthread_mutex_lock(&mutex);
+
+ dlm_pthread_init();
+
+ while (1) {
+ char *resource = resources[rand() % rescount];
+ struct dlm_lksb *lksb = malloc(sizeof(struct dlm_lksb));
+ if (!lksb)
+ exit(1);
+
+ status = dlm_lock(mode,
+ lksb,
+ flags,
+ resource,
+ strlen(resource),
+ 0, // Parent,
+ ast_routine,
+ lksb,
+ NULL, // bast_routine,
+ NULL); // Range
+ if (status == -1)
+ {
+ perror("lock failed");
+ return -1;
+ }
+
+ count++;
+ lockops++;
+ if ((lockops % increment) == 0 && !quiet)
+ fprintf(stderr, "%d lockops, %d locks\n", lockops, count);
+
+ while (count > maxlocks) {
+ sleep(1);
+ }
+
+ }
+
+ return 0;
+}
+
--- cluster/dlm/tests/usertest/Makefile 2006/12/07 19:50:49 1.6
+++ cluster/dlm/tests/usertest/Makefile 2007/01/09 14:17:37 1.7
@@ -12,7 +12,7 @@
top_srcdir = ../../..
UNINSTALL=${top_srcdir}/scripts/uninstall.pl
-BINARIES=dlmtest asttest lstest pingtest lvb dlmtest2
+BINARIES=dlmtest asttest lstest pingtest lvb dlmtest2 flood
all: $(BINARIES)
@@ -32,6 +32,9 @@
dlmtest2: dlmtest2.c
$(CC) $(CFLAGS) -o $@ $< -ldlm -lpthread
+flood: flood.c
+ $(CC) $(CFLAGS) -o $@ $< -ldlm -lpthread
+
asttest: asttest.c
$(CC) $(CFLAGS) -o $@ $< -ldlm -lpthread
More information about the Cluster-devel
mailing list