根据规则清理制品库中符合条件的制品,并结合后台定时任务删除磁盘文件,达到释放磁盘空间的目的。
2.1制品数据存储结构
二进制制品(generic仓库):
依赖源制品:
2.2 磁盘清理机制
1.制品被删除后,其对应的 node 会被标记为【已删除】,即逻辑删除
2.默认配置下,被标记为【已删除】的 node 会被保留14天,14天后该节点变为【已过期】的节点,需要进行删除,即物理删除
# 在 repository.yaml 配置文件中,增加如下配置# 如果该配置不存在,则默认为14天# 如果该配置小于0,则永远不进行物理删除repository:
deletedNodeReserveDays: 14
3.磁盘清理由两个后台任务配合完成
1) 根据 deletedNodeReserveDays 配置的天数,找出【已过期】的节点2) 物理删除【已过期】的节点,并减少文件对应的 file_reference 的引用数(count)
该后台任务的执行时间为: 2点 8点 14点 20点
4.删除【引用数为0】的文件
1) 删除file_referen【引用数为0】的磁盘文件2) 删除对应 file_reference 的数据库记录
该后台任务的执行时间为: 4点 10点 16点 22点
注:仓库清理与页面删除操作效果一致(即逻辑删除),不会立即触发【磁盘清理机制】
只支持4种依赖源仓库:
3.1 保留条件的优先级
保留条件有3个:
最近使用时间:下载制品即更新该时间
保留流程示例:假设一个包有20个版本,符合【元数据保留规则】的版本是5个,那么除【符合元数据保留规则的5个版本】之外剩余的15个版本进行【保留版本数】条件判断,假设【保留版本数=5】,那么剩下的10个版本进行【保留天数】条件判断,如果符合【保留天数】的版本为5个,那么最终剩余的5个版本将会被清理
二进制仓库清理存在两个版本(通过页面配置即可分辨),功能存在差异
注:
4.1 二进制仓库清理V1
4.2 二进制仓库清理V2
与V1版本仓库清理相比,V2版本支持对每个目录做不同的保留规则配置
-
在目录下符合保留规则的文件永久不会被清理,文件不符合任意保留规则但是存储未超过暂存时间不会被清理,文件被下载、编辑将刷新保留时间。
-
开启自动清理后,未设置保留规则和暂存时间的文件,将按照文件目录1(仓库全局规则)的暂存时间与规则做保留,文件目录1不可删除。
-
添加文件目录后,文件目录下的所有文件按照所属目录的暂存时间与规则做保留,不再按照全局规则做保留。(就近原则)
-
在父目录存在多个子目录与保留规则时,添加子目录1保留规则,仅子目录1内的文件按照子目录1的规则进行保留,其他子目录按照父目录规则做保留(就近原则)
5.1 定时任务被锁定(若定时任务在执行过程中,被打断则锁定,7天内无法再进行,除非删数据)
检查方式:查看shed_lock表(减少引用定时任务名称:DeletedNodeCleanupJob,磁盘清理定时任务名称:FileReferenceCleanupJob)
#mongodb查看任务锁定命令
db.shed_lock.find({ _id : FileReferenceCleanupJob })
#mongodb删除任务锁定命令
db.shed_lock.deleteOne({ _id : FileReferenceCleanupJob })
案例:
清理磁盘定时任务无响应问题,FileReferenceCleanupJob定时任务被锁定,锁定时间8月30日2点,解锁时间9月7日20点;