Whamcloud - gitweb
LU-9682 nodemap: delete nids range from nodemap correctly 22/28922/4
authorEmoly Liu <emoly.liu@intel.com>
Fri, 15 Sep 2017 07:56:11 +0000 (15:56 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 21 Sep 2017 06:13:54 +0000 (06:13 +0000)
In function nodemap_del_range(), we should check if the current
nodemap has the specified range before delete it from global
range tree.
Also, test_10b is added to sanity-sec.sh to verify this patch.

Change-Id: Ibab79056509d14d52f99b1ebe3319c301dbe45d9
Test-Parameters: testlist=sanity-sec
Signed-off-by: Emoly Liu <emoly.liu@intel.com>
Reviewed-on: https://review.whamcloud.com/28922
Reviewed-by: Sebastien Buisson <sbuisson@ddn.com>
Reviewed-by: John L. Hammond <john.hammond@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Fan Yong <fan.yong@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/ptlrpc/nodemap_handler.c
lustre/tests/sanity-sec.sh

index 782c992..a6ef9ca 100644 (file)
@@ -828,7 +828,7 @@ EXPORT_SYMBOL(nodemap_add_range);
 /**
  * delete a range
  * \param      name            nodemap name
- * \param      range_str       string containing range
+ * \param      nid             nid range
  * \retval     0 on success
  *
  * Delete range from global range tree, and remove it
@@ -856,6 +856,10 @@ int nodemap_del_range(const char *name, const lnet_nid_t nid[2])
                up_write(&active_config->nmc_range_tree_lock);
                GOTO(out_putref, rc = -EINVAL);
        }
+       if (range->rn_nodemap != nodemap) {
+               up_write(&active_config->nmc_range_tree_lock);
+               GOTO(out_putref, rc = -EINVAL);
+       }
        rc = nodemap_idx_range_del(range);
        range_delete(&active_config->nmc_range_tree, range);
        nm_member_reclassify_nodemap(nodemap);
index bf2e7d6..5c517b1 100755 (executable)
@@ -556,7 +556,7 @@ test_7() {
 
        delete_nodemaps
        rc=$?
-       [[ $rc != 0 ]] && error "nodemap_add failed with $rc" && return 2
+       [[ $rc != 0 ]] && error "nodemap_del failed with $rc" && return 2
 
        return 0
 }
@@ -586,7 +586,7 @@ test_8() {
        # Clean up
        delete_nodemaps
        rc=$?
-       [[ $rc != 0 ]] && error "nodemap_add failed with $rc" && return 3
+       [[ $rc != 0 ]] && error "nodemap_del failed with $rc" && return 3
 
        return 0
 }
@@ -625,13 +625,13 @@ test_9() {
        rc=0
        delete_nodemaps
        rc=$?
-       [[ $rc != 0 ]] && error "nodemap_add failed with $rc" && return 4
+       [[ $rc != 0 ]] && error "nodemap_del failed with $rc" && return 4
 
        return 0
 }
 run_test 9 "nodemap range add"
 
-test_10() {
+test_10a() {
        local rc
 
        remote_mgs_nodsh && skip "remote MGS with nodsh" && return
@@ -672,11 +672,39 @@ test_10() {
 
        delete_nodemaps
        rc=$?
-       [[ $rc != 0 ]] && error "nodemap_add failed with $rc" && return 5
+       [[ $rc != 0 ]] && error "nodemap_del failed with $rc" && return 5
 
        return 0
 }
-run_test 10 "nodemap reject duplicate ranges"
+run_test 10a "nodemap reject duplicate ranges"
+
+test_10b() {
+       [ $(lustre_version_code mgs) -lt $(version_code 2.10.53) ] &&
+               skip "Need MGS >= 2.10.53" && return
+
+       local nm1="nodemap1"
+       local nm2="nodemap2"
+       local nids="192.168.19.[0-255]@o2ib20"
+
+       do_facet mgs $LCTL nodemap_del $nm1 2>/dev/null
+       do_facet mgs $LCTL nodemap_del $nm2 2>/dev/null
+
+       do_facet mgs $LCTL nodemap_add $nm1 || error "Add $nm1 failed"
+       do_facet mgs $LCTL nodemap_add $nm2 || error "Add $nm2 failed"
+       do_facet mgs $LCTL nodemap_add_range --name $nm1 --range $nids ||
+               error "Add range $nids to $nm1 failed"
+       [ -n "$(do_facet mgs $LCTL get_param nodemap.$nm1.* |
+               grep start_nid)" ] || error "No range was found"
+       do_facet mgs $LCTL nodemap_del_range --name $nm2 --range $nids &&
+               error "Deleting range $nids from $nm2 should fail"
+       [ -n "$(do_facet mgs $LCTL get_param nodemap.$nm1.* |
+               grep start_nid)" ] || error "Range $nids should be there"
+
+       do_facet mgs $LCTL nodemap_del $nm1 || error "Delete $nm1 failed"
+       do_facet mgs $LCTL nodemap_del $nm2 || error "Delete $nm2 failed"
+       return 0
+}
+run_test 10b "delete range from the correct nodemap"
 
 test_11() {
        local rc