2G - RADOS namespaces CRUSH language extension CRUSH library¶
RADOS Namespaces¶Coding tasks
- protocol update for MOSDOp, MOSDOpReply to add namespace fields
- librados API changes: new versions of a handful of calls to add the new fields
- [aio_]operate (add C interface)
- os/FileStore changes
- almost nothing; hobject_t has a ns field.
- extend object file naming scheme and omap key naming scheme as needed (this may already be handled with the last hobject_t rev we did last year) [or maybe they already have them]
- extend OSDCap grammar and associated tests
- allow pool <foo> namespace <bar>
- OSD changes: add ns argument every that object is used
- anywhere there is an sobject_t... hopefully none or very few
- manage compatibility: make OSD error out gracefully if not all replicas support namespaces, prevent downgrade, etc. This may require a global osdmap flag indicating that namespaces are supported.
- once all osds in the OSDMap have the feature, we set the flag in the OSDMap
- MOSDBoot needs to communicate features
- extend librados list_objects() to have a ns field (along with object name and key)
- Update RBD to allow images to live in namespaces.
- inventing a convenience syntax? pool/namespace/image or pool/image ?
- disallow / and @ and : in image names
- Add namespace argument to rados cli tool
- make rados bench write into a namespace!
- add rados tool command to remove a namespace
- extend librados API tests
- extend existing filestore and osd stress tests to stress the namespace code
- make radosmodel test list_objects() [at a snapshot!!]
- extend osd cap tests
- Document OSDCap grammar and semantics
- Document namespace purpose, uses, and limitations
- Document how namespaces can be leveraged by OpenStack RBD users
- unbounded # of namespaces
- security limits by namespace
- efficient listing of namespace
- efficient listing of namespace contexts
- per-namespace stats
CRUSH Language Extension¶
- extend rule parser
- extend mapping function to implement new rule language
- port to kernel implementation
- define apppriate compatibility bits and integrate into existing Ceph compat checks
- document new rule language
- a stack to supplement the working vector
- chooseleaf would take a min # of unique items as well as total count of item
- needs some way to intelligently separate items beneath that point when there are dups
- sum over map of (type -> weight) instead of just weight
- block bucket summation
Expand crush tester/simulatorComments:
- You might want to look into the route-map user interface of Cisco routers. I thought it handles significantly complex policies the same level as we want in this case.
CRUSH Library¶Coding tasks
- clean up existing API for consistency, argument types, etc.
- define new API (C and/or C++)
- refactor CRUSH code
- adjust Ceph code to utilize new API
- build (at least a basic) unit test suite for the new API
- adjust ceph build
- package libcrush separately (deb, rpm)
- document new crush API