Fix fd leak on HEAD requests

The previous cleanup patch ended up taking too much code, and caused
an fd leak on any HEAD request because I had intended to clean up a
bad use of DiskFile's _close method in the ObjectServer. Fixed that.

Change-Id: I19da95ebdfa146fe90d5f126f470a2d42c35ee33
This commit is contained in:
Phil Bridges 2016-06-23 18:17:17 -05:00
parent d0c884c143
commit baf6a24490

View File

@ -351,10 +351,19 @@ class ObjectController(server.ObjectController):
except DiskFileDeviceUnavailable:
return HTTPInsufficientStorage(drive=device, request=request)
hpss_headers = None
# Read DiskFile metadata
try:
disk_file.open()
metadata = disk_file.get_metadata()
with disk_file.open():
metadata = disk_file.get_metadata()
want_hpss_metadata = request.headers.get('X-HPSS-Get-Metadata',
False)
if config_true_value(want_hpss_metadata):
try:
hpss_headers = disk_file.read_hpss_system_metadata()
except SwiftOnFileSystemIOError:
return HTTPServiceUnavailable(request=request)
except (DiskFileNotExist, DiskFileQuarantined) as e:
headers = {}
if hasattr(e, 'timestamp'):
@ -382,15 +391,8 @@ class ObjectController(server.ObjectController):
except KeyError:
pass
# (HPSS) Inject HPSS xattr metadata into headers
want_hpss_metadata = request.headers.get('X-HPSS-Get-Metadata',
False)
if config_true_value(want_hpss_metadata):
try:
hpss_headers = disk_file.read_hpss_system_metadata()
response.headers.update(hpss_headers)
except SwiftOnFileSystemIOError:
return HTTPServiceUnavailable(request=request)
if hpss_headers:
response.headers.update(hpss_headers)
if 'X-Object-Sysmeta-Update-Container' in response.headers:
self._sof_container_update(request, response)