【问题标题】:How to avoid concurrent operations(save/delete) in file operation如何避免文件操作中的并发操作(保存/删除)
【发布时间】:2019-02-06 00:19:02
【问题描述】:

我遇到了一个问题,需要帮助。

我正在设计一个简单的文件服务(Http),用户可以通过它上传/下载文件,以及删除文件服务器中的文件。

文件服务将文件存储在单个 linux 计算机的父文件夹下(例如/data/fileserver/)。上传的文件(例如xxx.mp4)可以保存在计算机中的路径,如/data/fileserver/demo/1/xxx.mp4

问题是: 如何避免此文件服务中的并发操作(保存/删除)

例如

用户 A 正在上传文件 xxx.mp4,文件服务正在使用路径 /data/fileserver/demo/1/xxx.mp4 保存(尚未完成)。

同时,用户B调用该文件服务的delete api删除文件夹/data/fileserver/demo。这个删除操作会影响用户A的保存操作。

我希望在这种情况下用户 B 的删除操作会失败。

模型好像锁了树枝,但是不知道怎么处理。

文件服务器基于java语言。

谢谢。

【问题讨论】:

    标签: java concurrency locking


    【解决方案1】:

    由于 HTTP 可能是异步的,我会使用设计模式方法。

    例如,您可以实现一个单例来处理确定路径上的操作。

    假设您不希望在任何类型的操作完成之前对“文件服务器”文件夹进行任何更改。

    实现一个map,键为文件夹名,值为真或假(表示是否操作)

    似乎是一个简单的解决方案。

    【讨论】:

    • 我明白了。似乎需要在地图中处理父文件夹及其所有子文件夹。
    猜你喜欢
    • 1970-01-01
    • 2011-06-13
    • 2012-05-09
    • 2018-09-30
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多