summaryrefslogtreecommitdiffstats
path: root/gluster/swift/obj/server.py
diff options
context:
space:
mode:
authorPeter Portante <peter.portante@redhat.com>2013-09-20 11:25:04 -0400
committerLuis Pabon <lpabon@redhat.com>2013-10-29 07:25:59 -0700
commit100d6b01bd40d8b01335e5ecd4a592df79e75b63 (patch)
treefb6875e07b37808b56aa2f0078040c9ef480a58e /gluster/swift/obj/server.py
parent70a4cef96c42fe30e62d23ae816a330d3d35df63 (diff)
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 <peter.portante@redhat.com> Reviewed-on: http://review.gluster.org/5993 Reviewed-by: Luis Pabon <lpabon@redhat.com> Tested-by: Luis Pabon <lpabon@redhat.com>
Diffstat (limited to 'gluster/swift/obj/server.py')
-rw-r--r--gluster/swift/obj/server.py59
1 files changed, 39 insertions, 20 deletions
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