diff --git a/README.debrand b/README.debrand deleted file mode 100644 index 01c46d2..0000000 --- a/README.debrand +++ /dev/null @@ -1,2 +0,0 @@ -Warning: This package was configured for automatic debranding, but the changes -failed to apply. diff --git a/SOURCES/0303-posix-heketidbstorage-bricks-go-down-during-PVC-crea.patch b/SOURCES/0303-posix-heketidbstorage-bricks-go-down-during-PVC-crea.patch deleted file mode 100644 index 8641353..0000000 --- a/SOURCES/0303-posix-heketidbstorage-bricks-go-down-during-PVC-crea.patch +++ /dev/null @@ -1,45 +0,0 @@ -From ae4f538065d26a277e38810c6eef18c0312cd1f3 Mon Sep 17 00:00:00 2001 -From: Mohit Agrawal -Date: Thu, 26 Sep 2019 17:52:30 +0530 -Subject: [PATCH 303/304] posix: heketidbstorage bricks go down during PVC - creation - -Problem: In OCS environment heketidbstorage is detached due - to health_check thread is failed.Sometime aio_write - is not successfully finished within default health-check-timeout - limit and the brick is detached. - -Solution: To avoid the issue increase default timeout to 20s - -> Change-Id: Idff283d5713da571f9d20a6b296274f69c3e5b7b -> Fixes: bz#1755900 -> Signed-off-by: Mohit Agrawal -> (Cherry picked from commit c6df9e962483bac5bfcd8916318b19040387ce81) -> (Reviewed on upstream link https://review.gluster.org/#/c/glusterfs/+/23495/) - -Change-Id: Idff283d5713da571f9d20a6b296274f69c3e5b7b -BUG: 1752713 -Signed-off-by: Mohit Agrawal -Reviewed-on: https://code.engineering.redhat.com/gerrit/182387 -Tested-by: RHGS Build Bot -Reviewed-by: Atin Mukherjee ---- - xlators/storage/posix/src/posix-common.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/xlators/storage/posix/src/posix-common.c b/xlators/storage/posix/src/posix-common.c -index 69857d9..2cb58ba 100644 ---- a/xlators/storage/posix/src/posix-common.c -+++ b/xlators/storage/posix/src/posix-common.c -@@ -1257,7 +1257,7 @@ struct volume_options posix_options[] = { - {.key = {"health-check-timeout"}, - .type = GF_OPTION_TYPE_INT, - .min = 0, -- .default_value = "10", -+ .default_value = "20", - .validate = GF_OPT_VALIDATE_MIN, - .description = - "Interval in seconds to wait aio_write finish for health check, " --- -1.8.3.1 - diff --git a/SOURCES/0304-cluster-dht-Correct-fd-processing-loop.patch b/SOURCES/0304-cluster-dht-Correct-fd-processing-loop.patch deleted file mode 100644 index 5f16e0a..0000000 --- a/SOURCES/0304-cluster-dht-Correct-fd-processing-loop.patch +++ /dev/null @@ -1,194 +0,0 @@ -From ad233c1b3abdfe2bdfd1eacc83b5f84b7afa6b46 Mon Sep 17 00:00:00 2001 -From: N Balachandran -Date: Tue, 1 Oct 2019 17:37:15 +0530 -Subject: [PATCH 304/304] cluster/dht: Correct fd processing loop - -The fd processing loops in the -dht_migration_complete_check_task and the -dht_rebalance_inprogress_task functions were unsafe -and could cause an open to be sent on an already freed -fd. This has been fixed. - -> Change-Id: I0a3c7d2fba314089e03dfd704f9dceb134749540 -> Fixes: bz#1757399 -> Signed-off-by: N Balachandran -> (Cherry picked from commit 9b15867070b0cc241ab165886292ecffc3bc0aed) -> (Reviewed on upstream link https://review.gluster.org/#/c/glusterfs/+/23506/) - -Change-Id: I0a3c7d2fba314089e03dfd704f9dceb134749540 -BUG: 1756325 -Signed-off-by: Mohit Agrawal -Reviewed-on: https://code.engineering.redhat.com/gerrit/182826 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - xlators/cluster/dht/src/dht-helper.c | 84 ++++++++++++++++++++++++++---------- - 1 file changed, 62 insertions(+), 22 deletions(-) - -diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c -index 4c57e0d..1e9fee0 100644 ---- a/xlators/cluster/dht/src/dht-helper.c -+++ b/xlators/cluster/dht/src/dht-helper.c -@@ -1261,6 +1261,7 @@ dht_migration_complete_check_task(void *data) - fd_t *tmp = NULL; - uint64_t tmp_miginfo = 0; - dht_migrate_info_t *miginfo = NULL; -+ gf_boolean_t skip_open = _gf_false; - int open_failed = 0; - - this = THIS; -@@ -1399,24 +1400,34 @@ dht_migration_complete_check_task(void *data) - * the loop will cause the destruction of the fd. So we need to - * iterate the list safely because iter_fd cannot be trusted. - */ -- list_for_each_entry_safe(iter_fd, tmp, &inode->fd_list, inode_list) -- { -- if (fd_is_anonymous(iter_fd)) -- continue; -- -- if (dht_fd_open_on_dst(this, iter_fd, dst_node)) -- continue; -- -+ iter_fd = list_entry((&inode->fd_list)->next, typeof(*iter_fd), inode_list); -+ while (&iter_fd->inode_list != (&inode->fd_list)) { -+ if (fd_is_anonymous(iter_fd) || -+ (dht_fd_open_on_dst(this, iter_fd, dst_node))) { -+ if (!tmp) { -+ iter_fd = list_entry(iter_fd->inode_list.next, typeof(*iter_fd), -+ inode_list); -+ continue; -+ } -+ skip_open = _gf_true; -+ } - /* We need to release the inode->lock before calling - * syncop_open() to avoid possible deadlocks. However this - * can cause the iter_fd to be released by other threads. - * To avoid this, we take a reference before releasing the - * lock. - */ -- __fd_ref(iter_fd); -+ fd_ref(iter_fd); - - UNLOCK(&inode->lock); - -+ if (tmp) { -+ fd_unref(tmp); -+ tmp = NULL; -+ } -+ if (skip_open) -+ goto next; -+ - /* flags for open are stripped down to allow following the - * new location of the file, otherwise we can get EEXIST or - * truncate the file again as rebalance is moving the data */ -@@ -1438,9 +1449,11 @@ dht_migration_complete_check_task(void *data) - dht_fd_ctx_set(this, iter_fd, dst_node); - } - -- fd_unref(iter_fd); -- -+ next: - LOCK(&inode->lock); -+ skip_open = _gf_false; -+ tmp = iter_fd; -+ iter_fd = list_entry(tmp->inode_list.next, typeof(*tmp), inode_list); - } - - SYNCTASK_SETID(frame->root->uid, frame->root->gid); -@@ -1453,6 +1466,10 @@ dht_migration_complete_check_task(void *data) - - unlock: - UNLOCK(&inode->lock); -+ if (tmp) { -+ fd_unref(tmp); -+ tmp = NULL; -+ } - - out: - if (dict) { -@@ -1534,6 +1551,7 @@ dht_rebalance_inprogress_task(void *data) - int open_failed = 0; - uint64_t tmp_miginfo = 0; - dht_migrate_info_t *miginfo = NULL; -+ gf_boolean_t skip_open = _gf_false; - - this = THIS; - frame = data; -@@ -1654,24 +1672,40 @@ dht_rebalance_inprogress_task(void *data) - * the loop will cause the destruction of the fd. So we need to - * iterate the list safely because iter_fd cannot be trusted. - */ -- list_for_each_entry_safe(iter_fd, tmp, &inode->fd_list, inode_list) -- { -- if (fd_is_anonymous(iter_fd)) -- continue; -- -- if (dht_fd_open_on_dst(this, iter_fd, dst_node)) -- continue; -- -+ iter_fd = list_entry((&inode->fd_list)->next, typeof(*iter_fd), inode_list); -+ while (&iter_fd->inode_list != (&inode->fd_list)) { - /* We need to release the inode->lock before calling - * syncop_open() to avoid possible deadlocks. However this - * can cause the iter_fd to be released by other threads. - * To avoid this, we take a reference before releasing the - * lock. - */ -- __fd_ref(iter_fd); - -+ if (fd_is_anonymous(iter_fd) || -+ (dht_fd_open_on_dst(this, iter_fd, dst_node))) { -+ if (!tmp) { -+ iter_fd = list_entry(iter_fd->inode_list.next, typeof(*iter_fd), -+ inode_list); -+ continue; -+ } -+ skip_open = _gf_true; -+ } -+ -+ /* Yes, this is ugly but there isn't a cleaner way to do this -+ * the fd_ref is an atomic increment so not too bad. We want to -+ * reduce the number of inode locks and unlocks. -+ */ -+ -+ fd_ref(iter_fd); - UNLOCK(&inode->lock); - -+ if (tmp) { -+ fd_unref(tmp); -+ tmp = NULL; -+ } -+ if (skip_open) -+ goto next; -+ - /* flags for open are stripped down to allow following the - * new location of the file, otherwise we can get EEXIST or - * truncate the file again as rebalance is moving the data */ -@@ -1692,9 +1726,11 @@ dht_rebalance_inprogress_task(void *data) - dht_fd_ctx_set(this, iter_fd, dst_node); - } - -- fd_unref(iter_fd); -- -+ next: - LOCK(&inode->lock); -+ skip_open = _gf_false; -+ tmp = iter_fd; -+ iter_fd = list_entry(tmp->inode_list.next, typeof(*tmp), inode_list); - } - - SYNCTASK_SETID(frame->root->uid, frame->root->gid); -@@ -1702,6 +1738,10 @@ dht_rebalance_inprogress_task(void *data) - unlock: - UNLOCK(&inode->lock); - -+ if (tmp) { -+ fd_unref(tmp); -+ tmp = NULL; -+ } - if (open_failed) { - ret = -1; - goto out; --- -1.8.3.1 - diff --git a/SOURCES/0305-glusterd-rebalance-start-should-fail-when-quorum-is-.patch b/SOURCES/0305-glusterd-rebalance-start-should-fail-when-quorum-is-.patch deleted file mode 100644 index a1e77c6..0000000 --- a/SOURCES/0305-glusterd-rebalance-start-should-fail-when-quorum-is-.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 90e52f3b44da0ed05e35ebd474e284d45794b0d6 Mon Sep 17 00:00:00 2001 -From: Sanju Rakonde -Date: Thu, 10 Oct 2019 20:40:49 +0530 -Subject: [PATCH 305/307] glusterd: rebalance start should fail when quorum is - not met - -rebalance start should not succeed if quorum is not met. -this patch adds a condition to check whether quorum is met -in pre-validation stage. - -> fixes: bz#1760467 -> Change-Id: Ic7d0d08f69e4bc6d5e7abae713ec1881531c8ad4 -> Signed-off-by: Sanju Rakonde - -upstream patch: https://review.gluster.org/#/c/glusterfs/+/23536/ -BUG: 1760261 -Change-Id: Ic7d0d08f69e4bc6d5e7abae713ec1881531c8ad4 -Signed-off-by: Sanju Rakonde -Reviewed-on: https://code.engineering.redhat.com/gerrit/183146 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - tests/bugs/glusterd/quorum-validation.t | 2 ++ - xlators/mgmt/glusterd/src/glusterd-mgmt.c | 3 ++- - 2 files changed, 4 insertions(+), 1 deletion(-) - -diff --git a/tests/bugs/glusterd/quorum-validation.t b/tests/bugs/glusterd/quorum-validation.t -index ff46729..3cc3351 100644 ---- a/tests/bugs/glusterd/quorum-validation.t -+++ b/tests/bugs/glusterd/quorum-validation.t -@@ -34,6 +34,8 @@ TEST ! $CLI_1 volume add-brick $V0 $H1:$B1/${V0}2 - TEST ! $CLI_1 volume remove-brick $V0 $H1:$B1/${V0}0 start - TEST ! $CLI_1 volume set $V0 barrier enable - -+#quorum is not met, rebalance/profile start should fail -+TEST ! $CLI_1 volume rebalance $V0 start - TEST ! $CLI_1 volume profile $V0 start - - #bug-1690753 - Volume stop when quorum not met is successful -diff --git a/xlators/mgmt/glusterd/src/glusterd-mgmt.c b/xlators/mgmt/glusterd/src/glusterd-mgmt.c -index ec78913..a4915f3 100644 ---- a/xlators/mgmt/glusterd/src/glusterd-mgmt.c -+++ b/xlators/mgmt/glusterd/src/glusterd-mgmt.c -@@ -1059,7 +1059,8 @@ glusterd_mgmt_v3_pre_validate(glusterd_op_t op, dict_t *req_dict, - goto out; - } - -- if (op == GD_OP_PROFILE_VOLUME || op == GD_OP_STOP_VOLUME) { -+ if (op == GD_OP_PROFILE_VOLUME || op == GD_OP_STOP_VOLUME || -+ op == GD_OP_REBALANCE) { - ret = glusterd_validate_quorum(this, op, req_dict, op_errstr); - if (ret) { - gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_SERVER_QUORUM_NOT_MET, --- -1.8.3.1 - diff --git a/SOURCES/0306-cli-fix-distCount-value.patch b/SOURCES/0306-cli-fix-distCount-value.patch deleted file mode 100644 index 0e8b9f2..0000000 --- a/SOURCES/0306-cli-fix-distCount-value.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 167980565e1ab56989b25fe6aa0203aeb7970c8b Mon Sep 17 00:00:00 2001 -From: Sanju Rakonde -Date: Sun, 6 Oct 2019 19:05:28 +0530 -Subject: [PATCH 306/307] cli: fix distCount value - -gluster volume info --xml id displaying wrong distCount -value. This patch addresses it. - -> fixes: bz#1758878 -> Change-Id: I64081597e06018361e6524587b433b0c4b2a0260 -> Signed-off-by: Sanju Rakonde - -upstream patch: https://review.gluster.org/#/c/glusterfs/+/23521/ - -BUG: 1758618 -Change-Id: I64081597e06018361e6524587b433b0c4b2a0260 -Signed-off-by: Sanju Rakonde -Reviewed-on: https://code.engineering.redhat.com/gerrit/183147 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - cli/src/cli-xml-output.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/cli/src/cli-xml-output.c b/cli/src/cli-xml-output.c -index b417bb8..006e2fb 100644 ---- a/cli/src/cli-xml-output.c -+++ b/cli/src/cli-xml-output.c -@@ -2548,8 +2548,9 @@ cli_xml_output_vol_info(cli_local_t *local, dict_t *dict) - ret = dict_get_int32(dict, key, &dist_count); - if (ret) - goto out; -- ret = xmlTextWriterWriteFormatElement( -- local->writer, (xmlChar *)"distCount", "%d", dist_count); -+ ret = xmlTextWriterWriteFormatElement(local->writer, -+ (xmlChar *)"distCount", "%d", -+ (brick_count / dist_count)); - XML_RET_CHECK_AND_GOTO(ret, out); - - snprintf(key, sizeof(key), "volume%d.stripe_count", i); --- -1.8.3.1 - diff --git a/SOURCES/0307-ssl-fix-RHEL8-regression-failure.patch b/SOURCES/0307-ssl-fix-RHEL8-regression-failure.patch deleted file mode 100644 index 7a85b50..0000000 --- a/SOURCES/0307-ssl-fix-RHEL8-regression-failure.patch +++ /dev/null @@ -1,42 +0,0 @@ -From be9695391f39fe6eb1d157f6bfd018116d1ee42b Mon Sep 17 00:00:00 2001 -From: Sanju Rakonde -Date: Mon, 30 Sep 2019 13:14:06 +0530 -Subject: [PATCH 307/307] ssl: fix RHEL8 regression failure - -This tests is failing with -"SSL routines:SSL_CTX_use_certificate:ee key too small" -in RHEL8. This change is made according to -https://access.redhat.com/solutions/4157431 - -> updates: bz#1756900 -> Change-Id: Ib436372c3bd94bcf7324976337add7da4088b3d5 -> Signed-off-by: Sanju Rakonde - -upstream patch: https://review.gluster.org/#/c/glusterfs/+/23501/ - -BUG: 1704562 -Change-Id: Ib436372c3bd94bcf7324976337add7da4088b3d5 -Signed-off-by: Sanju Rakonde -Reviewed-on: https://code.engineering.redhat.com/gerrit/183148 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - tests/bugs/cli/bug-1320388.t | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tests/bugs/cli/bug-1320388.t b/tests/bugs/cli/bug-1320388.t -index f5ffcbe..8e5d77b 100755 ---- a/tests/bugs/cli/bug-1320388.t -+++ b/tests/bugs/cli/bug-1320388.t -@@ -21,7 +21,7 @@ cleanup; - rm -f $SSL_BASE/glusterfs.* - touch "$GLUSTERD_WORKDIR"/secure-access - --TEST openssl genrsa -out $SSL_KEY 1024 -+TEST openssl genrsa -out $SSL_KEY 3072 - TEST openssl req -new -x509 -key $SSL_KEY -subj /CN=Anyone -out $SSL_CERT - ln $SSL_CERT $SSL_CA - --- -1.8.3.1 - diff --git a/SOURCES/0308-dht-Rebalance-causing-IO-Error-File-descriptor-in-ba.patch b/SOURCES/0308-dht-Rebalance-causing-IO-Error-File-descriptor-in-ba.patch deleted file mode 100644 index adbeb43..0000000 --- a/SOURCES/0308-dht-Rebalance-causing-IO-Error-File-descriptor-in-ba.patch +++ /dev/null @@ -1,347 +0,0 @@ -From 27f799563c1c2c1986662ed4a3a83d834c04fd98 Mon Sep 17 00:00:00 2001 -From: Mohit Agrawal -Date: Mon, 14 Oct 2019 15:42:31 +0530 -Subject: [PATCH 308/308] dht: Rebalance causing IO Error - File descriptor in - bad state - -Problem : When a file is migrated, dht attempts to re-open all open - fds on the new cached subvol. Earlier, if dht had not opened the fd, - the client xlator would be unable to find the remote fd and would - fall back to using an anon fd for the fop. That behavior changed with - https://review.gluster.org/#/c/glusterfs/+/15804, causing fops to fail - with EBADFD if the fd was not available on the cached subvol. - The client xlator returns EBADFD if the remote fd is not found but - dht only checks for EBADF before re-opening fds on the new cached subvol. - -Solution: Handle EBADFD at dht code path to avoid the issue - -> Change-Id: I43c51995cdd48d05b12e4b2889c8dbe2bb2a72d8 -> Fixes: bz#1758579 -> Signed-off-by: Mohit Agrawal -> (Cherry pick from commit 9314a9fbf487614c736cf6c4c1b93078d37bb9df) -> (Reviewed on upstream link https://review.gluster.org/#/c/glusterfs/+/23518/) - -Change-Id: I43c51995cdd48d05b12e4b2889c8dbe2bb2a72d8 -BUG: 1758432 -Signed-off-by: Mohit Agrawal -Reviewed-on: https://code.engineering.redhat.com/gerrit/183370 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - xlators/cluster/dht/src/dht-common.c | 27 +++++++++++++++++--- - xlators/cluster/dht/src/dht-common.h | 19 ++++++++++++++ - xlators/cluster/dht/src/dht-helper.c | 29 +++++++++++++++++++++ - xlators/cluster/dht/src/dht-inode-read.c | 42 +++++++++++++++++++++++++++---- - xlators/cluster/dht/src/dht-inode-write.c | 16 ++++++------ - 5 files changed, 116 insertions(+), 17 deletions(-) - -diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c -index 99cccd6..37952ba 100644 ---- a/xlators/cluster/dht/src/dht-common.c -+++ b/xlators/cluster/dht/src/dht-common.c -@@ -53,6 +53,17 @@ dht_set_dir_xattr_req(xlator_t *this, loc_t *loc, dict_t *xattr_req); - int - dht_do_fresh_lookup(call_frame_t *frame, xlator_t *this, loc_t *loc); - -+/* Check the xdata to make sure EBADF has been set by client xlator */ -+int32_t -+dht_check_remote_fd_failed_error(dht_local_t *local, int op_ret, int op_errno) -+{ -+ if (op_ret == -1 && (op_errno == EBADF || op_errno == EBADFD) && -+ !(local->fd_checked)) { -+ return 1; -+ } -+ return 0; -+} -+ - /* Sets the blocks and size values to fixed values. This is to be called - * only for dirs. The caller is responsible for checking the type - */ -@@ -4529,6 +4540,7 @@ dht_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - int this_call_cnt = 0; - dht_local_t *local = NULL; - dht_conf_t *conf = NULL; -+ int ret = 0; - - VALIDATE_OR_GOTO(frame, err); - VALIDATE_OR_GOTO(frame->local, err); -@@ -4537,6 +4549,13 @@ dht_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - conf = this->private; - local = frame->local; - -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { -+ ret = dht_check_and_open_fd_on_subvol(this, frame); -+ if (ret) -+ goto err; -+ return 0; -+ } -+ - LOCK(&frame->lock); - { - if (!xattr || (op_ret == -1)) { -@@ -5204,8 +5223,8 @@ dht_file_setxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - - local->op_errno = op_errno; - -- if ((local->fop == GF_FOP_FSETXATTR) && op_ret == -1 && -- (op_errno == EBADF) && !(local->fd_checked)) { -+ if ((local->fop == GF_FOP_FSETXATTR) && -+ dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -5929,8 +5948,8 @@ dht_file_removexattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - - local->op_errno = op_errno; - -- if ((local->fop == GF_FOP_FREMOVEXATTR) && (op_ret == -1) && -- (op_errno == EBADF) && !(local->fd_checked)) { -+ if ((local->fop == GF_FOP_FREMOVEXATTR) && -+ dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h -index c516271..ce11f02 100644 ---- a/xlators/cluster/dht/src/dht-common.h -+++ b/xlators/cluster/dht/src/dht-common.h -@@ -1230,6 +1230,22 @@ dht_newfile_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - struct iatt *preparent, struct iatt *postparent, dict_t *xdata); - - int -+dht_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, -+ int32_t op_ret, int32_t op_errno, dict_t *xdata); -+ -+int -+dht_getxattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, -+ int op_errno, dict_t *xattr, dict_t *xdata); -+ -+int -+dht_common_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this, -+ int32_t op_ret, int32_t op_errno, dict_t *dict, -+ dict_t *xdata); -+int -+dht_fxattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this, -+ int32_t op_ret, int32_t op_errno, dict_t *dict, dict_t *xdata); -+ -+int - gf_defrag_status_get(dht_conf_t *conf, dict_t *dict); - - void -@@ -1525,4 +1541,7 @@ int - dht_pt_rename(call_frame_t *frame, xlator_t *this, loc_t *oldloc, loc_t *newloc, - dict_t *xdata); - -+int32_t -+dht_check_remote_fd_failed_error(dht_local_t *local, int op_ret, int op_errno); -+ - #endif /* _DHT_H */ -diff --git a/xlators/cluster/dht/src/dht-helper.c b/xlators/cluster/dht/src/dht-helper.c -index 1e9fee0..4f7370d 100644 ---- a/xlators/cluster/dht/src/dht-helper.c -+++ b/xlators/cluster/dht/src/dht-helper.c -@@ -366,6 +366,23 @@ dht_check_and_open_fd_on_subvol_complete(int ret, call_frame_t *frame, - - break; - -+ case GF_FOP_FXATTROP: -+ STACK_WIND(frame, dht_common_xattrop_cbk, subvol, -+ subvol->fops->fxattrop, local->fd, -+ local->rebalance.flags, local->rebalance.xattr, -+ local->xattr_req); -+ break; -+ -+ case GF_FOP_FGETXATTR: -+ STACK_WIND(frame, dht_getxattr_cbk, subvol, subvol->fops->fgetxattr, -+ local->fd, local->key, NULL); -+ break; -+ -+ case GF_FOP_FINODELK: -+ STACK_WIND(frame, dht_finodelk_cbk, subvol, subvol->fops->finodelk, -+ local->key, local->fd, local->rebalance.lock_cmd, -+ &local->rebalance.flock, local->xattr_req); -+ break; - default: - gf_msg(this->name, GF_LOG_ERROR, 0, DHT_MSG_UNKNOWN_FOP, - "Unknown FOP on fd (%p) on file %s @ %s", fd, -@@ -429,6 +446,18 @@ handle_err: - DHT_STACK_UNWIND(fremovexattr, frame, -1, op_errno, NULL); - break; - -+ case GF_FOP_FXATTROP: -+ DHT_STACK_UNWIND(fxattrop, frame, -1, op_errno, NULL, NULL); -+ break; -+ -+ case GF_FOP_FGETXATTR: -+ DHT_STACK_UNWIND(fgetxattr, frame, -1, op_errno, NULL, NULL); -+ break; -+ -+ case GF_FOP_FINODELK: -+ DHT_STACK_UNWIND(finodelk, frame, -1, op_errno, NULL); -+ break; -+ - default: - gf_msg(this->name, GF_LOG_ERROR, 0, DHT_MSG_UNKNOWN_FOP, - "Unknown FOP on fd (%p) on file %s @ %s", fd, -diff --git a/xlators/cluster/dht/src/dht-inode-read.c b/xlators/cluster/dht/src/dht-inode-read.c -index cacfe35..0c209a5 100644 ---- a/xlators/cluster/dht/src/dht-inode-read.c -+++ b/xlators/cluster/dht/src/dht-inode-read.c -@@ -162,8 +162,8 @@ dht_file_attr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - local = frame->local; - prev = cookie; - -- if ((local->fop == GF_FOP_FSTAT) && (op_ret == -1) && (op_errno == EBADF) && -- !(local->fd_checked)) { -+ if ((local->fop == GF_FOP_FSTAT) && -+ dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -431,7 +431,7 @@ dht_readv_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - if (local->call_cnt != 1) - goto out; - -- if (op_ret == -1 && (op_errno == EBADF) && !(local->fd_checked)) { -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -703,7 +703,7 @@ dht_flush_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - if (local->call_cnt != 1) - goto out; - -- if (op_ret == -1 && (op_errno == EBADF) && !(local->fd_checked)) { -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -820,7 +820,7 @@ dht_fsync_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - - local->op_errno = op_errno; - -- if (op_ret == -1 && (op_errno == EBADF) && !(local->fd_checked)) { -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -1223,6 +1223,13 @@ dht_common_xattrop_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - if (local->call_cnt != 1) - goto out; - -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { -+ ret = dht_check_and_open_fd_on_subvol(this, frame); -+ if (ret) -+ goto out; -+ return 0; -+ } -+ - ret = dht_read_iatt_from_xdata(this, xdata, &stbuf); - - if ((!op_ret) && (ret)) { -@@ -1535,8 +1542,26 @@ dht_finodelk_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - int32_t op_ret, int32_t op_errno, dict_t *xdata) - - { -+ dht_local_t *local = NULL; -+ int ret = 0; -+ -+ GF_VALIDATE_OR_GOTO("dht", frame, out); -+ GF_VALIDATE_OR_GOTO("dht", this, out); -+ GF_VALIDATE_OR_GOTO("dht", frame->local, out); -+ -+ local = frame->local; -+ -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { -+ ret = dht_check_and_open_fd_on_subvol(this, frame); -+ if (ret) -+ goto out; -+ return 0; -+ } -+ -+out: - dht_lk_inode_unref(frame, op_ret); - DHT_STACK_UNWIND(finodelk, frame, op_ret, op_errno, xdata); -+ - return 0; - } - -@@ -1574,6 +1599,13 @@ dht_finodelk(call_frame_t *frame, xlator_t *this, const char *volume, fd_t *fd, - if (ret) - goto err; - */ -+ local->rebalance.flock = *lock; -+ local->rebalance.lock_cmd = cmd; -+ local->key = gf_strdup(volume); -+ -+ if (xdata) -+ local->xattr_req = dict_ref(xdata); -+ - STACK_WIND(frame, dht_finodelk_cbk, lock_subvol, - lock_subvol->fops->finodelk, volume, fd, cmd, lock, xdata); - -diff --git a/xlators/cluster/dht/src/dht-inode-write.c b/xlators/cluster/dht/src/dht-inode-write.c -index b26b705..b6b349d 100644 ---- a/xlators/cluster/dht/src/dht-inode-write.c -+++ b/xlators/cluster/dht/src/dht-inode-write.c -@@ -49,7 +49,7 @@ dht_writev_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - * We only check once as this could be a valid bad fd error. - */ - -- if (op_ret == -1 && (op_errno == EBADF) && !(local->fd_checked)) { -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -262,8 +262,8 @@ dht_truncate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - * We only check once as this could actually be a valid error. - */ - -- if ((local->fop == GF_FOP_FTRUNCATE) && (op_ret == -1) && -- ((op_errno == EBADF) || (op_errno == EINVAL)) && !(local->fd_checked)) { -+ if ((local->fop == GF_FOP_FTRUNCATE) && -+ dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -489,7 +489,7 @@ dht_fallocate_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - * We only check once as this could actually be a valid error. - */ - -- if ((op_ret == -1) && (op_errno == EBADF) && !(local->fd_checked)) { -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -666,7 +666,7 @@ dht_discard_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - * and a lookup updated the cached subvol in the inode ctx. - * We only check once as this could actually be a valid error. - */ -- if ((op_ret == -1) && (op_errno == EBADF) && !(local->fd_checked)) { -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -838,7 +838,7 @@ dht_zerofill_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, - * and a lookup updated the cached subvol in the inode ctx. - * We only check once as this could actually be a valid error. - */ -- if ((op_ret == -1) && (op_errno == EBADF) && !(local->fd_checked)) { -+ if (dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; -@@ -1005,8 +1005,8 @@ dht_file_setattr_cbk(call_frame_t *frame, void *cookie, xlator_t *this, - - local->op_errno = op_errno; - -- if ((local->fop == GF_FOP_FSETATTR) && (op_ret == -1) && -- (op_errno == EBADF) && !(local->fd_checked)) { -+ if ((local->fop == GF_FOP_FSETATTR) && -+ dht_check_remote_fd_failed_error(local, op_ret, op_errno)) { - ret = dht_check_and_open_fd_on_subvol(this, frame); - if (ret) - goto out; --- -1.8.3.1 - diff --git a/SOURCES/0309-geo-rep-Fix-config-upgrade-on-non-participating-node.patch b/SOURCES/0309-geo-rep-Fix-config-upgrade-on-non-participating-node.patch deleted file mode 100644 index 6ae359e..0000000 --- a/SOURCES/0309-geo-rep-Fix-config-upgrade-on-non-participating-node.patch +++ /dev/null @@ -1,240 +0,0 @@ -From 2b1738402276f43d7cb64542b74cb50145e46d77 Mon Sep 17 00:00:00 2001 -From: Kotresh HR -Date: Wed, 16 Oct 2019 14:25:47 +0530 -Subject: [PATCH 309/309] geo-rep: Fix config upgrade on non-participating node - -After upgrade, if the config files are of old format, it -gets migrated to new format. Monitor process migrates it. -Since monitor doesn't run on nodes where bricks are not -hosted, it doesn't get migrated there. So this patch fixes -the config upgrade on nodes which doesn't host bricks. -This happens during config either on get/set/reset. - -Backport of: - > Patch: https://review.gluster.org/23555 - > Change-Id: Ibade2f2310b0f3affea21a3baa1ae0eb71162cba - > Signed-off-by: Kotresh HR - > fixes: bz#1762220 - -Change-Id: Ibade2f2310b0f3affea21a3baa1ae0eb71162cba -Signed-off-by: Kotresh HR -BUG: 1760939 -Reviewed-on: https://code.engineering.redhat.com/gerrit/183461 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - geo-replication/syncdaemon/gsyncd.py | 3 +- - tests/00-geo-rep/georep-config-upgrade.t | 132 +++++++++++++++++++++++++++++++ - tests/00-geo-rep/gsyncd.conf.old | 47 +++++++++++ - 3 files changed, 181 insertions(+), 1 deletion(-) - create mode 100644 tests/00-geo-rep/georep-config-upgrade.t - create mode 100644 tests/00-geo-rep/gsyncd.conf.old - -diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py -index 6ae5269..7b48d82 100644 ---- a/geo-replication/syncdaemon/gsyncd.py -+++ b/geo-replication/syncdaemon/gsyncd.py -@@ -255,7 +255,8 @@ def main(): - if args.subcmd == "slave": - override_from_args = True - -- if args.subcmd == "monitor": -+ if config_file is not None and \ -+ args.subcmd in ["monitor", "config-get", "config-set", "config-reset"]: - ret = gconf.is_config_file_old(config_file, args.master, extra_tmpl_args["slavevol"]) - if ret is not None: - gconf.config_upgrade(config_file, ret) -diff --git a/tests/00-geo-rep/georep-config-upgrade.t b/tests/00-geo-rep/georep-config-upgrade.t -new file mode 100644 -index 0000000..557461c ---- /dev/null -+++ b/tests/00-geo-rep/georep-config-upgrade.t -@@ -0,0 +1,132 @@ -+#!/bin/bash -+ -+. $(dirname $0)/../include.rc -+. $(dirname $0)/../volume.rc -+. $(dirname $0)/../geo-rep.rc -+. $(dirname $0)/../env.rc -+ -+SCRIPT_TIMEOUT=300 -+OLD_CONFIG_PATH=$(dirname $0)/gsyncd.conf.old -+WORKING_DIR=/var/lib/glusterd/geo-replication/master_127.0.0.1_slave -+ -+##Cleanup and start glusterd -+cleanup; -+TEST glusterd; -+TEST pidof glusterd -+ -+##Variables -+GEOREP_CLI="$CLI volume geo-replication" -+master=$GMV0 -+SH0="127.0.0.1" -+slave=${SH0}::${GSV0} -+num_active=2 -+num_passive=2 -+master_mnt=$M0 -+slave_mnt=$M1 -+ -+############################################################ -+#SETUP VOLUMES AND GEO-REPLICATION -+############################################################ -+ -+##create_and_start_master_volume -+TEST $CLI volume create $GMV0 replica 2 $H0:$B0/${GMV0}{1,2,3,4}; -+TEST $CLI volume start $GMV0 -+ -+##create_and_start_slave_volume -+TEST $CLI volume create $GSV0 replica 2 $H0:$B0/${GSV0}{1,2,3,4}; -+TEST $CLI volume start $GSV0 -+ -+##Create, start and mount meta_volume -+TEST $CLI volume create $META_VOL replica 3 $H0:$B0/${META_VOL}{1,2,3}; -+TEST $CLI volume start $META_VOL -+TEST mkdir -p $META_MNT -+TEST glusterfs -s $H0 --volfile-id $META_VOL $META_MNT -+ -+##Mount master -+TEST glusterfs -s $H0 --volfile-id $GMV0 $M0 -+ -+##Mount slave -+TEST glusterfs -s $H0 --volfile-id $GSV0 $M1 -+ -+############################################################ -+#BASIC GEO-REPLICATION TESTS -+############################################################ -+ -+#Create geo-rep session -+TEST create_georep_session $master $slave -+ -+#Config gluster-command-dir -+TEST $GEOREP_CLI $master $slave config gluster-command-dir ${GLUSTER_CMD_DIR} -+ -+#Config gluster-command-dir -+TEST $GEOREP_CLI $master $slave config slave-gluster-command-dir ${GLUSTER_CMD_DIR} -+ -+#Enable_metavolume -+TEST $GEOREP_CLI $master $slave config use_meta_volume true -+ -+#Wait for common secret pem file to be created -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 check_common_secret_file -+ -+#Verify the keys are distributed -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 check_keys_distributed -+ -+#Start_georep -+TEST $GEOREP_CLI $master $slave start -+ -+EXPECT_WITHIN $GEO_REP_TIMEOUT 2 check_status_num_rows "Active" -+EXPECT_WITHIN $GEO_REP_TIMEOUT 2 check_status_num_rows "Passive" -+ -+TEST $GEOREP_CLI $master $slave config sync-method tarssh -+ -+#Stop Geo-rep -+TEST $GEOREP_CLI $master $slave stop -+ -+#Copy old config file -+mv -f $WORKING_DIR/gsyncd.conf $WORKING_DIR/gsyncd.conf.org -+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf -+ -+#Check if config get all updates config_file -+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf -+TEST $GEOREP_CLI $master $slave config -+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf -+ -+#Check if config get updates config_file -+rm -f $WORKING_DIR/gsyncd.conf -+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf -+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf -+TEST $GEOREP_CLI $master $slave config sync-method -+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf -+ -+#Check if config set updates config_file -+rm -f $WORKING_DIR/gsyncd.conf -+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf -+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf -+TEST $GEOREP_CLI $master $slave config sync-xattrs false -+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf -+ -+#Check if config reset updates config_file -+rm -f $WORKING_DIR/gsyncd.conf -+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf -+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf -+TEST $GEOREP_CLI $master $slave config \!sync-xattrs -+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf -+ -+#Check if geo-rep start updates config_file -+rm -f $WORKING_DIR/gsyncd.conf -+cp -p $OLD_CONFIG_PATH $WORKING_DIR/gsyncd.conf -+TEST ! grep "sync-method" $WORKING_DIR/gsyncd.conf -+TEST $GEOREP_CLI $master $slave start -+TEST grep "sync-method" $WORKING_DIR/gsyncd.conf -+ -+#Stop geo-rep -+TEST $GEOREP_CLI $master $slave stop -+ -+#Delete Geo-rep -+TEST $GEOREP_CLI $master $slave delete -+ -+#Cleanup authorized keys -+sed -i '/^command=.*SSH_ORIGINAL_COMMAND#.*/d' ~/.ssh/authorized_keys -+sed -i '/^command=.*gsyncd.*/d' ~/.ssh/authorized_keys -+ -+cleanup; -+#G_TESTDEF_TEST_STATUS_NETBSD7=BAD_TEST,BUG=000000 -diff --git a/tests/00-geo-rep/gsyncd.conf.old b/tests/00-geo-rep/gsyncd.conf.old -new file mode 100644 -index 0000000..519acaf ---- /dev/null -+++ b/tests/00-geo-rep/gsyncd.conf.old -@@ -0,0 +1,47 @@ -+[__meta__] -+version = 2.0 -+ -+[peersrx . .] -+remote_gsyncd = /usr/local/libexec/glusterfs/gsyncd -+georep_session_working_dir = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/ -+ssh_command_tar = ssh -oPasswordAuthentication=no -oStrictHostKeyChecking=no -i /var/lib/glusterd/geo-replication/tar_ssh.pem -+changelog_log_file = /var/log/glusterfs/geo-replication/${mastervol}/${eSlave}${local_id}-changes.log -+working_dir = /var/lib/misc/glusterfsd/${mastervol}/${eSlave} -+ignore_deletes = false -+pid_file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/monitor.pid -+state_file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/monitor.status -+gluster_command_dir = /usr/local/sbin/ -+gluster_params = aux-gfid-mount acl -+ssh_command = ssh -oPasswordAuthentication=no -oStrictHostKeyChecking=no -i /var/lib/glusterd/geo-replication/secret.pem -+state_detail_file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/${eSlave}-detail.status -+state_socket_unencoded = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/${eSlave}.socket -+socketdir = /var/run/gluster -+log_file = /var/log/glusterfs/geo-replication/${mastervol}/${eSlave}.log -+gluster_log_file = /var/log/glusterfs/geo-replication/${mastervol}/${eSlave}${local_id}.gluster.log -+special_sync_mode = partial -+change_detector = changelog -+pid-file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/monitor.pid -+state-file = /var/lib/glusterd/geo-replication/${mastervol}_${remotehost}_${slavevol}/monitor.status -+ -+[__section_order__] -+peersrx . . = 0 -+peersrx . %5essh%3a = 2 -+peersrx . = 3 -+peers master slave = 4 -+ -+[peersrx . %5Essh%3A] -+remote_gsyncd = /nonexistent/gsyncd -+ -+[peersrx .] -+gluster_command_dir = /usr/local/sbin/ -+gluster_params = aux-gfid-mount acl -+log_file = /var/log/glusterfs/geo-replication-slaves/${session_owner}:${local_node}${local_id}.${slavevol}.log -+log_file_mbr = /var/log/glusterfs/geo-replication-slaves/mbr/${session_owner}:${local_node}${local_id}.${slavevol}.log -+gluster_log_file = /var/log/glusterfs/geo-replication-slaves/${session_owner}:${local_node}${local_id}.${slavevol}.gluster.log -+ -+[peers master slave] -+session_owner = 0732cbd1-3ec5-4920-ab0d-aa5a896d5214 -+master.stime_xattr_name = trusted.glusterfs.0732cbd1-3ec5-4920-ab0d-aa5a896d5214.07a9005c-ace4-4f67-b3c0-73938fb236c4.stime -+volume_id = 0732cbd1-3ec5-4920-ab0d-aa5a896d5214 -+use_tarssh = true -+ --- -1.8.3.1 - diff --git a/SOURCES/0310-tests-test-case-for-non-root-geo-rep-setup.patch b/SOURCES/0310-tests-test-case-for-non-root-geo-rep-setup.patch deleted file mode 100644 index a38a4aa..0000000 --- a/SOURCES/0310-tests-test-case-for-non-root-geo-rep-setup.patch +++ /dev/null @@ -1,284 +0,0 @@ -From c2decfb59bd1be7cd2b0d792fd2ca2627913638a Mon Sep 17 00:00:00 2001 -From: Sunny Kumar -Date: Tue, 24 Sep 2019 18:22:13 +0530 -Subject: [PATCH 310/313] tests : test case for non-root geo-rep setup - -Added test case for non-root geo-rep setup. - -Backport of: - > Patch: https://review.gluster.org/22902 - > Change-Id: Ib6ebee79949a9f61bdc5c7b5e11b51b262750e98 - > fixes: bz#1717827 - > Signed-off-by: Sunny Kumar - -Change-Id: Ib6ebee79949a9f61bdc5c7b5e11b51b262750e98 -BUG: 1763412 -Signed-off-by: Kotresh HR -Reviewed-on: https://code.engineering.redhat.com/gerrit/183664 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - tests/00-geo-rep/00-georep-verify-non-root-setup.t | 251 +++++++++++++++++++++ - 1 file changed, 251 insertions(+) - create mode 100644 tests/00-geo-rep/00-georep-verify-non-root-setup.t - -diff --git a/tests/00-geo-rep/00-georep-verify-non-root-setup.t b/tests/00-geo-rep/00-georep-verify-non-root-setup.t -new file mode 100644 -index 0000000..e753c1f ---- /dev/null -+++ b/tests/00-geo-rep/00-georep-verify-non-root-setup.t -@@ -0,0 +1,251 @@ -+#!/bin/bash -+ -+. $(dirname $0)/../include.rc -+. $(dirname $0)/../volume.rc -+. $(dirname $0)/../geo-rep.rc -+. $(dirname $0)/../env.rc -+ -+SCRIPT_TIMEOUT=500 -+ -+### Basic Non-root geo-rep setup test with Distribute Replicate volumes -+ -+##Cleanup and start glusterd -+cleanup; -+TEST glusterd; -+TEST pidof glusterd -+ -+ -+##Variables -+GEOREP_CLI="$CLI volume geo-replication" -+master=$GMV0 -+SH0="127.0.0.1" -+slave=${SH0}::${GSV0} -+num_active=2 -+num_passive=2 -+master_mnt=$M0 -+slave_mnt=$M1 -+ -+##User and group to be used for non-root geo-rep setup -+usr="nroot" -+grp="ggroup" -+ -+slave_url=$usr@$slave -+slave_vol=$GSV0 -+ssh_url=$usr@$SH0 -+ -+############################################################ -+#SETUP VOLUMES AND VARIABLES -+ -+##create_and_start_master_volume -+TEST $CLI volume create $GMV0 replica 2 $H0:$B0/${GMV0}{1,2,3,4}; -+TEST $CLI volume start $GMV0 -+ -+##create_and_start_slave_volume -+TEST $CLI volume create $GSV0 replica 2 $H0:$B0/${GSV0}{1,2,3,4}; -+TEST $CLI volume start $GSV0 -+ -+##Mount master -+#TEST glusterfs -s $H0 --volfile-id $GMV0 $M0 -+ -+##Mount slave -+#TEST glusterfs -s $H0 --volfile-id $GSV0 $M1 -+ -+ -+########################################################## -+#TEST FUNCTIONS -+ -+function distribute_key_non_root() -+{ -+ ${GLUSTER_LIBEXECDIR}/set_geo_rep_pem_keys.sh $usr $master $slave_vol -+ echo $? -+} -+ -+ -+function check_status_non_root() -+{ -+ local search_key=$1 -+ $GEOREP_CLI $master $slave_url status | grep -F "$search_key" | wc -l -+} -+ -+ -+function check_and_clean_group() -+{ -+ if [ $(getent group $grp) ] -+ then -+ groupdel $grp; -+ echo $? -+ else -+ echo 0 -+ fi -+} -+ -+function clean_lock_files() -+{ -+ if [ ! -f /etc/passwd.lock ]; -+ then -+ rm -rf /etc/passwd.lock; -+ fi -+ -+ if [ ! -f /etc/group.lock ]; -+ then -+ rm -rf /etc/group.lock; -+ fi -+ -+ if [ ! -f /etc/shadow.lock ]; -+ then -+ rm -rf /etc/shadow.lock; -+ fi -+ -+ if [ ! -f /etc/gshadow.lock ]; -+ then -+ rm -rf /etc/gshadow.lock; -+ fi -+} -+ -+ -+########################################################### -+#SETUP NON-ROOT GEO REPLICATION -+ -+##Create ggroup group -+##First test if group exists and then create new one -+ -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 check_and_clean_group -+ -+##cleanup *.lock files -+ -+clean_lock_files -+ -+TEST /usr/sbin/groupadd $grp -+ -+clean_lock_files -+##Create non-root user and assign it to newly created group -+ -+TEST /usr/sbin/useradd -G $grp $usr -+ -+##Modify password for non-root user to have control over distributing ssh-key -+echo "$usr:pass" | chpasswd -+ -+##Set up mountbroker root -+TEST gluster-mountbroker setup /var/mountbroker-root $grp -+ -+##Associate volume and non-root user to the mountbroker -+TEST gluster-mountbroker add $slave_vol $usr -+ -+##Check ssh setting for clear text passwords -+sed '/^PasswordAuthentication /{s/no/yes/}' -i /etc/ssh/sshd_config && grep '^PasswordAuthentication ' /etc/ssh/sshd_config && service sshd restart -+ -+ -+##Restart glusterd to reflect mountbroker changages -+TEST killall_gluster; -+TEST glusterd; -+TEST pidof glusterd; -+ -+ -+ -+##Create, start and mount meta_volume -+TEST $CLI volume create $META_VOL replica 3 $H0:$B0/${META_VOL}{1,2,3}; -+TEST $CLI volume start $META_VOL -+TEST mkdir -p $META_MNT -+TEST glusterfs -s $H0 --volfile-id $META_VOL $META_MNT -+ -+##Mount master -+TEST glusterfs -s $H0 --volfile-id $GMV0 $M0 -+ -+##Mount slave -+TEST glusterfs -s $H0 --volfile-id $GSV0 $M1 -+ -+## Check status of mount-broker -+TEST gluster-mountbroker status -+ -+ -+##Setup password-less ssh for non-root user -+#sshpass -p "pass" ssh-copy-id -i ~/.ssh/id_rsa.pub $ssh_url -+##Run ssh agent -+eval "$(ssh-agent -s)" -+PASS="pass" -+ -+ -+##Create a temp script to echo the SSH password, used by SSH_ASKPASS -+ -+SSH_ASKPASS_SCRIPT=/tmp/ssh-askpass-script -+cat > ${SSH_ASKPASS_SCRIPT} <> ~/.bashrc" -+ -+##Creating secret pem pub file -+TEST gluster-georep-sshkey generate -+ -+##Create geo-rep non-root setup -+ -+TEST $GEOREP_CLI $master $slave_url create push-pem -+ -+#Config gluster-command-dir -+TEST $GEOREP_CLI $master $slave_url config gluster-command-dir ${GLUSTER_CMD_DIR} -+ -+#Config gluster-command-dir -+TEST $GEOREP_CLI $master $slave_url config slave-gluster-command-dir ${GLUSTER_CMD_DIR} -+ -+## Test for key distribution -+ -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 distribute_key_non_root -+ -+##Wait for common secret pem file to be created -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 check_common_secret_file -+ -+#Enable_metavolume -+TEST $GEOREP_CLI $master $slave config use_meta_volume true -+ -+#Start_georep -+TEST $GEOREP_CLI $master $slave_url start -+ -+## Meta volume is enabled so looking for 2 Active and 2 Passive sessions -+ -+EXPECT_WITHIN $GEO_REP_TIMEOUT 2 check_status_non_root "Active" -+ -+EXPECT_WITHIN $GEO_REP_TIMEOUT 2 check_status_non_root "Passive" -+ -+#Pause geo-replication session -+TEST $GEOREP_CLI $master $slave_url pause -+ -+#Resume geo-replication session -+TEST $GEOREP_CLI $master $slave_url resume -+ -+#Validate failure of volume stop when geo-rep is running -+TEST ! $CLI volume stop $GMV0 -+ -+#Stop Geo-rep -+TEST $GEOREP_CLI $master $slave_url stop -+ -+#Delete Geo-rep -+TEST $GEOREP_CLI $master $slave_url delete -+ -+#Cleanup authorized_keys -+sed -i '/^command=.*SSH_ORIGINAL_COMMAND#.*/d' ~/.ssh/authorized_keys -+sed -i '/^command=.*gsyncd.*/d' ~/.ssh/authorized_keys -+ -+#clear mountbroker -+gluster-mountbroker remove --user $usr -+gluster-mountbroker remove --volume $slave_vol -+ -+#delete group and user created for non-root setup -+TEST userdel -r -f $usr -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 check_and_clean_group -+ -+##password script cleanup -+rm -rf /tmp/ssh-askpass-script -+ -+ -+cleanup; -+ --- -1.8.3.1 - diff --git a/SOURCES/0311-geo-rep-Fix-Permission-denied-traceback-on-non-root-.patch b/SOURCES/0311-geo-rep-Fix-Permission-denied-traceback-on-non-root-.patch deleted file mode 100644 index af0206a..0000000 --- a/SOURCES/0311-geo-rep-Fix-Permission-denied-traceback-on-non-root-.patch +++ /dev/null @@ -1,186 +0,0 @@ -From 4a2441e76f4240568093080769ede07bb7fb2016 Mon Sep 17 00:00:00 2001 -From: Kotresh HR -Date: Sun, 20 Oct 2019 01:01:39 +0530 -Subject: [PATCH 311/313] geo-rep: Fix Permission denied traceback on non root - setup - -Problem: -While syncing rename of directory in hybrid crawl, geo-rep -crashes as below. - -Traceback (most recent call last): - File "/usr/local/libexec/glusterfs/python/syncdaemon/repce.py", line 118, in worker - res = getattr(self.obj, rmeth)(*in_data[2:]) - File "/usr/local/libexec/glusterfs/python/syncdaemon/resource.py", line 588, in entry_ops - src_entry = get_slv_dir_path(slv_host, slv_volume, gfid) - File "/usr/local/libexec/glusterfs/python/syncdaemon/syncdutils.py", line 687, in get_slv_dir_path - [ENOENT], [ESTALE]) - File "/usr/local/libexec/glusterfs/python/syncdaemon/syncdutils.py", line 546, in errno_wrap - return call(*arg) -PermissionError: [Errno 13] Permission denied: '/bricks/brick1/b1/.glusterfs/8e/c0/8ec0fcd4-d50f-4a6e-b473-a7943ab66640' - -Cause: -Conversion of gfid to path for a directory uses readlink on backend -.glusterfs gfid path. But this fails for non root user with -permission denied. - -Fix: -Use gfid2path interface to get the path from gfid - -Backport of: - > Patch: https://review.gluster.org/23570 - > Change-Id: I9d40c713a1b32cea95144cbc0f384ada82972222 - > fixes: bz#1763439 - > Signed-off-by: Kotresh HR - -Change-Id: I9d40c713a1b32cea95144cbc0f384ada82972222 -BUG: 1763412 -Signed-off-by: Kotresh HR -Reviewed-on: https://code.engineering.redhat.com/gerrit/183665 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - geo-replication/syncdaemon/gsyncd.py | 3 +- - geo-replication/syncdaemon/syncdutils.py | 35 ++++++++++++++++------ - tests/00-geo-rep/00-georep-verify-non-root-setup.t | 30 +++++++++++++++---- - 3 files changed, 52 insertions(+), 16 deletions(-) - -diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py -index 7b48d82..8940384 100644 ---- a/geo-replication/syncdaemon/gsyncd.py -+++ b/geo-replication/syncdaemon/gsyncd.py -@@ -231,7 +231,8 @@ def main(): - # Set default path for config file in that case - # If an subcmd accepts config file then it also accepts - # master and Slave arguments. -- if config_file is None and hasattr(args, "config_file"): -+ if config_file is None and hasattr(args, "config_file") \ -+ and args.subcmd != "slave": - config_file = "%s/geo-replication/%s_%s_%s/gsyncd.conf" % ( - GLUSTERD_WORKDIR, - args.master, -diff --git a/geo-replication/syncdaemon/syncdutils.py b/geo-replication/syncdaemon/syncdutils.py -index aadaebd..b08098e 100644 ---- a/geo-replication/syncdaemon/syncdutils.py -+++ b/geo-replication/syncdaemon/syncdutils.py -@@ -57,6 +57,7 @@ from hashlib import sha256 as sha256 - - # auxiliary gfid based access prefix - _CL_AUX_GFID_PFX = ".gfid/" -+ROOT_GFID = "00000000-0000-0000-0000-000000000001" - GF_OP_RETRIES = 10 - - GX_GFID_CANONICAL_LEN = 37 # canonical gfid len + '\0' -@@ -670,6 +671,7 @@ def get_slv_dir_path(slv_host, slv_volume, gfid): - global slv_bricks - - dir_path = ENOENT -+ pfx = gauxpfx() - - if not slv_bricks: - slv_info = Volinfo(slv_volume, slv_host, master=False) -@@ -683,15 +685,30 @@ def get_slv_dir_path(slv_host, slv_volume, gfid): - gfid[2:4], - gfid], [ENOENT], [ESTALE]) - if dir_path != ENOENT: -- realpath = errno_wrap(os.readlink, [dir_path], -- [ENOENT], [ESTALE]) -- if not isinstance(realpath, int): -- realpath_parts = realpath.split('/') -- pargfid = realpath_parts[-2] -- basename = realpath_parts[-1] -- pfx = gauxpfx() -- dir_entry = os.path.join(pfx, pargfid, basename) -- return dir_entry -+ try: -+ realpath = errno_wrap(os.readlink, [dir_path], -+ [ENOENT], [ESTALE]) -+ if not isinstance(realpath, int): -+ realpath_parts = realpath.split('/') -+ pargfid = realpath_parts[-2] -+ basename = realpath_parts[-1] -+ dir_entry = os.path.join(pfx, pargfid, basename) -+ return dir_entry -+ except OSError: -+ # .gfid/GFID -+ gfidpath = unescape_space_newline(os.path.join(pfx, gfid)) -+ realpath = errno_wrap(Xattr.lgetxattr_buf, -+ [gfidpath, 'glusterfs.gfid2path'], [ENOENT], [ESTALE]) -+ if not isinstance(realpath, int): -+ basename = os.path.basename(realpath).rstrip('\x00') -+ dirpath = os.path.dirname(realpath) -+ if dirpath is "/": -+ pargfid = ROOT_GFID -+ else: -+ dirpath = dirpath.strip("/") -+ pargfid = get_gfid_from_mnt(dirpath) -+ dir_entry = os.path.join(pfx, pargfid, basename) -+ return dir_entry - - return None - -diff --git a/tests/00-geo-rep/00-georep-verify-non-root-setup.t b/tests/00-geo-rep/00-georep-verify-non-root-setup.t -index e753c1f..c9fd8b2 100644 ---- a/tests/00-geo-rep/00-georep-verify-non-root-setup.t -+++ b/tests/00-geo-rep/00-georep-verify-non-root-setup.t -@@ -118,8 +118,8 @@ clean_lock_files - TEST /usr/sbin/groupadd $grp - - clean_lock_files --##Create non-root user and assign it to newly created group -- -+##Del if exists and create non-root user and assign it to newly created group -+userdel -r -f $usr - TEST /usr/sbin/useradd -G $grp $usr - - ##Modify password for non-root user to have control over distributing ssh-key -@@ -140,8 +140,6 @@ TEST killall_gluster; - TEST glusterd; - TEST pidof glusterd; - -- -- - ##Create, start and mount meta_volume - TEST $CLI volume create $META_VOL replica 3 $H0:$B0/${META_VOL}{1,2,3}; - TEST $CLI volume start $META_VOL -@@ -225,6 +223,26 @@ TEST $GEOREP_CLI $master $slave_url resume - #Validate failure of volume stop when geo-rep is running - TEST ! $CLI volume stop $GMV0 - -+#Hybrid directory rename test BZ#1763439 -+TEST $GEOREP_CLI $master $slave_url config change_detector xsync -+mkdir ${master_mnt}/dir1 -+mkdir ${master_mnt}/dir1/dir2 -+mkdir ${master_mnt}/dir1/dir3 -+mkdir ${master_mnt}/hybrid_d1 -+ -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${slave_mnt}/hybrid_d1 -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${slave_mnt}/dir1 -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${slave_mnt}/dir1/dir2 -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${slave_mnt}/dir1/dir3 -+ -+mv ${master_mnt}/hybrid_d1 ${master_mnt}/hybrid_rn_d1 -+mv ${master_mnt}/dir1/dir2 ${master_mnt}/rn_dir2 -+mv ${master_mnt}/dir1/dir3 ${master_mnt}/dir1/rn_dir3 -+ -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${slave_mnt}/hybrid_rn_d1 -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${slave_mnt}/rn_dir2 -+EXPECT_WITHIN $GEO_REP_TIMEOUT 0 directory_ok ${slave_mnt}/dir1/rn_dir3 -+ - #Stop Geo-rep - TEST $GEOREP_CLI $master $slave_url stop - -@@ -232,8 +250,8 @@ TEST $GEOREP_CLI $master $slave_url stop - TEST $GEOREP_CLI $master $slave_url delete - - #Cleanup authorized_keys --sed -i '/^command=.*SSH_ORIGINAL_COMMAND#.*/d' ~/.ssh/authorized_keys --sed -i '/^command=.*gsyncd.*/d' ~/.ssh/authorized_keys -+sed -i '/^command=.*SSH_ORIGINAL_COMMAND#.*/d' /home/$usr/.ssh/authorized_keys -+sed -i '/^command=.*gsyncd.*/d' /home/$usr/.ssh/authorized_keys - - #clear mountbroker - gluster-mountbroker remove --user $usr --- -1.8.3.1 - diff --git a/SOURCES/0312-Scripts-quota_fsck-script-KeyError-contri_size.patch b/SOURCES/0312-Scripts-quota_fsck-script-KeyError-contri_size.patch deleted file mode 100644 index bf8c820..0000000 --- a/SOURCES/0312-Scripts-quota_fsck-script-KeyError-contri_size.patch +++ /dev/null @@ -1,59 +0,0 @@ -From b1d8a5ee8b2e320aaaf9b2a145fbc285178d07bb Mon Sep 17 00:00:00 2001 -From: hari gowtham -Date: Tue, 22 Oct 2019 15:11:03 +0530 -Subject: [PATCH 312/313] Scripts: quota_fsck script KeyError: 'contri_size' - - back-port of: https://review.gluster.org/#/c/glusterfs/+/23586/ - -Problem: In a certain code flow, we weren't handling the -unavailability of the contri value in the dict. Trying to print -without the value resulted in erroring out. - -Fix: Have printed the whole of dictionary as the values will be -helpful in understanding the state of the file/dir - ->Fixes: bz#1764129 ->Change-Id: I99c538adb712f281ca10e4e0088f404f515b9725 ->Signed-off-by: hari gowtham - -BUG: 1719171 -Change-Id: I99c538adb712f281ca10e4e0088f404f515b9725 -Signed-off-by: hari gowtham -Reviewed-on: https://code.engineering.redhat.com/gerrit/183720 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - extras/quota/quota_fsck.py | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - -diff --git a/extras/quota/quota_fsck.py b/extras/quota/quota_fsck.py -index f03895d..485a37a 100755 ---- a/extras/quota/quota_fsck.py -+++ b/extras/quota/quota_fsck.py -@@ -52,17 +52,17 @@ epilog_msg=''' - - def print_msg(log_type, path, xattr_dict = {}, stbuf = "", dir_size = None): - if log_type == QUOTA_VERBOSE: -- print('%-24s %-60s\nxattr_values: %s\n%s\n' % {"Verbose", path, xattr_dict, stbuf}) -+ print('%-24s %-60s\nxattr_values: %s\n%s\n' % ("Verbose", path, xattr_dict, stbuf)) - elif log_type == QUOTA_META_ABSENT: -- print('%-24s %-60s\n%s\n' % {"Quota-Meta Absent", path, xattr_dict}) -+ print('%-24s %-60s\n%s\n' % ("Quota-Meta Absent", path, xattr_dict)) - elif log_type == QUOTA_SIZE_MISMATCH: - print("mismatch") - if dir_size is not None: -- print('%24s %60s %12s %12s' % {"Size Mismatch", path, xattr_dict['contri_size'], -- dir_size}) -+ print('%24s %60s %12s %12s' % ("Size Mismatch", path, -+ xattr_dict, dir_size)) - else: -- print('%-24s %-60s %-12i %-12i' % {"Size Mismatch", path, xattr_dict['contri_size'], -- stbuf.st_size}) -+ print('%-24s %-60s %-12i %-12i' % ("Size Mismatch", path, xattr_dict, -+ stbuf.st_size)) - - def size_differs_lot(s1, s2): - ''' --- -1.8.3.1 - diff --git a/SOURCES/0313-extras-Cgroup-CPU-Mem-restriction-are-not-working-on.patch b/SOURCES/0313-extras-Cgroup-CPU-Mem-restriction-are-not-working-on.patch deleted file mode 100644 index e4887b8..0000000 --- a/SOURCES/0313-extras-Cgroup-CPU-Mem-restriction-are-not-working-on.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 23091d24d34102c7938ae2890930b73c89c5a8e7 Mon Sep 17 00:00:00 2001 -From: Mohit Agrawal -Date: Tue, 22 Oct 2019 18:52:25 +0530 -Subject: [PATCH 313/313] extras: Cgroup(CPU/Mem) restriction are not working - on gluster process - -Problem: After Configure the Cgroup(CPU/MEM) limit to a gluster processes - resource(CPU/MEM) limits are not applicable to the gluster - processes.Cgroup limits are not applicable because all threads are - not moved into a newly created cgroup to apply restriction. - -Solution: To move a gluster thread to newly created cgroup change the - condition in script - -> Change-Id: I8ad81c69200e4ec43a74f6052481551cf835354c -> Fixes: bz#1764208 -> (Cherry pick from commit 38de02012948013a88597545cf49380ce97f6fa7) -> (Reviewed on upstream link https://review.gluster.org/#/c/glusterfs/+/23599/) -> Signed-off-by: Mohit Agrawal - -Change-Id: I8ad81c69200e4ec43a74f6052481551cf835354c -BUG: 1764202 -Signed-off-by: Mohit Agrawal -Reviewed-on: https://code.engineering.redhat.com/gerrit/183730 -Tested-by: RHGS Build Bot -Reviewed-by: Sunil Kumar Heggodu Gopala Acharya ---- - extras/control-cpu-load.sh | 2 +- - extras/control-mem.sh | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/extras/control-cpu-load.sh b/extras/control-cpu-load.sh -index b739c82..52dcf62 100755 ---- a/extras/control-cpu-load.sh -+++ b/extras/control-cpu-load.sh -@@ -104,7 +104,7 @@ echo "Setting $quota_value to cpu.cfs_quota_us for gluster_cgroup." - echo ${quota_value} > ${LOC}/${cgroup_name}/cpu.cfs_quota_us - - if ps -T -p ${daemon_pid} | grep gluster > /dev/null; then -- for thid in `ps -T -p ${daemon_pid} | grep gluster | awk -F " " '{print $2}'`; -+ for thid in `ps -T -p ${daemon_pid} | grep -v SPID | awk -F " " '{print $2}'`; - do - echo ${thid} > ${LOC}/${cgroup_name}/tasks ; - done -diff --git a/extras/control-mem.sh b/extras/control-mem.sh -index 38aa2a0..91b36f8 100755 ---- a/extras/control-mem.sh -+++ b/extras/control-mem.sh -@@ -116,7 +116,7 @@ else - fi - - if ps -T -p ${daemon_pid} | grep gluster > /dev/null; then -- for thid in `ps -T -p ${daemon_pid} | grep gluster | awk -F " " '{print $2}'`; -+ for thid in `ps -T -p ${daemon_pid} | grep -v SPID | awk -F " " '{print $2}'`; - do - echo ${thid} > ${LOC}/${cgroup_name}/tasks ; - done --- -1.8.3.1 - diff --git a/SPECS/glusterfs.spec b/SPECS/glusterfs.spec index 837592b..4605fb7 100644 --- a/SPECS/glusterfs.spec +++ b/SPECS/glusterfs.spec @@ -231,7 +231,7 @@ Release: 0.1%{?prereltag:.%{prereltag}}%{?dist} %else Name: glusterfs Version: 6.0 -Release: 20%{?dist} +Release: 15%{?dist} ExcludeArch: i686 %endif License: GPLv2 or LGPLv3+ @@ -611,17 +611,6 @@ Patch0299: 0299-geo-rep-performance-improvement-while-syncing-rename.patch Patch0300: 0300-cli-remove-the-warning-displayed-when-remove-brick-s.patch Patch0301: 0301-posix-Brick-is-going-down-unexpectedly.patch Patch0302: 0302-cluster-ec-prevent-filling-shd-log-with-table-not-fo.patch -Patch0303: 0303-posix-heketidbstorage-bricks-go-down-during-PVC-crea.patch -Patch0304: 0304-cluster-dht-Correct-fd-processing-loop.patch -Patch0305: 0305-glusterd-rebalance-start-should-fail-when-quorum-is-.patch -Patch0306: 0306-cli-fix-distCount-value.patch -Patch0307: 0307-ssl-fix-RHEL8-regression-failure.patch -Patch0308: 0308-dht-Rebalance-causing-IO-Error-File-descriptor-in-ba.patch -Patch0309: 0309-geo-rep-Fix-config-upgrade-on-non-participating-node.patch -Patch0310: 0310-tests-test-case-for-non-root-geo-rep-setup.patch -Patch0311: 0311-geo-rep-Fix-Permission-denied-traceback-on-non-root-.patch -Patch0312: 0312-Scripts-quota_fsck-script-KeyError-contri_size.patch -Patch0313: 0313-extras-Cgroup-CPU-Mem-restriction-are-not-working-on.patch %description GlusterFS is a distributed file-system capable of scaling to several @@ -2335,24 +2324,6 @@ fi %endif %changelog -* Tue Nov 05 2019 CentOS Sources - 6.0-20.el8.centos -- remove vendor and/or packager lines - -* Wed Oct 23 2019 Rinku Kothiya - 6.0-20 -- fixes bugs bz#1719171 bz#1763412 bz#1764202 - -* Thu Oct 17 2019 Rinku Kothiya - 6.0-19 -- fixes bugs bz#1760939 - -* Wed Oct 16 2019 Rinku Kothiya - 6.0-18 -- fixes bugs bz#1758432 - -* Fri Oct 11 2019 Rinku Kothiya - 6.0-17 -- fixes bugs bz#1704562 bz#1758618 bz#1760261 - -* Wed Oct 09 2019 Rinku Kothiya - 6.0-16 -- fixes bugs bz#1752713 bz#1756325 - * Fri Sep 27 2019 Rinku Kothiya - 6.0-15 - fixes bugs bz#1726000 bz#1731826 bz#1754407 bz#1754790 bz#1755227