summaryrefslogtreecommitdiffstats
path: root/gluster/swift/common/DiskDir.py
diff options
context:
space:
mode:
authorPrashanth Pai <ppai@redhat.com>2016-03-02 12:51:22 +0530
committerThiago da Silva <thiago@redhat.com>2016-04-05 08:52:57 -0700
commit43da7927560811c55838a6a1c2d0ee1a52aada40 (patch)
treef89d34006cb063413c5f2f2acd8c5288054d624b /gluster/swift/common/DiskDir.py
parent789f1a150c87f05905b02dfdd8ad77ac6c1ba46f (diff)
Don't fetch metadata for plain object listing
Fetch metadata (xattr) for objects in a container ONLY when the client asks for it (using content-type indicating JSON or XML response). This avoids a lot of unnecessarry stat() and getxattr() calls whose results would anyways be unused. The performance gain is obvious in this case. Change-Id: I4c8b0516dedd04553a5ed450bc855cafbfabada9 Signed-off-by: Prashanth Pai <ppai@redhat.com> Reviewed-on: http://review.gluster.org/13573 Reviewed-by: Thiago da Silva <thiago@redhat.com> Tested-by: Thiago da Silva <thiago@redhat.com>
Diffstat (limited to 'gluster/swift/common/DiskDir.py')
-rw-r--r--gluster/swift/common/DiskDir.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/gluster/swift/common/DiskDir.py b/gluster/swift/common/DiskDir.py
index 31b923a..36504a6 100644
--- a/gluster/swift/common/DiskDir.py
+++ b/gluster/swift/common/DiskDir.py
@@ -368,7 +368,8 @@ class DiskDir(DiskCommon):
def list_objects_iter(self, limit, marker, end_marker,
prefix, delimiter, path=None,
- storage_policy_index=0):
+ storage_policy_index=0,
+ out_content_type=None):
"""
Returns tuple of name, created_at, size, content_type, etag.
"""
@@ -390,6 +391,7 @@ class DiskDir(DiskCommon):
if objects:
objects.sort()
else:
+ # No objects in container , return empty list
return container_list
if end_marker:
@@ -417,6 +419,16 @@ class DiskDir(DiskCommon):
objects = filter_delimiter(objects, delimiter, prefix, marker,
path)
+ if out_content_type == 'text/plain':
+ # The client is only asking for a plain list of objects and NOT
+ # asking for any extended information about objects such as
+ # bytes used or etag.
+ for obj in objects:
+ container_list.append((obj, 0, 0, 0, 0))
+ if len(container_list) >= limit:
+ break
+ return container_list
+
count = 0
for obj in objects:
obj_path = os.path.join(self.datadir, obj)