object-storage: a set of cleanups to DiskFile

Here are a set of cleanups for things noticed while working on the
unit test coverage:

  * Remove unused constants, adding a constant for default disk chunk
    size

  * Document missing logger parameter from constructor

  * Add iter_hook paramater to constructor in anticipation of 1.7.4
    support

  * Add back meta_file field even though it is not used in our version
    of the constructor for paranoid compatibility

  * Remove is_valid field as it is not referenced anywhere, and it is
    not a field of the super class

  * Rename fields only used internally by DiskFile with leading
    underscores

  * Convert to using os.path.join() instead of hard coded '/'
    references

  * Use data_file field where possible

  * Assert that put_metadata() will only work when the file exists

  * Remove update_object() method since it is identical to
    put_metadata() and a direct write will suffice

  * Create the directory object only if it does not exist when a
    marker directory is requested

Change-Id: If207fed4c0f423e6bd3232e4507f87de877057c4
BUG: 876660
Signed-off-by: Peter Portante <peter.portante@redhat.com>
Reviewed-on: http://review.gluster.org/4287
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Mohammed Junaid <junaid@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
This commit is contained in:
Peter Portante 2012-12-09 23:56:28 -05:00 committed by Vijay Bellur
parent 47e21afaaf
commit 2fd8af2b75
2 changed files with 137 additions and 131 deletions

View File

