return r;
}
+int Ebofs::collection_getattr(coll_t cid, const char *name, bufferlist& bl)
+{
+ ebofs_lock.Lock();
+ dout(10) << "collection_setattr " << hex << cid << dec << " '" << name << dendl;
+
+ Cnode *cn = get_cnode(cid);
+ if (!cn) {
+ ebofs_lock.Unlock();
+ return -ENOENT;
+ }
+
+ string n(name);
+ int r;
+ if (cn->attr.count(n) == 0) {
+ r = -1;
+ } else {
+ bl.push_back(cn->attr[n]);
+ r = bl.length();
+ }
+
+ put_cnode(cn);
+ ebofs_lock.Unlock();
+ return r;
+}
+
int Ebofs::collection_getattrs(coll_t cid, map<string,bufferptr> &aset)
{
ebofs_lock.Lock();
int collection_setattr(coll_t cid, const char *name, const void *value, size_t size, Context *onsafe);
int collection_setattrs(coll_t cid, map<string,bufferptr> &aset);
int collection_getattr(coll_t cid, const char *name, void *value, size_t size);
+ int collection_getattr(coll_t cid, const char *name, bufferlist& bl);
int collection_getattrs(coll_t cid, map<string,bufferptr> &aset);
int collection_rmattr(coll_t cid, const char *name, Context *onsafe);
int collection_listattr(coll_t oid, vector<string>& attrs);
}
return -1;
}
+ int getattr(const char *name, bufferlist& bl) {
+ string n = name;
+ if (attrs.count(n)) {
+ bl.append(attrs[n]);
+ return bl.length();
+ }
+ return -1;
+ }
int getattrs(map<string,bufferptr>& aset) {
aset = attrs;
return 0;
faker_lock.Unlock();
return r;
}
+ int collection_getattr(coll_t c, const char *name, bufferlist& bl) {
+ faker_lock.Lock();
+ int r = fakecattrs[c].getattr(name, bl);
+ faker_lock.Unlock();
+ return r;
+ }
int collection_listattr(coll_t c, char *attrs, size_t size) {
faker_lock.Lock();
int r = fakecattrs[c].listattr(attrs,size);
return r < 0 ? -errno:r;
}
+int FileStore::collection_getattr(coll_t c, const char *name, bufferlist& bl)
+{
+ int r;
+ if (fake_attrs)
+ r = attrs.collection_getattr(c, name, bl);
+ else {
+ char fn[200];
+ get_cdir(c, fn);
+ r = do_getxattr(fn, name, NULL, 0);
+ if (r > 0) {
+ bl.push_back(buffer::create(r));
+ r = do_getxattr(fn, name, bl.c_str(), r);
+ }
+ }
+ return r < 0 ? -errno:r;
+}
+
int FileStore::collection_setattrs(coll_t cid, map<string,bufferptr>& aset)
{
int r;
int collection_setattr(coll_t c, const char *name, const void *value, size_t size, Context *onsafe=0);
int collection_rmattr(coll_t c, const char *name, Context *onsafe=0);
int collection_getattr(coll_t c, const char *name, void *value, size_t size);
+ int collection_getattr(coll_t c, const char *name, bufferlist& bl);
//int collection_listattr(coll_t c, char *attrs, size_t size);
int collection_getattrs(coll_t cid, map<string,bufferptr> &aset);
int collection_setattrs(coll_t cid, map<string,bufferptr> &aset);
blen++;
}
void setattr(coll_t cid, pobject_t oid, const char* name, const void* val, int len) {
+ bufferlist bl;
+ bl.append((char*)val, len);
+ setattr(cid, oid, name, bl);
+ }
+ void setattr(coll_t cid, pobject_t oid, const char* name, bufferlist& val) {
int op = OP_SETATTR;
ops.push_back(op);
cids.push_back(cid);
oids.push_back(oid);
attrnames.push_back(name);
- bufferlist bl;
- bl.append((char*)val,len);
- bls.push_back(bl);
+ bls.push_back(val);
len++;
blen++;
}
blen++;
}
void collection_setattr(coll_t cid, const char* name, const void* val, int len) {
+ bufferlist bl;
+ bl.append((char*)val, len);
+ collection_setattr(cid, name, bl);
+ }
+ void collection_setattr(coll_t cid, const char* name, bufferlist& val) {
int op = OP_COLL_SETATTR;
ops.push_back(op);
cids.push_back(cid);
attrnames.push_back(name);
- bufferlist bl;
- bl.append((char*)val, len);
- bls.push_back(bl);
+ bls.push_back(val);
len++;
blen++;
}
+
void collection_rmattr(coll_t cid, const char* name) {
int op = OP_COLL_RMATTR;
ops.push_back(op);
Context *onsafe=0) = 0;
virtual int collection_getattr(coll_t cid, const char *name,
void *value, size_t size) = 0;
+ virtual int collection_getattr(coll_t cid, const char *name, bufferlist& bl) = 0;
virtual int collection_getattrs(coll_t cid, map<string,bufferptr> &aset) = 0;
virtual int collection_setattrs(coll_t cid, map<string,bufferptr> &aset) = 0;