ceph rgw lc工作流程

rgw_lc.h

class RGWLC

1. rgw_lc_max_objs(32)lc_process用于处理过期object

2. 每个lc_process每天只运行一次

3. 若用于测试需要运行多次,则可设置rgw_lc_debug_interval(n),即每隔n秒,32lc_process都运行一次,过期时间=设置的days * n

4. 若重启rgw服务,记录lc_process的遍历bucket的进度标志maker是否会归0?,若归0则今天重启前已经遍历过的未过期object如今已经满足条件内则该过期object会被删除,否则得明天的lc_process遍历

 

rgw_lc_s3.cc

1.datadays不能同时设置

2.data或者days)与ExpiredObjectDeleteMarker 不能同时设置

3.ExpiredObjectDeleteMarker 不能设置为False

4.如果设置了Filter,则Prefix参数将不生效,在以后的版本很可能将弃用Prefix参数

5.ExpirationNoncurrentVersionExpirationAbortIncompleteMultipartUpload至少设置一个

6.任意2ruleprefix不能相同(和代码写的不同)

rgw_lc.cc

lc 是如何工作的:

1.RGWLC::LCWorker::entry()启动线程:计算时间满足条件则调用lc->process()处理任务,处理完计算睡眠时间,sleep结束后再如此反复,直到遇到退出信号

2.lc->process()依次启动各个线程,默认32个,用对象lc.x来记录start_timemarker

3.RGWLC::process(int index, int max_lock_secs)就是具体处理各个lc.x的函数

(1)查看lc.x->start_time,今天没运行过,置lc.x->start_time=now,marker=None,并把该lc.x里所有bucketlc status置为=lc_uninitial,即要遍历各个bucket执行任务,否则今天运行过的,则按marker标记,遍历剩下的bucket执行任务即可

(2)lc.x->marker之后的一个bucketlc status置为=lc_processing

(3)lc.x->marker更新为当前正在处理的bucket

(4)开始处理该bucket ,调用bucket_lc_process()

(5)重复2~4直到lc.x里的bucket都吹完了

bucket_lc_process是如何工作的:

1.获取bucket信息,从bucket attrs里读出lc的配置,读prefix_map=list<prefix, lc配置>

2.若是多版本关闭状态的bucket:

(1) rule.status !=enable,或者没设置expiration.days/date则跳过该rule

(2) expiration.date !=None, 但当前时间<expiration.date ,则跳过该rule

(3) 根据frefix为筛选项,调用list_objects列出所有满足条件的obj,每次读1000个,循环读取

(4) 依次判断各个obj是否需要删除:

a. 若是expiration.date !=None, 且当前时间>expiration.date,则列出的obj都要删除,否则还需其它判断

b. 若不满足a,若是非调试模式,当前时间-obj的创建时间> expiration.days,则obj需要删除

c. 若不满足a/b,若当前是调试模式(conf.rgw_lc_debug_interval>0)则当前时间-obj的创建时间> expiration.days *rgw_lc_debug_interval,则obj需要删除

d. 若需要删除,则删除该obj

3.若是多版本打开/暂停状态的bucket:

(1)rule.status !=enable,或者(没设置expiration.days/date 且没设置noncur_expiration且没设置noncur_expiration)则跳过该rule

(2)根据frefix为筛选项,调用list_objects列出所有满足条件的obj,每次读1000个,循环读取

(3)依次判断各个obj是否需要删除:

a.若该obj是最新版本obj,若没有设置expiration.days/date且没设置dm_expiration,则该obj不需要删除;

b.若该obj是最新版本obj,且是delete_marker;如果该objlist_objects的最后一个obj,但是list_object.is_truncated !=False,则有可能该obj不是唯一版本,暂不操作;否则可以通过和后一个obj比较判断该obj是否是唯一最新版本,不是唯一则跳过该obj不处理;否则是唯一最新版本delete_markerremove_indeed = trueis_expired = dm_expiration

c.若该obj是最新版本obj,且不是delete_markerremove_indeed = False,根据obj的创建时间判断是否需要删除,需要删除则is_expired = True

d.若该obj不是最新版本,若没有设置noncur_expiration,则该obj不需要删除;否则判断是否需要删除,令remove_indeed = True用该obj的更新一个版本的创建时间做比较来判断该obj是否需要删除,需要删除则is_expired = True

e.更具前几步骤b/c/d,is_expired ==True则删除该obj,remove_indeed == true则真删除,remove_indeed ==False则假删除生成一个delete_marker即可

4.处理完一般obj的过期删除处理后开始对未完成分段上传的obj的处理,依次根据设置了mp_expirationrule来处理

(1)根据frefix为筛选项,调用list_objects列出所有满足条件的obj,每次读1000个,循环读取

(2)依次判断各个obj是否需要删除

(3)根据obj的创建时间来判断是否需要删除

(4)符合3需要需要删除,还要根据obj.name来判断是否是分段上传的对象,若不是,则跳过该obj

(1)若根据34判断是需要删除的过期的分段上传obj,则调用abort_multipart_upload()删除

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值