New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
crush: add devices class that rules can use as a filter #13444
Commits on Mar 1, 2017
-
crush: parse "class XXX" after device
Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: parse "class XXX" after step take
Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: parse "class XXX" after bucket id
Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: _bucket_is_in_use does not use cct
Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: emacs comment is obsolete
Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: implement remove_unused_root
Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: get_item_weight must not fail on root
Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: implement device_class_clone
Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: implement split_id_class
Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: implement trim_roots_with_class
Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: a bucket is also busy if a derived bucket uses it
The step take of a rule may reference a bucket that is cloned from the original one, with the device class added. In this case both buckets are busy because they are taken by the rule. Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: implement {populate,cleanup}_classes
Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: do not erase non existent name
Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: clear bucket class ids when removed
Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: update device classes where relevant
The device classes are implemented by modifying: - the argument of step TAKE in rules - cloning bucket trees when required by a rule step This happens (via populate_classes): - before compiling a rule step TAKE When the crush map is encoded, the device class information is stored with it, independently from the rules and the buckets, as a map of classes for each device & bucket and a map of classes for each rule step TAKE. The extra buckets created but not used by any rule do not need to be preserved and they are removed (via cleanup_classes): - before decompilation - after compilation - after decoding The client and daemons that are not aware of the device classes are compatible because the crushmap modified with the new buckets is fully functional. The invalid names used in the for the generated buckets (bucket~class) can be CrushWrapper::decode by any existing client because there is no verification of the name validity during decoding. It can also be CrushWrapper::dump or CrushCompiler::decompile via ceph osd dump or crushtool. It cannot, however, be compiled again because CrushCompiler::compile will try to set the name with CrushWrapper::set_item_name and it will fail with EINVAL because of the ~. Fixes: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: document the class qualifier
The class qualifier is documented for devices and step take only. Although it shows in the buckets and could be set by the user, it would be very error prone to do so. Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>
-
crush: device classes mini cluster sanity check
Run a mini cluster and verify that modifying the crushmap, sending it to the cluster produces the intended effect. Refs: http://tracker.ceph.com/issues/18943 Signed-off-by: Loic Dachary <ldachary@redhat.com>