From 1f62ee8408d8cff91df5fd23f2ddfd58197a5b10 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 7 Aug 2017 16:50:44 -0400 Subject: [PATCH] crush: do add/remove before updating weight-sets Signed-off-by: Sage Weil --- src/crush/CrushWrapper.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc index 26350e63975..eb35ff7326f 100644 --- a/src/crush/CrushWrapper.cc +++ b/src/crush/CrushWrapper.cc @@ -1739,6 +1739,10 @@ int CrushWrapper::add_bucket( int CrushWrapper::bucket_add_item(crush_bucket *bucket, int item, int weight) { __u32 new_size = bucket->size + 1; + int r = crush_bucket_add_item(crush, bucket, item, weight); + if (r < 0) { + return r; + } for (auto w : choose_args) { crush_choose_arg_map arg_map = w.second; crush_choose_arg *arg = &arg_map.args[-1-bucket->id]; @@ -1757,7 +1761,7 @@ int CrushWrapper::bucket_add_item(crush_bucket *bucket, int item, int weight) arg->ids_size = new_size; } } - return crush_bucket_add_item(crush, bucket, item, weight); + return 0; } int CrushWrapper::bucket_remove_item(crush_bucket *bucket, int item) @@ -1768,6 +1772,10 @@ int CrushWrapper::bucket_remove_item(crush_bucket *bucket, int item) if (bucket->items[position] == item) break; assert(position != bucket->size); + int r = crush_bucket_remove_item(crush, bucket, item); + if (r < 0) { + return r; + } for (auto w : choose_args) { crush_choose_arg_map arg_map = w.second; crush_choose_arg *arg = &arg_map.args[-1-bucket->id]; @@ -1788,7 +1796,7 @@ int CrushWrapper::bucket_remove_item(crush_bucket *bucket, int item) arg->ids_size = new_size; } } - return crush_bucket_remove_item(crush, bucket, item); + return 0; } int CrushWrapper::update_device_class(int id, -- 2.39.5