diff --git a/src/test/libpmempool_rm/libpmempool_rm.c b/src/test/libpmempool_rm/libpmempool_rm.c index 551f43993b7744dbfca573ccebb12ae5f8809c4c..e93610541604d428a90d84681b0db54ebfd3e952 100644 --- a/src/test/libpmempool_rm/libpmempool_rm.c +++ b/src/test/libpmempool_rm/libpmempool_rm.c @@ -1,5 +1,5 @@ /* - * Copyright 2017-2018, Intel Corporation + * Copyright 2017-2019, Intel Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -42,7 +42,7 @@ #include <getopt.h> #include "unittest.h" -#define FATAL_USAGE(n) UT_FATAL("usage: %s [-f -l -r] path..", (n)) +#define FATAL_USAGE(n) UT_FATAL("usage: %s [-f -l -r -o] path..", (n)) static PMEMobjpool *Pop; diff --git a/src/test/libpmempool_rm_remote/TEST4 b/src/test/libpmempool_rm_remote/TEST4 new file mode 100755 index 0000000000000000000000000000000000000000..392348065561bd3f5eba85d904916f15e72b23e9 --- /dev/null +++ b/src/test/libpmempool_rm_remote/TEST4 @@ -0,0 +1,79 @@ +#!/usr/bin/env bash +# +# Copyright 2019, Intel Corporation +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# * Neither the name of the copyright holder nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# +# libpmempool_rm_remote/TEST4 -- test for pmempool_rm with remote replica +# +# Remove pool when it is opened +# + +# standard unit test setup +. ../unittest/unittest.sh + +require_test_type medium + +require_nodes 2 + +require_node_libfabric 0 $RPMEM_PROVIDER +require_node_libfabric 1 $RPMEM_PROVIDER + +setup + +init_rpmem_on_node 1 0 + +create_poolset $DIR/pool.set 8M:${NODE_DIR[1]}pool.1:x \ + m ${NODE_ADDR[0]}:remote.set +create_poolset $DIR/remote.set 8M:${NODE_DIR[0]}/remote.1:x + +copy_files_to_node 0 ${NODE_DIR[0]} $DIR/remote.set +copy_files_to_node 1 ${NODE_DIR[1]} $DIR/pool.set + +rm_files_from_node 0 ${NODE_DIR[0]}remote.1 +rm_files_from_node 1 ${NODE_DIR[1]}pool.1 +expect_normal_exit run_on_node 1 ../pmempool create obj ${NODE_DIR[1]}pool.set + +check_files_on_node 1 pool.set pool.1 +check_files_on_node 0 remote.set remote.1 + +# without force pmempool_rm should fail +expect_normal_exit run_on_node 1 ./libpmempool_rm$EXESUFFIX -o \ + ${NODE_DIR[1]}pool.set +check_files_on_node 1 pool.set pool.1 +check_files_on_node 0 remote.set remote.1 + +# with force pmempool_rm should also fail +expect_normal_exit run_on_node 1 ./libpmempool_rm$EXESUFFIX -of \ + ${NODE_DIR[1]}pool.set +check_files_on_node 1 pool.set pool.1 +check_files_on_node 0 remote.set remote.1 + +pass diff --git a/src/test/obj_rpmem_heap_interrupt/TEST0 b/src/test/obj_rpmem_heap_interrupt/TEST0 index e31ac127d5f8ec9d9635f974baa2f9bcf4437cd5..b4cad73ad8b504359a9e2f7637ce594db7ad8468 100755 --- a/src/test/obj_rpmem_heap_interrupt/TEST0 +++ b/src/test/obj_rpmem_heap_interrupt/TEST0 @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Copyright 2016-2018, Intel Corporation +# Copyright 2016-2019, Intel Corporation # Copyright (c) 2016, Microsoft Corporation. All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -51,7 +51,8 @@ require_nodes 2 require_node_libfabric 0 $RPMEM_PROVIDER require_node_libfabric 1 $RPMEM_PROVIDER -init_rpmem_on_node 1 0 +PID_FILE=rpmemd.pid +init_rpmem_on_node 1 0:$PID_FILE # binary for this test EXE=obj_heap_interrupt @@ -81,8 +82,14 @@ create_holey_file_on_node 0 9M ${NODE_DIR[0]}$TEST_FILE_REMOTE # execute test expect_normal_exit run_on_node 1 ./$EXE$EXESUFFIX ${NODE_DIR[1]}$TEST_SET_LOCAL c 0 + +# pmempool rm expects flock from the remote parts are released otherwise it will +# fail to delete them so it has to wait for rpmemd to exit +expect_abnormal_exit wait_on_node 0 $PID_FILE expect_normal_exit run_on_node 1 ../pmempool rm -sf ${NODE_DIR[1]}$TEST_SET_LOCAL -expect_normal_exit run_on_node 1 ../pmempool create --layout heap_interrupt obj ${NODE_DIR[1]}$TEST_SET_LOCAL + +expect_normal_exit run_on_node 1 ../pmempool create --layout heap_interrupt obj \ + ${NODE_DIR[1]}$TEST_SET_LOCAL expect_normal_exit run_on_node 1 ./$EXE$EXESUFFIX ${NODE_DIR[1]}$TEST_SET_LOCAL o 0 # download pools and compare them diff --git a/src/tools/rpmemd/rpmemd_db.c b/src/tools/rpmemd/rpmemd_db.c index edd5e6401419de39a7d9a6b06a8c6d639173cdd9..ed0fbbc3899f66e4d7630741fd4eae77bc0b3d61 100644 --- a/src/tools/rpmemd/rpmemd_db.c +++ b/src/tools/rpmemd/rpmemd_db.c @@ -1,5 +1,5 @@ /* - * Copyright 2016-2018, Intel Corporation + * Copyright 2016-2019, Intel Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -383,7 +383,7 @@ rm_poolset_cb(struct part_file *pf, void *arg) return -1; } - int ret = util_unlink(pf->part->path); + int ret = util_unlink_flock(pf->part->path); if (!args->force && ret) { RPMEMD_LOG(ERR, "!unlink -- '%s'", pf->part->path); args->ret = ret;