]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crush: implement CrushWrapper::dump(choose_args) 14486/head
authorLoic Dachary <ldachary@redhat.com>
Sun, 16 Apr 2017 15:21:41 +0000 (17:21 +0200)
committerLoic Dachary <ldachary@redhat.com>
Tue, 18 Apr 2017 07:45:13 +0000 (09:45 +0200)
Signed-off-by: Loic Dachary <loic@dachary.org>
src/crush/CrushWrapper.cc
src/crush/CrushWrapper.h
src/test/cli/crushtool/choose-args.t

index 4a32ccb7325c8b1423a204fe8e3a37749fe1cd57..7974b9a75014e698ec91afe9544f57fc4abab4d4 100644 (file)
@@ -5,6 +5,7 @@
 #include "common/debug.h"
 #include "common/Formatter.h"
 #include "common/errno.h"
+#include "include/stringify.h"
 
 #include "CrushWrapper.h"
 #include "CrushTreeDumper.h"
@@ -1822,6 +1823,8 @@ void CrushWrapper::dump(Formatter *f) const
   f->open_object_section("tunables");
   dump_tunables(f);
   f->close_section();
+
+  dump_choose_args(f);
 }
 
 namespace {
@@ -1914,6 +1917,46 @@ void CrushWrapper::dump_tunables(Formatter *f) const
   f->dump_int("has_v5_rules", (int)has_v5_rules());
 }
 
