From: Loic Dachary Date: Wed, 11 Sep 2013 20:52:20 +0000 (+0200) Subject: mon: fix inverted test in osd pool create X-Git-Tag: v0.71~107^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F608%2Fhead;p=ceph.git mon: fix inverted test in osd pool create When using the properties key=value only, the test was inverted and an attempt to obtain a substring at index string::npos throws an exception. Add variations of osd pool create to qa/workunits/mon/pool_ops.sh to assert the problem has been fixed and all code paths are used. http://tracker.ceph.com/issues/6357 fixes #6357 Signed-off-by: Loic Dachary --- diff --git a/qa/workunits/mon/pool_ops.sh b/qa/workunits/mon/pool_ops.sh index e98e1e4121e6..2436cc4837e7 100755 --- a/qa/workunits/mon/pool_ops.sh +++ b/qa/workunits/mon/pool_ops.sh @@ -2,7 +2,8 @@ set -e -ceph osd pool create foo 123 123 +ceph osd pool create foo 123 123 key1=+++ && exit 1 || true +ceph osd pool create foo 123 123 key1=value1 key2 key3=value3 ceph osd pool create fooo 123 ceph osd pool create foo 123 # idempotent diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 36fe6d345f2a..8d15dbd94248 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -2526,7 +2526,7 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_rule, i != properties.end(); i++) { size_t equal = i->find('='); - if (equal != string::npos) + if (equal == string::npos) pi->properties[*i] = string(); else { const string key = i->substr(0, equal);