@ -32,9 +32,7 @@ import logging
from swift.obj.server import DiskFile
DATADIR = 'objects'
ASYNCDIR = 'async_pending'
KEEP_CACHE_SIZE = (5 * 1024 * 1024)
DEFAULT_DISK_CHUNK_SIZE = 65536
# keep these lower-case
DISALLOWED_HEADERS = set('content-length content-type deleted etag'.split())
@ -53,6 +51,7 @@ class Gluster_DiskFile(DiskFile):
:param account: account name for the object
:param container: container name for the object
:param obj: object name for the object
:param logger: logger object for writing out log file messages
:param keep_data_fp: if True, don't close the fp, otherwise close it
:param disk_chunk_Size: size of chunks on file reads
:param uid: user ID disk object should assume (file or directory)
@ -60,59 +59,64 @@ class Gluster_DiskFile(DiskFile):
"""
def __init__(self, path, device, partition, account, container, obj,
logger, keep_data_fp=False, disk_chunk_size=65536,
uid=DEFAULT_UID, gid=DEFAULT_GID):
logger, keep_data_fp=False,
disk_chunk_size=DEFAULT_DISK_CHUNK_SIZE,
uid=DEFAULT_UID, gid=DEFAULT_GID, iter_hook=None):
self.disk_chunk_size = disk_chunk_size
#Don't support obj_name ending/begining with '/', like /a, a/, /a/b/ etc
obj = obj.strip('/')
if '/' in obj:
self.obj_path, self.obj = obj.rsplit('/', 1)
self.iter_hook = iter_hook
# Don't support obj_name ending/begining with '/', like /a, a/, /a/b/,
# etc.
obj = obj.strip(os.path.sep)
if os.path.sep in obj:
self._obj_path, self._obj = os.path.split(obj)
else:
self.obj_path = ''
self.obj = obj
self._obj_path = ''
self._obj = obj
if self.obj_path:
self.name = '/'.join((container, self.obj_path))
if self._obj_path:
self.name = os.path.join(container, self._obj_path)
else:
self.name = container
#Absolute path for obj directory.
# Absolute path for object directory.
self.datadir = os.path.join(path, device, self.name)
self.device_path = os.path.join(path, device)
self.container_path = os.path.join(path, device, container)
self._container_path = os.path.join(path, device, container)
self._is_dir = False
self.tmpdir = os.path.join(path, device, 'tmp')
self.logger = logger
self.metadata = {}
self.data_file = None
self.meta_file = None
self.fp = None
self.iter_etag = None
self.started_at_0 = False
self.read_to_eof = False
self.quarantined_dir = None
self.keep_cache = False
self.is_dir = False
self.is_valid = True
self.uid = int(uid)
self.gid = int(gid)
if not os.path.exists(self.datadir + '/' + self.obj):
# Don't store a value for data_file until we know it exists.
self.data_file = None
data_file = os.path.join(self.datadir, self._obj)
if not os.path.exists(data_file):
return
self.data_file = os.path.join(self.datadir, self.obj)
self.metadata = read_metadata(self.datadir + '/' + self.obj)
self.data_file = os.path.join(data_file)
self.metadata = read_metadata(data_file)
if not self.metadata:
create_object_metadata(self.datadir + '/' + self.obj)
self.metadata = read_metadata(self.datadir + '/' + self.obj)
create_object_metadata(data_file)
self.metadata = read_metadata(data_file)
if not validate_object(self.metadata):
create_object_metadata(self.datadir + '/' + self.obj)
self.metadata = read_metadata(self.datadir + '/' +
self.obj)
create_object_metadata(data_file)
self.metadata = read_metadata(data_file)
self.filter_metadata()
if os.path.isdir(self.datadir + '/' + self.obj):
self.is_dir = True
if os.path.isdir(data_file):
self._is_dir = True
else:
self.fp = do_open(self.data_file, 'rb')
self.fp = do_open(data_file, 'rb')
if not keep_data_fp:
self.close(verify_file=False)
@ -124,7 +128,7 @@ class Gluster_DiskFile(DiskFile):
file to see if it needs quarantining.
"""
#Marker directory
if self.is_dir:
if self._is_dir:
return
if self.fp:
do_close(self.fp)
@ -150,8 +154,8 @@ class Gluster_DiskFile(DiskFile):
create_object_metadata(dir_path)
def put_metadata(self, metadata):
obj_path = self.datadir + '/' + self.obj
write_metadata(obj_path, metadata)
assert self.data_file is not None, "put_metadata: no file to put metadata into"
write_metadata(self.data_file, metadata)
self.metadata = metadata
def put(self, fd, tmppath, metadata, extension=''):
@ -175,10 +179,11 @@ class Gluster_DiskFile(DiskFile):
content_type = metadata['Content-Type']
if not content_type:
# FIXME: How can this be some object that evaluates to False?
# FIXME: How can this be that our caller supplied us with metadata
# that has a content type that evaluates to False?
#
# FIXME: If the file exists, we would already know it is a
# directory.
# directory. So why are we assuming it is a file object?
metadata['Content-Type'] = FILE_TYPE
x_object_type = FILE
else:
@ -199,43 +204,37 @@ class Gluster_DiskFile(DiskFile):
extension = ''
if metadata[X_OBJECT_TYPE] == MARKER_DIR:
# FIXME: If we know it already exists, why call
# create_dir_object()?
self.create_dir_object(os.path.join(self.datadir, self.obj))
if not self.data_file:
self.data_file = os.path.join(self.datadir, self._obj)
self.create_dir_object(self.data_file)
self.put_metadata(metadata)
self.data_file = self.datadir + '/' + self.obj
return
# Check if directory already exists.
if self.is_dir:
if self._is_dir:
# FIXME: How can we have a directory and it not be marked as a
# MARKER_DIR (see above)?
raise AlreadyExistsAsDir('File object already exists ' \
'as a directory: %s/%s' % (self.datadir , self.obj))
msg = 'File object exists as a directory: %s' % self.data_file
raise AlreadyExistsAsDir(msg)
timestamp = normalize_timestamp(metadata[X_TIMESTAMP])
write_metadata(tmppath, metadata)
if X_CONTENT_LENGTH in metadata:
self.drop_cache(fd, 0, int(metadata[X_CONTENT_LENGTH]))
tpool.execute(os.fsync, fd)
if self.obj_path:
dir_objs = self.obj_path.split('/')
if self._obj_path:
dir_objs = self._obj_path.split('/')
assert len(dir_objs) >= 1
tmp_path = ''
tmp_path = self._container_path
for dir_name in dir_objs:
if tmp_path:
tmp_path = tmp_path + '/' + dir_name
else:
tmp_path = dir_name
self.create_dir_object(
os.path.join(self.container_path, tmp_path))
tmp_path = os.path.join(tmp_path, dir_name)
self.create_dir_object(tmp_path)
renamer(tmppath, os.path.join(self.datadir,
self.obj + extension))
do_chown(os.path.join(self.datadir, self.obj + extension), \
self.uid, self.gid)
newpath = os.path.join(self.datadir, self._obj)
renamer(tmppath, newpath)
do_chown(newpath, self.uid, self.gid)
self.metadata = metadata
self.data_file = self.datadir + '/' + self.obj + extension
self.data_file = newpath
return
def unlinkold(self, timestamp):
@ -248,16 +247,16 @@ class Gluster_DiskFile(DiskFile):
if not self.metadata or self.metadata['X-Timestamp'] >= timestamp:
return
if self.is_dir:
if self._is_dir:
# Marker directory object
if not rmdirs(os.path.join(self.datadir, self.obj)):
logging.error('Unable to delete dir %s' % os.path.join(self.datadir, self.obj))
if not rmdirs(self.data_file):
logging.error('Unable to delete dir object: %s' % self.data_file)
return
else:
# File object
for fname in do_listdir(self.datadir):
if fname == self.obj:
do_unlink(os.path.join(self.datadir, fname))
if os.path.join(self.datadir, fname) == self.data_file:
do_unlink(self.data_file)
self.metadata = {}
self.data_file = None
@ -273,7 +272,7 @@ class Gluster_DiskFile(DiskFile):
:raises DiskFileNotExist: on file not existing (including deleted)
"""
#Marker directory.
if self.is_dir:
if self._is_dir:
return 0
try:
file_size = 0
@ -283,7 +282,7 @@ class Gluster_DiskFile(DiskFile):
metadata_size = int(self.metadata[X_CONTENT_LENGTH])
if file_size != metadata_size:
self.metadata[X_CONTENT_LENGTH] = file_size
self.update_object(self.metadata)
write_metadata(self.data_file, self.metadata)
return file_size
except OSError as err:
@ -291,11 +290,6 @@ class Gluster_DiskFile(DiskFile):
raise
raise DiskFileNotExist('Data File does not exist.')
def update_object(self, metadata):
obj_path = self.datadir + '/' + self.obj
write_metadata(obj_path, metadata)
self.metadata = metadata
def filter_metadata(self):
if X_TYPE in self.metadata:
self.metadata.pop(X_TYPE)

View File

@ -102,18 +102,20 @@ class TestDiskFile(unittest.TestCase):
assert not os.path.exists("/tmp/foo")
gdf = Gluster_DiskFile("/tmp/foo", "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf.obj_path == ""
assert gdf._obj == "z"
assert gdf._obj_path == ""
assert gdf.name == "bar"
assert gdf.datadir == "/tmp/foo/vol0/bar"
assert gdf.device_path == "/tmp/foo/vol0"
assert gdf.container_path == "/tmp/foo/vol0/bar"
assert gdf._container_path == "/tmp/foo/vol0/bar"
assert gdf.tmpdir == "/tmp/foo/vol0/tmp"
assert gdf.disk_chunk_size == 65536
assert gdf.iter_hook == None
assert gdf.logger == self.lg
assert gdf.uid == DEFAULT_UID
assert gdf.gid == DEFAULT_GID
assert gdf.metadata == {}
assert gdf.meta_file == None
assert gdf.data_file == None
assert gdf.fp == None
assert gdf.iter_etag == None
@ -121,15 +123,14 @@ class TestDiskFile(unittest.TestCase):
assert not gdf.read_to_eof
assert gdf.quarantined_dir == None
assert not gdf.keep_cache
assert not gdf.is_dir
assert gdf.is_valid
assert not gdf._is_dir
def test_constructor_leadtrail_slash(self):
assert not os.path.exists("/tmp/foo")
gdf = Gluster_DiskFile("/tmp/foo", "vol0", "p57", "ufo47", "bar",
"/b/a/z/", self.lg)
assert gdf.obj == "z"
assert gdf.obj_path == "b/a"
assert gdf._obj == "z"
assert gdf._obj_path == "b/a"
assert gdf.name == "bar/b/a"
assert gdf.datadir == "/tmp/foo/vol0/bar/b/a"
assert gdf.device_path == "/tmp/foo/vol0"
@ -155,9 +156,9 @@ class TestDiskFile(unittest.TestCase):
'Content-Type': 'application/octet-stream'}
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
assert gdf.fp is None
assert gdf.metadata == exp_md
finally:
@ -184,9 +185,9 @@ class TestDiskFile(unittest.TestCase):
del exp_md['X-Object-Type']
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
assert gdf.fp is None
assert gdf.metadata == exp_md
finally:
@ -208,9 +209,9 @@ class TestDiskFile(unittest.TestCase):
fd.write("1234")
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
assert gdf.fp is None
assert gdf.metadata != inv_md
finally:
@ -235,9 +236,9 @@ class TestDiskFile(unittest.TestCase):
del exp_md['X-Object-Type']
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"d", self.lg, keep_data_fp=True)
assert gdf.obj == "d"
assert gdf._obj == "d"
assert gdf.data_file == the_dir
assert gdf.is_dir
assert gdf._is_dir
assert gdf.fp is None
assert gdf.metadata == exp_md
finally:
@ -253,9 +254,9 @@ class TestDiskFile(unittest.TestCase):
fd.write("1234")
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg, keep_data_fp=True)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
assert gdf.fp is not None
finally:
shutil.rmtree(td)
@ -266,6 +267,12 @@ class TestDiskFile(unittest.TestCase):
"z", self.lg, disk_chunk_size=8192)
assert gdf.disk_chunk_size == 8192
def test_constructor_iter_hook(self):
assert not os.path.exists("/tmp/foo")
gdf = Gluster_DiskFile("/tmp/foo", "vol0", "p57", "ufo47", "bar",
"z", self.lg, iter_hook='hook')
assert gdf.iter_hook == 'hook'
def test_close(self):
assert not os.path.exists("/tmp/foo")
gdf = Gluster_DiskFile("/tmp/foo", "vol0", "p57", "ufo47", "bar",
@ -273,13 +280,13 @@ class TestDiskFile(unittest.TestCase):
# Should be a no-op, as by default is_dir is False, but fp is None
gdf.close()
gdf.is_dir = True
gdf._is_dir = True
gdf.fp = "123"
# Should still be a no-op as is_dir is True (marker directory)
gdf.close()
assert gdf.fp == "123"
gdf.is_dir = False
gdf._is_dir = False
saved_dc = gluster.swift.common.DiskFile.do_close
self.called = False
def our_do_close(fp):
@ -307,7 +314,7 @@ class TestDiskFile(unittest.TestCase):
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"dir/z", self.lg)
# Not created, dir object path is different, just checking
assert gdf.obj == "z"
assert gdf._obj == "z"
gdf.create_dir_object(the_dir)
assert os.path.isdir(the_dir)
assert the_dir in _metadata
@ -325,7 +332,7 @@ class TestDiskFile(unittest.TestCase):
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"dir/z", self.lg)
# Not created, dir object path is different, just checking
assert gdf.obj == "z"
assert gdf._obj == "z"
def _mock_do_chown(p, u, g):
assert u == DEFAULT_UID
assert g == DEFAULT_GID
@ -343,14 +350,15 @@ class TestDiskFile(unittest.TestCase):
def test_put_metadata(self):
td = tempfile.mkdtemp()
the_path = os.path.join(td, "vol0", "bar")
the_dir = os.path.join(the_path, "dir")
the_dir = os.path.join(the_path, "z")
try:
os.makedirs(the_dir)
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"dir/z", self.lg)
"z", self.lg)
md = { 'a': 'b' }
gdf.put_metadata(md)
assert gdf.metadata == md
assert _metadata[os.path.join(the_dir, "z")] == md
assert _metadata[the_dir] == md
finally:
shutil.rmtree(td)
@ -434,6 +442,24 @@ class TestDiskFile(unittest.TestCase):
finally:
shutil.rmtree(td)
def test_put_w_marker_dir_create(self):
td = tempfile.mkdtemp()
the_path = os.path.join(td, "vol0", "bar")
the_dir = os.path.join(the_path, "dir")
try:
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"dir", self.lg)
assert gdf.metadata == {}
newmd = {
'Content-Length': 0,
'ETag': 'etag',
'X-Timestamp': 'ts',
'Content-Type': 'application/directory'}
gdf.put(None, None, newmd)
assert gdf.metadata == newmd
assert _metadata[the_dir] == newmd
finally:
shutil.rmtree(td)
def test_put_is_dir(self):
td = tempfile.mkdtemp()
@ -466,8 +492,8 @@ class TestDiskFile(unittest.TestCase):
try:
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf.obj_path == ""
assert gdf._obj == "z"
assert gdf._obj_path == ""
assert gdf.name == "bar"
assert gdf.datadir == os.path.join(td, "vol0", "bar")
assert gdf.data_file is None
@ -500,8 +526,8 @@ class TestDiskFile(unittest.TestCase):
try:
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
the_file, self.lg)
assert gdf.obj == "z"
assert gdf.obj_path == the_obj_path
assert gdf._obj == "z"
assert gdf._obj_path == the_obj_path
assert gdf.name == os.path.join("bar", "b", "a")
assert gdf.datadir == os.path.join(td, "vol0", "bar", "b", "a")
assert gdf.data_file is None
@ -572,14 +598,14 @@ class TestDiskFile(unittest.TestCase):
fd.write("1234")
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
later = float(gdf.metadata['X-Timestamp']) + 1
gdf.unlinkold(normalize_timestamp(later))
assert os.path.isdir(gdf.datadir)
assert not os.path.exists(os.path.join(gdf.datadir, gdf.obj))
assert not os.path.exists(os.path.join(gdf.datadir, gdf._obj))
finally:
shutil.rmtree(td)
@ -593,9 +619,9 @@ class TestDiskFile(unittest.TestCase):
fd.write("1234")
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
# Handle the case the file is not in the directory listing.
os.unlink(the_file)
@ -603,7 +629,7 @@ class TestDiskFile(unittest.TestCase):
later = float(gdf.metadata['X-Timestamp']) + 1
gdf.unlinkold(normalize_timestamp(later))
assert os.path.isdir(gdf.datadir)
assert not os.path.exists(os.path.join(gdf.datadir, gdf.obj))
assert not os.path.exists(os.path.join(gdf.datadir, gdf._obj))
finally:
shutil.rmtree(td)
@ -617,9 +643,9 @@ class TestDiskFile(unittest.TestCase):
fd.write("1234")
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
later = float(gdf.metadata['X-Timestamp']) + 1
@ -637,7 +663,7 @@ class TestDiskFile(unittest.TestCase):
os.chmod(the_path, stats.st_mode)
assert os.path.isdir(gdf.datadir)
assert os.path.exists(os.path.join(gdf.datadir, gdf.obj))
assert os.path.exists(os.path.join(gdf.datadir, gdf._obj))
finally:
shutil.rmtree(td)
@ -650,12 +676,12 @@ class TestDiskFile(unittest.TestCase):
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"d", self.lg, keep_data_fp=True)
assert gdf.data_file == the_dir
assert gdf.is_dir
assert gdf._is_dir
later = float(gdf.metadata['X-Timestamp']) + 1
gdf.unlinkold(normalize_timestamp(later))
assert os.path.isdir(gdf.datadir)
assert not os.path.exists(os.path.join(gdf.datadir, gdf.obj))
assert not os.path.exists(os.path.join(gdf.datadir, gdf._obj))
finally:
shutil.rmtree(td)
@ -668,7 +694,7 @@ class TestDiskFile(unittest.TestCase):
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"d", self.lg, keep_data_fp=True)
assert gdf.data_file == the_dir
assert gdf.is_dir
assert gdf._is_dir
stats = os.stat(gdf.datadir)
os.chmod(gdf.datadir, 0)
@ -692,9 +718,9 @@ class TestDiskFile(unittest.TestCase):
fd.write("1234")
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
assert 4 == gdf.get_data_file_size()
finally:
shutil.rmtree(td)
@ -709,9 +735,9 @@ class TestDiskFile(unittest.TestCase):
fd.write("1234")
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
assert 4 == gdf.metadata['Content-Length']
gdf.metadata['Content-Length'] = 3
assert 4 == gdf.get_data_file_size()
@ -740,9 +766,9 @@ class TestDiskFile(unittest.TestCase):
fd.write("1234")
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
gdf.data_file = gdf.data_file + ".dne"
try:
s = gdf.get_data_file_size()
@ -763,9 +789,9 @@ class TestDiskFile(unittest.TestCase):
fd.write("1234")
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"z", self.lg)
assert gdf.obj == "z"
assert gdf._obj == "z"
assert gdf.data_file == the_file
assert not gdf.is_dir
assert not gdf._is_dir
stats = os.stat(the_path)
os.chmod(the_path, 0)
try:
@ -787,27 +813,13 @@ class TestDiskFile(unittest.TestCase):
os.makedirs(the_dir)
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"d", self.lg, keep_data_fp=True)
assert gdf.obj == "d"
assert gdf._obj == "d"
assert gdf.data_file == the_dir
assert gdf.is_dir
assert gdf._is_dir
assert 0 == gdf.get_data_file_size()
finally:
shutil.rmtree(td)
def test_update_object(self):
td = tempfile.mkdtemp()
the_path = os.path.join(td, "vol0", "bar")
the_dir = os.path.join(the_path, "dir")
try:
gdf = Gluster_DiskFile(td, "vol0", "p57", "ufo47", "bar",
"dir/z", self.lg)
md = { 'a': 'b' }
gdf.update_object(md)
assert gdf.metadata == md
assert _metadata[os.path.join(the_dir, "z")] == md
finally:
shutil.rmtree(td)
def test_filter_metadata(self):
assert not os.path.exists("/tmp/foo")
gdf = Gluster_DiskFile("/tmp/foo", "vol0", "p57", "ufo47", "bar",