Resolves: rhbz#2133827
This commit is contained in:
parent
6e326c369f
commit
85f1ed70cf
6
gating.yaml
Normal file
6
gating.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
--- !Policy
|
||||
product_versions:
|
||||
- rhel-8
|
||||
decision_context: osci_compose_gate
|
||||
rules:
|
||||
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} # this is the testcase identifier, which OSCI pipeline uses
|
362
tests/scripts/dlm_seq_async.c
Normal file
362
tests/scripts/dlm_seq_async.c
Normal file
@ -0,0 +1,362 @@
|
||||
/*
|
||||
* Copyright (c) 2011 David Teigland
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License V2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it would be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
/* gcc dlm_seq_async.c -ldlm -o dlm_seq_async */
|
||||
|
||||
#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 <signal.h>
|
||||
#include <syslog.h>
|
||||
#include <sys/time.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 DEFAULT_NUM_R 1000
|
||||
#define DEFAULT_NUM_LPR 1
|
||||
|
||||
static dlm_lshandle_t *dh;
|
||||
static int openclose = 0;
|
||||
static int quiet = 0;
|
||||
static int verbose = 0;
|
||||
static int opt_convert = 0;
|
||||
static int opt_unlock = 0;
|
||||
static int opt_async = 0;
|
||||
static int opt_delay = 0;
|
||||
static unsigned int num_r = DEFAULT_NUM_R;
|
||||
static unsigned int num_lpr = DEFAULT_NUM_LPR;
|
||||
static unsigned int num_iter = 1;
|
||||
static unsigned int iter = 0;
|
||||
static uint32_t *lkids;
|
||||
static struct dlm_lksb lksb;
|
||||
static unsigned int cb_count;
|
||||
static int libdlm_fd;
|
||||
|
||||
#define log_debug(fmt, args...) \
|
||||
do { \
|
||||
if (!quiet) \
|
||||
printf(fmt "\n", ##args); \
|
||||
} while (0)
|
||||
|
||||
#define log_error(fmt, args...) \
|
||||
do { \
|
||||
printf("ERROR " fmt "\n", ##args); \
|
||||
exit(-1); \
|
||||
} while (0)
|
||||
|
||||
static void astfn(void *arg)
|
||||
{
|
||||
int status = lksb.sb_status;
|
||||
|
||||
cb_count++;
|
||||
|
||||
printf("astfn %x status %d count %u\n", lksb.sb_lkid, status, cb_count);
|
||||
|
||||
if (!status)
|
||||
return;
|
||||
if (status == EUNLOCK)
|
||||
return;
|
||||
}
|
||||
|
||||
static void seq(int acquire, int convert, int unlock, int mode)
|
||||
{
|
||||
char name[DLM_RESNAME_MAXLEN];
|
||||
uint32_t lkid;
|
||||
int i, j, rv;
|
||||
|
||||
for (i = 0; i < num_r; i++) {
|
||||
snprintf(name, sizeof(name), "seq.%08d", i);
|
||||
|
||||
for (j = 0; j < num_lpr; j++) {
|
||||
memset(&lksb, 0, sizeof(lksb));
|
||||
|
||||
if (acquire) {
|
||||
printf("acquire %s %d\n", name, mode);
|
||||
|
||||
rv = dlm_ls_lockx(dh, mode, &lksb, 0,
|
||||
name, strlen(name), 0,
|
||||
astfn, &lksb, NULL,
|
||||
NULL, NULL);
|
||||
}
|
||||
if (convert) {
|
||||
lksb.sb_lkid = lkids[(i * num_lpr) + j];
|
||||
|
||||
printf("convert %s %x %d\n", name, lksb.sb_lkid, mode);
|
||||
|
||||
rv = dlm_ls_lockx(dh, mode, &lksb, LKF_CONVERT,
|
||||
name, strlen(name), 0,
|
||||
astfn, &lksb, NULL,
|
||||
NULL, NULL);
|
||||
}
|
||||
if (unlock) {
|
||||
lkid = lkids[(i * num_lpr) + j];
|
||||
|
||||
printf("unlock %s %x\n", name, lkid);
|
||||
|
||||
rv = dlm_ls_unlock(dh, lkid, 0, &lksb, &lksb);
|
||||
}
|
||||
|
||||
if (rv) {
|
||||
log_error("dlm op %d %d %d %d,%d error %d",
|
||||
acquire, convert, unlock, i, j, rv);
|
||||
return;
|
||||
}
|
||||
|
||||
if (acquire && lkids)
|
||||
lkids[(i * num_lpr) + j] = lksb.sb_lkid;
|
||||
}
|
||||
}
|
||||
|
||||
cb_count = 0;
|
||||
|
||||
while (1) {
|
||||
rv = dlm_dispatch(libdlm_fd);
|
||||
if (rv < 0) {
|
||||
printf("dlm_dispatch error %d %d\n", rv, errno);
|
||||
}
|
||||
|
||||
if (cb_count == (num_r * num_lpr))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void print_usage(void)
|
||||
{
|
||||
printf("dlm_seq [options]\n");
|
||||
printf("Options:\n");
|
||||
printf("\n");
|
||||
printf(" -i <n> Iterations (0 no limit), default 1)\n");
|
||||
printf(" -r <n> The number of resources, default %d\n", DEFAULT_NUM_R);
|
||||
printf(" -l <n> The number of locks per resource, default %d\n", DEFAULT_NUM_LPR);
|
||||
printf(" -c Convert locks after acquiring them all\n");
|
||||
printf(" -u Unlock locks after acquire/convert\n");
|
||||
printf(" -s Same resource names in each iteration\n");
|
||||
printf(" -d <us> Delay us between consecutive seq\n");
|
||||
printf(" -o Open/close existing lockspace\n");
|
||||
printf(" -v Verbose output\n");
|
||||
printf(" -q Quiet output\n");
|
||||
}
|
||||
|
||||
static void decode_arguments(int argc, char **argv)
|
||||
{
|
||||
int cont = 1;
|
||||
int optchar;
|
||||
|
||||
while (cont) {
|
||||
optchar = getopt(argc, argv, "i:r:l:cuvqohad:s");
|
||||
|
||||
switch (optchar) {
|
||||
|
||||
case 'i':
|
||||
num_iter = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
num_r = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
num_lpr = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
opt_convert = 1;
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
opt_unlock = 1;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
opt_delay = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
openclose = 1;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
quiet = 1;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
print_usage();
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
printf("%s (built %s %s)\n", argv[0], __DATE__, __TIME__);
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case ':':
|
||||
case '?':
|
||||
fprintf(stderr, "Please use '-h' for usage.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case EOF:
|
||||
cont = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "unknown option: %c\n", optchar);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void _acquire(int mode)
|
||||
{
|
||||
seq(1, 0, 0, mode);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
void _convert(int mode)
|
||||
{
|
||||
seq(0, 1, 0, mode);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
void _unlock(void)
|
||||
{
|
||||
seq(0, 0, 1, 0);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int rv, quit = 0;
|
||||
|
||||
decode_arguments(argc, argv);
|
||||
|
||||
printf("%d resources, %d locks per resource\n", num_r, num_lpr);
|
||||
|
||||
if (openclose) {
|
||||
log_debug("dlm_open_lockspace...");
|
||||
|
||||
dh = dlm_open_lockspace("dlm_seq");
|
||||
if (!dh) {
|
||||
log_error("dlm_open_lockspace error %lu %d",
|
||||
(unsigned long)dh, errno);
|
||||
return -ENOTCONN;
|
||||
}
|
||||
} else {
|
||||
log_debug("dlm_new_lockspace...");
|
||||
|
||||
dh = dlm_new_lockspace("dlm_seq", 0600, 0);
|
||||
if (!dh) {
|
||||
log_error("dlm_new_lockspace error %lu %d",
|
||||
(unsigned long)dh, errno);
|
||||
return -ENOTCONN;
|
||||
}
|
||||
}
|
||||
|
||||
libdlm_fd = dlm_ls_get_fd(dh);
|
||||
if (libdlm_fd < 0) {
|
||||
log_error("dlm_ls_get fd error %d %d", libdlm_fd, errno);
|
||||
goto done;
|
||||
}
|
||||
|
||||
lkids = malloc(sizeof(uint32_t) * (num_r * num_lpr));
|
||||
if (!lkids) {
|
||||
log_error("no mem");
|
||||
goto done;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
_acquire(LKM_EXMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_EXMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_EXMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_unlock();
|
||||
|
||||
_acquire(LKM_PRMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_PRMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
|
||||
_acquire(LKM_NLMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_NLMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_NLMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_unlock();
|
||||
|
||||
iter++;
|
||||
|
||||
if (!num_iter)
|
||||
continue;
|
||||
if (iter == num_iter)
|
||||
break;
|
||||
}
|
||||
|
||||
free(lkids);
|
||||
|
||||
done:
|
||||
if (openclose) {
|
||||
log_debug("dlm_close_lockspace");
|
||||
|
||||
rv = dlm_close_lockspace(dh);
|
||||
if (rv < 0)
|
||||
log_error("dlm_close_lockspace error %d %d",
|
||||
rv, errno);
|
||||
} else {
|
||||
log_debug("dlm_release_lockspace");
|
||||
|
||||
rv = dlm_release_lockspace("dlm_seq", dh, 1);
|
||||
if (rv < 0)
|
||||
log_error("dlm_release_lockspace error %d %d",
|
||||
rv, errno);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
327
tests/scripts/dlm_seq_sync.c
Normal file
327
tests/scripts/dlm_seq_sync.c
Normal file
@ -0,0 +1,327 @@
|
||||
/*
|
||||
* Copyright (c) 2011 David Teigland
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License V2
|
||||
* as published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it would be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
|
||||
/* gcc dlm_seq_sync.c -ldlm_lt -o dlm_seq_sync */
|
||||
|
||||
#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 <signal.h>
|
||||
#include <syslog.h>
|
||||
#include <sys/time.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 DEFAULT_NUM_R 1000
|
||||
#define DEFAULT_NUM_LPR 1
|
||||
|
||||
static dlm_lshandle_t *dh;
|
||||
static int openclose = 0;
|
||||
static int quiet = 0;
|
||||
static int verbose = 0;
|
||||
static int opt_convert = 0;
|
||||
static int opt_unlock = 0;
|
||||
static int opt_delay = 0;
|
||||
static unsigned int num_r = DEFAULT_NUM_R;
|
||||
static unsigned int num_lpr = DEFAULT_NUM_LPR;
|
||||
static unsigned int num_iter = 1;
|
||||
static unsigned int iter = 0;
|
||||
static uint32_t *lkids;
|
||||
static struct dlm_lksb lksb;
|
||||
static unsigned int cb_count;
|
||||
|
||||
#define log_debug(fmt, args...) \
|
||||
do { \
|
||||
if (!quiet) \
|
||||
printf(fmt "\n", ##args); \
|
||||
} while (0)
|
||||
|
||||
#define log_error(fmt, args...) \
|
||||
do { \
|
||||
printf("ERROR " fmt "\n", ##args); \
|
||||
exit(-1); \
|
||||
} while (0)
|
||||
|
||||
|
||||
static void seq(int acquire, int convert, int unlock, int mode)
|
||||
{
|
||||
char name[DLM_RESNAME_MAXLEN];
|
||||
uint32_t lkid;
|
||||
int i, j, rv;
|
||||
|
||||
for (i = 0; i < num_r; i++) {
|
||||
snprintf(name, sizeof(name), "seq.%08d", i);
|
||||
|
||||
for (j = 0; j < num_lpr; j++) {
|
||||
memset(&lksb, 0, sizeof(lksb));
|
||||
|
||||
if (acquire) {
|
||||
printf("acquire %s %d\n", name, mode);
|
||||
rv = dlm_ls_lock_wait(dh, mode, &lksb, 0,
|
||||
name, strlen(name),
|
||||
0, NULL, NULL, NULL);
|
||||
}
|
||||
if (convert) {
|
||||
lksb.sb_lkid = lkids[(i * num_lpr) + j];
|
||||
|
||||
printf("convert %s %x %d\n", name, lksb.sb_lkid, mode);
|
||||
|
||||
rv = dlm_ls_lock_wait(dh, mode, &lksb,
|
||||
LKF_CONVERT,
|
||||
name, strlen(name),
|
||||
0, NULL, NULL, NULL);
|
||||
}
|
||||
if (unlock) {
|
||||
lkid = lkids[(i * num_lpr) + j];
|
||||
|
||||
printf("unlock %s %x\n", name, lkid);
|
||||
|
||||
rv = dlm_ls_unlock_wait(dh, lkid, 0, &lksb);
|
||||
}
|
||||
|
||||
if (rv) {
|
||||
log_error("dlm op %d %d %d %d,%d error %d",
|
||||
acquire, convert, unlock, i, j, rv);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
if (acquire && lkids)
|
||||
lkids[(i * num_lpr) + j] = lksb.sb_lkid;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void print_usage(void)
|
||||
{
|
||||
printf("dlm_seq [options]\n");
|
||||
printf("Options:\n");
|
||||
printf("\n");
|
||||
printf(" -i <n> Iterations (0 no limit), default 1)\n");
|
||||
printf(" -r <n> The number of resources, default %d\n", DEFAULT_NUM_R);
|
||||
printf(" -l <n> The number of locks per resource, default %d\n", DEFAULT_NUM_LPR);
|
||||
printf(" -c Convert locks after acquiring them all\n");
|
||||
printf(" -u Unlock locks after acquire/convert\n");
|
||||
printf(" -s Same resource names in each iteration\n");
|
||||
printf(" -d <us> Delay us between consecutive seq\n");
|
||||
printf(" -o Open/close existing lockspace\n");
|
||||
printf(" -v Verbose output\n");
|
||||
printf(" -q Quiet output\n");
|
||||
}
|
||||
|
||||
static void decode_arguments(int argc, char **argv)
|
||||
{
|
||||
int cont = 1;
|
||||
int optchar;
|
||||
|
||||
while (cont) {
|
||||
optchar = getopt(argc, argv, "i:r:l:cuvqohad:s");
|
||||
|
||||
switch (optchar) {
|
||||
|
||||
case 'i':
|
||||
num_iter = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'r':
|
||||
num_r = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
num_lpr = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'c':
|
||||
opt_convert = 1;
|
||||
break;
|
||||
|
||||
case 'u':
|
||||
opt_unlock = 1;
|
||||
break;
|
||||
|
||||
case 'd':
|
||||
opt_delay = atoi(optarg);
|
||||
break;
|
||||
|
||||
case 'o':
|
||||
openclose = 1;
|
||||
break;
|
||||
|
||||
case 'v':
|
||||
verbose = 1;
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
quiet = 1;
|
||||
break;
|
||||
|
||||
case 'h':
|
||||
print_usage();
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case 'V':
|
||||
printf("%s (built %s %s)\n", argv[0], __DATE__, __TIME__);
|
||||
exit(EXIT_SUCCESS);
|
||||
break;
|
||||
|
||||
case ':':
|
||||
case '?':
|
||||
fprintf(stderr, "Please use '-h' for usage.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
|
||||
case EOF:
|
||||
cont = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
fprintf(stderr, "unknown option: %c\n", optchar);
|
||||
exit(EXIT_FAILURE);
|
||||
break;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
void _acquire(int mode)
|
||||
{
|
||||
seq(1, 0, 0, mode);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
void _convert(int mode)
|
||||
{
|
||||
seq(0, 1, 0, mode);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
void _unlock(void)
|
||||
{
|
||||
seq(0, 0, 1, 0);
|
||||
|
||||
if (opt_delay)
|
||||
usleep(opt_delay);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int rv, quit = 0;
|
||||
|
||||
decode_arguments(argc, argv);
|
||||
|
||||
printf("%d resources, %d locks per resource\n", num_r, num_lpr);
|
||||
|
||||
if (openclose) {
|
||||
log_debug("dlm_open_lockspace...");
|
||||
|
||||
dh = dlm_open_lockspace("dlm_seq");
|
||||
if (!dh) {
|
||||
log_error("dlm_open_lockspace error %lu %d",
|
||||
(unsigned long)dh, errno);
|
||||
return -ENOTCONN;
|
||||
}
|
||||
} else {
|
||||
log_debug("dlm_new_lockspace...");
|
||||
|
||||
dh = dlm_new_lockspace("dlm_seq", 0600, 0);
|
||||
if (!dh) {
|
||||
log_error("dlm_new_lockspace error %lu %d",
|
||||
(unsigned long)dh, errno);
|
||||
return -ENOTCONN;
|
||||
}
|
||||
}
|
||||
|
||||
lkids = malloc(sizeof(uint32_t) * (num_r * num_lpr));
|
||||
if (!lkids) {
|
||||
log_error("no mem");
|
||||
goto done;
|
||||
}
|
||||
|
||||
while (1) {
|
||||
_acquire(LKM_EXMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_EXMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_EXMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_unlock();
|
||||
|
||||
_acquire(LKM_PRMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_PRMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
|
||||
_acquire(LKM_NLMODE);
|
||||
_convert(LKM_PRMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_NLMODE);
|
||||
_unlock();
|
||||
_acquire(LKM_NLMODE);
|
||||
_convert(LKM_EXMODE);
|
||||
_convert(LKM_NLMODE);
|
||||
_unlock();
|
||||
|
||||
iter++;
|
||||
|
||||
if (!num_iter)
|
||||
continue;
|
||||
if (iter == num_iter)
|
||||
break;
|
||||
}
|
||||
|
||||
free(lkids);
|
||||
|
||||
done:
|
||||
if (openclose) {
|
||||
log_debug("dlm_close_lockspace");
|
||||
|
||||
rv = dlm_close_lockspace(dh);
|
||||
if (rv < 0)
|
||||
log_error("dlm_close_lockspace error %d %d",
|
||||
rv, errno);
|
||||
} else {
|
||||
log_debug("dlm_release_lockspace");
|
||||
|
||||
rv = dlm_release_lockspace("dlm_seq", dh, 1);
|
||||
if (rv < 0)
|
||||
log_error("dlm_release_lockspace error %d %d",
|
||||
rv, errno);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
50
tests/scripts/run_tests.sh
Normal file
50
tests/scripts/run_tests.sh
Normal file
@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -x
|
||||
|
||||
COROSYNC_NODE=$(hostname)
|
||||
|
||||
sed -e "s/@LOCAL_NODE@/$COROSYNC_NODE/" test-corosync-conf > /etc/corosync/corosync.conf
|
||||
|
||||
modprobe configfs
|
||||
mount -t configfs none /sys/kernel/config
|
||||
|
||||
modprobe dlm
|
||||
|
||||
ls /sys/kernel/config
|
||||
ls /sys/kernel/config/dlm
|
||||
|
||||
mkdir /var/log/cluster
|
||||
|
||||
systemctl start corosync
|
||||
sleep 2
|
||||
corosync-quorumtool
|
||||
sleep 2
|
||||
|
||||
tail -8 /var/log/cluster/corosync.conf
|
||||
|
||||
mkdir /var/log/dlm_controld
|
||||
|
||||
dlm_controld --log_debug --debug_logfile --enable_fencing 0 --enable_quorum_lockspace 0 --enable_quorum_fencing 0 --enable_startup_fencing 0
|
||||
sleep 2
|
||||
|
||||
tail -8 /var/log/dlm_controld/dlm_controld.log
|
||||
|
||||
ls /sys/kernel/config/dlm
|
||||
|
||||
dlm_tool status
|
||||
|
||||
gcc dlm_seq_async.c -ldlm -o dlm_seq_async
|
||||
gcc dlm_seq_sync.c -ldlm_lt -o dlm_seq_sync
|
||||
|
||||
./dlm_seq_sync -i 100 -d 10000 -c -u -v -r 10 -i 10
|
||||
|
||||
[ $? -ne 0 ] && echo "dlm_seq_sync error" >&2 && exit 1
|
||||
|
||||
./dlm_seq_async -i 100 -d 10000 -c -u -v -r 10 -i 10
|
||||
|
||||
[ $? -ne 0 ] && echo "dlm_seq_async error" >&2 && exit 1
|
||||
|
||||
pkill dlm_controld
|
||||
sleep 2
|
||||
corosync-cfgtool -H
|
20
tests/scripts/test-corosync-conf
Normal file
20
tests/scripts/test-corosync-conf
Normal file
@ -0,0 +1,20 @@
|
||||
totem {
|
||||
version: 2
|
||||
secauth: off
|
||||
cluster_name: test
|
||||
}
|
||||
nodelist {
|
||||
node {
|
||||
ring0_addr: @LOCAL_NODE@
|
||||
nodeid: 1
|
||||
}
|
||||
}
|
||||
quorum {
|
||||
provider: corosync_votequorum
|
||||
}
|
||||
logging {
|
||||
to_logfile: yes
|
||||
logfile: /var/log/cluster/corosync.log
|
||||
to_syslog: yes
|
||||
}
|
||||
|
14
tests/tests.yml
Normal file
14
tests/tests.yml
Normal file
@ -0,0 +1,14 @@
|
||||
- hosts: localhost
|
||||
roles:
|
||||
- role: standard-test-basic # this is a standard test role, it takes care of the test environment, logging, archiving results..
|
||||
tags:
|
||||
- classic
|
||||
tests:
|
||||
- simple:
|
||||
dir: scripts
|
||||
run: ./run_tests.sh
|
||||
required_packages:
|
||||
- dlm
|
||||
- dlm-devel
|
||||
- corosync
|
||||
- gcc
|
Loading…
Reference in New Issue
Block a user