Bug 894674

Summary: Container listing of objects can starve out other requests being handled by the same worker
Product: [Community] Gluster-Swift Reporter: Peter Portante <pportant>
Component: utilsAssignee: Nobody <nobody>
Status: MODIFIED --- QA Contact:
Severity: low Docs Contact:
Priority: low    
Version: 0.1CC: bugs
Target Milestone: ---   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 903396, 978061    

Description Peter Portante 2013-01-13 03:48:01 UTC
Container operations, HEAD and GET, from both the REST API and the internal use, require that the total size of the container be calculated. To that end, the Swift layer of Gluster UFO will stat() every file to make that calculation. When containers have large numbers of files, this can take quite some time.

Because the operation is all file system accesses, the co-routine (greenlet) handling this operation does not currently yield, causing other co-routines handling requests to starve.

The proxy-server checks for the existence of the account and container on GET, POST, PUT and DELETE requests for objects, caching the result for 60 seconds by default. This means that once a minute this starvation will occur in practice.

Comment 1 Vijay Bellur 2013-02-04 16:44:34 UTC
CHANGE: http://review.gluster.org/4380 (object-storage: yield during directory tree walks) merged in master by Anand Avati (avati)