diff options
author | Sage Weil <sage@inktank.com> | 2013-10-10 08:51:23 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-10-10 10:40:10 -0700 |
commit | af08daafb435fdb20dc341c54dfbc1827a60b228 (patch) | |
tree | fdec4f6e7c369a2d4d61580aafeecd73e3ed81b5 | |
parent | 098dfc618dbdcfcf79e8104d02c901e2f9718d15 (diff) | |
download | ceph-af08daafb435fdb20dc341c54dfbc1827a60b228.tar.gz |
osdc/Objecter: stick bl inside ListContext
This is simpler and less error-prone.
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/osdc/Objecter.cc | 16 | ||||
-rw-r--r-- | src/osdc/Objecter.h | 11 |
2 files changed, 11 insertions, 16 deletions
diff --git a/src/osdc/Objecter.cc b/src/osdc/Objecter.cc index 2ab412b913a..4da8fbaf4b2 100644 --- a/src/osdc/Objecter.cc +++ b/src/osdc/Objecter.cc @@ -1753,21 +1753,19 @@ void Objecter::list_objects(ListContext *list_context, Context *onfinish) { ObjectOperation op; op.pg_ls(list_context->max_entries, list_context->filter, list_context->cookie, list_context->current_pg_epoch); - - bufferlist *bl = new bufferlist(); - C_List *onack = new C_List(list_context, onfinish, bl, this); - + list_context->bl.clear(); + C_List *onack = new C_List(list_context, onfinish, this); object_locator_t oloc(list_context->pool_id, list_context->nspace); pg_read(list_context->current_pg, oloc, op, - bl, 0, onack, &onack->epoch); + &list_context->bl, 0, onack, &onack->epoch); } -void Objecter::_list_reply(ListContext *list_context, int r, bufferlist *bl, +void Objecter::_list_reply(ListContext *list_context, int r, Context *final_finish, epoch_t reply_epoch) { ldout(cct, 10) << "_list_reply" << dendl; - bufferlist::iterator iter = bl->begin(); + bufferlist::iterator iter = list_context->bl.begin(); pg_ls_response_t response; bufferlist extra_info; ::decode(response, iter); @@ -1790,7 +1788,6 @@ void Objecter::_list_reply(ListContext *list_context, int r, bufferlist *bl, list_context->list.merge(response.entries); if (response_size >= list_context->max_entries) { final_finish->complete(0); - delete bl; return; } @@ -1801,7 +1798,6 @@ void Objecter::_list_reply(ListContext *list_context, int r, bufferlist *bl, // hit the end of the pg. if (r == 0 && response_size > 0) { // not yet done with this pg - delete bl; list_objects(list_context, final_finish); return; } @@ -1813,7 +1809,6 @@ void Objecter::_list_reply(ListContext *list_context, int r, bufferlist *bl, ldout(cct, 20) << "emptied current pg, moving on to next one:" << list_context->current_pg << dendl; if (list_context->current_pg < list_context->starting_pg_num){ // we have more pgs to go through list_context->cookie = collection_list_handle_t(); - delete bl; list_objects(list_context, final_finish); return; } @@ -1821,7 +1816,6 @@ void Objecter::_list_reply(ListContext *list_context, int r, bufferlist *bl, // if we make it this far, there are no more pgs ldout(cct, 20) << "out of pgs, returning to" << final_finish << dendl; list_context->at_end = true; - delete bl; final_finish->complete(0); return; } diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index e91e6dac82d..b42a211b754 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -1020,6 +1020,8 @@ public: int pool_snap_seq; int max_entries; string nspace; + + bufferlist bl; // raw data read to here std::list<pair<object_t, string> > list; bufferlist filter; @@ -1034,14 +1036,13 @@ public: struct C_List : public Context { ListContext *list_context; Context *final_finish; - bufferlist *bl; Objecter *objecter; epoch_t epoch; - C_List(ListContext *lc, Context * finish, bufferlist *b, Objecter *ob) : - list_context(lc), final_finish(finish), bl(b), objecter(ob), epoch(0) {} + C_List(ListContext *lc, Context * finish, Objecter *ob) : + list_context(lc), final_finish(finish), objecter(ob), epoch(0) {} void finish(int r) { if (r >= 0) { - objecter->_list_reply(list_context, r, bl, final_finish, epoch); + objecter->_list_reply(list_context, r, final_finish, epoch); } else { final_finish->complete(r); } @@ -1262,7 +1263,7 @@ public: void reopen_session(OSDSession *session); void close_session(OSDSession *session); - void _list_reply(ListContext *list_context, int r, bufferlist *bl, Context *final_finish, + void _list_reply(ListContext *list_context, int r, Context *final_finish, epoch_t reply_epoch); void resend_mon_ops(); |