From a324c6e5cdfad77e8f91ec9869deb6b78425807e Mon Sep 17 00:00:00 2001 From: Prashanth Pai Date: Thu, 19 May 2016 15:33:07 +0530 Subject: Fix validation of marker dir objects For marker directory objects, validate_object() always returned False. This was because st_size from stat was being compared to Content-Length stored in metadata. Unlike files, for directories st_size is always 4096. Hence the comparison would always be '4096 == 0' which would fail. This patch makes the following changes: * Do size comparison of st_size and Content-Length only for files. * Get rid of _is_dir everywhere. This will simplify things. Change-Id: Ib75e06c4e3bce36bab11ce7d029ff327f33c3146 Signed-off-by: Prashanth Pai Reviewed-on: http://review.gluster.org/14423 Reviewed-by: Thiago da Silva Tested-by: Thiago da Silva --- gluster/swift/common/utils.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'gluster/swift/common/utils.py') diff --git a/gluster/swift/common/utils.py b/gluster/swift/common/utils.py index 26e8c1b..70bf551 100644 --- a/gluster/swift/common/utils.py +++ b/gluster/swift/common/utils.py @@ -275,7 +275,7 @@ def validate_account(metadata): return False -def validate_object(metadata, stat=None): +def validate_object(metadata, statinfo=None): if not metadata: return False @@ -287,11 +287,14 @@ def validate_object(metadata, stat=None): X_OBJECT_TYPE not in metadata.keys(): return False - if stat and (int(metadata[X_CONTENT_LENGTH]) != stat.st_size): + if statinfo and stat.S_ISREG(statinfo.st_mode): + # File length has changed. + if int(metadata[X_CONTENT_LENGTH]) != statinfo.st_size: + return False + # TODO: Handle case where file content has changed but the length # remains the same. - return False if metadata[X_TYPE] == OBJECT: return True -- cgit