From 100d6b01bd40d8b01335e5ecd4a592df79e75b63 Mon Sep 17 00:00:00 2001 From: Peter Portante Date: Fri, 20 Sep 2013 11:25:04 -0400 Subject: Rebase to lastest OpenStack Swift DiskFile API As of October 28th, 2013, we rebase to OpenStack Swift master (commit 4bfe674) to pick up the lastest officially supported DiskFile API changes. We use a snapshot of OpenStack Swift stored in the gluster-swift launchpad downloads area so that we can deliberately rebase at our own pace. With this refactoring, all the code for handling I/O is wholly contained in the swift tree for object operations. This will allow us to use a different fs_utils implementation in the future (for example, one based on a yet-to-be-implemented python bindings over libgfapi). This also means the "Fake_file" class has been removed entirely. Change-Id: I767983f88c59786e30b6c64da16d1cb6ab3c3e7f Signed-off-by: Peter Portante Reviewed-on: http://review.gluster.org/5993 Reviewed-by: Luis Pabon Tested-by: Luis Pabon --- gluster/swift/obj/server.py | 59 ++++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 20 deletions(-) (limited to 'gluster/swift/obj/server.py') diff --git a/gluster/swift/obj/server.py b/gluster/swift/obj/server.py index 433879f..6417475 100644 --- a/gluster/swift/obj/server.py +++ b/gluster/swift/obj/server.py @@ -21,7 +21,7 @@ import gluster.swift.common.constraints # noqa from swift.obj import server -from gluster.swift.obj.diskfile import DiskFile +from gluster.swift.obj.diskfile import OnDiskManager class ObjectController(server.ObjectController): @@ -31,33 +31,52 @@ class ObjectController(server.ObjectController): stored on disk and already updated by virtue of performing the file system operations directly). """ + def setup(self, conf): + """ + Implementation specific setup. This method is called at the very end + by the constructor to allow a specific implementation to modify + existing attributes or add its own attributes. + + :param conf: WSGI configuration parameter + """ + # FIXME: Gluster currently does not support x-delete-at, as there is + # no mechanism in GlusterFS itself to expire an object, or an external + # process that will cull expired objects. + try: + self.allowed_headers.remove('x-delete-at') + except KeyError: + pass + # Common on-disk hierarchy shared across account, container and object + # servers. + self._ondisk_mgr = OnDiskManager(conf, self.logger) + + def get_diskfile(self, device, partition, account, container, obj, + **kwargs): + """ + Utility method for instantiating a DiskFile object supporting a given + REST API. - def _diskfile(self, device, partition, account, container, obj, **kwargs): - """Utility method for instantiating a DiskFile.""" - kwargs.setdefault('mount_check', self.mount_check) - kwargs.setdefault('bytes_per_sync', self.bytes_per_sync) - kwargs.setdefault('disk_chunk_size', self.disk_chunk_size) - kwargs.setdefault('threadpool', self.threadpools[device]) - kwargs.setdefault('obj_dir', server.DATADIR) - return DiskFile(self.devices, device, partition, account, - container, obj, self.logger, **kwargs) + An implementation of the object server that wants to use a different + DiskFile class would simply over-ride this method to provide that + behavior. + """ + return self._ondisk_mgr.get_diskfile(device, account, container, obj, + **kwargs) - def container_update(self, op, account, container, obj, request, - headers_out, objdevice): + def container_update(self, *args, **kwargs): """ Update the container when objects are updated. For Gluster, this is just a no-op, since a container is just the directory holding all the objects (sub-directory hierarchy of files). + """ + return + + def delete_at_update(self, *args, **kwargs): + """ + Update the expiring objects container when objects are updated. - :param op: operation performed (ex: 'PUT', or 'DELETE') - :param account: account name for the object - :param container: container name for the object - :param obj: object name - :param request: the original request object driving the update - :param headers_out: dictionary of headers to send in the container - request(s) - :param objdevice: device name that the object is in + FIXME: Gluster currently does not support delete_at headers. """ return -- cgit