From 92aadb6a5eeec75edf7f5a11a0ebd861dd85ca6b Mon Sep 17 00:00:00 2001 From: N Balachandran Date: Mon, 20 May 2019 15:23:42 +0530 Subject: [PATCH 148/169] cluster/dht: Lookup all files when processing directory A rebalance process currently only looks up files that it is supposed to migrate. This could cause issues when lookup-optimize is enabled as the dir layout can be updated with the commit hash before all files are looked up. This is expecially problematic if one of the rebalance processes fails to complete as clients will try to access files whose linkto files might not have been created. Each process will now lookup every file in the directory it is processing. Pros: Less likely that files will be inaccessible. Cons: More lookup requests sent to the bricks and a potential performance hit. Note: this does not handle races such as when a layout is updated on disk just as the create fop is sent by the client. upstream : https://review.gluster.org/#/c/glusterfs/+/22746/ >Change-Id: I22b55846effc08d3b827c3af9335229335f67fb8 >fixes: bz#1711764 BUG#1714124 Change-Id: Ica6a9459befe53957f080001a2dda525b3b14d1c Signed-off-by: N Balachandran Reviewed-on: https://code.engineering.redhat.com/gerrit/172080 Tested-by: RHGS Build Bot Reviewed-by: Mohit Agrawal --- xlators/cluster/dht/src/dht-rebalance.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c index efbe8a4..559f046 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -2741,12 +2741,6 @@ gf_defrag_migrate_single_file(void *opaque) goto out; } - if (!gf_defrag_should_i_migrate(this, rebal_entry->local_subvol_index, - entry->d_stat.ia_gfid)) { - gf_msg_debug(this->name, 0, "Don't migrate %s ", entry_loc.path); - goto out; - } - gf_uuid_copy(entry_loc.gfid, entry->d_stat.ia_gfid); gf_uuid_copy(entry_loc.pargfid, loc->gfid); @@ -2772,6 +2766,12 @@ gf_defrag_migrate_single_file(void *opaque) goto out; } + if (!gf_defrag_should_i_migrate(this, rebal_entry->local_subvol_index, + entry->d_stat.ia_gfid)) { + gf_msg_debug(this->name, 0, "Don't migrate %s ", entry_loc.path); + goto out; + } + iatt_ptr = &iatt; hashed_subvol = dht_subvol_get_hashed(this, &entry_loc); -- 1.8.3.1