diff options
author | Sage Weil <sage@newdream.net> | 2009-04-04 14:27:38 -0700 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2009-04-04 14:29:21 -0700 |
commit | b1c0073f7eace29c9cf9cd1bc54c4d2f0598a27b (patch) | |
tree | e894d35a6bc29b86730d50e71ef470db04962b20 | |
parent | 365105fa07ba459b453d8ec61efb54db00afa242 (diff) | |
download | ceph-b1c0073f7eace29c9cf9cd1bc54c4d2f0598a27b.tar.gz |
osd: implement GETXATTR read op
-rw-r--r-- | src/osd/ReplicatedPG.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index e69f84b9af9..e27e6d8c4da 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -653,6 +653,7 @@ void ReplicatedPG::op_read(MOSDOp *op) return; + bufferlist::iterator bp = op->get_data().begin(); bufferlist data; int data_off = 0; int result = 0; @@ -747,6 +748,20 @@ void ReplicatedPG::op_read(MOSDOp *op) result = r; } break; + + case CEPH_OSD_OP_GETXATTR: + { + nstring name(p->name_len + 1); + name[0] = '_'; + bp.copy(p->name_len, name.data()+1); + int r = osd->store->getattr(info.pgid.to_coll(), poid, name.c_str(), data); + if (r >= 0) { + p->value_len = r; + result = 0; + } else + result = r; + } + break; case CEPH_OSD_OP_GREP: { |