mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
tests: Support idm failure injection
When the drive failure occurs, the IDM lock manager and lvmlockd should handle this case properly. E.g. when the IDM lock manager detects the lease renewal failure caused by I/O errors, it should invoke the kill path which is predefined by lvmlockd, so that the kill path program (like lvmlockctl) can send requests to lvmlockd to stop and drop lock for the relevant VG/LVs. To verify the failure handling flow, this patch introduces an idm failure injection program, it can input the "percentage" for drive failures so that can emulate different failure cases. Signed-off-by: Leo Yan <leo.yan@linaro.org>
This commit is contained in:
parent
f83e11ff43
commit
8c7b2df41f
@ -171,6 +171,7 @@ endif
|
||||
|
||||
ifeq ("@BUILD_LVMLOCKD@", "yes")
|
||||
check_lvmlockd_idm: .tests-stamp
|
||||
$(INSTALL_PROGRAM) lib/idm_inject_failure $(EXECDIR)
|
||||
VERBOSE=$(VERBOSE) ./lib/runner \
|
||||
--testdir . --outdir $(LVM_TEST_RESULTS) \
|
||||
--flavours udev-lvmlockd-idm --only shell/aa-lvmlockd-idm-prepare.sh,$(T),shell/zz-lvmlockd-idm-remove.sh --skip $(S)
|
||||
@ -269,6 +270,10 @@ lib/securetest: lib/dmsecuretest.o .lib-dir-stamp
|
||||
@echo " [CC] $@"
|
||||
$(Q) $(CC) -g $(CFLAGS) $(LDFLAGS) $(EXTRA_EXEC_LDFLAGS) $(ELDFLAGS) -o $@ $< -L$(interfacebuilddir) -ldevmapper $(LIBS)
|
||||
|
||||
lib/idm_inject_failure: lib/idm_inject_failure.o .lib-dir-stamp
|
||||
@echo " [CC] $@"
|
||||
$(Q) $(CC) -g $(CFLAGS) $(LDFLAGS) $(EXTRA_EXEC_LDFLAGS) $(ELDFLAGS) -o $@ $< $(INTERNAL_LIBS) $(LIBS) -lseagate_ilm
|
||||
|
||||
lib/runner.o: $(wildcard $(srcdir)/lib/*.h)
|
||||
|
||||
CFLAGS_runner.o += $(EXTRA_EXEC_CFLAGS)
|
||||
|
55
test/lib/idm_inject_failure.c
Normal file
55
test/lib/idm_inject_failure.c
Normal file
@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (C) 2020-2021 Seagate Ltd.
|
||||
*
|
||||
* This copyrighted material is made available to anyone wishing to use,
|
||||
* modify, copy, or redistribute it subject to the terms and conditions
|
||||
* of the GNU Lesser General Public License v.2.1.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <signal.h>
|
||||
#include <stddef.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/inotify.h>
|
||||
#include <uuid/uuid.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <ilm.h>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int pecent = atoi(argv[1]);
|
||||
int ret, s;
|
||||
|
||||
ret = ilm_connect(&s);
|
||||
if (ret == 0) {
|
||||
printf("ilm_connect: SUCCESS\n");
|
||||
} else {
|
||||
printf("ilm_connect: FAIL\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
ret = ilm_inject_fault(s, pecent);
|
||||
if (ret == 0) {
|
||||
printf("ilm_inject_fault (100): SUCCESS\n");
|
||||
} else {
|
||||
printf("ilm_inject_fault (100): FAIL\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
ret = ilm_disconnect(s);
|
||||
if (ret == 0) {
|
||||
printf("ilm_disconnect: SUCCESS\n");
|
||||
} else {
|
||||
printf("ilm_disconnect: FAIL\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user