Simplify callers of diskfile.[read|write]_metadata()
As it happens, diskfile.read_metadata() and diskfile.write_metadata() can take either an open file or a filename as their first arguments (since xattr.[get|set]xattr() can), so we can clean up a couple places where we were opening a file just to call read_metadata() or write_metadata() on it. This results in 2 fewer system calls. Example strace output: /* read_metadata(filename) */ getxattr("/mnt/sdb1/1/node/sdb1/afile", "user.some.key", 0x0, 0) = 10 getxattr("/mnt/sdb1/1/node/sdb1/afile", "user.some.key", "some-value", 10) = 10 /* fp = open(filename); read_metadata(fp) */ open("/mnt/sdb1/1/node/sdb1/afile", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0664, st_size=0, ...}) = 0 fgetxattr(4, "user.some.key", 0x0, 0) = 10 fgetxattr(4, "user.some.key", "some-value", 10) = 10 Change-Id: I321d8663b9e9e47b8f3ee6c21a1b65b408bb80e6
This commit is contained in:
parent
7ccde73974
commit
0a26bb20b1
@ -74,7 +74,7 @@ def read_metadata(fd):
|
|||||||
"""
|
"""
|
||||||
Helper function to read the pickled metadata from an object file.
|
Helper function to read the pickled metadata from an object file.
|
||||||
|
|
||||||
:param fd: file descriptor to load the metadata from
|
:param fd: file descriptor or filename to load the metadata from
|
||||||
|
|
||||||
:returns: dictionary of metadata
|
:returns: dictionary of metadata
|
||||||
"""
|
"""
|
||||||
@ -93,7 +93,7 @@ def write_metadata(fd, metadata):
|
|||||||
"""
|
"""
|
||||||
Helper function to write pickled metadata for an object file.
|
Helper function to write pickled metadata for an object file.
|
||||||
|
|
||||||
:param fd: file descriptor to write the metadata
|
:param fd: file descriptor or filename to write the metadata
|
||||||
:param metadata: metadata to write
|
:param metadata: metadata to write
|
||||||
"""
|
"""
|
||||||
metastr = pickle.dumps(metadata, PICKLE_PROTOCOL)
|
metastr = pickle.dumps(metadata, PICKLE_PROTOCOL)
|
||||||
@ -849,8 +849,7 @@ class DiskFile(object):
|
|||||||
if not ts_file:
|
if not ts_file:
|
||||||
exc = DiskFileNotExist()
|
exc = DiskFileNotExist()
|
||||||
else:
|
else:
|
||||||
with open(ts_file) as fp:
|
metadata = read_metadata(ts_file)
|
||||||
metadata = read_metadata(fp)
|
|
||||||
# All well and good that we have found a tombstone file, but
|
# All well and good that we have found a tombstone file, but
|
||||||
# we don't have a data file so we are just going to raise an
|
# we don't have a data file so we are just going to raise an
|
||||||
# exception that we could not find the object, providing the
|
# exception that we could not find the object, providing the
|
||||||
@ -941,8 +940,7 @@ class DiskFile(object):
|
|||||||
fp = open(data_file, 'rb')
|
fp = open(data_file, 'rb')
|
||||||
datafile_metadata = read_metadata(fp)
|
datafile_metadata = read_metadata(fp)
|
||||||
if meta_file:
|
if meta_file:
|
||||||
with open(meta_file) as mfp:
|
self._metadata = read_metadata(meta_file)
|
||||||
self._metadata = read_metadata(mfp)
|
|
||||||
sys_metadata = dict(
|
sys_metadata = dict(
|
||||||
[(key, val) for key, val in datafile_metadata.iteritems()
|
[(key, val) for key, val in datafile_metadata.iteritems()
|
||||||
if key.lower() in DATAFILE_SYSTEM_META])
|
if key.lower() in DATAFILE_SYSTEM_META])
|
||||||
|
@ -67,11 +67,9 @@ class TestObjectFailures(TestCase):
|
|||||||
obj = 'object-%s' % uuid4()
|
obj = 'object-%s' % uuid4()
|
||||||
onode, opart, data_file = self._setup_data_file(container, obj,
|
onode, opart, data_file = self._setup_data_file(container, obj,
|
||||||
'VERIFY')
|
'VERIFY')
|
||||||
with open(data_file) as fpointer:
|
metadata = read_metadata(data_file)
|
||||||
metadata = read_metadata(fpointer)
|
|
||||||
metadata['ETag'] = 'badetag'
|
metadata['ETag'] = 'badetag'
|
||||||
with open(data_file) as fpointer:
|
write_metadata(data_file, metadata)
|
||||||
write_metadata(fpointer, metadata)
|
|
||||||
|
|
||||||
odata = direct_client.direct_get_object(
|
odata = direct_client.direct_get_object(
|
||||||
onode, opart, self.account, container, obj)[-1]
|
onode, opart, self.account, container, obj)[-1]
|
||||||
@ -88,11 +86,10 @@ class TestObjectFailures(TestCase):
|
|||||||
obj = 'object-range-%s' % uuid4()
|
obj = 'object-range-%s' % uuid4()
|
||||||
onode, opart, data_file = self._setup_data_file(container, obj,
|
onode, opart, data_file = self._setup_data_file(container, obj,
|
||||||
'RANGE')
|
'RANGE')
|
||||||
with open(data_file) as fpointer:
|
|
||||||
metadata = read_metadata(fpointer)
|
metadata = read_metadata(data_file)
|
||||||
metadata['ETag'] = 'badetag'
|
metadata['ETag'] = 'badetag'
|
||||||
with open(data_file) as fpointer:
|
write_metadata(data_file, metadata)
|
||||||
write_metadata(fpointer, metadata)
|
|
||||||
for header, result in [({'Range': 'bytes=0-2'}, 'RAN'),
|
for header, result in [({'Range': 'bytes=0-2'}, 'RAN'),
|
||||||
({'Range': 'bytes=1-11'}, 'ANGE'),
|
({'Range': 'bytes=1-11'}, 'ANGE'),
|
||||||
({'Range': 'bytes=0-11'}, 'RANGE')]:
|
({'Range': 'bytes=0-11'}, 'RANGE')]:
|
||||||
@ -111,8 +108,7 @@ class TestObjectFailures(TestCase):
|
|||||||
container = 'container-zbyte-%s' % uuid4()
|
container = 'container-zbyte-%s' % uuid4()
|
||||||
obj = 'object-zbyte-%s' % uuid4()
|
obj = 'object-zbyte-%s' % uuid4()
|
||||||
onode, opart, data_file = self._setup_data_file(container, obj, 'DATA')
|
onode, opart, data_file = self._setup_data_file(container, obj, 'DATA')
|
||||||
with open(data_file) as fpointer:
|
metadata = read_metadata(data_file)
|
||||||
metadata = read_metadata(fpointer)
|
|
||||||
unlink(data_file)
|
unlink(data_file)
|
||||||
|
|
||||||
with open(data_file, 'w') as fpointer:
|
with open(data_file, 'w') as fpointer:
|
||||||
@ -129,8 +125,7 @@ class TestObjectFailures(TestCase):
|
|||||||
container = 'container-zbyte-%s' % uuid4()
|
container = 'container-zbyte-%s' % uuid4()
|
||||||
obj = 'object-zbyte-%s' % uuid4()
|
obj = 'object-zbyte-%s' % uuid4()
|
||||||
onode, opart, data_file = self._setup_data_file(container, obj, 'DATA')
|
onode, opart, data_file = self._setup_data_file(container, obj, 'DATA')
|
||||||
with open(data_file) as fpointer:
|
metadata = read_metadata(data_file)
|
||||||
metadata = read_metadata(fpointer)
|
|
||||||
unlink(data_file)
|
unlink(data_file)
|
||||||
|
|
||||||
with open(data_file, 'w') as fpointer:
|
with open(data_file, 'w') as fpointer:
|
||||||
@ -147,8 +142,7 @@ class TestObjectFailures(TestCase):
|
|||||||
container = 'container-zbyte-%s' % uuid4()
|
container = 'container-zbyte-%s' % uuid4()
|
||||||
obj = 'object-zbyte-%s' % uuid4()
|
obj = 'object-zbyte-%s' % uuid4()
|
||||||
onode, opart, data_file = self._setup_data_file(container, obj, 'DATA')
|
onode, opart, data_file = self._setup_data_file(container, obj, 'DATA')
|
||||||
with open(data_file) as fpointer:
|
metadata = read_metadata(data_file)
|
||||||
metadata = read_metadata(fpointer)
|
|
||||||
unlink(data_file)
|
unlink(data_file)
|
||||||
|
|
||||||
with open(data_file, 'w') as fpointer:
|
with open(data_file, 'w') as fpointer:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user