在ceph中的filestore中有实现chain_xattr.cc 中有实现级联的key-value。当然这里的xattr是保存在文件系统中的 扩展属性中。 所谓级联是指一个key 可以对应多个value的片段 例如 key@1和key@2 这样被chain_xattr解析为key-12 ceph中主要使用user 这个xattr的命令空间 从下面的code中可以看出ceph使用的xattr中的user namespace static void get_attrname(const char *name, char *buf, int len) { snprintf(buf, len, "user.ceph.%s", name); } bool parse_attrname(char **name) { if (strncmp(*name, "user.ceph.", 10) == 0) { *name += 10; return true; } return false; } 为啥key value之间用@做分隔符呢? 从下面的code在可以看出 void get_raw_xattr_name(const char *name, int i, char *raw_name, int raw_len) { int pos = 0; while (*name) { switch (*name) { case '@': /* escape it */ pos += 2; assert (pos < raw_len - 1); *raw_name = '@'; raw_name++; *raw_name = '@'; break; default: pos++; assert(pos < raw_len - 1); *raw_name = *name; break; } name++; raw_name++; } if (!i) { *raw_name = '\0'; } else { #从这里可以知道key 和value之间用@做分隔符 int r = snprintf(raw_name, raw_len - pos, "@%d", i); assert(r < raw_len - pos); } }
ceph中使用文件系统的扩展属性
猜你喜欢
转载自blog.csdn.net/tiantao2012/article/details/80014726
今日推荐
周排行