summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-10-01 16:01:24 -0700
committerSage Weil <sage@inktank.com>2013-10-01 16:01:24 -0700
commitece11f4a82062f7fb4413a6af5a64d80fd2046bf (patch)
tree39b70656e7040cebd94b603a3a4b6232bac5b212
parent011bff3405b06ed9c226cfbebaf9304295ecb184 (diff)
parent9b7a2ae329b6a511064dd3d6e549ba61f52cfd21 (diff)
downloadceph-ece11f4a82062f7fb4413a6af5a64d80fd2046bf.tar.gz
Merge remote-tracking branch 'gh/next'
Conflicts: PendingReleaseNotes
-rw-r--r--PendingReleaseNotes36
-rw-r--r--src/Makefile.am2
-rwxr-xr-xsrc/ceph-create-keys2
-rwxr-xr-xsrc/ceph-disk2
-rwxr-xr-xsrc/ceph-rest-api2
-rw-r--r--src/crush/CrushWrapper.cc1
-rw-r--r--src/crush/CrushWrapper.h1
-rw-r--r--src/librados/RadosClient.cc2
-rwxr-xr-xsrc/objsync/boto_del.py2
-rw-r--r--src/pybind/ceph_argparse.py6
-rwxr-xr-xsrc/pybind/ceph_rest_api.py1
-rw-r--r--src/rgw/rgw_metadata.cc2
-rw-r--r--src/rgw/rgw_rados.cc2
-rwxr-xr-xsrc/script/perf-watch.py2
-rwxr-xr-xsrc/vstart.sh4
15 files changed, 53 insertions, 14 deletions
diff --git a/PendingReleaseNotes b/PendingReleaseNotes
index 7d667f3ff59..ef52aca884b 100644
--- a/PendingReleaseNotes
+++ b/PendingReleaseNotes
@@ -1,3 +1,37 @@
v0.70
~~~~~
-mds: disable adding snapshots by default. (re-enable them with "ceph mds allow_snaps") \ No newline at end of file
+
+* librados::Rados::pool_create_async() and librados::Rados::pool_delete_async()
+ don't drop a reference to the completion object on error, caller needs to take
+ care of that. This has never really worked correctly and we were leaking an
+ object
+
+* 'ceph osd crush set <id> <weight> <loc..>' no longer adds the osd to the
+ specified location, as that's a job for 'ceph osd crush add'. It will
+ however continue to work just the same as long as the osd already exists
+ in the crush map.
+
+* The OSD now enforces that class write methods cannot both mutate an
+ object and return data. The rbd.assign_bid method, the lone
+ offender, has been removed. This breaks compatibility with
+ pre-bobtail librbd clients by preventing them from creating new
+ images.
+
+* librados now returns on commit instead of ack for synchronous calls.
+ This is a bit safer in the case where both OSDs and the client crash, and
+ is probably how it should have been acting from the beginning. Users are
+ unlikely to notice but it could result in lower performance in some
+ circumstances. Those who care should switch to using the async interfaces,
+ which let you specify safety semantics precisely.
+
+* The C++ librados AioComplete::get_version() method was incorrectly
+ returning an int (usually 32-bits). To avoid breaking library
+ compatibility, a get_version64() method is added that returns the
+ full-width value. The old method is deprecated and will be removed
+ in a future release. Users of the C++ librados API that make use of
+ the get_version() method should modify their code to avoid getting a
+ value that is truncated from 64 to to 32 bits.
+
+v0.71
+~~~~~
+
diff --git a/src/Makefile.am b/src/Makefile.am
index e09941ed8f3..280b268479e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -295,7 +295,7 @@ CLEANFILES += ceph_ver.h sample.fetch_config
ceph: ceph.in ./ceph_ver.h Makefile
rm -f $@ $@.tmp
- echo "#!/usr/bin/python" >$@.tmp
+ echo "#!/usr/bin/env python" >$@.tmp
grep "#define CEPH_GIT_NICE_VER" ./ceph_ver.h | \
sed -e 's/#define \(.*VER\) /\1=/' >>$@.tmp
grep "#define CEPH_GIT_VER" ./ceph_ver.h | \
diff --git a/src/ceph-create-keys b/src/ceph-create-keys
index 176b06e7a38..0359228d5f8 100755
--- a/src/ceph-create-keys
+++ b/src/ceph-create-keys
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
import argparse
import errno
import json
diff --git a/src/ceph-disk b/src/ceph-disk
index 3d09bdf7418..0691d252cd7 100755
--- a/src/ceph-disk
+++ b/src/ceph-disk
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
import argparse
import errno
diff --git a/src/ceph-rest-api b/src/ceph-rest-api
index ae5245b4f76..772b3d20fcd 100755
--- a/src/ceph-rest-api
+++ b/src/ceph-rest-api
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
# vim: ts=4 sw=4 smarttab expandtab
import argparse
diff --git a/src/crush/CrushWrapper.cc b/src/crush/CrushWrapper.cc
index bab9f9a817e..d17166bc4a9 100644
--- a/src/crush/CrushWrapper.cc
+++ b/src/crush/CrushWrapper.cc
@@ -861,7 +861,6 @@ void CrushWrapper::decode(bufferlist::iterator& blp)
decode_32_or_64_string_map(type_map, blp);
decode_32_or_64_string_map(name_map, blp);
decode_32_or_64_string_map(rule_name_map, blp);
- build_rmaps();
// tunables
if (!blp.end()) {
diff --git a/src/crush/CrushWrapper.h b/src/crush/CrushWrapper.h
index 80906e4fe18..b4bb67bb742 100644
--- a/src/crush/CrushWrapper.h
+++ b/src/crush/CrushWrapper.h
@@ -94,6 +94,7 @@ public:
crush_destroy(crush);
crush = crush_create();
assert(crush);
+ have_rmaps = false;
}
// tunables
diff --git a/src/librados/RadosClient.cc b/src/librados/RadosClient.cc
index 8a5f499ec15..1be3ebd10f9 100644
--- a/src/librados/RadosClient.cc
+++ b/src/librados/RadosClient.cc
@@ -459,7 +459,6 @@ int librados::RadosClient::pool_create_async(string& name, PoolAsyncCompletionIm
Context *onfinish = new C_PoolAsync_Safe(c);
int r = objecter->create_pool(name, onfinish, auid, crush_rule);
if (r < 0) {
- delete c;
delete onfinish;
}
return r;
@@ -505,7 +504,6 @@ int librados::RadosClient::pool_delete_async(const char *name, PoolAsyncCompleti
Context *onfinish = new C_PoolAsync_Safe(c);
int r = objecter->delete_pool(tmp_pool_id, onfinish);
if (r < 0) {
- delete c;
delete onfinish;
}
return r;
diff --git a/src/objsync/boto_del.py b/src/objsync/boto_del.py
index 14e790544ec..ba512e1ca33 100755
--- a/src/objsync/boto_del.py
+++ b/src/objsync/boto_del.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
#
# Ceph - scalable distributed file system
diff --git a/src/pybind/ceph_argparse.py b/src/pybind/ceph_argparse.py
index 7ec7b8b2f0c..1f6e90b6c1d 100644
--- a/src/pybind/ceph_argparse.py
+++ b/src/pybind/ceph_argparse.py
@@ -843,6 +843,11 @@ def validate(args, signature, partial=False):
# wanted n, got too few
if partial:
return d
+ # special-case the "0 expected 1" case
+ if desc.numseen == 0 and desc.n == 1:
+ raise ArgumentNumber(
+ 'missing required parameter {0}'.format(desc)
+ )
raise ArgumentNumber(
'saw {0} of {1}, expected {2}'.\
format(desc.numseen, desc, desc.n)
@@ -951,6 +956,7 @@ def validate_command(sigdict, args, verbose=False):
# Stop now, because we have the right command but
# some other input is invalid
print >> sys.stderr, "Invalid command: ", str(e)
+ print >> sys.stderr, concise_sig(sig), ': ', cmd['help']
return {}
if found:
break
diff --git a/src/pybind/ceph_rest_api.py b/src/pybind/ceph_rest_api.py
index c53c3d77737..75e61060544 100755
--- a/src/pybind/ceph_rest_api.py
+++ b/src/pybind/ceph_rest_api.py
@@ -1,4 +1,3 @@
-#!/usr/bin/python
# vim: ts=4 sw=4 smarttab expandtab
import errno
diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc
index 6da1ff5ab24..ca5ad3f2e7a 100644
--- a/src/rgw/rgw_metadata.cc
+++ b/src/rgw/rgw_metadata.cc
@@ -388,6 +388,8 @@ int RGWMetadataManager::remove(string& metadata_key)
objv_tracker.read_version = obj->get_version();
+ delete obj;
+
return handler->remove(store, entry, objv_tracker);
}
diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc
index 556aa1abba5..8b4d18f4e68 100644
--- a/src/rgw/rgw_rados.cc
+++ b/src/rgw/rgw_rados.cc
@@ -2184,8 +2184,8 @@ int RGWRados::create_pools(vector<string>& names, vector<int>& retcodes)
if (r < 0) {
ldout(cct, 0) << "WARNING: async pool_create returned " << r << dendl;
}
- c->release();
}
+ c->release();
retcodes.push_back(r);
}
return 0;
diff --git a/src/script/perf-watch.py b/src/script/perf-watch.py
index 8c18c3ec766..826d4a499d7 100755
--- a/src/script/perf-watch.py
+++ b/src/script/perf-watch.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
import json
import argparse
diff --git a/src/vstart.sh b/src/vstart.sh
index 4c04ef96410..def480779de 100755
--- a/src/vstart.sh
+++ b/src/vstart.sh
@@ -249,11 +249,11 @@ if [ -n "$ip" ]; then
IP="$ip"
else
echo hostname $HOSTNAME
- RAW_IP=`hostname --ip-address`
+ RAW_IP=`hostname -I`
# filter out IPv6 and localhost addresses
IP="$(echo "$RAW_IP"|tr ' ' '\012'|grep -v :|grep -v '^127\.'|head -n1)"
# if that left nothing, then try to use the raw thing, it might work
- if [ -z "IP" ]; then IP="$RAW_IP"; fi
+ if [ -z "$IP" ]; then IP="$RAW_IP"; fi
echo ip $IP
fi
echo "ip $IP"