]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crush/CrushTreeDumper: sort tree items by (class, name) 16740/head
authorSage Weil <sage@redhat.com>
Tue, 1 Aug 2017 20:39:12 +0000 (16:39 -0400)
committerSage Weil <sage@redhat.com>
Tue, 1 Aug 2017 20:39:12 +0000 (16:39 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/crush/CrushTreeDumper.h
src/test/cli/crushtool/arg-order-checks.t

index 5bfbc14462369064abe66ba1cf07a07a904d4d25..4a3da9b82ff93d6e3095c2f065f2141cdba52999 100644 (file)
@@ -127,16 +127,33 @@ namespace CrushTreeDumper {
       touched.insert(qi.id);
 
       if (qi.is_bucket()) {
-       // queue bucket contents...
+       // queue bucket contents, sorted by (class, name)
        int s = crush->get_bucket_size(qi.id);
+       map<string,pair<int,float>> sorted;
        for (int k = s - 1; k >= 0; k--) {
          int id = crush->get_bucket_item(qi.id, k);
          if (should_dump(id)) {
-           qi.children.push_back(id);
-           push_front(Item(id, qi.id, qi.depth + 1,
-                           crush->get_bucket_item_weightf(qi.id, k)));
+           string sort_by;
+           if (id >= 0) {
+             const char *c = crush->get_item_class(id);
+             sort_by = c ? c : "";
+             sort_by += "_";
+             char nn[80];
+             snprintf(nn, sizeof(nn), "osd.%08d", id);
+             sort_by += nn;
+           } else {
+             sort_by = "_";
+             sort_by += crush->get_item_name(id);
+           }
+           sorted[sort_by] = make_pair(
+             id, crush->get_bucket_item_weightf(qi.id, k));
          }
        }
+       for (auto p = sorted.rbegin(); p != sorted.rend(); ++p) {
+         qi.children.push_back(p->second.first);
+         push_front(Item(p->second.first, qi.id, qi.depth + 1,
+                         p->second.second));
+       }
       }
       return true;
     }
index 540bee1807a5467ab2580fd325ae11ad3d1c4158..a83e37196c4fa41e1602fff27e08ebd0dcd88594 100644 (file)
@@ -6,43 +6,43 @@
   $ map="$TESTDIR/foo"
   $ crushtool --outfn "$map" --build --set-chooseleaf-vary-r 0 --set-chooseleaf-stable 0 --num_osds 25 node straw 5 rack straw 1 root straw 0 --reweight-item osd.2 99 -o "$map" --tree
   crushtool reweighting item osd.2 to 99
-  ID  WEIGHT    TYPE NAME          
-  -11 123.00000 root root          
-   -6 103.00000     rack rack0     
-   -1 103.00000         node node0 
-    0   1.00000             osd.0  
-    1   1.00000             osd.1  
-    2  99.00000             osd.2  
-    3   1.00000             osd.3  
-    4   1.00000             osd.4  
-   -7   5.00000     rack rack1     
-   -2   5.00000         node node1 
-    5   1.00000             osd.5  
-    6   1.00000             osd.6  
-    7   1.00000             osd.7  
-    8   1.00000             osd.8  
-    9   1.00000             osd.9  
-   -8   5.00000     rack rack2     
-   -3   5.00000         node node2 
-   10   1.00000             osd.10 
-   11   1.00000             osd.11 
-   12   1.00000             osd.12 
-   13   1.00000             osd.13 
-   14   1.00000             osd.14 
-   -9   5.00000     rack rack3     
-   -4   5.00000         node node3 
-   15   1.00000             osd.15 
-   16   1.00000             osd.16 
-   17   1.00000             osd.17 
-   18   1.00000             osd.18 
-   19   1.00000             osd.19 
-  -10   5.00000     rack rack4     
-   -5   5.00000         node node4 
-   20   1.00000             osd.20 
-   21   1.00000             osd.21 
-   22   1.00000             osd.22 
-   23   1.00000             osd.23 
-   24   1.00000             osd.24 
+  ID  CLASS WEIGHT    TYPE NAME          
+  -11       123.00000 root root          
+   -6       103.00000     rack rack0     
+   -1       103.00000         node node0 
+    0         1.00000             osd.0  
+    1         1.00000             osd.1  
+    2        99.00000             osd.2  
+    3         1.00000             osd.3  
+    4         1.00000             osd.4  
+   -7         5.00000     rack rack1     
+   -2         5.00000         node node1 
+    5         1.00000             osd.5  
+    6         1.00000             osd.6  
+    7         1.00000             osd.7  
+    8         1.00000             osd.8  
+    9         1.00000             osd.9  
+   -8         5.00000     rack rack2     
+   -3         5.00000         node node2 
+   10         1.00000             osd.10 
+   11         1.00000             osd.11 
+   12         1.00000             osd.12 
+   13         1.00000             osd.13 
+   14         1.00000             osd.14 
+   -9         5.00000     rack rack3     
+   -4         5.00000         node node3 
+   15         1.00000             osd.15 
+   16         1.00000             osd.16 
+   17         1.00000             osd.17 
+   18         1.00000             osd.18 
+   19         1.00000             osd.19 
+  -10         5.00000     rack rack4     
+   -5         5.00000         node node4 
+   20         1.00000             osd.20 
+   21         1.00000             osd.21 
+   22         1.00000             osd.22 
+   23         1.00000             osd.23 
+   24         1.00000             osd.24 
   $ crushtool -d "$map"
   # begin crush map
   tunable choose_local_tries 0