From 2014cdb9066e273cf791f38b1c8247427c76cfa9 Mon Sep 17 00:00:00 2001 From: Prashanth Pai Date: Tue, 28 Jan 2014 12:13:33 +0530 Subject: Add support for Object Expiration feature Preventing access to expired objects ------------------------------------ Re-enabled accepting X-Delete-At and X-Delete-After headers. During a GET on an expired object, DiskFileExpired is raised by DiskFile class. This will result in object-server returning HTTPNotFound (404) to the client. Tracking objects to be deleted ------------------------------ Objects to be deleted are tracked using "tracker objects". These are PUT into a special account(a volume, for now). These zero size "tracker objects" have names that contain: * Expiration timestamp * Path of the actual object to be deleted Deleting actual objects from GlusterFS volume --------------------------------------------- The object-expirer daemon runs a pass once every X seconds. For every pass it makes, it queries the special account for "tracker objects". Based on (timestamp, path) present in name of "tracker objects", object-expirer then deletes the actual object and the corresponding tracker object. To run object-expirer forever: swift-init object-expirer start To run just once: swift-object-expirer -o -v /etc/swift/object-expirer.conf Caveat/Limitation: Object-expirer needs a separate account(volume) that is not used by other services like gswauth. By default, this volume is named "gsexpiring" and is configurable. More info about object expiration: http://docs.openstack.org/developer/swift/overview_expiring_objects.html Change-Id: I876995bf4f16ef4bfdff901561e0558ecf1dc38f Signed-off-by: Prashanth Pai Reviewed-on: http://review.gluster.org/6891 Tested-by: Chetan Risbud Reviewed-by: pushpesh sharma Tested-by: pushpesh sharma Reviewed-by: Chetan Risbud --- etc/account-server.conf-gluster | 3 +++ etc/container-server.conf-gluster | 3 +++ etc/object-expirer.conf-gluster | 27 +++++++++++++++++++++++++++ etc/object-server.conf-gluster | 4 ++++ etc/proxy-server.conf-gluster | 4 ++++ 5 files changed, 41 insertions(+) create mode 100644 etc/object-expirer.conf-gluster (limited to 'etc') diff --git a/etc/account-server.conf-gluster b/etc/account-server.conf-gluster index 9ad458a..53cae14 100644 --- a/etc/account-server.conf-gluster +++ b/etc/account-server.conf-gluster @@ -28,6 +28,9 @@ use = egg:gluster_swift#account user = root log_facility = LOG_LOCAL2 log_level = WARN +# The following parameter is used by object-expirer and needs to be same +# across all conf files! +auto_create_account_prefix = gs # # After ensuring things are running in a stable manner, you can turn off # normal request logging for the account server to unclutter the log diff --git a/etc/container-server.conf-gluster b/etc/container-server.conf-gluster index a406b4d..3136bd9 100644 --- a/etc/container-server.conf-gluster +++ b/etc/container-server.conf-gluster @@ -28,6 +28,9 @@ use = egg:gluster_swift#container user = root log_facility = LOG_LOCAL2 log_level = WARN +# The following parameters is used by object-expirer and needs to be same +# across all conf files! +auto_create_account_prefix = gs # # After ensuring things are running in a stable manner, you can turn off # normal request logging for the container server to unclutter the log diff --git a/etc/object-expirer.conf-gluster b/etc/object-expirer.conf-gluster new file mode 100644 index 0000000..4449ee2 --- /dev/null +++ b/etc/object-expirer.conf-gluster @@ -0,0 +1,27 @@ +#TODO: Add documentation to explain various options +#For now, refer: https://github.com/openstack/swift/blob/master/etc/object-expirer.conf-sample + +[DEFAULT] + +[object-expirer] +user = root +log_facility = LOG_LOCAL2 +log_level = DEBUG +# The following parameters are used by object-expirer and needs to be same +# across all conf files! +auto_create_account_prefix = gs +expiring_objects_account_name = expiring + +interval = 30 + +[pipeline:main] +pipeline = catch_errors cache proxy-server + +[app:proxy-server] +use = egg:gluster_swift#proxy + +[filter:cache] +use = egg:swift#memcache + +[filter:catch_errors] +use = egg:swift#catch_errors diff --git a/etc/object-server.conf-gluster b/etc/object-server.conf-gluster index d10d282..d8d06c7 100644 --- a/etc/object-server.conf-gluster +++ b/etc/object-server.conf-gluster @@ -34,6 +34,10 @@ use = egg:gluster_swift#object user = root log_facility = LOG_LOCAL2 log_level = WARN +# The following parameters are used by object-expirer and needs to be same +# across all conf files! +auto_create_account_prefix = gs +expiring_objects_account_name = expiring # # For performance, after ensuring things are running in a stable manner, you # can turn off normal request logging for the object server to reduce the diff --git a/etc/proxy-server.conf-gluster b/etc/proxy-server.conf-gluster index 92f8083..7996a5d 100644 --- a/etc/proxy-server.conf-gluster +++ b/etc/proxy-server.conf-gluster @@ -16,6 +16,10 @@ log_level = WARN # or delete an account. So leave this off. allow_account_management = false account_autocreate = true +# The following parameters are used by object-expirer and needs to be same +# across all conf files! +auto_create_account_prefix = gs +expiring_objects_account_name = expiring # Ensure the proxy server uses fast-POSTs since we don't need to make a copy # of the entire object given that all metadata is stored in the object # extended attributes (no .meta file used after creation) and no container -- cgit