OpenStack swift put一个对象时偶尔出现error: No such file or directory

文章讨论了在使用纠删码存储的OpenStackSwift环境中,Swift-object-reconstructor遇到的错误,特别提到当reclaim_age设置过小时可能导致正在PUT中的对象被误删除,因为对象首先写入temp目录。作者揭示了问题的根源和解决策略。
摘要由CSDN通过智能技术生成

作者 伍增田 Tommy WU

我们环境用的是纠删码存储方式,openstack-swift-object-reconstructor运行时偶尔出现下面的error,隐藏深,化了好长时间才找到根源:

#012Traceback (most recent call last):#012 File “/usr/lib/python2.7/site-packages/swift/obj/server.py”, line 1135, in call#012
res = getattr(self, req.method)(req)#012 File “/usr/lib/python2.7/site-packages/swift/common/utils.py”, line 1658, in _timing_stats#012
resp = func(ctrl, *args, **kwargs)
#012 File “/usr/lib/python2.7/site-packages/swift/obj/server.py”, line 839, in PUT
#012 writer.put(metadata)#012 File “/usr/lib/python2.7/site-packages/swift/obj/diskfile.py”, line 2900, in put
#012 super(ECDiskFileWriter, self)._put(metadata, cleanup, frag_index=fi)
#012 File “/usr/lib/python2.7/site-packages/swift/obj/diskfile.py”, line 1618, in _put #012
tpool_reraise(self._finalize_put, metadata, target_path, cleanup)#012 File “/usr/lib/python2.7/site-packages/swift/common/utils.py”, line 3599, in tpool_reraise#012
raise resp#012OSError: [Errno 2] No such file or directory (txn: tx591bff09b9cd4d3e9aa6e-006088bb50)

reconstructor.py

def collect_parts(self, override_devices=None, override_partitions=None):

    tmp_path = join(dev_path, get_tmp_dir(int(policy)))
    **unlink_older_than(tmp_path, time.time() -
                              df_mgr.reclaim_age)**

reclaim_age设置小了, swift-object-reconstructor可能会删除掉正在put的对象, 由于对象是先写在temp目录下的.

disk_file.create(size=fsize) as writer:
fd, tmppath = self._get_tempfile()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值