缘起

最近做一个项目,类似某度云盘,另外附加定制功能,本人负责云盘相关功能实现,这个项目跟云盘不同的是,以项目为分配权限的单位,同一个项目及子目录所有有权限的用户可以同时操作所有文件,这样就很容易出现并发操作,而且表结构设计的时候,定下来文件和文件夹都有个path字段,存储的是所在父级文件夹路径,这样检索方便,重命名和移动比较麻烦。

如下,例如甲同学正在移动项目下C文件夹,而此时乙同学也在操作项目下D下的d.txt文件,这样就会出现问题,所以需要分布式锁控制,甲在操作C文件夹的时候,C文件夹所有子文件和包含C文件夹的父文件夹都被锁住,如图将会被锁定的文件夹和子文件有:A、C、c.txt、D、E、d.txt,其中a.txt和B未被锁定,这个是移动的情况,如下表格列出其他情况.

操作对象 操作 新建 上传 移动文件夹 移动文件 复制文件夹 复制文件 重命名文件夹 重命名文件 删除文件夹 删除文件 回收站清除
/A 新建 × × × × /
/A 上传 × × × × /
/A->/B 移动文件夹 A×B× A×B× A×B× A×B× A√B√ A√B√ A×B× A×B√ A×B× A×B√ /
a.txt->/B 移动文件 B√ B√ B√ a√B× a×B× a×B√ a×B√ /
/A->/B 复制文件夹 B√ B√ B√ B√ B√