From 9d07dd30d63730018f1776406887992c9a35435f Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Mon, 1 Jun 2009 17:17:49 -0700 Subject: [PATCH] osd: add PGLS op --- src/include/rados.h | 3 +++ src/osd/ReplicatedPG.cc | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/include/rados.h b/src/include/rados.h index df2d0ce3535f5..c7eeb3104f18e 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -184,6 +184,9 @@ enum { /* fancy read */ CEPH_OSD_OP_MASKTRUNC = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_DATA | 4, + /* list pg */ + CEPH_OSD_OP_PGLS = CEPH_OSD_OP_MODE_RD | CEPH_OSD_OP_TYPE_NOOBJ | 1, + /* write */ CEPH_OSD_OP_WRITE = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 1, CEPH_OSD_OP_WRITEFULL = CEPH_OSD_OP_MODE_WR | CEPH_OSD_OP_TYPE_DATA | 2, diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 575c4a52d2140..cdc78a594dc85 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -857,6 +857,22 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& ops, } break; + case CEPH_OSD_OP_PGLS: + { + // read into a buffer + vector vec; + collection_list_handle_t handle = NULL; + int r = osd->store->collection_list_partial(info.pgid.to_coll(), vec, op.length, &handle); + if (!r) { + ctx->data_off = op.offset; + ::encode(vec, odata); + } else { + result = r; + } + dout(10) << " read got " << r << " / " << op.length << " bytes from obj " << soid << dendl; + } + break; + case CEPH_OSD_OP_RDCALL: { string cname, mname; -- 2.39.5