Notes on RGW Sytem Object State

RGW raw object store has following structure: // rgw/rgw_rados.h struct RGWRawObjState { rgw_raw_obj obj; bool has_attrs{false}; bool exists{false}; uint64_t size{0}; ceph::real_time mtime; uint64_t epoch; bufferlist obj_tag; bool has_data{false}; bufferlist data; bool prefetch_data{false}; uint64_t pg_ver{0}; /* important! don’t forget to update copy constructor */ RGWObjVersionTracker objv_tracker; map<string, bufferlist> attrset; RGWRawObjState() {} Written with StackEdit.

Notes on RGW Request Path

The principle class is RGWOp. It defines request state, RGWRados store pointer. A RGW request struct req_state has Ceph contect op type info account, bucket info zonegroup name RGWBucketInfo bucket_info RGWUserInfo *user Op Execution RGWGetObj::execute() is the primary execution context under the class RGWGetObj. It uses interfaces of class RGWRados::Object to perfrom I/O ops. The … More Notes on RGW Request Path

Notes on RGW Manifest

RGW maintains a manifest of each object. The class RGWObjManifest implements the details with object head, tail placement. Manifest is written as XATTRs along with RGWRados::Object::Write::_do_write_meta( ). /** * Write/overwrite an object to the bucket storage. * bucket: the bucket to store the object in * obj: the object name/key * data: the object contents/value … More Notes on RGW Manifest

Ceph Outage with OSDs Heartbeat failure on Hammer (0.94.6)

Symptoms The cluster went down after 24 OSDs were added and marked in simultaneously. This was an erasure coded (10+5) RGW cluster on Hammer. All the OSDs started failing and eventually 50% of the OSDs were down. Manual efforts to bring them up failed and we saw heartbeat failures in OSDs log. All OSD were … More Ceph Outage with OSDs Heartbeat failure on Hammer (0.94.6)

Ceph Luminous build

struct RGWObjectCtx { RGWRados *store; void *user_ctx; RGWObjectCtxImpl<rgw_obj, RGWObjState> obj; RGWObjectCtxImpl<rgw_raw_obj, RGWRawObjState> raw; explicit RGWObjectCtx(RGWRados *_store) : store(_store), user_ctx(NULL), obj(store), raw(store) { } RGWObjectCtx(RGWRados *_store, void *_user_ctx) : store(_store), user_ctx(_user_ctx), obj(store), raw(store) { } }; Written with StackEdit.