rgw_lc.h

class RGWLC

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

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

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

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

rgw_lc_s3.cc

1.data和days不能同时设置

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

3.ExpiredObjectDeleteMarker 不能设置为False

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

5.Expiration、NoncurrentVersionExpiration、AbortIncompleteMultipartUpload至少设置一个

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

rgw_lc.cc

lc 是如何工作的:

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

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

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里所有bucket的lc status置为=lc_uninitial,即要遍历各个bucket执行任务,否则今天运行过的,则按marker标记,遍历剩下的bucket执行任务即可

(2)把lc.x->marker之后的一个bucket的lc 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;如果该obj是list_objects的最后一个obj,但是list_object.is_truncated !=False,则有可能该obj不是唯一版本,暂不操作;否则可以通过和后一个obj比较判断该obj是否是唯一最新版本,不是唯一则跳过该obj不处理;否则是唯一最新版本delete_marker则remove_indeed = true,is_expired = dm_expiration

c.若该obj是最新版本obj,且不是delete_marker则remove_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_expiration的rule来处理

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

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

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

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

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

ceph rgw lc工作流程相关推荐

  1. ceph原理及工作流程浅析

    ceph工作原理及工作流程浅析 其命名和UCSC(Ceph诞生地)的吉祥物有关,这个吉祥物是"Sammy",一个香蕉色的蛞蝓,就是头足类中无壳的软体动物.这些有多触角的头足类动物, ...

  2. 趣解 ceph rgw multisite data sync 机制

    multisite是ceph rgw对象数据异地容灾备份的一个有效方案,笔者希望深入理解该技术,并应用于生产环境中,然而rgw的这部分代码晦涩难懂,笔者多次尝试阅读,仍云里雾里不解其意,最终流着泪咬着 ...

  3. 【大咖专栏】如何配置CEPH RGW对象存储与公有云同步

    新钛云服已为您服务1280天 容灾 (Disaster Recovery),即容灾备份或灾备,是业务连续性系统的一个子集,用于保障 IT 系统在遭受自然灾害.人为操作失误或蓄意破坏后的数据还原和业务恢 ...

  4. GPU—加速数据科学工作流程

    GPU-加速数据科学工作流程 GPU-ACCELERATE YOUR DATA SCIENCE WORKFLOWS 传统上,数据科学工作流程是缓慢而繁琐的,依赖于cpu来加载.过滤和操作数据,训练和部 ...

  5. python爬虫之Scrapy框架的post请求和核心组件的工作 流程

    python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...

  6. WifiP2pSettings工作流程

    本文为<深入理解Android Wi-Fi.NFC和GPS卷>读书笔记,Android源码为Android 5.1 Android平台中,P2P操作用户只需执行如下三个步骤: 1)进入Wi ...

  7. Blender+SP+UE5游戏艺术工作流程学习

    Blender到虚幻引擎5 Blender游戏艺术 Blender for Game Art 你会学到: 如何在Blender中创建三维模型 UV如何展开和布局 如何在Substance Painte ...

  8. Revit: Twinmotion工作流程学习

    Revit: Twinmotion Workflow MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 技能等级:中级|语言:英语+中英文字幕(根据原英文字幕机译 ...

  9. iOS应用模块化的思考及落地方案(一)模块的划分及模块化工作流程

    1.0 什么是模块化 很多关于重构及设计模式的介绍中,经常提到的几个词语是复用及解耦. 模块化之所以被提出,也更多是为了解决这几个问题. 复用可以减少重复造轮子的情况,很容易理解的是,我们经常使用的g ...

最新文章

  1. python类型-python基础之五大标准数据类型
  2. jointGrid,边际的颜色和hue保持一致,添加title
  3. StackOverflow 每月5.6亿PV,但只用25台服务器
  4. SAP 电商云 Spartacus UI 的 urlParameter 配置原理
  5. Angular自学笔记(?)属性型指令
  6. [修复] Firemonkey 使用 DrawPath 断线问题(Android iOS 平台)
  7. 浙江linux学习,浙江大学现代教务管理系统
  8. 设计干货素材|UI设计中的插画模板,便于应用的好素材!
  9. Jmeter 获取、读取token 供其他 HTTP 请求调用
  10. 解决git配置公钥仍然需要输入密码问题
  11. APP 自动化测试封装结构模式
  12. 安装tensorflow出现的问题
  13. Hello World 我的第一个VB程序
  14. 手机怎么修改浏览器的html,手机设置默认浏览器
  15. outlook2010 pst文件过大解决办法
  16. 计算机组装图纸手画,手工绘图的方法和步骤 -工程
  17. 《计算机文件管理》教学设计,《文件和文件夹的操作》教学设计
  18. MAC M1大数据0-1成神篇-7 补充CAP模式
  19. 【微信小程序】车位在线销售平台(三)
  20. codeforces 1364D Ehabs Last Corollary

热门文章

  1. IntelliJ IDEA 2020.3怎么设置成中文汉化
  2. 【深度学习入门系列】径向基函数(RBF)神经网络原理介绍及pytorch实现(内含分类、回归任务实例)
  3. 卡了一年的联通IPTV,能查的都查了,最后发现是电源的问题
  4. DXP_protel2004_原理图设计基础_集成运放原理图设计_原理图后期处理
  5. 几个数字的组合方式种类个数
  6. win10高危服务_Win10启用不了Windows Defender Antivirus Service服务如何解决
  7. alitum designer 快速制作元器件封装
  8. Python pta题目
  9. linux下iconv()函数的用法
  10. linux下下载部署nginx