Red Hat Bugzilla – Bug 894674
Container listing of objects can starve out other requests being handled by the same worker
Last modified: 2016-02-17 19:12:48 EST
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.
CHANGE: http://review.gluster.org/4380 (object-storage: yield during directory tree walks) merged in master by Anand Avati (email@example.com)