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秒,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工作流程相关推荐
- ceph原理及工作流程浅析
ceph工作原理及工作流程浅析 其命名和UCSC(Ceph诞生地)的吉祥物有关,这个吉祥物是"Sammy",一个香蕉色的蛞蝓,就是头足类中无壳的软体动物.这些有多触角的头足类动物, ...
- 趣解 ceph rgw multisite data sync 机制
multisite是ceph rgw对象数据异地容灾备份的一个有效方案,笔者希望深入理解该技术,并应用于生产环境中,然而rgw的这部分代码晦涩难懂,笔者多次尝试阅读,仍云里雾里不解其意,最终流着泪咬着 ...
- 【大咖专栏】如何配置CEPH RGW对象存储与公有云同步
新钛云服已为您服务1280天 容灾 (Disaster Recovery),即容灾备份或灾备,是业务连续性系统的一个子集,用于保障 IT 系统在遭受自然灾害.人为操作失误或蓄意破坏后的数据还原和业务恢 ...
- GPU—加速数据科学工作流程
GPU-加速数据科学工作流程 GPU-ACCELERATE YOUR DATA SCIENCE WORKFLOWS 传统上,数据科学工作流程是缓慢而繁琐的,依赖于cpu来加载.过滤和操作数据,训练和部 ...
- python爬虫之Scrapy框架的post请求和核心组件的工作 流程
python爬虫之Scrapy框架的post请求和核心组件的工作 流程 一 Scrapy的post请求的实现 在爬虫文件中的爬虫类继承了Spider父类中的start_urls,该方法就可以对star ...
- WifiP2pSettings工作流程
本文为<深入理解Android Wi-Fi.NFC和GPS卷>读书笔记,Android源码为Android 5.1 Android平台中,P2P操作用户只需执行如下三个步骤: 1)进入Wi ...
- Blender+SP+UE5游戏艺术工作流程学习
Blender到虚幻引擎5 Blender游戏艺术 Blender for Game Art 你会学到: 如何在Blender中创建三维模型 UV如何展开和布局 如何在Substance Painte ...
- Revit: Twinmotion工作流程学习
Revit: Twinmotion Workflow MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 技能等级:中级|语言:英语+中英文字幕(根据原英文字幕机译 ...
- iOS应用模块化的思考及落地方案(一)模块的划分及模块化工作流程
1.0 什么是模块化 很多关于重构及设计模式的介绍中,经常提到的几个词语是复用及解耦. 模块化之所以被提出,也更多是为了解决这几个问题. 复用可以减少重复造轮子的情况,很容易理解的是,我们经常使用的g ...
最新文章
- python类型-python基础之五大标准数据类型
- jointGrid,边际的颜色和hue保持一致,添加title
- StackOverflow 每月5.6亿PV,但只用25台服务器
- SAP 电商云 Spartacus UI 的 urlParameter 配置原理
- Angular自学笔记(?)属性型指令
- [修复] Firemonkey 使用 DrawPath 断线问题(Android iOS 平台)
- 浙江linux学习,浙江大学现代教务管理系统
- 设计干货素材|UI设计中的插画模板,便于应用的好素材!
- Jmeter 获取、读取token 供其他 HTTP 请求调用
- 解决git配置公钥仍然需要输入密码问题
- APP 自动化测试封装结构模式
- 安装tensorflow出现的问题
- Hello World 我的第一个VB程序
- 手机怎么修改浏览器的html,手机设置默认浏览器
- outlook2010 pst文件过大解决办法
- 计算机组装图纸手画,手工绘图的方法和步骤 -工程
- 《计算机文件管理》教学设计,《文件和文件夹的操作》教学设计
- MAC M1大数据0-1成神篇-7 补充CAP模式
- 【微信小程序】车位在线销售平台(三)
- codeforces 1364D Ehabs Last Corollary
热门文章
- IntelliJ IDEA 2020.3怎么设置成中文汉化
- 【深度学习入门系列】径向基函数(RBF)神经网络原理介绍及pytorch实现(内含分类、回归任务实例)
- 卡了一年的联通IPTV,能查的都查了,最后发现是电源的问题
- DXP_protel2004_原理图设计基础_集成运放原理图设计_原理图后期处理
- 几个数字的组合方式种类个数
- win10高危服务_Win10启用不了Windows Defender Antivirus Service服务如何解决
- alitum designer 快速制作元器件封装
- Python pta题目
- linux下iconv()函数的用法
- linux下下载部署nginx