+void CrushWrapper::dump_choose_args(Formatter *f) const
+{
+  f->open_object_section("choose_args");
+  for (auto c : choose_args) {
+    crush_choose_arg_map arg_map = c.second;
+    f->open_array_section(stringify(c.first).c_str());
+    for (__u32 i = 0; i < arg_map.size; i++) {
+      crush_choose_arg *arg = &arg_map.args[i];
+      if (arg->weight_set_size == 0 &&
+         arg->ids_size == 0)
+       continue;
+      f->open_object_section("choose_args");
+      int bucket_index = i;
+      f->dump_int("bucket_id", -1-bucket_index);
+      if (arg->weight_set_size > 0) {
+       f->open_array_section("weight_set");
+       for (__u32 j = 0; j < arg->weight_set_size; j++) {
+         f->open_array_section("weights");
+         __u32 *weights = arg->weight_set[j].weights;
+         __u32 size = arg->weight_set[j].size;
+         for (__u32 k = 0; k < size; k++) {
+           f->dump_float("weight", (float)weights[k]/(float)0x10000);
+         }
+         f->close_section();
+       }
+       f->close_section();
+      }
+      if (arg->ids_size > 0) {
+       f->open_array_section("ids");
+       for (__u32 j = 0; j < arg->ids_size; j++)
+         f->dump_int("id", arg->ids[j]);
+       f->close_section();
+      }
+      f->close_section();
+    }
+    f->close_section();
+  }
+  f->close_section();
+}
+
 void CrushWrapper::dump_rules(Formatter *f) const
 {
   for (int i=0; i<get_max_rules(); i++) {
index 773824e4eba76fd0a47ffc84a8d138d552455710..3d829954d777c0d3740ca1fd9c4adc0149ad25c8 100644 (file)
@@ -1275,6 +1275,7 @@ public:
   void dump_rules(Formatter *f) const;
   void dump_rule(int ruleset, Formatter *f) const;
   void dump_tunables(Formatter *f) const;
+  void dump_choose_args(Formatter *f) const;
   void list_rules(Formatter *f) const;
   void dump_tree(ostream *out, Formatter *f) const;
   void dump_tree(Formatter *f) const;
index 0c7e322044196429be3eb7979e676d420b53b55d..6f1b47274acaf999a0512cbe994897d9d70d6a60 100644 (file)
@@ -4,3 +4,276 @@
   $ crushtool -c choose-args.conf -o choose-args.recompiled
   $ cmp choose-args.crush choose-args.conf
   $ cmp choose-args.compiled choose-args.recompiled
+  $ crushtool -c choose-args.conf -o /dev/null --dump
+  {
+      "devices": [
+          {
+              "id": 0,
+              "name": "device0"
+          },
+          {
+              "id": 1,
+              "name": "device1"
+          },
+          {
+              "id": 2,
+              "name": "device2"
+          }
+      ],
+      "types": [
+          {
+              "type_id": 0,
+              "name": "device"
+          },
+          {
+              "type_id": 1,
+              "name": "host"
+          },
+          {
+              "type_id": 2,
+              "name": "rack"
+          },
+          {
+              "type_id": 3,
+              "name": "root"
+          }
+      ],
+      "buckets": [
+          {
+              "id": -1,
+              "name": "host0",
+              "type_id": 1,
+              "type_name": "host",
+              "weight": 65536,
+              "alg": "straw",
+              "hash": "rjenkins1",
+              "items": [
+                  {
+                      "id": 0,
+                      "weight": 65536,
+                      "pos": 0
+                  }
+              ]
+          },
+          {
+              "id": -2,
+              "name": "host1",
+              "type_id": 1,
+              "type_name": "host",
+              "weight": 65536,
+              "alg": "straw",
+              "hash": "rjenkins1",
+              "items": [
+                  {
+                      "id": 1,
+                      "weight": 65536,
+                      "pos": 0
+                  }
+              ]
+          },
+          {
+              "id": -3,
+              "name": "rack0",
+              "type_id": 2,
+              "type_name": "rack",
+              "weight": 196608,
+              "alg": "straw",
+              "hash": "rjenkins1",
+              "items": [
+                  {
+                      "id": -1,
+                      "weight": 65536,
+                      "pos": 0
+                  },
+                  {
+                      "id": -2,
+                      "weight": 65536,
+                      "pos": 1
+                  },
+                  {
+                      "id": -5,
+                      "weight": 65536,
+                      "pos": 2
+                  }
+              ]
+          },
+          {
+              "id": -4,
+              "name": "root",
+              "type_id": 3,
+              "type_name": "root",
+              "weight": 262144,
+              "alg": "straw",
+              "hash": "rjenkins1",
+              "items": [
+                  {
+                      "id": -3,
+                      "weight": 262144,
+                      "pos": 0
+                  }
+              ]
+          },
+          {
+              "id": -5,
+              "name": "host2",
+              "type_id": 1,
+              "type_name": "host",
+              "weight": 65536,
+              "alg": "straw",
+              "hash": "rjenkins1",
+              "items": [
+                  {
+                      "id": 2,
+                      "weight": 65536,
+                      "pos": 0
+                  }
+              ]
+          }
+      ],
+      "rules": [
+          {
+              "rule_id": 0,
+              "rule_name": "data",
+              "ruleset": 3,
+              "type": 1,
+              "min_size": 2,
+              "max_size": 2,
+              "steps": [
+                  {
+                      "op": "take",
+                      "item": -4,
+                      "item_name": "root"
+                  },
+                  {
+                      "op": "chooseleaf_firstn",
+                      "num": 0,
+                      "type": "rack"
+                  },
+                  {
+                      "op": "emit"
+                  }
+              ]
+          }
+      ],
+      "tunables": {
+          "choose_local_tries": 2,
+          "choose_local_fallback_tries": 5,
+          "choose_total_tries": 19,
+          "chooseleaf_descend_once": 0,
+          "chooseleaf_vary_r": 0,
+          "chooseleaf_stable": 0,
+          "straw_calc_version": 0,
+          "allowed_bucket_algs": 22,
+          "profile": "argonaut",
+          "optimal_tunables": 0,
+          "legacy_tunables": 1,
+          "minimum_required_version": "argonaut",
+          "require_feature_tunables": 0,
+          "require_feature_tunables2": 0,
+          "has_v2_rules": 0,
+          "require_feature_tunables3": 0,
+          "has_v3_rules": 0,
+          "has_v4_buckets": 0,
+          "require_feature_tunables5": 0,
+          "has_v5_rules": 0
+      },
+      "choose_args": {
+          "1": [],
+          "2": [
+              {
+                  "bucket_id": -3,
+                  "ids": [
+                      -20,
+                      30,
+                      -25
+                  ]
+              }
+          ],
+          "3": [
+              {
+                  "bucket_id": -3,
+                  "weight_set": [
+                      [
+                          1.000000,
+                          2.000000,
+                          5.000000
+                      ],
+                      [
+                          3.000000,
+                          2.000000,
+                          5.000000
+                      ]
+                  ],
+                  "ids": [
+                      -20,
+                      -30,
+                      -25
+                  ]
+              }
+          ],
+          "4": [
+              {
+                  "bucket_id": -2,
+                  "weight_set": [
+                      [
+                          1.000000
+                      ],
+                      [
+                          3.000000
+                      ]
+                  ]
+              }
+          ],
+          "5": [
+              {
+                  "bucket_id": -1,
+                  "ids": [
+                      -450
+                  ]
+              }
+          ],
+          "6": [
+              {
+                  "bucket_id": -1,
+                  "ids": [
+                      -450
+                  ]
+              },
+              {
+                  "bucket_id": -2,
+                  "weight_set": [
+                      [
+                          1.000000
+                      ],
+                      [
+                          3.000000
+                      ]
+                  ]
+              },
+              {
+                  "bucket_id": -3,
+                  "weight_set": [
+                      [
+                          1.000000,
+                          2.000000,
+                          5.000000
+                      ],
+                      [
+                          3.000000,
+                          2.000000,
+                          5.000000
+                      ]
+                  ],
+                  "ids": [
+                      -20,
+                      -30,
+                      -25
+                  ]
+              }
+          ]
+      }
+  }
+  
+
+  $ crushtool -c choose-args.conf -o /dev/null --dump | jq .for_json_validation
+  null