From f60a12bda34d206c1dca509a3a44d26a85f87239 Mon Sep 17 00:00:00 2001 From: Pranav Date: Tue, 9 Jun 2020 12:04:58 +0530 Subject: [Libfix] Fix find_specific_hashed method Problem: There are scenarios where multiple files are to be renamed to hash to a particular subvol. The existing method returns the same name as the loop always starts from 1. Fix: Adding an optional argument, existing_names which contains names already hashed to the subvol. An additional check is added to ensure the name found is not already used Change-Id: I453ee290c8462322194cebb42c40e8fbc7c373ed Signed-off-by: Pranav --- glustolibs-gluster/glustolibs/gluster/dht_test_utils.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'glustolibs-gluster/glustolibs') diff --git a/glustolibs-gluster/glustolibs/gluster/dht_test_utils.py b/glustolibs-gluster/glustolibs/gluster/dht_test_utils.py index eaf4fc99c..b01f7c52c 100644 --- a/glustolibs-gluster/glustolibs/gluster/dht_test_utils.py +++ b/glustolibs-gluster/glustolibs/gluster/dht_test_utils.py @@ -342,13 +342,14 @@ def find_new_hashed(subvols, parent_path, oldname): return None -def find_specific_hashed(subvols, parent_path, subvol): +def find_specific_hashed(subvols, parent_path, subvol, existing_names=None): """ Finds filename that hashes to a specific subvol. Args: subvols(list): list of subvols parent_path(str): parent path (relative to mount) of "oldname" subvol(str): The subvol to which the new name has to be hashed + existing_names(int|list): The name(s) already hashed to subvol Returns: (Class Object): For success returns an object of type NewHashed @@ -357,6 +358,8 @@ def find_specific_hashed(subvols, parent_path, subvol): Note: The new hash will be searched under the same parent """ # pylint: disable=protected-access + if not isinstance(existing_names, list): + existing_names = [existing_names] brickobject = create_brickobjectlist(subvols, parent_path) if brickobject is None: g.log.error("could not form brickobject list") @@ -366,7 +369,8 @@ def find_specific_hashed(subvols, parent_path, subvol): newhash = calculate_hash(brickobject[0]._host, str(item)) for brickdir in brickobject: count += 1 - if subvol._fqpath == brickdir._fqpath: + if (subvol._fqpath == brickdir._fqpath and + item not in existing_names): ret = brickdir.hashrange_contains_hash(newhash) if ret: g.log.debug("oldhashed %s new %s count %s", -- cgit