2G - RADOS namespaces CRUSH language extension CRUSH library » History » Version 1
Jessica Mack, 06/22/2015 05:02 AM
1 | 1 | Jessica Mack | h1. 2G - RADOS namespaces CRUSH language extension CRUSH library |
---|---|---|---|
2 | |||
3 | h3. Live Pad |
||
4 | |||
5 | The live pads can be found here: "[pad 1]":http://pad.ceph.com/p/rados_namespaces "[pad 2]":http://pad.ceph.com/p/extend_crush_rule_language "[pad 3]":http://pad.ceph.com/p/create_crush_library |
||
6 | |||
7 | h3. Summit Snapshot |
||
8 | |||
9 | h4. RADOS Namespaces |
||
10 | |||
11 | Coding tasks |
||
12 | # protocol update for MOSDOp, MOSDOpReply to add namespace fields |
||
13 | # librados API changes: new versions of a handful of calls to add the new fields |
||
14 | ## [aio_]operate (add C interface) |
||
15 | # os/FileStore changes |
||
16 | ## almost nothing; hobject_t has a ns field. |
||
17 | ## 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] |
||
18 | # extend OSDCap grammar and associated tests |
||
19 | ## allow pool <foo> namespace <bar> |
||
20 | # OSD changes: add ns argument every that object is used |
||
21 | ## anywhere there is an sobject_t... hopefully none or very few |
||
22 | # 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. |
||
23 | ## once all osds in the OSDMap have the feature, we set the flag in the OSDMap |
||
24 | ## MOSDBoot needs to communicate features |
||
25 | # extend librados list_objects() to have a ns field (along with object name and key) |
||
26 | # Update RBD to allow images to live in namespaces. |
||
27 | ## inventing a convenience syntax? pool/namespace/image or pool/image ? |
||
28 | ## disallow / and @ and : in image names |
||
29 | # Add namespace argument to rados cli tool |
||
30 | # make rados bench write into a namespace! |
||
31 | # add rados tool command to remove a namespace |
||
32 | |||
33 | Testing tasks |
||
34 | # extend librados API tests |
||
35 | # extend existing filestore and osd stress tests to stress the namespace code |
||
36 | ## make radosmodel test list_objects() [at a snapshot!!] |
||
37 | # extend osd cap tests |
||
38 | |||
39 | Documentation tasks |
||
40 | # Document OSDCap grammar and semantics |
||
41 | # Document namespace purpose, uses, and limitations |
||
42 | # Document how namespaces can be leveraged by OpenStack RBD users |
||
43 | |||
44 | Things we do support: |
||
45 | # unbounded # of namespaces |
||
46 | # security limits by namespace |
||
47 | |||
48 | Things we don't support: |
||
49 | # efficient listing of namespace |
||
50 | # efficient listing of namespace contexts |
||
51 | # per-namespace stats |
||
52 | |||
53 | h4. CRUSH Language Extension |
||
54 | |||
55 | Coding tasks |
||
56 | |||
57 | # extend rule parser |
||
58 | # extend mapping function to implement new rule language |
||
59 | # port to kernel implementation |
||
60 | # define apppriate compatibility bits and integrate into existing Ceph compat checks |
||
61 | |||
62 | Documentation tasks |
||
63 | |||
64 | # document new rule language |
||
65 | |||
66 | |||
67 | Possibilities: |
||
68 | # a stack to supplement the working vector |
||
69 | # chooseleaf would take a min # of unique items as well as total count of item |
||
70 | ## needs some way to intelligently separate items beneath that point when there are dups |
||
71 | # sum over map of (type -> weight) instead of just weight |
||
72 | # block bucket summation |
||
73 | |||
74 | Expand crush tester/simulator |
||
75 | |||
76 | Comments: |
||
77 | * 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. |
||
78 | |||
79 | |||
80 | h4. CRUSH Library |
||
81 | |||
82 | Coding tasks |
||
83 | # clean up existing API for consistency, argument types, etc. |
||
84 | # define new API (C and/or C++) |
||
85 | # refactor CRUSH code |
||
86 | # adjust Ceph code to utilize new API |
||
87 | # build (at least a basic) unit test suite for the new API |
||
88 | |||
89 | Build / release tasks |
||
90 | # adjust ceph build |
||
91 | # package libcrush separately (deb, rpm) |
||
92 | |||
93 | Documentation tasks |
||
94 | # document new crush API |