Fixed HPSS metadata headers not appearing in a GET or HEAD request
This commit is contained in:
parent
56238e890c
commit
c7a25662de
@ -316,7 +316,7 @@ class DiskFileWriter(object):
|
||||
hpssfs.ioctl(self._fd, hpssfs.HPSSFS_PURGE_LOCK, int(purgelock))
|
||||
except IOError as err:
|
||||
raise SwiftOnFileSystemIOError(err.errno,
|
||||
'%s, hpssfs.ioct("%s", ...)' % (
|
||||
'%s, hpssfs.ioctl("%s", ...)' % (
|
||||
err.strerror, self._fd))
|
||||
|
||||
# From the Department of the Redundancy Department, make sure
|
||||
@ -839,7 +839,34 @@ class DiskFile(object):
|
||||
bytes_on_disk = top_level[2].rstrip(' ')
|
||||
except ValueError:
|
||||
raise SwiftOnFileSystemIOError("Couldn't get system.hpss.level!")
|
||||
return bytes_on_disk != self._stat.st_size
|
||||
return int(bytes_on_disk) != self._stat.st_size
|
||||
|
||||
def get_hpss_headers(self):
|
||||
header_to_xattr = {'X-HPSS-Account': 'account',
|
||||
'X-HPSS-Bitfile-ID': 'bitfile',
|
||||
'X-HPSS-Comment': 'comment',
|
||||
'X-HPSS-Class-Of-Service-ID': 'cos',
|
||||
'X-HPSS-Data-Levels': 'level',
|
||||
'X-HPSS-Family-ID': 'family',
|
||||
'X-HPSS-Fileset-ID': 'fileset',
|
||||
'X-HPSS-Optimum-Size': 'optimum',
|
||||
'X-HPSS-Purgelock-Status': 'purgelock',
|
||||
'X-HPSS-Reads': 'reads',
|
||||
'X-HPSS-Realm-ID': 'realm',
|
||||
'X-HPSS-Subsys-ID': 'subsys',
|
||||
'X-HPSS-Writes': 'writes', }
|
||||
result = {}
|
||||
for header in header_to_xattr:
|
||||
xattr_to_get = 'system.hpss.%s' % header_to_xattr[header]
|
||||
try:
|
||||
result[header] = xattr.getxattr(self._data_file,
|
||||
xattr_to_get)
|
||||
except IOError as err:
|
||||
error_message = "Couldn't get HPSS xattr %s from file %s" \
|
||||
% (xattr_to_get, self._data_file)
|
||||
logging.error(error_message)
|
||||
raise SwiftOnFileSystemIOError(err.errno, error_message)
|
||||
return result
|
||||
|
||||
def __enter__(self):
|
||||
"""
|
||||
|
@ -17,7 +17,6 @@
|
||||
|
||||
import math
|
||||
import logging
|
||||
import time
|
||||
import xattr
|
||||
import os
|
||||
import hpssfs
|
||||
@ -385,7 +384,8 @@ class ObjectController(server.ObjectController):
|
||||
pass
|
||||
|
||||
try:
|
||||
self._get_hpss_xattr(request, response, disk_file)
|
||||
hpss_headers = disk_file.get_hpss_headers()
|
||||
response.headers.update(hpss_headers)
|
||||
except SwiftOnFileSystemIOError:
|
||||
return HTTPServiceUnavailable(request=request)
|
||||
|
||||
@ -398,6 +398,7 @@ class ObjectController(server.ObjectController):
|
||||
@public
|
||||
@timing_stats()
|
||||
def GET(self, request):
|
||||
logging.error(request)
|
||||
"""Handle HTTP GET requests for the Swift on File object server"""
|
||||
device, partition, account, container, obj, policy = \
|
||||
get_name_and_placement(request, 5, 5, True)
|
||||
@ -450,7 +451,8 @@ class ObjectController(server.ObjectController):
|
||||
response.headers['X-Backend-Timestamp'] = file_x_ts.internal
|
||||
# (HPSS) Inject HPSS xattr metadata into headers
|
||||
try:
|
||||
self._get_hpss_xattr(request, response, disk_file)
|
||||
hpss_headers = disk_file.get_hpss_headers()
|
||||
response.headers.update(hpss_headers)
|
||||
except SwiftOnFileSystemIOError:
|
||||
return HTTPServiceUnavailable(request=request)
|
||||
return request.get_response(response)
|
||||
@ -461,36 +463,6 @@ class ObjectController(server.ObjectController):
|
||||
return HTTPNotFound(request=request, headers=headers,
|
||||
conditional_response=True)
|
||||
|
||||
# TODO: refactor this to live in DiskFile!
|
||||
# Along with all the other HPSS stuff
|
||||
def _get_hpss_xattr(self, request, response, diskfile):
|
||||
attrlist = {'X-HPSS-Account': 'account',
|
||||
'X-HPSS-BitfileID': 'bitfile',
|
||||
'X-HPSS-Comment': 'comment',
|
||||
'X-HPSS-ClassOfServiceID': 'cos',
|
||||
'X-HPSS-FamilyID': 'family',
|
||||
'X-HPSS-FilesetID': 'fileset',
|
||||
'X-HPSS-Bytes': 'level',
|
||||
'X-HPSS-Reads': 'reads',
|
||||
'X-HPSS-RealmID': 'realm',
|
||||
'X-HPSS-SubsysID': 'subsys',
|
||||
'X-HPSS-Writes': 'writes',
|
||||
'X-HPSS-OptimumSize': 'optimum',
|
||||
'X-HPSS-Hash': 'hash',
|
||||
'X-HPSS-PurgelockStatus': 'purgelock'}
|
||||
for key in request.headers:
|
||||
val = attrlist.get(key, None)
|
||||
if val:
|
||||
attr = 'system.hpss.%s' % val
|
||||
try:
|
||||
response.headers[key] = \
|
||||
xattr.getxattr(diskfile._data_file, attr)
|
||||
except IOError as err:
|
||||
raise SwiftOnFileSystemIOError(
|
||||
err.errno,
|
||||
'%s, xattr.getxattr("%s", ...)' % (err.strerror, attr)
|
||||
)
|
||||
|
||||
@public
|
||||
@timing_stats()
|
||||
def POST(self, request):
|
||||
|
Loading…
x
Reference in New Issue
Block a user