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.cc1.
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配置
>
2.若是多版本關閉狀態的bucket:
(1)
若rule.status !=enable,
或者沒設定
expiration.days/date
則跳過該
rule
(2)
若expiration.date !=none,
但當前時間
則跳過該
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()
刪除
Struts工作流程
文章分類 招聘求職 乙個使用者的請求是通actionservlet來處理和 的。那麼,actionservlet如何決定把使用者請求 給哪個action物件呢?這就需要一些描述使用者請求路徑和action衍射關係的配置資訊了。在struts中,這些配置對映資訊都儲存在特定的xml檔案struts c...
zf工作流程
zend controller是使用mvc模式來構建乙個站點的基礎。zend controller體系是乙個輕量的,模組化和可擴充套件的體系。它只提供最核心的必要的部分,允許開發者有很大的自由來靈活地構建自己的站點。使用zend controller的站點,其檔案組織和 結構會比較相似。zend c...
spring MVC 工作流程
1 首先來配置一下dispatcherservlet spring mvc和大部分mvc框架一樣,底層也是依賴servlet api的,所以spring mvc的請求處理也是從乙個servlet開始,這個servlet就是dispatcherservlet.以下是在web.xml中dispatche...