diff options
author | Prashanth Pai <ppai@redhat.com> | 2016-03-02 12:51:22 +0530 |
---|---|---|
committer | Thiago da Silva <thiago@redhat.com> | 2016-04-05 08:52:57 -0700 |
commit | 43da7927560811c55838a6a1c2d0ee1a52aada40 (patch) | |
tree | f89d34006cb063413c5f2f2acd8c5288054d624b /gluster/swift/common | |
parent | 789f1a150c87f05905b02dfdd8ad77ac6c1ba46f (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')
-rw-r--r-- | gluster/swift/common/DiskDir.py | 14 |
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) |