summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage.weil@dreamhost.com>2012-02-24 13:52:32 -0800
committerSage Weil <sage.weil@dreamhost.com>2012-02-24 13:52:32 -0800
commit708be0a5abef63a5da8409ad13719adb7bb744f8 (patch)
tree0d90b3314dd37edf1ce2e219468bc062979ad977
parentb0feba56bd563321bdb6a347e9a863bc8eae1a9c (diff)
parent7700ea94f971feed1486bce5fe9cf2a88ef046f9 (diff)
downloadceph-708be0a5abef63a5da8409ad13719adb7bb744f8.tar.gz
Merge remote branch 'gh/wip-crush-adjust'
Reviewed-by: Tommi Virtanen <tommi.virtanen@dreamhost.com>
-rw-r--r--src/crush/builder.c4
-rw-r--r--src/test/cli/crushtool/multitype.after87
-rw-r--r--src/test/cli/crushtool/multitype.before87
-rw-r--r--src/test/cli/crushtool/reweight.t8
4 files changed, 184 insertions, 2 deletions
diff --git a/src/crush/builder.c b/src/crush/builder.c
index dcf5a8b6457..c68fdf04eed 100644
--- a/src/crush/builder.c
+++ b/src/crush/builder.c
@@ -727,7 +727,7 @@ int crush_adjust_list_bucket_item_weight(struct crush_bucket_list *bucket, int i
if (i == bucket->h.size)
return 0;
- diff = weight = bucket->item_weights[i];
+ diff = weight - bucket->item_weights[i];
bucket->item_weights[i] = weight;
bucket->h.weight += diff;
@@ -752,7 +752,7 @@ int crush_adjust_tree_bucket_item_weight(struct crush_bucket_tree *bucket, int i
return 0;
node = crush_calc_tree_node(i);
- diff = weight = bucket->node_weights[node];
+ diff = weight - bucket->node_weights[node];
bucket->node_weights[node] = weight;
bucket->h.weight += diff;
diff --git a/src/test/cli/crushtool/multitype.after b/src/test/cli/crushtool/multitype.after
new file mode 100644
index 00000000000..9c7da0aad6c
--- /dev/null
+++ b/src/test/cli/crushtool/multitype.after
@@ -0,0 +1,87 @@
+# begin crush map
+
+# devices
+device 0 osd0
+device 1 osd1
+device 2 osd2
+device 3 osd3
+device 4 osd4
+device 5 osd5
+device 6 osd6
+device 7 osd7
+device 8 osd8
+device 9 osd9
+
+# types
+type 0 osd
+type 1 host
+type 2 cluster
+
+# buckets
+host host0 {
+ id -2 # do not change unnecessarily
+ # weight 3.000
+ alg straw
+ hash 0 # rjenkins1
+ item osd0 weight 2.000
+ item osd1 weight 1.000
+}
+host host1 {
+ id -3 # do not change unnecessarily
+ # weight 3.000
+ alg list # add new items at the end; do not change order unnecessarily
+ hash 0 # rjenkins1
+ item osd3 weight 2.000
+ item osd4 weight 1.000
+}
+host host2 {
+ id -4 # do not change unnecessarily
+ # weight 5.500
+ alg tree # do not change pos for existing items unnecessarily
+ hash 0 # rjenkins1
+ item osd5 weight 1.000 pos 0
+ item osd6 weight 2.000 pos 1
+ item osd7 weight 0.500 pos 2
+ item osd8 weight 1.000 pos 3
+ item osd9 weight 1.000 pos 4
+}
+cluster cluster0 {
+ id -1 # do not change unnecessarily
+ # weight 11.500
+ alg straw
+ hash 0 # rjenkins1
+ item host0 weight 3.000
+ item host1 weight 3.000
+ item host2 weight 5.500
+}
+
+# rules
+rule data {
+ ruleset 0
+ type replicated
+ min_size 1
+ max_size 10
+ step take cluster0
+ step chooseleaf firstn 0 type host
+ step emit
+}
+rule metadata {
+ ruleset 1
+ type replicated
+ min_size 1
+ max_size 10
+ step take cluster0
+ step chooseleaf firstn 0 type host
+ step emit
+}
+rule rbd {
+ ruleset 2
+ type replicated
+ min_size 1
+ max_size 10
+ step take cluster0
+ step chooseleaf firstn 0 type host
+ step emit
+}
+
+# end crush map
diff --git a/src/test/cli/crushtool/multitype.before b/src/test/cli/crushtool/multitype.before
new file mode 100644
index 00000000000..8adcda9c3b7
--- /dev/null
+++ b/src/test/cli/crushtool/multitype.before
@@ -0,0 +1,87 @@
+# begin crush map
+
+# devices
+device 0 osd0
+device 1 osd1
+device 2 osd2
+device 3 osd3
+device 4 osd4
+device 5 osd5
+device 6 osd6
+device 7 osd7
+device 8 osd8
+device 9 osd9
+
+# types
+type 0 osd
+type 1 host
+type 2 cluster
+
+# buckets
+host host0 {
+ id -2 # do not change unnecessarily
+ # weight 2.000
+ alg straw
+ hash 0 # rjenkins1
+ item osd0 weight 1.000
+ item osd1 weight 1.000
+}
+host host1 {
+ id -3 # do not change unnecessarily
+ # weight 2.000
+ alg list
+ hash 0 # rjenkins1
+ item osd3 weight 1.000
+ item osd4 weight 1.000
+}
+host host2 {
+ id -4 # do not change unnecessarily
+ # weight 2.000
+ alg tree
+ hash 0 # rjenkins1
+ item osd5 weight 1.000
+ item osd6 weight 1.000
+ item osd7 weight 1.000
+ item osd8 weight 1.000
+ item osd9 weight 1.000
+}
+cluster cluster0 {
+ id -1 # do not change unnecessarily
+ # weight 2.000
+ alg straw
+ hash 0 # rjenkins1
+ item host0 weight 2.000
+ item host1 weight 2.000
+ item host2 weight 5.000
+}
+
+# rules
+rule data {
+ ruleset 0
+ type replicated
+ min_size 1
+ max_size 10
+ step take cluster0
+ step chooseleaf firstn 0 type host
+ step emit
+}
+rule metadata {
+ ruleset 1
+ type replicated
+ min_size 1
+ max_size 10
+ step take cluster0
+ step chooseleaf firstn 0 type host
+ step emit
+}
+rule rbd {
+ ruleset 2
+ type replicated
+ min_size 1
+ max_size 10
+ step take cluster0
+ step chooseleaf firstn 0 type host
+ step emit
+}
+
+# end crush map
diff --git a/src/test/cli/crushtool/reweight.t b/src/test/cli/crushtool/reweight.t
new file mode 100644
index 00000000000..f4da5c9cb30
--- /dev/null
+++ b/src/test/cli/crushtool/reweight.t
@@ -0,0 +1,8 @@
+ $ crushtool -c "$TESTDIR/multitype.before" -o mt > /dev/null
+ $ crushtool -i mt --reweight-item osd0 2.0 -o mt > /dev/null
+ $ crushtool -i mt --reweight-item osd3 2.0 -o mt > /dev/null
+ $ crushtool -i mt --reweight-item osd6 2.0 -o mt > /dev/null
+ $ crushtool -i mt --reweight-item osd7 .5 -o mt > /dev/null
+ $ crushtool -d mt -o final
+ $ diff final "$TESTDIR/multitype.after"
+ $ rm mt final