import glusterfs-6.0-20.el8
This commit is contained in:
parent
40a5b598fb
commit
c51c25448b
@ -0,0 +1,45 @@
|
||||
From ae4f538065d26a277e38810c6eef18c0312cd1f3 Mon Sep 17 00:00:00 2001
|
||||
From: Mohit Agrawal <moagrawal@redhat.com>
|
||||
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 <moagrawal@redhat.com>
|
||||
> (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 <moagrawa@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/182387
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
||||
---
|
||||
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
|
||||
|
194
SOURCES/0304-cluster-dht-Correct-fd-processing-loop.patch
Normal file
194
SOURCES/0304-cluster-dht-Correct-fd-processing-loop.patch
Normal file
@ -0,0 +1,194 @@
|
||||
From ad233c1b3abdfe2bdfd1eacc83b5f84b7afa6b46 Mon Sep 17 00:00:00 2001
|
||||
From: N Balachandran <nbalacha@redhat.com>
|
||||
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 <nbalacha@redhat.com>
|
||||
> (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 <moagrawa@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/182826
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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
|
||||
|
@ -0,0 +1,56 @@
|
||||
From 90e52f3b44da0ed05e35ebd474e284d45794b0d6 Mon Sep 17 00:00:00 2001
|
||||
From: Sanju Rakonde <srakonde@redhat.com>
|
||||
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 <srakonde@redhat.com>
|
||||
|
||||
upstream patch: https://review.gluster.org/#/c/glusterfs/+/23536/
|
||||
BUG: 1760261
|
||||
Change-Id: Ic7d0d08f69e4bc6d5e7abae713ec1881531c8ad4
|
||||
Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/183146
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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
|
||||
|
43
SOURCES/0306-cli-fix-distCount-value.patch
Normal file
43
SOURCES/0306-cli-fix-distCount-value.patch
Normal file
@ -0,0 +1,43 @@
|
||||
From 167980565e1ab56989b25fe6aa0203aeb7970c8b Mon Sep 17 00:00:00 2001
|
||||
From: Sanju Rakonde <srakonde@redhat.com>
|
||||
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 <srakonde@redhat.com>
|
||||
|
||||
upstream patch: https://review.gluster.org/#/c/glusterfs/+/23521/
|
||||
|
||||
BUG: 1758618
|
||||
Change-Id: I64081597e06018361e6524587b433b0c4b2a0260
|
||||
Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/183147
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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
|
||||
|
42
SOURCES/0307-ssl-fix-RHEL8-regression-failure.patch
Normal file
42
SOURCES/0307-ssl-fix-RHEL8-regression-failure.patch
Normal file
@ -0,0 +1,42 @@
|
||||
From be9695391f39fe6eb1d157f6bfd018116d1ee42b Mon Sep 17 00:00:00 2001
|
||||
From: Sanju Rakonde <srakonde@redhat.com>
|
||||
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 <srakonde@redhat.com>
|
||||
|
||||
upstream patch: https://review.gluster.org/#/c/glusterfs/+/23501/
|
||||
|
||||
BUG: 1704562
|
||||
Change-Id: Ib436372c3bd94bcf7324976337add7da4088b3d5
|
||||
Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/183148
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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
|
||||
|
@ -0,0 +1,347 @@
|
||||
From 27f799563c1c2c1986662ed4a3a83d834c04fd98 Mon Sep 17 00:00:00 2001
|
||||
From: Mohit Agrawal <moagrawal@redhat.com>
|
||||
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 <moagrawa@redhat.com>
|
||||
> (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 <moagrawa@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/183370
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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
|
||||
|
@ -0,0 +1,240 @@
|
||||
From 2b1738402276f43d7cb64542b74cb50145e46d77 Mon Sep 17 00:00:00 2001
|
||||
From: Kotresh HR <khiremat@redhat.com>
|
||||
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 <khiremat@redhat.com>
|
||||
> fixes: bz#1762220
|
||||
|
||||
Change-Id: Ibade2f2310b0f3affea21a3baa1ae0eb71162cba
|
||||
Signed-off-by: Kotresh HR <khiremat@redhat.com>
|
||||
BUG: 1760939
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/183461
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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
|
||||
|
284
SOURCES/0310-tests-test-case-for-non-root-geo-rep-setup.patch
Normal file
284
SOURCES/0310-tests-test-case-for-non-root-geo-rep-setup.patch
Normal file
@ -0,0 +1,284 @@
|
||||
From c2decfb59bd1be7cd2b0d792fd2ca2627913638a Mon Sep 17 00:00:00 2001
|
||||
From: Sunny Kumar <sunkumar@redhat.com>
|
||||
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 <sunkumar@redhat.com>
|
||||
|
||||
Change-Id: Ib6ebee79949a9f61bdc5c7b5e11b51b262750e98
|
||||
BUG: 1763412
|
||||
Signed-off-by: Kotresh HR <khiremat@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/183664
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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} <<EOL
|
||||
+#!/bin/bash
|
||||
+echo "${PASS}"
|
||||
+EOL
|
||||
+chmod u+x ${SSH_ASKPASS_SCRIPT}
|
||||
+
|
||||
+##set no display, necessary for ssh to use with setsid and SSH_ASKPASS
|
||||
+#export DISPLAY=:0
|
||||
+
|
||||
+export SSH_ASKPASS=${SSH_ASKPASS_SCRIPT}
|
||||
+
|
||||
+DISPLAY=: setsid ssh-copy-id -i ~/.ssh/id_rsa.pub $ssh_url
|
||||
+
|
||||
+##Setting up PATH for gluster binaries in case of source installation
|
||||
+##ssh -oNumberOfPasswordPrompts=0 -oStrictHostKeyChecking=no $ssh_url "echo "export PATH=$PATH:/usr/local/sbin" >> ~/.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
|
||||
|
@ -0,0 +1,186 @@
|
||||
From 4a2441e76f4240568093080769ede07bb7fb2016 Mon Sep 17 00:00:00 2001
|
||||
From: Kotresh HR <khiremat@redhat.com>
|
||||
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 <khiremat@redhat.com>
|
||||
|
||||
Change-Id: I9d40c713a1b32cea95144cbc0f384ada82972222
|
||||
BUG: 1763412
|
||||
Signed-off-by: Kotresh HR <khiremat@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/183665
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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
|
||||
|
@ -0,0 +1,59 @@
|
||||
From b1d8a5ee8b2e320aaaf9b2a145fbc285178d07bb Mon Sep 17 00:00:00 2001
|
||||
From: hari gowtham <hgowtham@redhat.com>
|
||||
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 <hgowtham@redhat.com>
|
||||
|
||||
BUG: 1719171
|
||||
Change-Id: I99c538adb712f281ca10e4e0088f404f515b9725
|
||||
Signed-off-by: hari gowtham <hgowtham@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/183720
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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
|
||||
|
@ -0,0 +1,60 @@
|
||||
From 23091d24d34102c7938ae2890930b73c89c5a8e7 Mon Sep 17 00:00:00 2001
|
||||
From: Mohit Agrawal <moagrawal@redhat.com>
|
||||
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 <moagrawal@redhat.com>
|
||||
|
||||
Change-Id: I8ad81c69200e4ec43a74f6052481551cf835354c
|
||||
BUG: 1764202
|
||||
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
|
||||
Reviewed-on: https://code.engineering.redhat.com/gerrit/183730
|
||||
Tested-by: RHGS Build Bot <nigelb@redhat.com>
|
||||
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
|
||||
---
|
||||
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
|
||||
|
@ -231,7 +231,7 @@ Release: 0.1%{?prereltag:.%{prereltag}}%{?dist}
|
||||
%else
|
||||
Name: glusterfs
|
||||
Version: 6.0
|
||||
Release: 15%{?dist}
|
||||
Release: 20%{?dist}
|
||||
ExcludeArch: i686
|
||||
%endif
|
||||
License: GPLv2 or LGPLv3+
|
||||
@ -611,6 +611,17 @@ 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
|
||||
@ -2324,6 +2335,21 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Wed Oct 23 2019 Rinku Kothiya <rkothiya@redhat.com> - 6.0-20
|
||||
- fixes bugs bz#1719171 bz#1763412 bz#1764202
|
||||
|
||||
* Thu Oct 17 2019 Rinku Kothiya <rkothiya@redhat.com> - 6.0-19
|
||||
- fixes bugs bz#1760939
|
||||
|
||||
* Wed Oct 16 2019 Rinku Kothiya <rkothiya@redhat.com> - 6.0-18
|
||||
- fixes bugs bz#1758432
|
||||
|
||||
* Fri Oct 11 2019 Rinku Kothiya <rkothiya@redhat.com> - 6.0-17
|
||||
- fixes bugs bz#1704562 bz#1758618 bz#1760261
|
||||
|
||||
* Wed Oct 09 2019 Rinku Kothiya <rkothiya@redhat.com> - 6.0-16
|
||||
- fixes bugs bz#1752713 bz#1756325
|
||||
|
||||
* Fri Sep 27 2019 Rinku Kothiya <rkothiya@redhat.com> - 6.0-15
|
||||
- fixes bugs bz#1726000 bz#1731826 bz#1754407 bz#1754790 bz#1755227
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user