From 0ce1a038ab54a52a0c295e830abe035d4113ba83 Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Fri, 1 Apr 2016 15:16:23 +0530 Subject: cluster/distribute: detect stale layouts in entry fops dht_mkdir () { first-hashed-subvol = hashed-subvol for "bname" in in-memory layout of "parent"; inodelk (SETLKW, parent, "LAYOUT_HEAL_DOMAIN", "can be any subvol, but we choose first-hashed-subvol randomly"); { begin: hashed-subvol = hashed-subvol for "bname" in in-memory layout of "parent"; hash-range = extract hashe-range from layout of "parent"; ret = mkdir (parent/bname, hashed-subvol, hash-range); if (ret == "hash-value doesn't fall into layout stored on the brick (this error is returned by posix-mkdir)") { refresh_parent_layout (); goto begin; } } inodelk (UNLCK, parent, "LAYOUT_HEAL_DOMAIN", "first-hashed-subvol"); proceed with other parts of dht_mkdir; } posix_mkdir (parent/bname, client-hash-range) { disk-hash-range = getxattr (parent, "dht-layout-key"); if (disk-hash-range != client-hash-range) { fail-with-error ("hash-value doesn't fall into layout stored on the brick"); return 0; } continue-with-posix-mkdir; } Similar changes need to be done for dentry operations like create, symlink, link, unlink, rmdir, rename. These will be addressed in subsequent patches. This patch addresses only mkdir codepath. This change breaks stripe tests, as on some striped subvols dht layout xattrs are not set for some reason. This results in failure of mkdir. Since striped volumes are always created with dht, some tests associated with stripe also fail. So, I am making following tests changes (since stripe is out of maintainance): * modify ./tests/basic/rpc-coverage.t to not to use striped volumes * mark all (2) tests in tests/bugs/stripe/ as bad tests Change-Id: Idd1ae879f24a48303dc743c1bb4d91f89a629e25 BUG: 1329062 Signed-off-by: Raghavendra G Reviewed-on: http://review.gluster.org/14040 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System --- run-tests.sh | 2 ++ 1 file changed, 2 insertions(+) (limited to 'run-tests.sh') diff --git a/run-tests.sh b/run-tests.sh index 9abe0be1121..2c1ff59442a 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -181,6 +181,8 @@ function is_bad_test () ./tests/features/weighted-rebalance.t \ ./tests/performance/open-behind.t \ ./tests/basic/afr/self-heald.t \ + ./tests/bugs/stripe/bug-1002207.t \ + ./tests/bugs/stripe/bug-1111454.t \ ; do [ x"$name" = x"$bt" ] && return 0 # bash: zero means true/success done -- cgit