swiftclient对象删除时/后问题
在使用Python的swiftclient模块时,我可以通过一个叫X-Delete-At/After的头部和一个时间戳来向一个对象发送POST请求,但我该如何显示这个对象的过期时间呢?我做了一些测试,发现文件似乎总是立即过期,比如我设置了一个未来100天的时间:
>>> swift.put_object('container1','test_file01.txt','This is line 1 in the file test_file01.txt done at: %s' % datetime.now().strftime('%Y-%m-%d %H:%M:%S,%f'))
'4b3faf0b79d97f5e478949e7d6c4c575'
>>> swift.head_object('container1','test_file01.txt')
{'content-length': '78', 'server': 'Jetty(7.6.4.v20120524)', 'last-modified': 'Wed, 23 Apr 2014 17:09:55 GMT', 'etag': '4b3faf0b79d97f5e478949e7d6c4c575', 'x-timestamp': '1398272995', 'date': 'Wed, 23 Apr 2014 17:09:59 GMT', 'content-type': 'application/octet-stream'}
>>> swift.post_object('container1','test_file01.txt',headers={'X-Delete-At':(datetime.now(pytz.timezone('GMT')) + timedelta(days=100)).strftime('%s')})
>>> swift.head_object('container1','test_file01.txt')
Traceback (most recent call last):
File "<pyshell#121>", line 1, in <module>
swift.head_object('container1','test_file01.txt')
File "/usr/local/lib/python2.7/dist-packages/swiftclient/client.py", line 1279, in head_object
return self._retry(None, head_object, container, obj)
File "/usr/local/lib/python2.7/dist-packages/swiftclient/client.py", line 1189, in _retry
rv = func(self.url, self.token, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/swiftclient/client.py", line 853, in head_object
http_response_content=body)
ClientException: Object HEAD failed: http://10.249.238.135:9024:9024/v1/rjm-vnx-namespace01/container1/test_file01.txt 404 Not Found
所以看起来它是立即过期的。我的问题是:
- 我设置过期时间的方式对吗?我希望能够对一个已经存在的对象进行设置,而不是在创建对象时就设置,但也许我必须在创建时就设置???
- 有没有办法查看过期时间?显然,如果它没有正常工作,就没有好的方法来查看,但如果可以的话,head_object()会返回这个信息吗?
谢谢,
Rob
1 个回答
0
没关系,我自己解决了。通过设置一个“之后”的时间,我发现这个值显然需要以毫秒为单位。所以当我把它改成:
>>> swift.post_object('container1','test_file01.txt',headers={'X-Delete-At':int((datetime.now(pytz.timezone('GMT')) + timedelta(days=100)).strftime('%s'))*1000})
>>> swift.head_object('container1','test_file01.txt')
{'content-length': '78', 'x-delete-at':'1406932148000', 'server': 'Jetty(7.6.4.v20120524)', 'last-modified': 'Wed, 23 Apr 2014 17:29:06 GMT', 'etag': '0baf8b37f374c94e59a05a7f7b339811', 'x-timestamp': '1398274146', 'date': 'Wed, 23 Apr 2014 17:29:08 GMT', 'content-type': 'application/octet-stream'}
然后它就按预期工作了。
罗布