From 9e7b2ae53d4c0c3ae566f041511a1b1bf4b33327 Mon Sep 17 00:00:00 2001 From: Abhishek Lekshmanan Date: Thu, 7 Sep 2017 11:50:00 +0200 Subject: [PATCH] lc: Give more flexibility for LC expiration times Earlier values expected a lc debug interval of 2s, which is a pretty short time window and can often lead to failures if the processing didn't complete within the next day. This commit assumes the currently configured LC debug interval of 10s, and gives time intervals using the following logic: Worst case: LC start-time : 00:00 obj upload : 00:01 LC run1 : 00:10 -> object not expired as it is only 9s old LC run2 : 00:20 -> object will expire in this run, however we can't exactly guess when this run will complete, for a moderate amount of objects this can take anywhere between 1 to a max of 10s, let us give it a wiggle room to complete around 8s, given the amount of objects in a teuthology run, it should be mostly probable that the object is already deleted within this time, so at 28s, we should have seen day1 objects being expired. Best case: LC start-time: 00:00 obj upload : 00:09 LC run1 : 00:10 LC run2 : 00:20 -> obj expires, so elapsed time is around 11->19s (of course it would almost close to 10s too), We should probably configure the LC lock time to 10s as well just so as to ensure that the lock isn't held for the default 60s in which case it is possible that the object might expire in a time greater than the lock interval. Signed-off-by: Abhishek Lekshmanan (cherry picked from commit 9204283def8e0bcfe14a57f0c87ed20735214f53) --- s3tests/functional/test_s3.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/s3tests/functional/test_s3.py b/s3tests/functional/test_s3.py index 77e3c03..3d2f50b 100644 --- a/s3tests/functional/test_s3.py +++ b/s3tests/functional/test_s3.py @@ -7537,20 +7537,20 @@ def test_lifecycle_get(): @attr('lifecycle_expiration') @attr('fails_on_aws') def test_lifecycle_expiration(): - bucket = set_lifecycle(rules=[{'id': 'rule1', 'days': 2, 'prefix': 'expire1/', 'status': 'Enabled'}, - {'id':'rule2', 'days': 6, 'prefix': 'expire3/', 'status': 'Enabled'}]) + bucket = set_lifecycle(rules=[{'id': 'rule1', 'days': 1, 'prefix': 'expire1/', 'status': 'Enabled'}, + {'id':'rule2', 'days': 4, 'prefix': 'expire3/', 'status': 'Enabled'}]) _create_keys(bucket=bucket, keys=['expire1/foo', 'expire1/bar', 'keep2/foo', 'keep2/bar', 'expire3/foo', 'expire3/bar']) # Get list of all keys init_keys = bucket.get_all_keys() # Wait for first expiration (plus fudge to handle the timer window) - time.sleep(6) + time.sleep(28) expire1_keys = bucket.get_all_keys() # Wait for next expiration cycle - time.sleep(2) + time.sleep(10) keep2_keys = bucket.get_all_keys() # Wait for final expiration cycle - time.sleep(8) + time.sleep(20) expire3_keys = bucket.get_all_keys() eq(len(init_keys), 6)