aliyun / ossfs

Export s3fs for aliyun oss.
GNU General Public License v2.0
738 stars 152 forks source link

ossfs 获取一个文件后没有对 ETag 和 文件的 md5值进行校验。 #30

Open yjhjstz opened 8 years ago

yjhjstz commented 8 years ago
rockuw commented 8 years ago

目前还没有。

你在什么情况下出现了文件错误?

yjhjstz commented 8 years ago

无法重现,但场景是文件很大。 希望可以增加该特性,选项控制开启。

rockuw commented 8 years ago

这里问题可能是两种:

  1. 上传的时候数据出错,这个可以通过挂载时增加参数-o enable_content_md5来校验,如果出现错误会导致文件上传不成功
  2. 下载的时候数据出错,因为OSS目前没有返回文件的md5,所以没办法校验。(后面OSS会返回文件crc64)
yjhjstz commented 8 years ago
  1. 是下载出错,我看了下,返回的 ETag 就是 md5值。 可以校验啊
rockuw commented 8 years ago

对于普通文件是的;但是multipart形式上传的文件,返回的ETag并不是文件的md5。

yjhjstz commented 8 years ago

ETag (entity tag) 在每个Object生成的时候被创建,用于标示一个Object的内容。对于Put Object请求创建的Object,ETag值是其内容的MD5值;对于其他方式创建的Object,ETag值是其内容的UUID。ETag值可以用于检查Object内容是否发生变化。 类型:字符串 默认值:无

我说的就是普通大文件的同步到本地场景,不是上传。

rockuw commented 8 years ago
  1. 只有普通文件才可以根据ETag来校验,ossfs还需要处理appendable/multipart文件
  2. ossfs提供的是文件系统的read(offset, size)接口,不会一次性将文件下载下来,所以这时也没办法进行md5校验

你能通过SDK访问吗?然后在应用层做校验逻辑。

yjhjstz commented 8 years ago

分层角度看,在应用层做不合适,因为应用层已经拿不到 ETag 了。 我想是在 s3fs_release() 增加对整个文件 md5的校验。

rockuw commented 8 years ago

不一定有用吧,假如文件数据出错了,你在s3fs_release()之前可能已经将错误的数据读走并处理了。这时再做校验未必有意义了。

yjhjstz commented 8 years ago

我目前是逻辑是

  1. cp /mnt/oss/src /home/dist
  2. 使用 dist 文件
rockuw commented 8 years ago

那这对你的使用逻辑是适用的。

你能使用SDK访问吗?更自由一些。你可以在自定义meta中把md5填进去,下载下来之后再校验一遍。

yjhjstz commented 8 years ago

不能用 SDK,就是考虑到 ossfs 兼容了 posix file api 。