Radosgw object 命令以及伪文件夹
2016-03-07
介绍
分析
rgw_rest.cc:1070
1 | // “The name for a key is a sequence of Unicode characters whose UTF-8 encoding |
object 的名字通过 rest 传过来是需要编码成 utf8,所以这里的 len
指的是 utf8 的字节数,字节数不能超过 1024。
在 utf8 中每个字母数字1个字节,大多数汉字每个占3个字节。
伪文件夹
在 rgw 中是没有文件夹的概念的,但是可以通过对对象的命名通过字符/
来分割,然后对对象进行分类分层就可以视作文件夹;
若是仅创建一个文件夹,其实质也是一个对象,其命名如 folder/
,且该对象 Content-Length: 0;
举个例子:
1 | folder1/ |
在上面的目录结构中存在的对象有如下4个:
1 | folder1/ |
上级文件夹与下级文件没有实质性的关系,如文件夹 /folder1/ 与 文件夹/folder1/folder2/,两者是相互独立的对象,只是第二个文件夹名字前缀是第一个文件夹的名字。
这里牵涉到命名长度的问题了:
- 若全使用字母数字,则最大长度为 1024-1(字符’/‘) = 1023;
- 若全是用汉字,则最大长度为 (1024-1)/3 = 341;
所以无论多少级文件夹(对象名字中有多少个’/‘),只要保证对象名字的字节数不大于 1024 即可。