]> review.fuel-infra Code Review - packages/trusty/ceph.git/commitdiff
Update to ceph 0.94.6 07/17407/6 master mos-9.0
authorAlexey Sheplyakov <asheplyakov@mirantis.com>
Thu, 25 Feb 2016 05:24:10 +0000 (08:24 +0300)
committerAlexey Sheplyakov <asheplyakov@mirantis.com>
Wed, 2 Mar 2016 10:08:20 +0000 (13:08 +0300)
Fixes a number of bugs including but not limited to

"Qemu hangs after creating snapshot and stopping VM", http://tracker.ceph.com/issues/13726
"Cannot reliably create snapshot after freezing QEMU IO", http://tracker.ceph.com/issues/14373
"rbd-replay does not check for EOF and goes to endless loop", http://tracker.ceph.com/issues/14452
"Incorrect ETAG calculated for POST uploads", http://tracker.ceph.com/issues/11241
"rgw: missing handling of encoding-type=url when listing keys in bucket", http://tracker.ceph.com/issues/12735

The code has been downloaded from http://download.ceph.com/tarballs/ceph-0.94.6.tar.gz

Debianization has been borrowed from
http://anonscm.debian.org/cgit/pkg-ceph/ceph.git/commit/?h=hammer&id=300878169869e3ca73051f6ca671d4d209d4cef6

Additional patches:
ceph-disk: fix udev generated symlinks handling, https://github.com/ceph/ceph/pull/7123
rados bench seq: fix failure due to locking errors, https://github.com/ceph/ceph/pull/7817

Change-Id: I1f5e65aeaf954381bbb619d5fbb2b18012b41df6

196 files changed:
ceph/AUTHORS
ceph/ChangeLog
ceph/ceph.spec
ceph/ceph.spec.in
ceph/configure
ceph/configure.ac
ceph/man/ceph-authtool.8
ceph/man/ceph-clsinfo.8
ceph/man/ceph-conf.8
ceph/man/ceph-create-keys.8
ceph/man/ceph-debugpack.8
ceph/man/ceph-dencoder.8
ceph/man/ceph-deploy.8
ceph/man/ceph-disk.8
ceph/man/ceph-fuse.8
ceph/man/ceph-mds.8
ceph/man/ceph-mon.8
ceph/man/ceph-osd.8
ceph/man/ceph-post-file.8
ceph/man/ceph-rbdnamer.8
ceph/man/ceph-rest-api.8
ceph/man/ceph-run.8
ceph/man/ceph-syn.8
ceph/man/ceph.8
ceph/man/cephfs.8
ceph/man/crushtool.8
ceph/man/librados-config.8
ceph/man/monmaptool.8
ceph/man/mount.ceph.8
ceph/man/osdmaptool.8
ceph/man/rados.8
ceph/man/radosgw-admin.8
ceph/man/radosgw.8
ceph/man/rbd-fuse.8
ceph/man/rbd-replay-many.8
ceph/man/rbd-replay-prep.8
ceph/man/rbd-replay.8
ceph/man/rbd.8
ceph/src/.git_version
ceph/src/Makefile-env.am
ceph/src/Makefile.am
ceph/src/Makefile.in
ceph/src/auth/cephx/CephxServiceHandler.cc
ceph/src/ceph-disk
ceph/src/ceph_fuse.cc
ceph/src/ceph_osd.cc
ceph/src/ceph_syn.cc
ceph/src/cls/rgw/cls_rgw.cc
ceph/src/common/Makefile.am
ceph/src/common/Thread.cc
ceph/src/common/TracepointProvider.cc [new file with mode: 0644]
ceph/src/common/TracepointProvider.h [new file with mode: 0644]
ceph/src/common/WorkQueue.h
ceph/src/common/buffer.cc
ceph/src/common/ceph_context.cc
ceph/src/common/ceph_context.h
ceph/src/common/config_opts.h
ceph/src/common/obj_bencher.cc
ceph/src/common/obj_bencher.h
ceph/src/common/run_cmd.cc
ceph/src/common/sync_filesystem.h
ceph/src/crush/mapper.c
ceph/src/include/buffer.h
ceph/src/include/rados/buffer.h
ceph/src/init-ceph.in
ceph/src/init-radosgw
ceph/src/init-rbdmap
ceph/src/krbd.cc
ceph/src/libcephfs.cc
ceph/src/librados/Makefile.am
ceph/src/librados/RadosClient.cc
ceph/src/librados/librados.cc
ceph/src/libradosstriper/Makefile.am
ceph/src/librbd/AsyncResizeRequest.cc
ceph/src/librbd/ImageCtx.cc
ceph/src/librbd/ImageWatcher.cc
ceph/src/librbd/ImageWatcher.h
ceph/src/librbd/Makefile.am
ceph/src/librbd/ObjectMap.cc
ceph/src/librbd/ObjectMap.h
ceph/src/librbd/TaskFinisher.h
ceph/src/librbd/internal.cc
ceph/src/librbd/librbd.cc
ceph/src/log/Log.cc
ceph/src/logrotate.conf
ceph/src/mon/Elector.cc
ceph/src/mon/MDSMonitor.cc
ceph/src/mon/MonClient.cc
ceph/src/mon/Monitor.cc
ceph/src/mon/MonitorDBStore.h
ceph/src/mon/OSDMonitor.cc
ceph/src/mon/OSDMonitor.h
ceph/src/mon/PGMap.cc
ceph/src/mon/PGMonitor.cc
ceph/src/mon/PaxosService.cc
ceph/src/mon/Session.h
ceph/src/msg/Messenger.cc
ceph/src/msg/Messenger.h
ceph/src/msg/async/AsyncMessenger.h
ceph/src/os/FileStore.cc
ceph/src/os/FileStore.h
ceph/src/os/Makefile.am
ceph/src/osd/ECBackend.cc
ceph/src/osd/Makefile.am
ceph/src/osd/OSD.cc
ceph/src/osd/OSD.h
ceph/src/osd/OSDMap.cc
ceph/src/osd/OSDMap.h
ceph/src/osd/OpRequest.cc
ceph/src/osd/PG.cc
ceph/src/osd/PG.h
ceph/src/osd/PGBackend.cc
ceph/src/osd/ReplicatedBackend.cc
ceph/src/osd/ReplicatedPG.cc
ceph/src/osd/osd_types.cc
ceph/src/osd/osd_types.h
ceph/src/osdc/ObjectCacher.cc
ceph/src/osdc/Objecter.cc
ceph/src/osdc/Objecter.h
ceph/src/rbd.cc
ceph/src/rbd_replay/ActionTypes.cc [new file with mode: 0644]
ceph/src/rbd_replay/ActionTypes.h [new file with mode: 0644]
ceph/src/rbd_replay/BufferReader.cc [new file with mode: 0644]
ceph/src/rbd_replay/BufferReader.h [new file with mode: 0644]
ceph/src/rbd_replay/Deser.cc [deleted file]
ceph/src/rbd_replay/Deser.hpp [deleted file]
ceph/src/rbd_replay/Makefile.am
ceph/src/rbd_replay/Replayer.cc
ceph/src/rbd_replay/Replayer.hpp
ceph/src/rbd_replay/Ser.cc [deleted file]
ceph/src/rbd_replay/Ser.hpp [deleted file]
ceph/src/rbd_replay/actions.cc
ceph/src/rbd_replay/actions.hpp
ceph/src/rbd_replay/ios.cc
ceph/src/rbd_replay/ios.hpp
ceph/src/rbd_replay/rbd-replay-prep.cc
ceph/src/rgw/logrotate.conf
ceph/src/rgw/rgw_admin.cc
ceph/src/rgw/rgw_civetweb.cc
ceph/src/rgw/rgw_common.h
ceph/src/rgw/rgw_op.cc
ceph/src/rgw/rgw_op.h
ceph/src/rgw/rgw_orphan.cc
ceph/src/rgw/rgw_rest.cc
ceph/src/rgw/rgw_rest_s3.cc
ceph/src/test/Makefile-client.am
ceph/src/test/bufferlist.cc
ceph/src/test/centos-6/ceph.spec.in
ceph/src/test/centos-7/ceph.spec.in
ceph/src/test/cli/radosgw-admin/help.t
ceph/src/test/encoding/types.h
ceph/src/test/librados/aio.cc
ceph/src/test/librados/io.cc
ceph/src/test/librados/test.cc
ceph/src/test/librados/test.h
ceph/src/test/librados_test_stub/TestRadosClient.cc
ceph/src/test/librados_test_stub/TestWatchNotify.cc
ceph/src/test/librados_test_stub/TestWatchNotify.h
ceph/src/test/librbd/test_librbd.cc
ceph/src/test/mon/PGMap.cc
ceph/src/test/mon/test_mon_workloadgen.cc
ceph/src/test/osd/Object.cc
ceph/src/test/osd/Object.h
ceph/src/test/osd/RadosModel.h
ceph/src/test/test_rbd_replay.cc
ceph/src/tools/ceph_monstore_tool.cc
ceph/src/tools/cephfs/MDSUtility.cc
ceph/src/tools/rados/rados.cc
ceph/src/tracing/Makefile.am
ceph/src/tracing/Makefile.in [deleted file]
ceph/src/tracing/librados.c [new file with mode: 0644]
ceph/src/tracing/librbd.c [new file with mode: 0644]
ceph/src/tracing/objectstore.c [new file with mode: 0644]
ceph/src/tracing/oprequest.c [new file with mode: 0644]
ceph/src/tracing/osd.c [new file with mode: 0644]
ceph/src/tracing/pg.c [new file with mode: 0644]
ceph/src/upstart/ceph-osd.conf
debian/ceph.NEWS [new file with mode: 0644]
debian/ceph.dirs
debian/ceph.logrotate [new symlink]
debian/changelog
debian/control
debian/copyright
debian/gbp.conf
debian/patches/ObjBencher-seq_read_bench-fix-locking-errors.patch [new file with mode: 0644]
debian/patches/bug-10036.patch [new file with mode: 0644]
debian/patches/ceph-disk-fix-symlinks-handling.patch [new file with mode: 0644]
debian/patches/rbdmap3-lazyumount.patch
debian/patches/series
debian/patches/tests-disable-ceph-disk.patch [new file with mode: 0644]
debian/patches/tests-disable.patch [new file with mode: 0644]
debian/patches/use_system_jerasure.patch [new file with mode: 0644]
debian/radosgw.dirs
debian/radosgw.logrotate [new symlink]
debian/rules
debian/watch

index 40a53166d6f663bfb7ecbb6fb452c18b9781dceb..6d2002075846fa6cab6ffbebcbd56fc33712fbf3 100644 (file)
@@ -15,6 +15,7 @@ Alexandre Marangone <alexandre.marangone@inktank.com>
 Alexandre Oliva <oliva@gnu.org>
 Alex Elder <elder@inktank.com>
 Alexey Lapitsky <lex@realisticgroup.com>
+Alexey Sheplyakov <asheplyakov@mirantis.com>
 Alfredo Deza <adeza@redhat.com>
 Alfredo Deza <alfredo.deza@inktank.com>
 Ali Maredia <ali@linuxbox.com>
@@ -51,9 +52,12 @@ Billy Olsen <billy.olsen@gmail.com>
 BJ Lougee <almightybeeij@gmail.com>
 Bjørnar Ness <bjornar.ness@gmail.com>
 Blaine Gardner <blaine.gardner@hp.com>
+Bo Cai <cai.bo@h3c.com>
 Boris Ranto <branto@redhat.com>
+Brad Hubbard <bhubbard@redhat.com>
 Brandon Seibel <brandon@seibelnet.ca>
 branto1 <branto@redhat.com>
+brian <bjfelton@gmail.com>
 Brian Chrisman <brchrisman@gmail.com>
 Brian Rak <dn@devicenull.org>
 Brown, David M JR <david.brown@pnl.gov>
@@ -67,6 +71,7 @@ Cesar Mello <cesar@d1.(none)>
 Chen Baozi <baozich@gmail.com>
 Chendi Xue <chendi.xue@intel.com>
 Cheng Cheng <ccheng.leo@gmail.com>
+Chengyuan Li <chengyli@ebay.com>
 Chris Dunlop <chris@onthe.net.au>
 Chris Glass <tribaal@gmail.com>
 Chris Holcombe <chris.holcombe@nebula.com>
@@ -77,10 +82,12 @@ Christophe Courtaut <christophe.courtaut@gmail.com>
 Christopher O'Connell <jwriteclub@gmail.com>
 Christoph Hellwig <hch@infradead.org>
 Christos Stavrakakis <stavr.chris@gmail.com>
+Cilang Zhao <zhao.cilang@h3c.com>
 Colin Mattson <colinmattson@gmail.com>
 Colin P. McCabe <colinm@hq.newdream.net>
 Dan Chai <tengweicai@gmail.com>
 Daniel Gollub <d.gollub@telekom.de>
+Daniel Gryniewicz <dang@fprintf.net>
 Daniel J. Hofmann <daniel@trvx.org>
 Dan Mick <dan.mick@inktank.com>
 Dan Mick <dmick@redhat.com>
@@ -102,6 +109,7 @@ Dominik Hannen <cantares1+github@gmail.com>
 Dongmao Zhang <deanraccoon@gmail.com>
 Dongsu Park <dpark1978@gmail.com>
 Dong Yuan <yuandong1222@gmail.com>
+Douglas Fuller <dfuller@redhat.com>
 dwj192 <duanweijun@h3c.com>
 Eleanor Cawthon <eleanor.cawthon@inktank.com>
 Emily Popper <emily.popper@dreamhost.com>
@@ -144,11 +152,13 @@ Hazem <hazem@hazem-Inspiron-3537.(none)>
 Henry C Chang <henry_c_chang@tcloudcomputing.com>
 Henry Chang <henry@bigtera.com>
 Herb Shiu <herb_shiu@tcloudcomputing.com>
+Herve Rousseau <hroussea@cern.ch>
 Hervé Rousseau <hroussea@cern.ch>
 Holger Macht <hmacht@suse.de>
 Huamin Chen <hchen@redhat.com>
 Huang Jun <hjwsm1989@gmail.com>
 Ian Holsman <lists@holsman.net>
+Igor Fedotov <ifedotov@mirantis.com>
 Ilya Dryomov <idryomov@redhat.com>
 Ilya Dryomov <ilya.dryomov@inktank.com>
 islepnev <islepnev@gmail.com>
@@ -158,6 +168,8 @@ Jan Harkes <jaharkes@cs.cmu.edu>
 Janne Grunau <j@jannau.net>
 Jason Dillaman <dillaman@redhat.com>
 Javier M. Mellid <jmunhoz@igalia.com>
+Jeff Weber <jweber@cofront.net>
+Jenkins Build Slave User <jenkins-build@jenkins-slave-wheezy.localdomain>
 Jenkins <jenkins@ceph.com>
 Jenkins <jenkins@inktank.com>
 Jens-Christian Fischer <jens-christian.fischer@switch.ch>
@@ -171,6 +183,7 @@ João Eduardo Luís <joao.luis@inktank.com>
 João Eduardo Luís <joao@redhat.com>
 Joao Eduardo Luis <joao@suse.de>
 Joe Buck <jbbuck@gmail.com>
+Joe Julian <jjulian@io.com>
 Johannes Erdfelt <johannes@erdfelt.com>
 John Spray <john.spray@inktank.com>
 John Spray <jspray@redhat.com>
@@ -217,6 +230,7 @@ Loic Dachary <loic-201408@dachary.org>
 Loic Dachary <loic@dachary.org>
 Luis Pabón <lpabon@redhat.com>
 Lukasz Jagiello <lukasz@wikia-inc.com>
+Lu Shi <shi.lu@h3c.com>
 Ma Jianpeng <jianpeng.ma@intel.com>
 Marco Garcês <marco.garces@bci.co.mz>
 Marcus Sorensen <shadowsor@gmail.com>
@@ -273,6 +287,8 @@ Peter Wienemann <wienemann@physik.uni-bonn.de>
 Pete V <peter@squid.newdream.net>
 Petr Machata <pmachata@redhat.com>
 Pierre Rognant <prognant@oodrive.com>
+Piotr DaÅ‚ek <piotr.dalek@ts.fujitsu.com>
+qiankunzheng <zheng.qiankun@h3c.com>
 qiushanggao <qiushanggao@qq.com>
 Radoslaw Zarzynski <rzarzynski@mirantis.com>
 Raju Kurunkad <raju.kurunkad@sandisk.com>
@@ -285,6 +301,7 @@ ritz303 <ritz_303@yahoo.com>
 Roald J. van Loon <roald@roaldvanloon.nl>
 RobertJansen1 <r.jansen86@gmail.com>
 Robin H. Johnson <robbat2@gentoo.org>
+Robin H. Johnson <robin.johnson@dreamhost.com>
 Rohan Mars <code@rohanmars.com>
 Roman Haritonov <reclosedev@gmail.com>
 Ron Allred <rallred@itrefined.com>
@@ -294,6 +311,7 @@ Ross Turk <ross.turk@inktank.com>
 Ross Turk <rturk@redhat.com>
 Ruben Kerkhof <ruben@rubenkerkhof.com>
 Ruifeng Yang <149233652@qq.com>
+Ruifeng Yang <yangruifeng.09209@h3c.com>
 Rutger ter Borg <rutger@terborg.net>
 Sage Weil <sage@inktank.com>
 Sage Weil <sweil@redhat.com>
@@ -303,6 +321,7 @@ Samuel Just <sam.just@inktank.com>
 Samuel Just <sjust@redhat.com>
 Sandon Van Ness <sandon@inktank.com>
 Sandon Van Ness <svanness@redhat.com>
+Sangdi Xu <xu.sangdi@h3c.com>
 Scott A. Brandt <scott@cs.ucsc.edu>
 Scott Devoid <devoid@anl.gov>
 Sean Channel <pentabular@gmail.com>
@@ -361,8 +380,10 @@ Volker Assmann <volker@twisted-nerve.de>
 VRan Liu <gliuwr@gmail.com>
 Vu Pham <vu@mellanox.com>
 Walter Huf <hufman@gmail.com>
+wangchaunhong <root@A22832429.(none)>
 Wang, Yaguang <yaguang.wang@intel.com>
 Warren Usui <warren.usui@inktank.com>
+Weijun Duan <duanweijun@h3c.com>
 Wei Luo <luowei@yahoo-inc.com>
 Wesley Spikes <wesley.spikes@dreamhost.com>
 Wido den Hollander <wido@42on.com>
@@ -373,10 +394,13 @@ Wyllys Ingersoll <wyllys.ingersoll@keepertech.com>
 Xan Peng <xanpeng@gmail.com>
 Xiaowei Chen <cxwshawn@gmail.com>
 Xiaoxi Chen <xiaoxi.chen@intel.com>
+xiexingguo <258156334@qq.com>
 Xihui He <xihuihe@gmail.com>
 Xing Lin <xinglin@cs.utah.edu>
+Xinze Chi <xinze@xksy.com>
 Xinze Chi <xmdxcxz@gmail.com>
 Xiong Yiliang <xiongyiliang@xunlei.com>
+yangruifeng <yangruifeng.09209@h3c.com>
 Yann Dupont <yann@objoo.org>
 Yan, Zheng <zheng.z.yan@intel.com>
 Yan, Zheng <zyan@redhat.com>
@@ -390,3 +414,4 @@ Yuri Weinstein <yuri.weinstein@inktank.com>
 Zhe Zhang <zzxuanyuan@gmail.com>
 Zhiqiang Wang <zhiqiang.wang@intel.com>
 Zhi Zhang <zhangz.david@outlook.com>
+zqkkqz <zheng.qiankun@h3c.com>
index ceb3dac6f6e8cb09c2b2f1855d1b82fabec480c2..273c1d62c479cf6f29456945b990608318ac8f07 100644 (file)
-9764da5 (HEAD, tag: v0.94.5) 0.94.5
+e832001 (HEAD, tag: v0.94.6, origin/hammer) 0.94.6
+9ab5fd9 rgw-admin: document orphans commands in usage
+0e1378e [backport] rgw: fix wrong etag calculation during POST on S3 bucket.
+5c8d1d7 [backport] rgw: Make RGW_MAX_PUT_SIZE configurable
+f2ca42b doc: add orphans commands to radosgw-admin(8)
+e42ed6d man: rebuild manpages
+a8fc6a9 fsx: checkout old version until it compiles properly on miras
+1b02859 qa/fsstress.sh: fix 'cp not writing through dangling symlink'
+9109304 mon: compact full epochs also
+2817ffc Check for full before changing the cached obc
+ae56de0 osd: recency should look at newest (not oldest) hitsets
+5cefcb9 osd/ReplicatedPG: fix promotion recency logic
+a5e4f70 man: document listwatchers cmd in "rados" manpage
+46d626d rbd: remove canceled tasks from timer thread
+24c0b27 rbd-replay: handle EOF gracefully
+70f1ba3 tools: monstore: add 'show-versions' command.
+9260171 tools: ceph_monstore_tool: add inflate-pgmap command
+a1d5728 tools:support printing the crushmap in readable fashion.
+bd94847 tools:print the map infomation in human readable format.
+fba6583 tools:remove the local file when get map failed.
+1bb899a tools: ceph_monstore_tool: describe behavior of rewrite command
+9035c69 tools/ceph-monstore-tools: add rewrite command
+90aaed7 tools: ceph-monstore-tool must do out_store.close()
+c7252a3 osd: disable filestore_xfs_extsize by default
+73e03de librbd: ImageWatcher shouldn't block the notification thread
+5617166 librados_test_stub: watch/notify now behaves similar to librados
+8fc82b2 tests: simulate writeback flush during snap create
+9f30fe1 upstart/ceph-osd.conf: pass TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES through
+a58873e init-ceph: pass TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES through
+8d9e08c tools: ceph-monstore-tool must do out_store.close()
+0325f8a deb: strip tracepoint libraries from Wheezy/Precise builds
+e4d3e9b qa: disable rbd/qemu-iotests test case 055 on RHEL/CentOS
+f7acd44 qa: remove legacy OS support from rbd/qemu-iotests
+8c28f2f librbd: optionally validate RBD pool configuration (snapshot support)
+700be56 config_opts: increase suicide timeout to 300 to match recovery
+447ab1d tests: notification slave needs to wait for master
+53742bd ceph_osd: Add required feature bits related to this branch to osd_required mask
+3066231 osd: CEPH_FEATURE_CHUNKY_SCRUB feature now required
+6379ff1 configure.ac: no use to add "+" before ac_ext=c
+f96c812 rgw: fix reload on non Debian systems.
+cbb5c1f Fixing NULL pointer dereference
+b2961ce rbd: fix bench-write
+9cee89b Check that delta_sum.stats.sum.num_object_copies and delta_sum.stats.sum.num_object are greater than zero
+1ab2b48 ReplicatedPG: fix sparse-read result code checking logic
+86f5cf6 osd: clear pg_stat_queue after stopping pgs
+b0856ee osd: Test osd_find_best_info_ignore_history_les config in another assert
+b2f1e76 Compare parted output with the dereferenced path
+5264bc6 mon: OSDMonitor: do not assume a session exists in send_incremental()
+4d0b9a1 log: Log.cc: Assign LOG_DEBUG priority to syslog calls
+26e832e librbd: fix merge-diff for >2GB diff-files
+a9d3f07 osd/osd_types: skip encoding newer object_info_t fields if they are unused
+1548a3f osd/ReplicatedPG: do not set local_mtime on non-tiered pool
+98bdb09 osd/PGBackend: use mtime for digest decision if local_mtime is empty
+fe1c28d osd/ReplicatedPG: do not set omap digest if there is no omap
+6cf261c Objecter: remove redundant result-check of _calc_target in _map_session.
+5d0b5c1 Objecter: potential null pointer access when do pool_snap_list.
+66ff0aa auth/cephx: large amounts of log are produced by osd if the auth of osd is deleted when the osd is running, the osd will produce large amounts of log.
+61da13b mon/PGMonitor: MAX AVAIL is 0 if some OSDs' weight is 0
+53e81aa init-ceph: fix systemd-run cant't start ceph daemon sometimes
+c2c6d02 tools: fix race condition in seq/rand bench
+a619b62 tools: add --no-verify option to rados bench
+ac05617 osd: fix send_failures() locking
+3f1292e ceph.spec.in: fix License line
+a81bcf7 ceph_context: remove unsafe cast for singletons
+d50d7b2 osd: conditionally initialize the tracepoint provider
+bf34b36 librados: conditionally initialize the tracepoint provider
+afc4f17 librbd: conditionally initialize the tracepoint provider
+c82f939 common: new tracing config options
+2168c15 tracing: merge tracepoint provider makefiles into main makefile
+d02beff tracing: dynamic tracepoint provider helper
+e53d66e packaging: add new tracepoint probe shared libraries
+bb7c0f5 ceph.spec.in: add new tracepoint probe shared libraries
+e1da271 lttng: move tracepoint probes to dynamic libraries
+8358fb8 revert: osd: use GMT time for hitsets
+4420929 rgw: fix modification to index attrs when setting acls
+8378aaf build/ops: rbd-replay moved from ceph-test-dbg to ceph-common-dbg
+0378445 osd: fix the snapshot reads of evicted tiering pool
+bddbda1 Objecter: pool_op callback may hang forever.
+112c686 WorkQueue: new PointerWQ base class for ContextWQ
+9c33dcc librbd: fixed deadlock while attempting to flush AIO requests
+b3b7877 tests: new test case to catch deadlock on RBD image refresh
+a322317 librbd: resize should only update image size within header
+6a40e4f ceph.spec.in: lttng in SLES12 only
+e508a44 ceph.spec.in: fix lttng/babeltrace conditionals
+19c9546 packaging: move rbd-replay* to ceph-common
+3d3595f krbd: remove deprecated --quiet param from udevadm
+4d81cd1 run_cmd: close parent process console file descriptors
+2052187 init-rbdmap: Rewrite to use logger + clean-up
+f972f38 ceph.spec.in: We no longer need redhat-lsb-core
+609f256 rgw: implement s3 encoding-type for get bucket
+394fbfc Objecter: maybe access wild pointer(op) in _op_submit_with_budget.
+84068f8 Objecter: repeated free op->ontimeout.
+3e65730 ReplicatedBackend::prepare_pull: set recover_info.size for clones
+b62cac6 rgw: fix swift API returning incorrect account metadata
+9643ee6 bug fix: osd: do not cache unused buffer in attrs
+1b06f03 rgw:swift use Civetweb ssl can not get right url
+5105d50 tests: test/librados/test.cc must create profile
+3023750 tests: destroy testprofile before creating one
+3a7423d tests: add destroy_ec_profile{,_pp} helpers
+a52f7cb crush/mapper: ensure take bucket value is valid
+81d8aa1 crush/mapper: ensure bucket id is valid before indexing buckets array
+74203b8 FileStore: potential memory leak if _fgetattrs fails
+db1cbe7 Fix casing of Content-Type header
+1448915 qa: update cephtool test for CephFS tier cases
+14c36f0 mon: forbid readonly cache tiers for CephFS
+31e59fb mon: refine check_remove_tier checks
+9f3aebe osd: fix requeue of replay requests during activating
+ade0f1a OSD:shall reset primary and up_primary fields when beginning a new past_interval.
+9085c82 mon: should not set isvalid = true when cephx_verify_authorizer return false
+9764da5 0.94.5
+4875d05 ceph.spec.in: rm EOL Fedoras; add OBS RHEL5 instead
+dfba6ac packaging: Add rgw placeholder dirs in proper packages
+2387c8e ceph.spec.in: consolidate centos/rhel macros
+7c58d31 packaging: make logrotate a hard dependency across all distros
+61acc4e ceph.spec.in: add missing -%{release}
+20590d3 ceph.spec.in: remove duplicate BuildRequires: sharutils
+6b306eb ceph.spec.in: fix python-flask dependency for SUSE
+7a2cbcb ceph.spec.in: clarify two important comments
+dfe27c6 ceph.spec.in: rm reference to EOL Fedoras (< 20)
+371b64e ceph.spec.in: package rbd-replay-prep on all Fedoras
+82425b3 ceph.spec.in: rbd-replay-prep is not being built on f21+
+53e2f70 ceph.spec.in:BuildRequires sharutils
+a84376c ceph.spec.in: fix:Add missing directories breaking build
+171fee1 mon: track osd_epoch of all MonSessions
+cc7da67 mon: track osd_epoch in MonSession
 250dc07 osd/ReplicatedPG: remove stray debug line
 d3abcbe librbd: potential assertion failure during cache read
 991d0f0 tests: reproduce crash during read-induced CoW
+3f33ce6 librbd:reads larger than cache size hang.
+5e5b512 rgw: url_decode values from X-Object-Manifest during GET on Swift DLO.
+e693755 cls_rgw: fix bucket listing when dealing with invisible entries
+99b4d1d rgw: orphan tool shouldn't clean up head objects
+6d89f4b rgw: location constraints should return api name
+2bd5d0b radosstriper : Fixed broken Makefiles after integration of lttng
+7ffd072 osdc/Objecter: distinguish between multiple notify completions
+647c910 osd: reply to notify request with our unique notify_id
+0ad9521 osd: Correct the object_info_t::decode() version
 51f3d6a qa: Use public qemu repo
 9529269 (tag: v0.94.4) 0.94.4
+af734e6 librbd: invalidate object map on error even w/o holding lock
 b203979 use git://git.ceph.com
 0f4ef19 qa: http://ceph.com/qa -> http://download.ceph.com/qa
-294f016 (origin/wip-13227-hammer) init-radosgw.sysv: remove
-698d75c (origin/wip-13410-hammer) tests: robust test for the pool create crushmap test
-2a28114 (origin/wip-13401-hammer) crush/CrushTester: test fewer inputs when running crushtool
+634d7f6 tests: removed obsolete rbd_replay test cases
+5c63d3c ceph-dencoder: new rbd_replay trace file types
+a145a1c rbd-replay: added version control to trace output file
+a30ed76 rbd-replay-prep: added --verbose command line option
+adf31c8 rbd-replay-prep: stream events to the prep file
+8c9e67a rbd-replay-prep: simplify IO dependency calculation
+e7406fc rbd-replay: improve error messages
+9f81d28 rbd-replay-prep: support new read/write APIs
+a856bee rbd-replay-prep: avoid using assert statements on user inputs
+294f016 init-radosgw.sysv: remove
+6a4734a ReplicatedPG::hit_set_setup: fix hit_set_remove_all call
+ab3877d osd/: assert in HitSet constructor if type is TYPE_NONE as well
+4fe07b7 osd: only remove all the hit set objects on primary osd
+313a09b osd: implement hit_set_remove_all
+b632254 mon: disable gmt_hitset if not supported
+27fc9a3 osd: do not let OSD_HITSET_GMT reuse the feature bit
+7fcc61d osd: Decode use_gmt_hitset with a unique version
+26c7e96 mon: print use_gmt_hitset in "ceph osd pool get"
+e8e00da mon: add "ceph osd pool set $pool use_gmt_hitset true" cmd
+040e390 osd: use GMT time for the object name of hitsets
+31b7864 CephxServiceHandler.cc: fix get_auth conditional
+698d75c tests: robust test for the pool create crushmap test
+0742177 osd: use another name for randomize scrub option
+fad3386 osd: randomize scrub times to avoid scrub wave
+9c13033 osd: use __func__ in log messages
+4a3dedf osd: simplify OSD::scrub_load_below_threshold() a little bit
+24268cf librbd: invoking RBD::open twice will leak memory
+2a28114 crush/CrushTester: test fewer inputs when running crushtool
 abc5b5f tests: update to match crushmap validation message
 25bd277 mon/OSDMonitor: fix crush injection error message
 6635530 mon/OSDMonitor: only test crush ruleset for the newly created pool
 cc1fedd crush/CrushTester: allow testing by ruleset
 3228161 qa/workunits/cephtool/test.sh: don't assume crash_replay_interval=45
 ad83304 rgw:add --reset-regions for regionmap update
+8610de8 use simplifed messenger constructor for clients
+9d059c3 msg: add simplified messenger constructor
 7de65e7 rgw : setting max number of buckets for users via ceph.conf option
 297c04d rgw: init_rados failed leads to repeated delete
 4b0686f rgw: delete finisher only after finalizing watches
@@ -26,23 +187,54 @@ f51ab26 rgw: fix radosgw start-up script.
 d00c52b doc: rgw: fix typo in comments
 eb001d3 rgw: init script waits until the radosgw stops
 9ab9c44 rgw: don't read actual data on user manifest HEAD
+6e29e90 init-rbdmap: fix CMDPARAMS
+7161a2c PG: ignore info from down osd
+9753551 OSDMap.h: add has_been_up_since
+f1271ea Common/Thread: pthread_attr_destroy(thread_attr) when done with it When a thread attributes object is no longer required, it should be destroyed using the pthread_attr_destroy() function. Destroying a thread attributes object has no effect on threads that were created using that object.
+9581f9f Thread.cc: remove malloc/free pair
 9026c4a doc: remove mention of ceph-extra as a requirement
 45ed24d doc: remove ceph-extras
 faccdce doc: correct links to download.ceph.com
 e9f4aec doc: Added "Hammer" in the list of major releases.
+a17f2a9 osdc/Objecter: optimize Objecter::tick.
+f80d237 osdc/Objecter: remove the unuseful code.
+8f76f4c osdc/Objecter: Don't forget call _op_cancel_map_check when cancel linger op.
+ba36cab osdc/Objecter: In _cancel_linger_op, it should make num_unacked/num_committed decrease.
+6ff7b02 osdc/Objeter: When cancel op, decrease num_unacked/num_uncommitted.
+d815e0a osdc/Objecter: For func op_cancel_writes it can directly call op_cancel.
+53316f3 Objecter: Take RLocker when call is_active.
+6849288 mon/PGMap: calc min_last_epoch_clean when decode
+7d4b303 osd: print min_last_epoch_clean along with pg dump
+d8ca88d OSDService::agent_entry: don't use PG::operator<< without pg lock
+397042a filestore: fix peek_queue for OpSequencer
+d4e4d85 mon/Elector: do a trivial write on every election cycle
+20a4c0c mon/MonitorDBStore: assert/crash if there is a write error
+3c1f7cb OSDMap: fill in known encode_features where possible
 424fc1c rgw: set default value for env->get() call
+93c523c librbd: diff_iterate needs to handle holes in parent images
+359b684 tests: new test case for librbd diff_iterate over discard extents
 e72bdc3 osd/ReplicatedPG: tolerate promotion completion with stopped agent
 a3afb3f rgw: remove trailing :port from host for purposes of subdomain matching
-77cb503 (origin/wip-13015-hammer) rgw: preserve all attrs if intra-zone copy
+71a42f7 bug fix: osd: avoid multi set osd_op.outdata in tier pool
+77cb503 rgw: preserve all attrs if intra-zone copy
 b9f2ed3 rgw: don't preserve acls when copying object
+e8cce08 bug fix: osd: requeue_scrub when kick_object_context_blocked
+8ee93d5 PG::handle_advance_map: on_pool_change after handling the map change
 b3822f1 upstart: limit respawn to 3 in 30 mins (instead of 5 in 30s)
+cecd68d ceph_test_rados_api_aio: add a test for aio_sparse_read
+8849f99 ceph_test_rados_api_io: add tests for sparse_read
+64b22dc ceph_test_rados: also send sparse_read in ReadOp
+6ca5930 osd: should use ec_pool() when checking for an ecpool
+3180499 osd: translate sparse_read to read for ecpool
 0d6a8c6 Pipe: Drop connect_seq increase line
 4be8a28 osd/PG: peek_map_epoch: skip legacy PGs if infos object is missing
 f237ed9 osd: allow peek_map_epoch to return an error
+d8ac510 WorkQueue: add/remove_work_queue methods now thread safe
 3a50b90 crypto: fix unbalanced ceph::crypto::init/ceph::crypto:shutdown
 0a5b856 ReplicatedPG,Objecter: copy_get should include truncate_seq and size
 82ea02a rgw: fix assignment of copy obj attributes
 3b2affc rgw: add delimiter to prefix only when path is specified
+e8d6d5a mon: MonitorDBStore: make get_next_key() work properly
 9f69660 tests: tiering agent and proxy read
 5656eec osd: trigger the cache agent after a promotion
 dc693fc lockdep: allow lockdep to be dynamically enabled/disabled
@@ -61,25 +253,32 @@ e487e8e auth: reinitialize NSS modules after fork()
 c96541a osdc: Make last missing bh to wake up the reader.
 4135b9a osdc: For trust_enoent is true, there is only one extent.
 81376b6 osdc: In _readx() only no error can tidy read result.
-e80bd0a (origin/wip-12859-hammer-loic) rgw: send Content-Length in response for GET on Swift account.
+dba8b5b tools: Don't delete, recreate and re-fill buffers in rados bench.
+fa72ecb bufferlist: implement bufferlist::invalidate_crc()
+50c82f2 ceph.spec.in summary-ended-with-dot
+94699e7 ceph.spec.in libcephfs_jni1 has no %post and %postun
+e80bd0a rgw: send Content-Length in response for GET on Swift account.
 2e54245 rgw: force content_type for swift bucket stats request
 5d57b63 rgw: we should not overide Swift sent content type
 b8aafbc rgw: enforce Content-Type in Swift responses.
 143cfc3 rgw: force content-type header for swift account responses without body
 b5420d6 rgw: shouldn't return content-type: application/xml if content length is 0
+7475a8f logrotate.conf: prefer service over invoke-rc.d
+86f88df mon: fix checks on mds add_data_pool
 836f763 OSD: break connection->session->waiting message->connection cycle
 77624af osd/PGLog: dirty_to is inclusive
 aa00373 common: fix code format
 aab35da test: add test case for insert empty ptr when buffer rebuild
 2b0b7ae common: fix insert empty ptr when bufferlist rebuild
+a65c398 common/syncfs: fall back to sync(2) if syncfs(2) not available
 2348a5b osd: copy the RecoveryCtx::handle when creating a new RecoveryCtx instance from another one
 bf72785 config: skip lockdep for intentionally recursive md_config_t lock
 c94fd92 osd: Keep a reference count on Connection while calling send_message()
 059bf98 WBThrottle::clear_object: signal if we cleared an object
 a478385 ceph-disk: always check zap is applied on a full device
 e471c5d librados: Make librados pool_create respect default_crush_ruleset
-35fa47a (origin/wip-corpus-hammer) ceph-object-corpus: add 0.94.2-207-g88e7ee7 hammer objects
-b80859e (origin/wip-11455-hammer) rgw: init some manifest fields when handling explicit objs
+35fa47a ceph-object-corpus: add 0.94.2-207-g88e7ee7 hammer objects
+b80859e rgw: init some manifest fields when handling explicit objs
 f47ba4b mon: test the crush ruleset when creating a pool
 b58cbba erasure-code: set max_size to chunk_count() instead of 20 for shec
 6f0af18 vstart.sh: set PATH to include pwd
@@ -111,21 +310,21 @@ a13c7fd rgw:the arguments 'domain' should not be assigned when return false
 6acf36f rgw:segmentation fault when rgw_gc_max_objs > HASH_PRIME
 6b36514 rgw: avoid using slashes for generated secret keys
 8ba6b2f rgw: url encode exposed bucket
-0bc909e (origin/wip-12638-hammer) mon: add a cache layer over MonitorDBStore
+0bc909e mon: add a cache layer over MonitorDBStore
 bee8666 Objecter: pg_interval_t::is_new_interval needs pgid from previous pool
 b5418b9 osd_types::is_new_interval: size change triggers new interval
-f028389 (origin/liewegas-wip-hammer-feature-hammer) include/ceph_features: define HAMMER_0_94_4 feature
+f028389 include/ceph_features: define HAMMER_0_94_4 feature
 95cefea (tag: v0.94.3) 0.94.3
-81a311a (origin/hammer-12709) Workunits : fs/misc/chmod.sh : Include ACL characters in permission check.
-153744d (origin/wip-12682-hammer) tests: increase test coverage for partial encodes/decodes
+81a311a Workunits : fs/misc/chmod.sh : Include ACL characters in permission check.
+153744d tests: increase test coverage for partial encodes/decodes
 fca7876 common: bit_vector extent calculation incorrect for last page
 3396a96 osd/OSDMap: handle incrementals that modify+del pool
-3ab5d82 (origin/wip-12432-hammer) rgw: set http status in civetweb
+3ab5d82 rgw: set http status in civetweb
 10a0383 civetweb: update submodule to support setting of http status
 00d802d hobject_t: fix get_boundary to work with new sorting regime
-9b91adc (origin/wip-osd-compat-hammer) mon: disallow post-hammer OSDs if there are up pre-hammer OSDs
+9b91adc mon: disallow post-hammer OSDs if there are up pre-hammer OSDs
 8a559c1 include/ceph_features: define MON_METADATA feature
-4faa8e0 (origin/wip-12577-hammer) osd: include newlines in scrub errors
+4faa8e0 osd: include newlines in scrub errors
 455eb2a osd: fix condition for loggin scrub errors
 67e7946 osd: fix fallback logic; move into be_select_auth_object
 0f57c70 osd: log a scrub error when we can't pick an auth object
@@ -137,12 +336,12 @@ f2002b7 osd: be precise about "known" vs "best guess"
 1357ed1 hobject_t: decode future hobject_t::get_min() properly
 6d01d6b OSDMonitor::preprocess_get_osdmap: send the last map as well
 2ecb3b7 Fh ref count will leak if readahead does not need to do read from osd
-4c199bf (origin/wip-11998-hammer) debian/control: ceph-common (>> 0.94.2) must be >= 0.94.2-2
+4c199bf debian/control: ceph-common (>> 0.94.2) must be >= 0.94.2-2
 a785193 ceph.spec.in: drop SUSE-specific %py_requires macro
 8804b3f ceph.spec.in: remove SUSE-specific apache2-mod_fcgid dependency
-b575ecc (origin/wip-12236-hammer) tests: verify that image shrink properly handles flush op
+b575ecc tests: verify that image shrink properly handles flush op
 d4eb7bd librbd: invalidate cache outside cache callback context
-92272dd (origin/wip-12235-hammer) librbd: don't cancel request lock early
+92272dd librbd: don't cancel request lock early
 58ae92f tests: new test for transitioning exclusive lock
 7b21ccb tests: verify that librbd will periodically resend lock request
 c95b37f common: Mutex shouldn't register w/ lockdep if disabled
@@ -150,7 +349,7 @@ c95b37f common: Mutex shouldn't register w/ lockdep if disabled
 08ae012 librados_test_stub: watcher id should be the instance id (gid)
 704c0e0 librbd: retry lock requests periodically until acquired
 dbaaed9 librbd: don't hold owner_lock for write during flush
-e971820 (origin/wip-12345-hammer) lockdep: do not automatically collect all backtraces
+e971820 lockdep: do not automatically collect all backtraces
 27f7042 librbd: flush operations need to acquire owner lock
 5b39983 librbd: avoid infinite loop if copyup fails
 88b583b librbd: flush pending ops while not holding lock
@@ -181,7 +380,7 @@ b73e87e librados_test_stub: add support for flushing watches
 6d3db5f librbd: add work queue for op completions
 64425e8 WorkQueue: ContextWQ can now accept a return code
 eccf369 packaging: RGW depends on /etc/mime.types
-e19f928 (origin/wip-12502-hammer) rgw: conversion tool to fix broken multipart objects
+e19f928 rgw: conversion tool to fix broken multipart objects
 28d32f6 rgw: only scan for objects not in namespace
 e22e2b4 rgw_admin: add --remove-bad flag to bucket check
 7bddf5d   rest_bench: bucketname is not mandatory as we have a default name
@@ -213,9 +412,10 @@ fa19474 os/chain_xattr: handle read on chnk-aligned xattr
 931ffe3 common/Cycles.cc: skip initialization if rdtsc is not implemented
 0fde3a2 buffer: Fix bufferlist::zero bug with special case
 dabc611 UnittestBuffer: Add bufferlist zero test case
-d08db7a (origin/wip-11470.hammer) mon: PaxosService: call post_refresh() instead of post_paxos_update()
-154f18c (origin/wip-12465-hammer) Log::reopen_log_file: take m_flush_mutex
-b872882 (origin/wip-12237-hammer) librados_test_stub: read op should return number of bytes read
+e6eaa91 mon: MonitorDBStore: get_next_key() only if prefix matches
+d08db7a mon: PaxosService: call post_refresh() instead of post_paxos_update()
+154f18c Log::reopen_log_file: take m_flush_mutex
+b872882 librados_test_stub: read op should return number of bytes read
 7d9fce3 tests: fixed TestObjectMap.InvalidateFlagInMemoryOnly
 4a77be0 librbd: don't attempt to invalidate an object map in R/O mode
 0aea70f tests: add new unit tests for object map invalidation
@@ -227,7 +427,7 @@ e4b55b3 Fixes: #12286 radosgw-admin: after subuser modify print only once user i
 2357b6c rgw: If the client sends a Connection: close header respond accordingly.
 f819332 ceph.spec.in: install 95-ceph-osd.rules, mount.ceph, and mount.fuse.ceph properly on SUSE
 d8733be debian: move ceph_argparse into ceph-common
-f99f312 (origin/wip-12384-hammer) test: potential memory leak in FlushAioPP
+f99f312 test: potential memory leak in FlushAioPP
 a4fc63a pybind: fix valgrind warning on rbd_get_parent_info call
 aa3eb28 osdc: invalid read of freed memory
 18ede75 krbd: fix incorrect types in the krbd API
@@ -248,7 +448,7 @@ b8826bc OSD: add scrub_wq suicide timeout
 878dd40 OSD: add snap_trim_wq suicide timeout
 1157583 OSD: add recovery_wq suicide timeout
 a82b450 OSD: add op_wq suicide timeout
-89aa8ff (origin/wip-11833-hammer) mon: add an "osd crush tree" command
+89aa8ff mon: add an "osd crush tree" command
 03c07d7 librbd: assertion failure race condition if watch disconnected
 5c812c1 librbd: prevent object map updates from being interrupted
 e50caab rgw: fix empty json response when getting user quota
@@ -268,7 +468,7 @@ c78cc00 rgw: rectify 202 Accepted in response for PUT on existing bucket.
 2aaeea1 tests: TEST_crush_reject_empty must not run a mon
 80afb81 ceph-helpers: implement test_expect_failure
 6b5e9a1 tests: display the output of failed make check runs
-5141301 (origin/wip-11975-hammer) mon: add "--check" to CrushTester::test_with_crushtool()
+5141301 mon: add "--check" to CrushTester::test_with_crushtool()
 5ec27cf crushtool: rename "--check-names" to "--check"
 2a8fe88 mon: check the new crush map against osdmap.max_osd
 c0b0f52 crushtool: enable check against max_id
@@ -276,7 +476,7 @@ f041bbe crush/CrushTester: check if any item id is too large
 cc1cc03 mon: validate new crush for unknown names
 ff29a7f crushtool: add the "--check-names" option
 960ea49 crush/CrushTester: add check_name_maps() method
-5e72479 (origin/wip-12021-hammer) OSDMonitor: allow addition of cache pool with non-empty snaps with config
+5e72479 OSDMonitor: allow addition of cache pool with non-empty snaps with config
 ecac1a4 Always provide summary for non-healthy cluster
 1a32379 mon/PGMap: add more constness
 84ebc3d mon/PGMap: sort pg states by the states in "pg ls" spec
@@ -294,12 +494,12 @@ a03968a mon: send no_reply() to peon to drop ignored mdsbeacon
 d9bbef3 rgw: make compatability deconfliction optional.
 0260abd rgw: improve content-length env var handling
 8abc46a rgw: fix data corruption when race condition
-89d0266 (origin/wip-fix-doc-hammer) doc: add the corresponding @endcond command for @cond
+89d0266 doc: add the corresponding @endcond command for @cond
 2aa77b3 doc: remove orphan: directive in ceph-create-keys.rst
 ad66e40 doc: let doxygen ignore src/tracing
-356bd2c (origin/wip-11806-hammer) debian: ceph-dbg steals ceph-objectstore-tool from ceph-test-dbg (take 2)
+356bd2c debian: ceph-dbg steals ceph-objectstore-tool from ceph-test-dbg (take 2)
 c5c627f rgw/logrotate.conf: Rename service name
-582cf73 (origin/wip-12109-hammer, origin/wip-12109) tests: add librbd watch/notify version compatibility test
+582cf73 tests: add librbd watch/notify version compatibility test
 43b9aef qa/workunits/rbd: add notify_master/slave bootstrap scripts
 f995fb5 qa/workunits/rbd: add new test_librbd_api workunit
 a09da2a tests: create librbd API-only integration test suite
@@ -315,11 +515,11 @@ bd3fd92 Fixes to rcceph script
 78d894a qa/workunits/rados/test-upgarde-v9.0.1: fix exclude syntax
 3e8d60a qa/workunits/rados/test-upgrade-v9.0.1: skip one more evict test
 348a3d3 qa: add compatibility filtered rados api tests for upgrades
-f68bf94 (origin/wip-11493-hammer) OSDMonitor: disallow ec pools as tiers
+f68bf94 OSDMonitor: disallow ec pools as tiers
 13c8d58 mon: prevent pool with snapshot state from being used as a tier
 58e6266 test/librados/tier.cc: destroy and recreate cache pool on every test
 3db1026 doc/release-notes: v0.94.2
-ed5442b (origin/wip-11770-hammer) tests: verify librbd blocking aio code path
+ed5442b tests: verify librbd blocking aio code path
 20e1048 librbd: new rbd_non_blocking_aio config option
 b4571b3 PendingReleaseNotes: document changes to librbd's aio_read methods
 9ea1edd librbd: AioRequest::send no longer returns a result
@@ -347,7 +547,7 @@ d723e11 mds: clear CDir::STATE_REJOINUNDEF after fetching dirfrag
 9dfef60 rgw: always check if token is expired
 fdb43eb ceph.spec.in: tweak ceph-common for SUSE/openSUSE
 ba1a016 admin/build-doc: fix dependency checks
-5a60a03 (origin/wip-4846) man/ceph-create-keys.8: add missing file
+5a60a03 man/ceph-create-keys.8: add missing file
 19305b8 doc: add ceph-create-keys.8
 ffd0933 WorkQueue: added virtual destructor
 a28adfb WorkQueue: add new ContextWQ work queue
@@ -356,15 +556,15 @@ a28adfb WorkQueue: add new ContextWQ work queue
 a62c3aa ceph.in: handle unknown Exception correctly
 cc7f744 ceph.in: improve the interactive mode
 eb26388 ceph.in: parse quote correctly in interactive mode
-344328d (origin/wip-11733-hammer) debian: set rest-bench-dbg ceph-test-dbg dependencies
-293affe (origin/wip-11622-hammer) rgw: merge manifests correctly when there's prefix override
+344328d debian: set rest-bench-dbg ceph-test-dbg dependencies
+293affe rgw: merge manifests correctly when there's prefix override
 a43d248 rgw: restore buffer of multipart upload after EEXIST
 558d639 json_sprit: fix the FTBFS on old gcc
 678b3e6 json_spirit: use utf8 intenally when parsing \uHHHH
 ef6641c ceph.spec: update OpenSUSE BuildRequires
-0b6d442 (origin/wip-hammer-11535-admin-socket) common/admin_socket: close socket descriptor in destructor
-95818da (origin/wip-hammer-package-perf-objectstore) packaging: include ceph_perf_objectstore
-6e2dd40 (origin/hammer-uclient-checking) client: fix error handling in check_pool_perm
+0b6d442 common/admin_socket: close socket descriptor in destructor
+95818da packaging: include ceph_perf_objectstore
+6e2dd40 client: fix error handling in check_pool_perm
 3c2e6ae client: use SaferCond in check_pool_perm
 79b2ac2 client: check OSD caps before read/write
 c548d8d tests: ceph-helpers kill_daemons fails when kill fails
@@ -373,7 +573,7 @@ fb10594 Added a "ceph hello world" for a simple check for ceph-deploy qa suite
 f4a0dab rgw: send Content-Length in response for HEAD on Swift account.
 32f4a74 rgw: send Content-Length in response for DELETE on Swift container.
 d39a660 rgw: send Content-Length in response for PUT on Swift container.
-02a3813 (origin/wip-11370-hammer) librbd: flatten should return -EROFS if image is read-only
+02a3813 librbd: flatten should return -EROFS if image is read-only
 af8939b librbd: allow snapshots to be created when snapshot is active
 d21c0c0 librbd: better handling for duplicate flatten requests
 ec0bd1d librbd: use generic helper for issuing async requests
@@ -409,7 +609,7 @@ bc51476 ceph_json: add decode / encoder for multimap
 7c7e651 cls_rgw: use multimap to keep pending operations in bucket index
 cb75713 rgw: generate new tag for object when setting object attrs
 7387c43 java: libcephfs_jni.so is in /usr/lib64 on rhel
-856b2fa (origin/hammer-next) rgw-admin: a tool to fix object locator issue
+856b2fa rgw-admin: a tool to fix object locator issue
 512ae4c rgw: set a special object locator if object starts with underscore
 da4d227 rgw: use correct oid when creating gc chains
 4e84f31 rgw: civetweb should use unique request id
@@ -429,8 +629,8 @@ c615972 librbd: ImageWatcher should cancel in-flight ops on watch error
 2864da8 librbd: updated cache max objects calculation
 0cdc93f librbd: acquire cache_lock before refreshing parent
 a1b4aeb librados_test_stub: AIO operation callbacks should be via Finisher
-3a58e30 (origin/hammer-11482) mds: remove caps from revoking list when caps are voluntarily released
-f30fa4a (origin/wip-11453-hammer-rgw-init-as-root) init-radosgw: run RGW as root
+3a58e30 mds: remove caps from revoking list when caps are voluntarily released
+f30fa4a init-radosgw: run RGW as root
 0ee022b osd/ReplicatedPG: don't check order in finish_proxy_read
 8a58d83 Fix ceph_test_async_driver failed
 85a68f9 rgw: remove meta file after deleting bucket The meta file is deleted only if the bucket meta data is not synced
@@ -443,7 +643,7 @@ b5921d5 crush/mapper: fix divide-by-0 in straw2
 93c8f43 osd: fix negative degraded objects during backfilling
 e61c4f0 (tag: v0.94) 0.94
 4347a32 debian: remove lttng checking from rules
-57d2781 (origin/wip-11113-hammer) librbd: snap_remove should ignore -ENOENT errors
+57d2781 librbd: snap_remove should ignore -ENOENT errors
 572a2f5 librbd: get_parent_info should protect against invalid parent
 0b2e272 ReplicatedPG::cancel_pull: requeue waiters as well
 23efab7 ReplicatedPG: don't write hitset while scrubbing, update scrub_cstat
@@ -456,15 +656,15 @@ bdc664f ECTransaction: write out the hinfo key on touch as well
 491474f test: Add testing for PGLog::filter_log()
 1fcd3fb osd: Create a filter_log for PGLog
 c751191 ceph-objectstore-tool, osd: Filter the pg_log_t for objects no longer in pg
-ccc0839 (origin/wip-11177) common: send cluster log messages to 'cluster' channel by default
+ccc0839 common: send cluster log messages to 'cluster' channel by default
 f9b98c9 ceph-objectstore-tool: Fix message and make it debug only to stderr
 923d532 ceph-objectstore-tool: Remove bogus comment and eliminate a debug message
-c176ebf (origin/wip-move-code) osd/: Move ReplicatedBackend methods into ReplicatedBackend.cc
+c176ebf osd/: Move ReplicatedBackend methods into ReplicatedBackend.cc
 e9d6096 ReplicatedPG: remove unused C_OnPushCommit
 ddf0292 PG: set/clear CREATING in Primary state entry/exit
-6f218b1 (origin/hammer-11205) qa/workunits/fs/misc: fix filelock_interrupt.py
+6f218b1 qa/workunits/fs/misc: fix filelock_interrupt.py
 1388d6b ReplicatedPG: trim backfill intervals based on peer's last_backfill_started
-924ace8 (origin/wip-11145) rgw: shut down timer before erroring out
+924ace8 rgw: shut down timer before erroring out
 65bb4df ReplicatedPG::promote_object: check scrubber and block if necessary
 78c5de7 osd/: s/is_degraded_object/is_degraded_or_backfilling_object
 4a5bd05 Revert "osd/: update peer_missing and local missing if we write a degraded object"
@@ -473,7 +673,7 @@ b84943c Revert "osd/: don't block writes on degraded objects"
 9cefc59 Revert "ReplicatedPG: block writes on degraded objects for ec pools"
 45bff59 Revert "Merge pull request #3641 from athanatos/wip-10731"
 6f23d34 Revert "osd/: s/is_degraded_object/is_degraded_or_backfilling_object"
-fc3ce48 (origin/wip-hammer-rgw) rgw: update makefile to enable civetweb config
+fc3ce48 rgw: update makefile to enable civetweb config
 2f1342e civetweb: update submodule
 e5f3282 rgw: pass civetweb configurables to civetweb
 a8ced2c rgw: don't overwrite bucket / object owner when setting acls
@@ -483,11 +683,11 @@ a8ced2c rgw: don't overwrite bucket / object owner when setting acls
 eb890b1 doc: Break ceph osd pool get into sections based on pool type
 b6512eb erasure code: add shec's documentation / change default layout
 175aff8 ceph-objectstore-tool: Use exit status 11 for incompatible import attempt
-68719f5 (origin/wip-omap-clear) osd: fix omap digest clearing for omap write ops
+68719f5 osd: fix omap digest clearing for omap write ops
 d5b3bd7 os/MemStore: make omap_clear zap the omap header too
 d2467e4 ceph_test_rados_api_aio: verify omap_clear clears header, too
 5b23f5b ceph-objectstore-tool: Output only unsupported features when incomatible
-477ac92 (origin/wip-11102) osd: only complain about stored vs actual digest if all peers support it
+477ac92 osd: only complain about stored vs actual digest if all peers support it
 9a2ff34 PG::find_best_info: reject infos with old last_epoch_started
 f96d58b init-radosgw*: don't require rgw_socket_path to be defined
 0712d8d PG: ensure that info.last_epoch_started only increases
@@ -495,10 +695,10 @@ f96d58b init-radosgw*: don't require rgw_socket_path to be defined
 2da9584 PG: make sure to update history.last_epoch_started with first write
 0d52aca osd: erasure-code-profile incremental rm before set
 b92f9cf mon: informative message when erasure-code-profile set fails
-f5fa25d (origin/wip-rgw-bootstrap) ceph-create-keys: create bootstrap-rgw key
+f5fa25d ceph-create-keys: create bootstrap-rgw key
 679e266 mon: add 'bootstrap-rgw' profile
-01379bd (origin/wip-refine-build-configuration-hammer) Compile test_build_librgw only if WITH_BUILD_TESTS
-1c20417 (origin/wip-11123) osd: use (robust) helper for setting exists or clearing whiteout
+01379bd Compile test_build_librgw only if WITH_BUILD_TESTS
+1c20417 osd: use (robust) helper for setting exists or clearing whiteout
 f5a2aef PGLog::merge_log: in tail extend case, log.log might be empty
 88d66ca mon: Support multiple args to ceph pg dump_stuck as in usage and man pages
 a3dfeec Improve "ceph_argparse.py: add stderr note if nonrequired param is invalid"
@@ -515,7 +715,7 @@ e0bf132 PGBackend: add debug option to rewrite digest even if present
 aceb860 Build ceph-dencoder if server and mds for now
 c365cac rbd: regenerate rbd(8) man page
 416cbff doc: Fix typo in ceph pg dump_stuck usage in man page
-ba77bda (origin/wip-librbd-invalidate-object-map) librbd: invalidating snapshot object maps should set snapshot flag
+ba77bda librbd: invalidating snapshot object maps should set snapshot flag
 ba4bb22 test_cls_rbd: verify set_flags updates snapshots
 fa25b84 cls_rbd_client: add snap_id param to set_flags
 2d86898 cls_rbd: set_flags can now update snapshots
@@ -538,22 +738,22 @@ e1eebb3 osd: refactor RepScrubWQ::_process()
 e7f9e3b librbd: use ImageCtx::get_parent_overlap helper function
 286b385 librbd: resize/flatten should validate image is R/W
 9dcd517 librbd: hold write snap_lock when refreshing object map
-ac527a2 (origin/wip-11079) crushtool: improve straw2 compile/decompile test
+ac527a2 crushtool: improve straw2 compile/decompile test
 6445d9e crush: fix crush_get_bucket_item_weight and bucket destroy for straw2
 b686eda crushtool: fix straw2 cli test
 5b58ef1 osdc: fix a memory leak in C_TwoContexts
 e3616a5 doc: rhel6.5 is rhel6
-147b1db (origin/wip-11068-debian-jessie) deb: add zlib1g-dev to Build-Depends for Debian/jessie
+147b1db deb: add zlib1g-dev to Build-Depends for Debian/jessie
 84f05c0 TestAsyncDriver: Fix typo in ceph_test_async_driver
 918afc0 qa: make rbd-fuse exit cleanly with lttng
 b6326a0 ReplicatedPG: block write on degraded object if there are waiters
-7acfdac (origin/wip-11015) crushtool: test compilation of a rule with straw2 buckets
+7acfdac crushtool: test compilation of a rule with straw2 buckets
 61308cc crush: parse alg names that include a digit
 cb6813c tests: add Debian jessie dockerfile
 657844a tests: DEBIAN_FRONTEND=noninteractive apt-get install
 f8dec72 tests: jq is not available on Ubuntu precise
 4add63c install-deps.sh: strip | in the list of packages
-dbe2b24 (origin/wip-wn-rgw-hammer) rgw: flush watch after unregistering
+dbe2b24 rgw: flush watch after unregistering
 3530a25 Client: do not require successful remount when unmounting
 b90018f The erasure-code is actually required by libcommon
 9b3e1f0 Minor syntax fix-ups for Makefile.am redesign
@@ -575,29 +775,29 @@ e531dd4 Add new configure options to improve build refinement
 c474106 Split Makefile.am in man
 fa13a5d qa: fix up rbd permissions test
 cb840cc librbd: remove unneeded assert from unregister_watch()
-8dc0bf8 (origin/wip-10828) osdc/Objecter: clean up oncommit_sync (and fix leak)
+8dc0bf8 osdc/Objecter: clean up oncommit_sync (and fix leak)
 f7d35b9 osdc/Objecter: count oncommit_sync as uncommitted
-099264f (origin/hammer-backports-hadoop) hadoop: workunits don't need java path
+099264f hadoop: workunits don't need java path
 2f2ace3 qa: update old replication tests
 a6a6df6 cmake:  build fixes
-137800a (origin/wip-10968) librbd: delay completion of AioRequest::read_from_parent
+137800a librbd: delay completion of AioRequest::read_from_parent
 7d2fe5b librbd: allow AioCompletions to be blocked
 416ce76 librbd: delete Contexts when object map aio_update not required
 1bfd760 librbd: handle possible aio_read return error code
 fb2caa0 librbd: add log message for completion of AioRequest
 1e3f814 mon: ignore crushtool validation if too long
 7a5a635 mon: do not hardwire crushtool command line
-eca153e (origin/wip-10962) test/cli-integration/rbd: updated to new CLI
+eca153e test/cli-integration/rbd: updated to new CLI
 6c2d929 rbd: permit v2 striping for clones and imports
 b5050b6 rbd: fixed formatted output of rbd image features
-6cff494 (origin/wip-10990) qa/workunits/rbd/copy.sh: remove all image locks
+6cff494 qa/workunits/rbd/copy.sh: remove all image locks
 0e58463 librbd: missing callback log message for CopyupRequest object map update
 ed9e358 librbd: hide flush log message if no flushes are pending
-e2283e3 (origin/wip-10958) librbd: flush pending AIO after acquiring lock
+e2283e3 librbd: flush pending AIO after acquiring lock
 472db64 librbd: hold snap_lock between clipping IO and registering AIO
 7e89f51 mon: do not pollute directory with cvs files from crushtool
-2e74959 (origin/wip-10546) mon: Monitor: fix timecheck rounds period
-3f73eb4 (origin/wip-mon-datahealth-fix.hammer) test: encoding: add LevelDBStoreStats and ceph_data_stats to types.h
+2e74959 mon: Monitor: fix timecheck rounds period
+3f73eb4 test: encoding: add LevelDBStoreStats and ceph_data_stats to types.h
 028806a mon/mon_types.h: allow testing encode/decode of LevelDBStoreStats
 6c7f3a7 include/util.h: allow testing encoding/decoding of ceph_data_stats
 b8c7bae include/util.h: initialize ceph_data_stats to zero
@@ -605,16 +805,16 @@ b8c7bae include/util.h: initialize ceph_data_stats to zero
 1584104 librbd: moved flush / cache invalidate to resize state machine
 9fed4b9 librbd: add AIO version of invalidate_cache
 bebf8e9 (tag: v0.93) 0.93
-6f31458 (origin/wip-hammer-gplv2-text) Add GPLv2 text file
+6f31458 Add GPLv2 text file
 2c666f3 librbd: C_SaferCond memory leak
-7ed9640 (origin/wip-fusesystem-10710) ceph-fuse: test dentry invalidation options and fail out if we fail
+7ed9640 ceph-fuse: test dentry invalidation options and fail out if we fail
 694529a Client: support using dentry invalidation callbacks on older kernels
 a6ebf67 Client: add functions to test remount functionality
 cd95b29 Client: check for failures on system() invocation
-3ec52da (origin/wip-10961) qa/workunits/rbd/copy.sh: explicitly choose the image format
-286a886 (origin/hammer-10912) client: re-send requsets before composing the cap reconnect message
-f3ad61a (origin/wip-10864-hammer-packaging-rbd-udev) packaging: move rbd udev rules to ceph-common
-ec26f08 (origin/wip-librbd-mdlock) librbd: remove unnecessary md_lock usage
+3ec52da qa/workunits/rbd/copy.sh: explicitly choose the image format
+286a886 client: re-send requsets before composing the cap reconnect message
+f3ad61a packaging: move rbd udev rules to ceph-common
+ec26f08 librbd: remove unnecessary md_lock usage
 1f9782e librbd: move object_map_lock acquisition into refresh()
 27e5ae6 librbd: don't check if object map is enabled before refreshing
 876f128 librbd: remove object map on rollback if needed
@@ -626,7 +826,7 @@ df42fd3 test_librbd: close ioctx after imagectx
 06e5a39 rbd: fix --image-feature parsing
 eef7466 librbd: apply flag read failure to all snaps
 6ac8139 librbd: make ImageCtx->object_map always present
-d611121 (origin/wip-librbd-async-operations) tests: add unit test to verify async requests time out
+d611121 tests: add unit test to verify async requests time out
 c295485 librbd: restart async requests if lock owner doesn't report progress
 c611936 librbd: replace Finisher/SafeTimer use with facade
 41e186a librbd: cancel in-progress maint operations before releasing lock
@@ -637,45 +837,45 @@ bb4041f librbd: add locking asserts to ImageCtx
 4bcbdbf librbd: fix ImageWatcher::is_lock_supported() locking
 a94ceb6 librbd: add and use a test_features() helper
 cffd93a librbd: use ImageCtx->snap_lock for ImageCtx->features
-468839e (origin/wip-librbd-image-watcher-tests) tests: add additional test coverage for ImageWatcher RPC
+468839e tests: add additional test coverage for ImageWatcher RPC
 915064a librbd: add ostream formatter for NotifyOp
 260c820 fuse: do not invoke ll_register_callbacks() on finalize
-75d8c01 (origin/wip-10862-hammer) mon: do not try and "deactivate" the last MDS
-a79e905 (origin/wip-devel-python-split) qa: fix python-ceph reference
+75d8c01 mon: do not try and "deactivate" the last MDS
+a79e905 qa: fix python-ceph reference
 46b45e3 doc: fix python-ceph refs in docs
 d1c82ea ceph.spec: specify version
 2a23eac debian: split python-ceph
 39982b1 Split python-ceph to appropriate python-* packages
-bd40f23 (origin/wip-librbd-python-tests) tests: speed up Python RBD random data generation
+bd40f23 tests: speed up Python RBD random data generation
 655e616 tests: fix potential race conditions in test_ImageWatcher
-9c03750 (origin/wip-osdc-watch-error) osdc: watch error callback invoked on cancelled context
+9c03750 osdc: watch error callback invoked on cancelled context
 a9bfd5d ceph_test_rados_api_watch_notify: wait longer for watch timeout
-91cda52 (origin/wip-10788) osd: better debug for maybe_handle_cache
+91cda52 osd: better debug for maybe_handle_cache
 bee9154 osd,mon: explicitly specify OSD features in MOSDBoot
 30c904e osd: do not proxy reads unless all OSDs proxy features too
 e0e765f osd/OSDMap: cache get_up_osd_features
-63f6c9b (origin/wip-librbd-snap-create-race) librbd: fixed snap create race conditions
-69b3857 (origin/wip-10898) librbd: improved ImageWatcher duplicate message detection
+63f6c9b librbd: fixed snap create race conditions
+69b3857 librbd: improved ImageWatcher duplicate message detection
 942f875 librbd: add test instances for watch/notify messages
 10d8686 librbd: minor cleanup of ImageWatcher messages
-0ed296b (origin/wip-librbd-exclusive-lock-config) rbd: disable RBD exclusive locking by default
+0ed296b rbd: disable RBD exclusive locking by default
 2b63dd2 DBObjectMap: lock header_lock on sync()
 170c88d cmake: radosgw, radosgw-admin related fixes
 4feb171 vstart.sh: can use binaries outside of ceph/src
-55d3db9 (origin/wip-10919) cls_rbd: invalidate bufferlist CRC when updating object map
-970bb49 (origin/wip-10883) osd: Fix FileJournal wrap to get header out first
-01f04cb (origin/wip-10914) osdc: pass fadvise op flags to WritebackHandler read requests
+55d3db9 cls_rbd: invalidate bufferlist CRC when updating object map
+970bb49 osd: Fix FileJournal wrap to get header out first
+01f04cb osdc: pass fadvise op flags to WritebackHandler read requests
 c463242 osd/OSDMap: include pg_temp count in summary
 d6e2689 PG: compensate for bug 10780 on older peers
 1d0d3dc PG: add a config option to enable (by default) recovery below min_size
-08eb584 (origin/wip-10899) librbd: fixed ImageWatcher recursive locking issues
+08eb584 librbd: fixed ImageWatcher recursive locking issues
 48466f8 ReplicatedPG: only allow a degraded write if we have at least min_size copies
 d05539e ECBackend: use tbl for empty transaction as well if necessary
 e059d58 ReplicatedBackend: use tbl for empty transaction to backfill peer also
 25f9363 osd/: s/is_degraded_object/is_degraded_or_backfilling_object
-4f55d41 (origin/wip-10900) test/librbd/fsx.c: disable RBD object map for krbd
-487c205 (origin/wip-10892) osd: clear obc cache on_shutdown
-c341c52 (origin/wip-10884-hammer-rpm-devel-split) ceph.spec: split ceph-devel to appropriate *-devel packages
+4f55d41 test/librbd/fsx.c: disable RBD object map for krbd
+487c205 osd: clear obc cache on_shutdown
+c341c52 ceph.spec: split ceph-devel to appropriate *-devel packages
 ea66f5c doc: RGW is "built on top of librgw" changed to "librados"
 b220b2a librbd: enforce write ordering with snapshot
 0de6b61 librbd: use separate files for snapshot object maps
@@ -693,15 +893,15 @@ caf2e1d cmake: add os/XfsFileStoreBackend.cc to rules
 62dd0c2 erasure-code: mark the shec plugin as experimental
 f9c90e7 tests: fix unused variable warning
 3a3bb6d common: capture check_experimental_feature_enabled message
-d8f0215 (origin/wip-10787) mon/OSDMonitor: note osd map epoch in one other place
+d8f0215 mon/OSDMonitor: note osd map epoch in one other place
 d9b0cd3 mon/OSDMonitor: move osd epoch cache update into helper, add fixme
 b80e6ae README.md: fix the indent of a command line usage
 4038d21 cleanup: delete useless member variable
 280a198 PG,ReplicatedPG: make missing_digests local to scrub_compare_maps
 8e806bc Docs: OSD name, not id, needs to be given to remove an item from the CRUSH map. Include command for deleteing bucket from the CRUSH map.
 a5759e9 mon/OSDMonitor: do not trust small values in osd epoch cache
-87544f6 (origin/wip-10844) mon: MonCap: take EntityName instead when expanding profiles
-fd83020 (origin/wip-decoding-oldest-snap) mds: fix decoding of InodeStore::oldest_snap
+87544f6 mon: MonCap: take EntityName instead when expanding profiles
+fd83020 mds: fix decoding of InodeStore::oldest_snap
 6918a98 tests: Dockerfile COPY with two arguments
 98297e0 tests: update docker helper documentation
 1023aa9 tests: add Dockerfile for centos-6
@@ -709,15 +909,15 @@ b3771eb tests: one Dockerfile per repository:tag
 b9b5868 osd: fix OSDCap parser on old boost/spirit
 4ced591 osd/OpRequest: pass string by const&
 74d5ccf osd/: include version_t in extra_reqids with promote
-de6b53a (origin/hadoop) qa: hadoop plays nice with new teuthology task
+de6b53a qa: hadoop plays nice with new teuthology task
 3c05c9c tests: no need for python-flask at build time
 b24a01b erasure-code: initialize all data members
 1a9d717 erasure-code: fix uninitialized data members on SHEC
 e2a5085 ReplicatedPG::on_change: requeue in_progress_async_reads close to last
 a5ecaa1 ReplicatedPG::on_change: clean up callbacks_for_degraded_object
 2d2dc13 mon/PGMonitor: drop pg ls debug line
-65ce7b7 (origin/wip-da-fix-xio-configure) fix configure to reflect the missing libs for xio
-a5804c4 (origin/wip-early-adopters) doc: add a page for CephFS early adopters
+65ce7b7 fix configure to reflect the missing libs for xio
+a5804c4 doc: add a page for CephFS early adopters
 d237649 doc/cephfs: Ceph FS -> CephFS
 65dfd5d doc/cephfs: clarify the 'not production ready' warning
 700459b build-doc: package checks for fedora
@@ -725,17 +925,17 @@ c5a74a7 build-doc: don't ignore errors
 94f9f60 tests: clone ceph-erasure-code-corpus from ceph
 807cf57 xio: Fix out-of-order responses
 807af4c cmake: Fix cmakelist to compile librbd
-418ca0c (origin/wip-10784) osd: Update object state after removing watch from object info
+418ca0c osd: Update object state after removing watch from object info
 27905fd osd: Simplify handle_watch_timeout() using existing support functions
-45c388f (origin/wip-objecter-linger-locking) objecter: protect linger_op last_error and registered fields
+45c388f objecter: protect linger_op last_error and registered fields
 69ee5ec objecter: remove unused RWLock::Context
 e01c93d objecter: clarify a few lock assertions
 a60d5fa objecter: remove dead race handling code
 1b2da9b objecter: remove dead _get_op_target_session() method
 4f36eae ceph.spec.in: junit always except for EPEL 6
-9656018 (origin/wip-10791-stopping) MDSMonitor: do not allow MDS to transition from STATE_STOPPING
+9656018 MDSMonitor: do not allow MDS to transition from STATE_STOPPING
 6898f0b rgw: Swift API. The second way of specifying desirable response format.
-e504003 (origin/wip-10719) rgw: remove multipart entries for bucket index when aborting
+e504003 rgw: remove multipart entries for bucket index when aborting
 3e54acb rgw: encode rgw_obj::orig_obj
 64d7265 librados: code reformatting only.
 3f11ab0 librados: add info about restrictions on rados_monitor_log() usage.
@@ -748,7 +948,7 @@ d3fc5bd Fix bug: When run Test_filejournal testcase with gtest argument, all of
 93f32f0 erasure-code: fix compilation warnings
 01e154d osd: fix PG leak in SnapTrimWQ._clear()
 a850514 fsync-tester: print info about PATH and locations of lsof lookup
-b14ca1f (origin/wip-10737) test_libcephfs: test we can't set layouts on existing files
+b14ca1f test_libcephfs: test we can't set layouts on existing files
 36d37aa rados.py: keep reference to python callbacks
 7002f93 ShardedThreadPool: make wait timeout on empty queue configurable
 32d7617 osd/PG.c: use boolean to init `bool` variables
@@ -759,7 +959,7 @@ a3b1583 add tests for ceph pg ls-by-pool
 39e2640 add CLI ceph pg ls-by-osd
 742c5e8 add tests for ceph pg ls-by-primary
 f814262 fix error : ceph pg ls 0
-203c06d (origin/wip-old-gcc) locally disable pragma warnings on gcc < 4.6
+203c06d locally disable pragma warnings on gcc < 4.6
 93629d3 Pipe: conditionally compile IPTOS setting
 b025fbf librbd: consolidate all async operation flush logic
 0a00be2 xlist: added missing include
@@ -771,8 +971,8 @@ b4f2e75 osd: add perf counter for proxy read
 7920db3 tests: make ceph_watch_wait output watchfile content on failure
 ac9d75c mon: noforward flag for commands that are not supposed to be forwarded
 3ff4821 mon: fix Monitor::_get_moncommand()
-27bab65 (origin/wip-10765) rados: make 'watch' command unwatch when done
-45f842d (origin/wip-doc-ports) doc: remind user to calculate the correct max port
+27bab65 rados: make 'watch' command unwatch when done
+45f842d doc: remind user to calculate the correct max port
 c65d8ed doc: fix "7810" port typo
 fe47e23 doc: correct default of ms_bind_port_max
 d2eaeea AsyncConnection: fix incorrect condition for exchanging in_seq
@@ -785,22 +985,22 @@ e070718 osdc/Objecter: do watch/notify op completions synchronously
 293cd39 tests: run osd-scrub-repair.sh with make check
 bae1f3e FileJournal: fix journalq population in do_read_entry()
 15350a0 ceph_objectstore_tool: fix check_output on python2.6
-86fd8c3 (origin/wip-10761) librados_test_stub: added new blacklist_add method
+86fd8c3 librados_test_stub: added new blacklist_add method
 7ecf864 tests: update librbd tests to handle blacklisting
 25d7ac2 librbd: optionally blacklist clients before breaking locks
 9dfd4ac mailmap: UMD is University of Maryland
 a616de9 librados: add blacklist_add API method
 6a91f2b libradosstriper: fixed write_full when ENOENT
-0514536 (origin/wip-opath-setattr) client: handle O_PATH fds on setattr too
-636a269 (origin/wip-librbd-maint-tests) tests: add simple tests for proxied maintenance operations
-9f2f306 (origin/wip-10785) librbd: ensure ImageWatcher notifications are idempotent
+0514536 client: handle O_PATH fds on setattr too
+636a269 tests: add simple tests for proxied maintenance operations
+9f2f306 librbd: ensure ImageWatcher notifications are idempotent
 f86fb97 rgw: obj delete operation can use remove_objs param
 538395d rbd.py: Add rbd_read2/rbd_write2 funcion which can handle fadvise flags.
 7890256 librbd: minor ImageWatcher cleanup
 debd7f3 tests: relax librbd ImageWatcher test case state machine
-dfee96e (origin/wip-10770) rgw: send appropriate op to cancel bucket index pending operation
+dfee96e rgw: send appropriate op to cancel bucket index pending operation
 cbfa08e mds: disallow layout changes for files with data
-b3fdf15 (origin/wip-cephfs-snap1) mds: avoid propagrating unnecessary snap rstat to parent
+b3fdf15 mds: avoid propagrating unnecessary snap rstat to parent
 32b0892 mds: update client_need_snapflush when splitting snap inode
 6cb9b01 mds: fix rdlock snap inode
 d62c67c mds: save the oldest snapid of inode
@@ -835,7 +1035,7 @@ dbf09af mds: fix CInode::remove_need_snapflush
 1d9de22 mds: fix MDCache::journal_cow_dentry()
 32b1a9a mds: check snaprealm before drop dentries in deleted directory
 1479300 mds: properly update CInode->first during journal replay
-5b75e30 (origin/wip-10827) osdc/Objecter: linger_register now acquires rwlock
+5b75e30 osdc/Objecter: linger_register now acquires rwlock
 3cf7fcc install-deps.sh: check for debian/control existence
 09c152a run-make-check.sh: git --ancestry-path is not backward compatible
 400ac23 mon: ignore osd failures from before up_from
@@ -852,31 +1052,31 @@ c252e05 AsyncConnection: fixup for 2ffacbe (crc configuration in messenger)
 a3fc9d4 AsyncConnection: fix wrong scope of data blocks
 0db7c48 SubmittingPatches: clarify the use of branches in PRs
 adebf22 rbd_recover_tool: move rbd_recover_tool directory to src/tools subdirectory
-70ae314 (origin/wip-opath) client: fix O_PATH on older Linux systems
+70ae314 client: fix O_PATH on older Linux systems
 2f49de5 ReplicatedPG: block writes on degraded objects unless all peers support it
 2a83ef3 include/encoding: fix an compile warning
 71c6d98 msg: fixup for 2ffacbe (crc configuration in messenger)
-2598fc5 (origin/wip-10734) ObjectStore: fix Transaction encoding version number
-46f9ca4 (origin/wip-10782) pybind: fixed runtime errors with librbdpy
-9124a76 (origin/wip-8600) test/vstart_wrapper.sh: set PATH before calling vstart.sh
+2598fc5 ObjectStore: fix Transaction encoding version number
+46f9ca4 pybind: fixed runtime errors with librbdpy
+9124a76 test/vstart_wrapper.sh: set PATH before calling vstart.sh
 189ef38 init-ceph.in: add $PWD to PATH if running as ./init-ceph
 0d80691 qa: workunits: cephtool/test.sh: test 'ceph osd setcrushmap'
 ff74873 mon: OSDMonitor: use CrushTester::test_with_crushtool
 58ea017 crush: CrushTester: add test_with_crushtool()
 481d563 tools: crushtool: allow '--infile -' to pipe read from STDIN
-b2549a6 (origin/wip-export-dir) mds: implement export dir asok
+b2549a6 mds: implement export dir asok
 190c7e3 client: implement support for O_PATH on Linux.
 911e4c0 client: add support for O_NOFOLLOW in Client::open().
 a7a6fe4 rbd-recover-tool: add usefull information of this tool include README, FAQ, TODO
 ea69219 rbd-recover-tool: add a test case for raw image & snapshot
 4f395eb rbd-recover-tool: implement the function framework add control files & config files
 aa3cda2 rbd-recover-tool: add the basic function files
-97abcdd (origin/wip-traceless-reply) mds: properly record created inode in completed requests list
+97abcdd mds: properly record created inode in completed requests list
 419800f client: re-send request when MDS enters reconnecting stage
 b66caef mds: avoid sending traceless reply for request that created new inode
 d12d92d mds: process completed requests in clientreplay stage
 0548bea doc: Removed references to Inktank suppport.
-2d1803b (origin/wip-da-SCA-20150129) xio/XioMsg.h: use static_cast instead of c-style cast
+2d1803b xio/XioMsg.h: use static_cast instead of c-style cast
 babac0c doc: Removed Inktank reference.
 0d46790 mds/MDS.cc: don't compare integer with bool
 aa7c968 EventKqueue.cc: clarify calculation precedence for '&' and '?'
@@ -914,13 +1114,13 @@ c6a60d9 ReplicatedPG::do_op: ignore snapset_obc if !exists
 85cdd12 tests: add Dockerfile for fedora
 65c7e07 doc/release-notes: v0.92
 f4d6515 install-deps.sh: get lsb_release if needed
-24349a8 (origin/wip-8903) librbd: removed lingering TODO message from ImageWatcher
-17a8330 (origin/wip-10720) mds: fix leaked MDCache::logger
+24349a8 librbd: removed lingering TODO message from ImageWatcher
+17a8330 mds: fix leaked MDCache::logger
 9e9356b librbd: fixed object map issues discovered via fsx
-6071142 (origin/wip-librbd-watch-errors) librados_test_stub: added Rados::watch_flush
+6071142 librados_test_stub: added Rados::watch_flush
 1b110a5 librbd: better handling for image watch errors
 225a19f vstart.sh: fix .ceph_port typo
-8d61c39 (origin/wip-librbd-invalid-map) librbd: prevent copyup during image shrink operations
+8d61c39 librbd: prevent copyup during image shrink operations
 be05d9d rdb: update init-rbdmap to fix duplicate mount point
 fbcde04 cls_rbd: fixed object_map_resize boundary issue
 14424c8 librbd: removing objects can lead to infinite loop
@@ -930,18 +1130,18 @@ bb8c9ae librbd: pending AIO operations are now flushed asynchronously
 d00891f rbd: add image flags to 'rbd info'
 706a655 librbd: added get_flags API methods
 16e4d71 cls_rbd: get_flags now reads all snapshot flags
-7dd2de8 (origin/wip-10707) test/cls_rgw: fix test
-e0f12d9 (origin/wip-autogen) Fix do_autogen.sh so that -L is allowed
-cfab01e (origin/wip-10722) rgw: move perf cleanup before context cleanup
+7dd2de8 test/cls_rgw: fix test
+e0f12d9 Fix do_autogen.sh so that -L is allowed
+cfab01e rgw: move perf cleanup before context cleanup
 4074a91 pybind: fix error hiding and inconsistency on librados load.
 cfcfafc Objecter::_op_submit_with_budget: add timeout before call
-00a3ac3 (tag: v0.92, origin/wip-sam-v0.92) 0.92
+00a3ac3 (tag: v0.92) 0.92
 c656bce PGLog: improve PGLog::check() debugging
 05ce2aa qa: use correct binary path on rpm-based systems
-eb526af (origin/wip-10709) rbd: watch command should unwatch before exiting
-2a0e9b7 (origin/wip-optional-encoding) encoding: ignore uninitialized instantiation in boost::optional decode
-f40ee8c (origin/wip-lttng) do_autogen.sh: default to --with-lttng, -L to build without
-7590387 (origin/wip-assert-version) librados: add missing tracepoints
+eb526af rbd: watch command should unwatch before exiting
+2a0e9b7 encoding: ignore uninitialized instantiation in boost::optional decode
+f40ee8c do_autogen.sh: default to --with-lttng, -L to build without
+7590387 librados: add missing tracepoints
 57bac8e osd:  change pg_stat plain to display CRUSH_ITEM_NONE in pgmap output section.
 4aa9f3f man: add rbd status to doc/man/8/rbd.rst
 a007c52 doc: add cephfs disaster recovery guidance
@@ -959,8 +1159,8 @@ a1f634b add CLI ceph pg ls [pool] [state]
 bd8671f ceph_test_rados: fix typo
 ac161bf librados: expose rados_{read|write}_op_assert_version() in C
 11b6424 Add test case for librados assert_version()
-eb45f86 (origin/wip-10106) rgw: flush xml header on get acl request
-de2e5fa (origin/wip-10572) rgw: finalize perfcounters after shutting down storage
+eb45f86 rgw: flush xml header on get acl request
+de2e5fa rgw: finalize perfcounters after shutting down storage
 cab246d librbd: Don't do readahead for random read.
 77689f1 ReplicatedPG::C_ProxyRead: fix dropped lock
 0e3af8d ReplicatedPG: only populate_obc_watchers if active
@@ -985,9 +1185,9 @@ a74296f PG::purge_strays: purge peer_missing as well
 f9abffb osd/: don't block writes on degraded objects
 c632fec osd/: update peer_missing and local missing if we write a degraded object
 56b8fc8 ReplicatedPG: always take recovery_read_lock for recovery
-1c25dba (origin/wip-10701) rgw: use strict_strtoll() for content length
+1c25dba rgw: use strict_strtoll() for content length
 b1435e6 xio: Enforce at least two portals if bind
-cbf0691 (origin/wip-10698) rgw: fail s3 POST auth if keystone not configured
+cbf0691 rgw: fail s3 POST auth if keystone not configured
 10ddab8 doc: Fixed hyperlink.
 a0a5185 rgw: Response 204 when post on containers
 b7ab624 xio: Remove whitespace changes
@@ -1005,20 +1205,20 @@ fc76c89 osdc: add new filed dontneed in BufferHead.
 c83a288 Rework ceph-disk to allow LUKS for encrypted partitions
 707c78b Only create a key of 256 bits length, not 256 bytes
 6a45b8e add all possible ceph-disk run-time requirements to build time deps
-4c50f6a (origin/wip-rgw-versioning-4) rgw: more merge related fixes
+4c50f6a rgw: more merge related fixes
 01cc9d5 rgw: fix merge artifact
 e26023e PG: set scrubber.start = scrubber.end after scrub_compare_maps
 4f9e6ed PG: remove block_writes from scrubber
 bed22b4 doc: improve incomplete state documentation
-89bd6b1 (origin/wip-hints) librados: rename NOREUSE to NOCACHE
-8571739 (origin/wip-10688-boost-157) support Boost 1.57.0
-f623906 (origin/wip-pg-reqids) osd/PGLog: only do slow extra_reqid search of object appears at least once
+89bd6b1 librados: rename NOREUSE to NOCACHE
+8571739 support Boost 1.57.0
+f623906 osd/PGLog: only do slow extra_reqid search of object appears at least once
 eefdb32 osd: preserved extra_reqids on promote, flush
 4d310a8 osd: preserve extra_reqids in PGLog
 2ad229c osd: allow extra reqids to be stashed in each pg_log_entry_t
 ca71376 cls_rgw: fix rgw_bucket_olh_log_entry::epoch initialization
 61378f2 add pg_string_state function
-4feb864 (origin/wip-10194-master) rgw: reuse fcgx connection structure
+4feb864 rgw: reuse fcgx connection structure
 32b9bb7 QueueRing: a reduced contention queue
 ecd5e5a test/encoding/types.h: add new structs for testing
 5849380 cls_rgw: add missing struct test instance generator
@@ -1034,13 +1234,13 @@ caefe69 rgw: version id should not contain underscore
 0b9859b cmake: Fix CMakelist.txt to compile librbd, libcommon
 51dd9b2 xio: Spread and accept connections using different portals
 e761b74 async: directly call delete without check
-68c6f0e (origin/t-miyamae-wip-mshec-r44) mSHEC r44 initial commit
+68c6f0e mSHEC r44 initial commit
 e45e97b run-make-check: use nproc and shorter git expression
 0a998f5 edited failure conclusion
 4527e8f corrected some confusing numbers
 94b60c5 osd: don't log op stats for proxy read in the cache tier
 a66898f cleanup : remove unused perf counter
-a871651 (origin/wip-4087) librbd: object map updates should use AIO
+a871651 librbd: object map updates should use AIO
 4328069 test: correct two issues with the librados_test_stub
 b63246f librbd: refactor existing object map code to its own class
 f4b9442 cls_rbd: object_map_resize shrink protection
@@ -1052,35 +1252,35 @@ f4b9442 cls_rbd: object_map_resize shrink protection
 a41878a librbd: Use object map for IO operations
 7e751ce librbd: Implement object map for tracking in-use objects
 13fd6d1 cls_rbd: Add methods for manipulating an image object map
-ca214c9 (origin/wip-8251-2) rgw: also convert sharded replicalog entries
+ca214c9 rgw: also convert sharded replicalog entries
 0a4956e rgw: get rid of replicalog index_by_instance param
 c4a6eab rgw: fixing rebase casualties
 791c15b rgw: convert old replicalog entries if needed
 778a53a rgw-admin: add replicalog update command
 1cb10d7 async: add same behavior when message seq mismatch with simple
-8d56ade (origin/wip-librbd-tests) tests: ensure RBD integration tests exercise all features
-b6d6f90 (origin/wip-mdsmon-args) mon/MDSMonitor: fix gid/rank/state parsing
+8d56ade tests: ensure RBD integration tests exercise all features
+b6d6f90 mon/MDSMonitor: fix gid/rank/state parsing
 9b9a682 msg/Pipe: set dscp as CS6 for heartbeat socket
 1e236a3 mds: don't join on thread which has not been runned.
-6939e8c (origin/zhouyuan-submodule_https_git) Update git submodule to use the same https protocol
+6939e8c Update git submodule to use the same https protocol
 e393810 librbd: make librbd cache send read op with fadvise_flags.
 a23676b librbd: Don't do readahead for random read.
 8d0295c rgw: extend replica log api (purge-all)
 6b0151c utime: extend utime parsing
 e274e10 rgw: fix replica log indexing
-0be7925 (origin/wip-fuse-regress-note) Update PendingReleaseNotes for ceph-fuse change in Giant
+0be7925 Update PendingReleaseNotes for ceph-fuse change in Giant
 77bd883 test_msgr: add auth enabled basic test
 408db65 async_msgr: crc configuration in messenger
 ce941f6 async: Delete authorizer when connected
-a8e2579 (origin/wip-perf-filter) common: filtering in `perf dump`
+a8e2579 common: filtering in `perf dump`
 e5ddc50 tests: bring back useful test 'ceph tell osd.foo'
 7c59bc0 cleanup: replace some length() with !empty()
 17add06 cleanup: replace some size() with !empty()
 9a9670c tests: better EPEL installation method
-bf05ec1 (origin/wip-gmock) tests: replace existing gtest 1.5.0 with gmock/gtest 1.7.0
-5301b2b (origin/wip-10637) librbd: trim header update not using AIO
+bf05ec1 tests: replace existing gtest 1.5.0 with gmock/gtest 1.7.0
+5301b2b librbd: trim header update not using AIO
 5cbe0c5 gmock: use Google C++ Mocking Framework for unit tests
-ca1d21e (origin/wip-install-deps) install-deps: fix LC_ALL setting
+ca1d21e install-deps: fix LC_ALL setting
 e4a97c6 librados_test_stub: add IoCtx::get_instance_id()
 f6406c9 qa: small improvements to merge-diff test
 4e88414 rbd-fuse: clean up when shutdown
@@ -1094,25 +1294,25 @@ dfa96c5 librbd: Add maintenance operation requests to ImageWatcher
 e6f1280 librados: Expose RadosClient instance id through librados
 398bc96 librbd: Create async versions of long-running maintenance operations
 87ef462 rgw: format mtime of radosgw-admin bucket stats
-dc1630e (origin/wip-librbd-trim-error) librbd: trim would not complete if exclusive lock is lost
+dc1630e librbd: trim would not complete if exclusive lock is lost
 3347e0d bug: error when installing ceph dependencies with install-deps.sh
-4e90a31 (origin/wip-10617) osd: add failure injection on pg removals
+4e90a31 osd: add failure injection on pg removals
 9b220bd ceph.spec.in: use wildcards to capture man pages
 51e3ffa rgw: reorder bucket cleanup on bucket overwrite
 313d6a5 rgw: access appropriate shard on bi_get(), bi_put()
 b304af3 librbd: clean up log message for copy-on-read
 879fd0c osd: do not ignore deleted pgs on startup
-6f6facb (origin/wip-librbd-close-deadlock) librbd: potential deadlock on close_image
+6f6facb librbd: potential deadlock on close_image
 bda293a librbd: fix copy-on-read / resize down race condition
 e917033 test: add rados_nobjects_list_xyz functions to librados test stub
 7c7f072 librbd: eliminate CoR callback
 9790b0f librbd: use finisher for copy-on-read copyup fulfillment
 cfce41d ReplicatedPG::hit_set_persist: update ssc->snapset as well
 f1f6f0b ReplicatedPG::hit_set_persist: write out oi.digest, these objects are immutable
-4dda030 (origin/wip-noreuse) librados: add FADVISE_NOREUSE
+4dda030 librados: add FADVISE_NOREUSE
 9edd0a5 ceph.spec.in: move rgw logrotate to rgw subpackage
 050a59e osd/OSDMap: remove unused variables
-55dfe03 (origin/wip-4092) librbd: schedule header refresh after watch error
+55dfe03 librbd: schedule header refresh after watch error
 33f0afd doc: Some files still use http://ceph.newdream.net
 2f9b3bd ceph-debugpack: fix bashism of {1..10}
 5652a1d cls_rgw; fix json decoding and encoding of certain type
@@ -1137,7 +1337,7 @@ cd7ed04 osd/: s/backfill_read/recovery_read for obc locking
 6a025ef PGLog: trim mod_desc after appending to the log
 a6eadae rbd image_read.sh: disable exclusive locking
 f51ff28 vstart.sh: pull default CEPH_PORT from .ceph_port
-35fcb04 (origin/wip-crush-straw2) Change crush_ln to provide 32 more digits.
+35fcb04 Change crush_ln to provide 32 more digits.
 6289912 crush: improve straw2 adjustment slightly
 32a1ead Add crush_ln to calculate nature log efficently
 0eca13d crush: fix dump for hammer tunables
@@ -1147,25 +1347,25 @@ f51ff28 vstart.sh: pull default CEPH_PORT from .ceph_port
 6e084f6 unittest_crush: rename straw tests
 d4ec757 crush: move default bucket choice into CrushWrapper helper
 14eb1a7 crush/builder: fix warnings
-07eadc4 (origin/wip-10474) FileJournal: Fix hang in FileJournal::close()
+07eadc4 FileJournal: Fix hang in FileJournal::close()
 2865e13 doc: Change Availability text in all of the man pages
 b04f698 Doc: Fix the extra blank space in doc/start/quick-rbd.rst
-9930028 (origin/wip-mon-pgtemp) osd: OSDMap: remove pg temps for inexistent pools
+9930028 osd: OSDMap: remove pg temps for inexistent pools
 34f5c17   use shardid as a key of the shardinfo when "dump_op_pq_state".   Signed-off-by: huangjun <hjwsm1989@gmail.com>
 804deec Fix memstore free space caculation
 6239151 RocksDBStore: filterpolicy is not deleted when RocksDBStore destructs
-2e8bb1e (origin/wip-10614) test/librbd/fsx.c: disable RBD exclusive locking for krbd
+2e8bb1e test/librbd/fsx.c: disable RBD exclusive locking for krbd
 9ad9ba8 doc: Fix a typo in radosgw-admin doc
 008698b doc: Change Availability text in all of the man pages
 6f44f7a Revert "Revert "Merge remote-tracking branch 'origin/wip-bi-sharding-3' into next""
-90a90bb (origin/wip-rgw-versioning-3) rgw: set default value for swift versioning extension
+90a90bb rgw: set default value for swift versioning extension
 dc11ef1 PGBackend: fix and clarify be_select_auth_object
 26656e3 rgw: fix bucket removal with data purge
 b18b14b ObjectStore::_update_op: treat CLONERANGE2 like CLONE
 4d3b49e rbd: ensure aio_write buffer isn't invalidated during image import
 500f4b4 rgw: assign versioned_epoch on bucket listing response
 8cbfac4 Wrong HTTP header name
-a0af5de (origin/wip-10579) qa: move fs quota to its own dir
+a0af5de qa: move fs quota to its own dir
 2ce38db osd: fix some compile warning
 b9be97f Doc: Fix the typo in doc/rbd/rados-rbd-cmds.rst
 fe93f73 test: fix rbd cli tests for new feature bit
@@ -1174,10 +1374,10 @@ c68ecc7 xio: Enable xio option to call fork init
 b1b299d osd: revert d427ca35404a30e1f428859c3274e030f2f83ef6
 46347fc osd: Transction::append SHOULD NOT modify other.op_bl
 988d007 ReplicatedPG::on_change: clear cache at the end
-8453f71 (origin/wip-10555) mon: Do not allow empty pool names when creating
+8453f71 mon: Do not allow empty pool names when creating
 68af510 ceph-disk: do not reuse partition if encryption required
 48963ba test_msgr: Rename unittest_msgr to ceph_test_msgr
-b311e7c (origin/wip-10257) mon: PGMonitor: skip zeroed osd stats on get_rule_avail()
+b311e7c mon: PGMonitor: skip zeroed osd stats on get_rule_avail()
 8be6a6a mon: PGMonitor: available size 0 if no osds on pool's ruleset
 e84f27e doc: Replace placeholder with 'gateway'
 190c185 librbd: copy-on-read   Addressed Jason's review comments.
@@ -1189,7 +1389,7 @@ f408c8e librbd: copy-on-read for clones, write entire object into child asychron
 08faee0 doc: mon should be listed before osd
 6b1c92c Doc : Documentation#10205
 b8dd228 doc bug 10206
-9147c62 (origin/wip-10576) ceph_test_rados_api_misc: do not assert rbd feature match
+9147c62 ceph_test_rados_api_misc: do not assert rbd feature match
 6d209c2 rgw: cors set attrs on bucket using appropriate call
 2c36798 rgw: switch index ops to new apis
 11befab rgw: break if done when timing out pending olh ops
@@ -1301,7 +1501,7 @@ d53275c ceph_test_objectstore: fix keyvaluestore name
 738f868 PGBackend: do not update oi digest on inconsistent object
 8ab3c41 osd: new pool safeguard flags: nodelete, nopgchange, nosizechange
 6613358 Revert "Merge remote-tracking branch 'origin/wip-bi-sharding-3' into next"
-66f3bd6 (origin/wip-recover-dentries) tools: output per-event errors from recover dentries
+66f3bd6 tools: output per-event errors from recover dentries
 3e15fd5 tools: handle hardlinks in recover_dentries
 9d91757 tools: recover_dentries efficiency
 e2ae91f tweak comment wording in recover_dentries
@@ -1310,7 +1510,7 @@ e2ae91f tweak comment wording in recover_dentries
 d94a7a8 tools: remove duplicated InoTable encoding
 478659f JournalTool: handle corrupt fnodes
 36830eb tools/cephfs: add recover_dentries to journaltool
-46326ff (origin/wip-10388) mds: perfcounters for RecoveryQueue
+46326ff mds: perfcounters for RecoveryQueue
 62b4e43 mds/MDCache: stray/purge perfcounters
 4bd0894 Doc: rbd-snapshot: Fix the typo
 07e1d18 rbd: fix bug about rbd watch command
@@ -1318,7 +1518,7 @@ bbaf582 mon: handle case where mon_globalid_prealloc > max_global_id
 d29aef5 doc: Fix OpenStack Glance configuration
 1d1215f mon: change mon_globalid_prealloc to 10000 (from 100)
 be1416a mon: silently ignore mark_down, mark_disposable on AnonConnection
-b5e1bd1 (origin/wip-osd-df) mon/OSDMonitor: pull totals into the table format
+b5e1bd1 mon/OSDMonitor: pull totals into the table format
 169d680 mon/OSDMonitor: don't -nan for variance when no osds
 9aa0006 common/TextTable: do padding during final step
 ea5166e mon/OSDMonitor: drop unnecessary stringify
@@ -1404,9 +1604,9 @@ b383b52 rgw: enable s3 get/set versioning ops
 0d97b40 rgw: get bucket versioning status op
 8ed79d6 rgw: add versioning_enabled field to bucket info
 50547dc mon: PGMonitor: fix division by zero on stats dump
-dbaa142 (origin/wip-bi-sharding-3) rgw: bilog marker related fixes
-c4548f6 (origin/wip-10439) pybind: ceph_argparse: validate incorrectly formed targets
-80a9d99 (origin/wip-mon-fixes) mon: Monitor: return 'required_features' on get_required_features()
+dbaa142 rgw: bilog marker related fixes
+c4548f6 pybind: ceph_argparse: validate incorrectly formed targets
+80a9d99 mon: Monitor: return 'required_features' on get_required_features()
 ab996c1 mon: Elector: output features in handle_propose()
 bb48ebe mon: Elector: put dangling message reference
 0a369b9 mon: mkfs compatset may be different from runtime compatset
@@ -1421,12 +1621,12 @@ bb582d9 librados: clean up code.
 7cfdba2 librbd: clean up code.
 7372ac7 crush: move two crush tests over
 ddb91b2 crush: rename unit tests
-7e1553c (origin/wip-10553) rgw: fix partial GET in swift
-e7d5fdd (origin/wip-10552) client: fix getting zero-length xattr
+7e1553c rgw: fix partial GET in swift
+e7d5fdd client: fix getting zero-length xattr
 97c1881 osd/PG: do not republish unchanged pg stats
 d2e1049 osd/PG: avoid most of publish_stats_to_osd for non-primary
 65d3342 osd/osd_types: add operator== for pg stat types
-2f31606 (origin/wip-cephfs-tabletool) tools: create cephfs-table-tool
+2f31606 tools: create cephfs-table-tool
 b8ffe5c mds: give MDSTables a `rank` attribute
 ea153c3 mds: abstract SessionMapStore from SessionMap
 d8d608d erasure-code: update links to jerasure upstream
@@ -1437,7 +1637,7 @@ dac666f erasure-code: tests use different pool/profile names
 4d07a32 crush: update tries statistics for indep rules
 6c34528 erasure-code: update jerasure/gf-complete submodules
 fc01b01 doc: add cases where ceph-extras is not needed
-2dc29de (origin/wip-9780-9781) ceph-objectstore-tool, test: Fix objectstore name changed to keyvaluestore
+2dc29de ceph-objectstore-tool, test: Fix objectstore name changed to keyvaluestore
 0c5b66d osd: Get pgid ancestor from last_map when building past intervals
 7fb721c osd: Pass oldest_map when generating past intervals
 b9a0484 osd: build_push_op() handle short reads so recipient doesn't crash
@@ -1490,16 +1690,16 @@ f4fcff1 AsyncMessenger: Bind async thread to special cpu core
 d91fe8b test_shared_cache::get_next: fix get_next call on uninitialized value
 37dc423 shared_cache: reduce duplication between get_next's
 9db5969 fix command 'ceph pg dump_stuck degraded'
-3408156 (origin/wip-mon-drop-conversion) mon: Monitor: drop StoreConverter code
+3408156 mon: Monitor: drop StoreConverter code
 1d814b7 ceph_mon: no longer attempt store conversion on start
-447d469 (origin/wip-9440) mon: Monitor: health to clog writes every X seconds on the second
+447d469 mon: Monitor: health to clog writes every X seconds on the second
 ae1032e mon: Monitor: cache 'summary' string to avoid dups on clog
 fcd7aa0 mon: Monitor: reset health status cache on _reset()
 81a2faf mon: Monitor: write health status to clog every X seconds
 e2d66ae mon: Monitor: 'get_health()' returns overall health status
 7ce770d mon: Monitor: health summary to clog on get_health()
-889969e (origin/wip-fail-idempotent) mon/MDSMonitor: make 'mds fail' idempotent for IDs
-b957fa8 (origin/wip-10547-formatter) tests: adapt to new json-pretty format
+889969e mon/MDSMonitor: make 'mds fail' idempotent for IDs
+b957fa8 tests: adapt to new json-pretty format
 97609a3 test: rename test_activate_osd
 8d8ce96 common: restore format fallback semantic
 e9aeaf8 mailmap: Loic Dachary name normalization
@@ -1508,12 +1708,12 @@ d80ded9 mailmap: David Zhang affiliation
 33ba23f common/shared_cache.hpp: empty() iff weak_refs is empty
 d532f3e remove unused hold_map_lock in _open_lock_pg
 9748655 man: add help for rbd merge-diff command
-6986ec1 (origin/wip-10477) osd/PG: populate blocked_by with peers we are trying to activate
+6986ec1 osd/PG: populate blocked_by with peers we are trying to activate
 5b0e8ae mailmap: Yehuda Sadeh name normalization
 3f03a7b doc/release-notes: v0.91
 4ca6931 doc/release-notes: typo
 e7cc611 qa: ignore duplicates in rados ls
-e5591f8 (origin/wip-10539) qa: fail_all_mds between fs reset and fs rm
+e5591f8 qa: fail_all_mds between fs reset and fs rm
 26a2df2 mailmap: Josh Durgin name normalization
 d6a9d25 doc/release-notes: v0.80.8
 45e9cd5 Fix make check blockers.
@@ -1548,12 +1748,12 @@ a39cbe2 atomic: add and sub return their result
 f57383a Don't use __cplusplus to mean !__KERNEL__
 71e4987 Add missing Messenger::create ms_type in test_msgr.
 3ce683a Fixup int_types.h.
-3424bae (origin/wip-librbd-coverity) librbd: fix coverity false-positives for tests
+3424bae librbd: fix coverity false-positives for tests
 f3a57ee rgw: wait for completion only if not completion available
 833b277 ceph_test_objectstore: enable keyvaluestore experimental option
 204fa0f ReplicatedPG::_scrub: don't record digests for snapdirs
 0172069 common/shared_cache.hpp: restructure clear()
-9daeaec (origin/wip-10382) mds: handle heartbeat_reset during shutdown
+9daeaec mds: handle heartbeat_reset during shutdown
 fc5cb3c osd/ReplicatedPG: remove unnecessary parameters
 78b2cf0 osd: force promotion for watch/notify ops
 c8bef13 osd/OpRequest: add osd op flag CEPH_OSD_RMW_FLAG_PROMOTE
@@ -1593,20 +1793,20 @@ f9b280e Adjust bi log listing to work with multiple bucket shards. Signed-off-by
 751fd07 Adjust rgw bucket prepare/complete OP to work with multiple bucket index shards.
 5d004d3 Implement sharding for bucket creation.
 90a3920 Add a new field to bucket info indicating the number of shards of this bucket and make it configurable.
-364b868 (origin/wip-mon-propose) mon/Paxos: consolidate finish_round()
+364b868 mon/Paxos: consolidate finish_round()
 67a90dd mon: accumulate a single pending transaction and propose it all at once
 d159586 PendingReleaseNotes: make a note about librados flag changes
 725d660 (tag: v0.91) 0.91
-9264d25 (origin/wip-formatter) common/Formatter: new_formatter -> Formatter::create
+9264d25 common/Formatter: new_formatter -> Formatter::create
 617ad5d common/Formatter: improve json-pretty whitespace
 83c3b13 common/Formatter: add newline to flushed output if m_pretty
 e2a7b17 osd/PG: remove unnecessary publish_stats_to_osd() in all_activated_and_committted()
 77bc23c osd/PG: add 'activating' pg state between peering and active
-b578a53 (origin/wip-quota-test) qa: set -e explicitly in quota test
+b578a53 qa: set -e explicitly in quota test
 8d706cd osd/ReplicatedPG: init ignore_cache in second OpContext ctor
 792ac7c osd/ReplicatedPG: fix cancel_proxy_read_ops
 7c664fa Doc: Fix the indentation in doc/rbd/rbd-snapshot.rst
-1c01c3a (origin/wip-librbd-rados-stub) tests: create unittest_librbd
+1c01c3a tests: create unittest_librbd
 c105003 tests: add mock librados API for supporting unit tests
 1e9da43 include: moved RBD's generic FunctionContext wrapper
 1483a43 msg/simple: remove redundant calling of setsockopt
@@ -1614,7 +1814,7 @@ c105003 tests: add mock librados API for supporting unit tests
 3cbe5da mon: check size must larger than zero.
 3f03003 test/mon: Add test case for ceph osd pool set size/min_size.
 e3678f4 mon: check min_size range.
-7945f8d (origin/wip-8900) librbd: flush pending AIO requests under all existing flush scenarios
+7945f8d librbd: flush pending AIO requests under all existing flush scenarios
 2dd0f03 librbd: AIO requests should retry lock requests
 6176ec5 librbd: differentiate between R/O vs R/W RBD features
 544ed96 librbd: Add internal unit test cases
@@ -1624,10 +1824,10 @@ e3678f4 mon: check min_size range.
 ccadff1 librbd: Integrate librbd with new exclusive lock feature
 9ee80b3 librados: bump rados version number
 f5668d6 librbd: Create image exclusive lock watch/notify handler
-2ecd874 (origin/wip-9956) osd: enable filestore_extsize by default
+2ecd874 osd: enable filestore_extsize by default
 b76d0dc os/FileStore: verify kernel is new enough before using extsize ioctl
-f4ff12a (origin/wip-mon-converter) drop ceph_mon_store_converter
-a4152db (origin/wip-fs-reset) mon/MDSMonitor: add confirm flag to fs reset
+f4ff12a drop ceph_mon_store_converter
+a4152db mon/MDSMonitor: add confirm flag to fs reset
 8630696 qa: add `fs reset` to cephtool tests
 1713ffd mon: implement `fs reset`
 1f69476 Fix bug 10503: http://tracker.ceph.com/issues/10503 ceph-fuse: quota code is not 32-bit safe for vxattr output
@@ -1638,7 +1838,7 @@ d300220 rbd: test case for rbd merge-diff
 337f821 rbd: merge two diff files into one single file
 9c82efc rbd: parse diff file body for diff merging
 b4720ae rbd: parse diff file header for diff merging
-f42ef1e (origin/wip-promote) ceph_test_rados: add some debug output
+f42ef1e ceph_test_rados: add some debug output
 1554fbc osd/ReplicatedPG: improve proxy read cancelation
 1c8b679 osd/ReplicatedPG: put proxy read completion on finisher
 650f1d9 osd: tiering: avoid duplicate promotion on proxy read
@@ -1658,7 +1858,7 @@ a4a4149 osd/ReplicatedPG: drop unnecessary cache_mode checks
 1d89f18 osd/ReplicatedPG: make op argument to promote_object optional
 2bbab05 OSD: add a get_latest_osdmap command to the admin socket
 d5e8ef5 doc: Fix PHP librados documentation
-a16e72c (origin/wip-mon-wishlist) doc: mon janitorial list is now a wishlist
+a16e72c doc: mon janitorial list is now a wishlist
 19955fc doc: Replace cloudfiles with swiftclient in Python Swift example
 5461368 mon: paxos: queue next proposal after waking up callbacks
 d375532 rgw: return InvalidAccessKeyId instead of AccessDenied
@@ -1669,14 +1869,14 @@ c1080b2 doc: Clean up pool usage.
 e6a4ab1 client: include ceph and git version in client metadata
 f90c48f Revert "rgw: switch to new watch/notify API"
 f887817 doc: Added section to install priorities/preferences.
-bf8f062 (origin/wip-10311) rgw: only keep track for cleanup of rados objects that were written
+bf8f062 rgw: only keep track for cleanup of rados objects that were written
 55a5c5f tests: temporarily disable unittest_msgr
-26e7d5f (origin/wip-asok-get-subtrees) mds: add asok command for getting subtreemap
+26e7d5f mds: add asok command for getting subtreemap
 1c1897e mds: give CDir a dump() method for JSON output
-a58d104 (origin/wip-mdscacheobject-const) mds: support constness in MDSCacheObjects
-e9033bb (origin/wip-librbd-snap-unprotect) librbd: shadow variable in snap_unprotect and list_children
+a58d104 mds: support constness in MDSCacheObjects
+e9033bb librbd: shadow variable in snap_unprotect and list_children
 cf432fa doc: Add Librados PHP documentation
-d994e60 (origin/wip-table-formatter) common: Formatter: cosmetic re-indent
+d994e60 common: Formatter: cosmetic re-indent
 e797dcf common: Formatter: add TableFormatter class
 c528d87 erasure-code: test repair when file is removed
 9406b7f osd: accumulate authoritative peers during recovery
@@ -1685,11 +1885,11 @@ ecc3bca os: remove debug message leftover in FileJournal
 63c8dd0 msg: initialize AsyncConnection::port
 c60f88b Bump memstore_device_bytes from U32 to U64
 8811df3 FileStore: return error if get_index fails in lfn_open
-20be188 (origin/wip-peeringqueue) osd: assert there is a peering event
+20be188 osd: assert there is a peering event
 492ccc9 osd: requeue PG when we skip handling a peering event
 49d114f librados: Translate operation flags from C APIs
-8d52782 (origin/wip-10445) rgw: use gc for multipart abort
-6edfcc1 (origin/wip-nits) mds: allow 'ops' as shorthand for 'dump_ops_in_flight'
+8d52782 rgw: use gc for multipart abort
+6edfcc1 mds: allow 'ops' as shorthand for 'dump_ops_in_flight'
 1617fbb osd: allow 'ops' as shorthand for 'dump_ops_in_flight'
 3d2fbf7 tests: group clusters in a single directory
 bd7be04 doc: don't suggest mounting xfs with nobarrier
@@ -1697,11 +1897,11 @@ bd7be04 doc: don't suggest mounting xfs with nobarrier
 27cb78b mon, os: check the result of sync_filesystem.
 3646e1e encoding: wrap ENCODE_START/FINISH arguments
 fa96bb4 librbd: Stub out new exclusive image feature
-478629b (origin/wip-10471) rgw: index swift keys appropriately
-97cc409 (origin/wip-mdsmonitor-fixes) mon/MDSMonitor: fix `mds fail` for standby MDSs
+478629b rgw: index swift keys appropriately
+97cc409 mon/MDSMonitor: fix `mds fail` for standby MDSs
 c400ba1 mon/MDSMonitor: respect MDSMAP_DOWN when promoting standbys
-487c22a (origin/wip-10384-ceph-test-helper-races) init-ceph: stop returns before daemons are dead
-3d08a68 (origin/wip-da-SCA-20150102) msg/async/AsyncConnection.cc: reduce scope of variable
+487c22a init-ceph: stop returns before daemons are dead
+3d08a68 msg/async/AsyncConnection.cc: reduce scope of variable
 b99508b osd/ClassHandler.cc: move stat into error handling
 fd4ac46 crush/crush.c: prevent DIVIDE_BY_ZERO
 aacdaae src/common/obj_bencher: fix some UNINIT issues
@@ -1728,7 +1928,7 @@ f19c2e6 mds/Server.cc: fix compiler warning
 3ccd792 client/Client.cc: prefer ++operator for non-primitive iterators
 1a00fb7 test/librados/aio.cc: release completion before exit
 2f54209 test/librados/aio.cc: delete AioCompletion* before return
-485d139 (origin/wip-10041) client: fix mount timeout
+485d139 client: fix mount timeout
 397b261 common: Don't call ioctl(BTRFS_IOC_SYNC) in sync_filesystem.
 3f7faa4 common: Directly return the result of syncfs().
 1c38895 disable tcmalloc by default when enable jemalloc
@@ -1747,14 +1947,14 @@ dbae922 osd: Add Transaction::TransactionData for fast encode/decode
 de02134 tests: resolve ceph-helpers races
 bea2d4a qa: drop tiobench suite
 8618a53 cli: ceph: easier debugging (pdb) with 'CEPH_DBG=1'
-55f8fee (origin/wip-10412) client: fix use-after-free bug in unmount()
+55f8fee client: fix use-after-free bug in unmount()
 93d39a8 cleanup: fix a compile warning
 ea3ed5b TestLFNIndex.cc: For root, dont do permission operations.
-488355c (origin/wip-fix-copyfrom) osd: fix object_copy_data_t compat encoding
-ed50377 (origin/wip-repop) osd/PG: print last_update_applied if != last_update
+488355c osd: fix object_copy_data_t compat encoding
+ed50377 osd/PG: print last_update_applied if != last_update
 78d2d31 Add MOSDRepOp and MOSDRepOpReply
 6ca2eb8 configure: show pkg names when libkeyutils is missing
-5cf84e6 (origin/wip-watch-leak) librados: fix leak of WatchContext on unwatch
+5cf84e6 librados: fix leak of WatchContext on unwatch
 b5c24e4 qa: add test_tell, which currently is used only for testing 'ceph tell mon version'.
 244777d test/bufferlist: For root, don't do permission operation for read_file case.
 3b4e021 qa: refactor 'ceph -w' magic in test_mon_misc by introducing helper functions ceph_watch_start and ceph_watch_wait so they can be reused in other tests.
@@ -1762,8 +1962,8 @@ b5c24e4 qa: add test_tell, which currently is used only for testing 'ceph tell m
 c7cc6af rbd: write a diff description into the merged diff file
 bca862c rbd: parse merge-diff arguments
 0b6ab82 rbd: add an option merge-diff
-bdd0e3c (origin/wip-10351) mount.ceph: avoid spurious error message
-6e67450 (origin/wip-10387) client: close dirfrag when trying to trim an inode
+bdd0e3c mount.ceph: avoid spurious error message
+6e67450 client: close dirfrag when trying to trim an inode
 274b989 doc: rm reference to old Ubuntu release
 0471be6 debian: create a repository from sources
 c8f56ab AsyncMessender: use IOV_MAX instead of IOV_LEN
@@ -1771,10 +1971,10 @@ d49b694 AsyncMessenger: s/sended/sent/
 c9da51d AsyncMessenger: should retry in case of EINTR
 169e8bd msg: fix factory error message
 ec1f58a unittest_msgr: enable experiemntal async msgr
-1265603 (origin/wip-10441-b) osd: force read bit for watch
+1265603 osd: force read bit for watch
 4642441 osd: drop unused watch_info_t w
 cef7a82 KeyValueStore:: do_transactions: clean up code which is never used clean up ops and bytes which is never used in do_transactions()
-dfd6a38 (origin/wip-mon-janitorial-list) src/doc: add monitor janitorial list
+dfd6a38 src/doc: add monitor janitorial list
 1dba143 Make pg dump {,sum,pgs,pgs_brief} work for format=plain
 7d75f0c Makefile: include radosgw-admin in base
 38350a0 client: fix quota signed/unsigned warning
@@ -1782,7 +1982,7 @@ b7b4534 common: log which experimental features are enabled.
 55405db ms: mark async messenger experimental
 44ce7cc os: rename keyvaluestore-dev -> keyvaluestore; mark experimental
 8a55972 common: add 'enable experimental data corrupting features'
-783956c (origin/wip-10341) tools: ceph-monstore-tool: validate start/stop vals
+783956c tools: ceph-monstore-tool: validate start/stop vals
 60e9c3f tools: ceph-monstore-tool: output number of paxos versions dumped
 b27ca4c tools: ceph-monstore-tool: raw map to stdout if outfile not specified
 68f3b77 tools: ceph-monstore-tool: use subcmd parser helper
@@ -1804,8 +2004,8 @@ fe44cd3 doc: Updates information for SSL configuration in Ceph Object Gateway in
 45fb9a3 FileJournal: Don't cache journal data if journal w/o directio mode
 e4e1777 AsyncMessenger: fix the leak of file_events
 70ef30f osd: osd tree to show primary-affinity value
-aa56ee4 (origin/wip-10422) mon: provide encoded canonical full OSDMap from primary
-d7fd6fc (origin/wip-10372) osdc/Objecter: improve pool deletion detection
+aa56ee4 mon: provide encoded canonical full OSDMap from primary
+d7fd6fc osdc/Objecter: improve pool deletion detection
 a540ac3 librados: only call watch_flush if necessary
 6b030aa mds: add default ctor for quota_info_t
 ee6529b AsyncMessenger: Fix leak memory
@@ -1818,19 +2018,19 @@ b41a739 10132: osd: tries to set ioprio when the config option is blank
 6b01b5e AsyncConnection: Ensure reply connect_seq larger than sent
 926a1b7 librados: only call watch_flush if necessary
 73257e8 os: WBThrottle: optimize map to unordered_map Using unordered_map to save the cpu cost and acceralate map::find() operation.
-d3fb563 (origin/wip-10415) libcephfs/test.cc: close fd before umount
+d3fb563 libcephfs/test.cc: close fd before umount
 b95c73e librados: warn about rados_watch_flush() prior to ioctx shutdown
 93825bf librados: watch_flush() on shutdown
 7de1b4d librados: add rados_watch_flush() call
 5cf4483 osdc/Objecter: do notify completion callback in fast-dispatch context
 1fbe9b6 librados: warn about rados_watch_flush() prior to ioctx shutdown
-4ce6d25 (origin/wip-stop.sh-me) stop.sh: killall -u takes username, not uid
-dab5391 (origin/wip-10414) client: fix uninitialized member
+4ce6d25 stop.sh: killall -u takes username, not uid
+dab5391 client: fix uninitialized member
 3f3f2fa osd: be_compare_scrubmaps uses incorrect j iterator
-d87918a (origin/wip-10409) osd: scrub: only assume shard digest == oi digest for replicated pools
+d87918a osd: scrub: only assume shard digest == oi digest for replicated pools
 a25429c osd: clean up use of hex for digests
 9c96fbb osd/ECBackend: use correct seed for (empty) omap digest
-7f9c03d (origin/wip-pg-stat) mon/PGMap: restructure 'pg stat' formatted output
+7f9c03d mon/PGMap: restructure 'pg stat' formatted output
 e89bafb remove unmatched op code comparasion
 4bb6e29 tests: use port 7111 for osd-copy-from.sh
 6f8aad0 tests: recovery of a lost object in erasure coded pools
@@ -1851,11 +2051,11 @@ f080595 tests: avoid bash == --shell confusion in docker-test-helper.sh
 d8f84d1 tests: docker images must use install-deps.sh
 80f20f8 tests: run-make-check.sh install jq
 2de2c4b install-deps.sh: do not require sudo when root
-e99da68 (origin/wip-mon-health) mon: make 'ceph -s' show pg state counts in reverse descending order
-9c8827a (origin/wip-osd-ctor) osd/ReplicatedPG: initialize new_backfill in ctor
-30678f6 (origin/wip-watch-notify-2) librados: watch_flush() on shutdown
+e99da68 mon: make 'ceph -s' show pg state counts in reverse descending order
+9c8827a osd/ReplicatedPG: initialize new_backfill in ctor
+30678f6 librados: watch_flush() on shutdown
 4ebd4b4 librados: add rados_watch_flush() call
-218de82 (origin/wip-9059-checksums) osd: scrub: wait for digest updates to apply before next scrub chunk
+218de82 osd: scrub: wait for digest updates to apply before next scrub chunk
 1646d17 osd: change omap data encoding in object_copy_data_t
 925f572 test/osd/osd-copy-from: simple test of copy-from and error injection
 6d80078 rados: use copy_from for rados cp (and cppool) command
@@ -1878,8 +2078,8 @@ e68d771 osd: drop vestigal invalid_snapcolls fields from scrub
 056de09 osd/ReplicatedPG: set and invalidate data/omap digests on osd ops
 9d5d491 doc: Adds updated ceph-deploy man page under man/
 8c38cc6 doc: Fixes a typo in ceph-deploy man page.
-46a1a4c (origin/wip-10319-wusui) If trusty, use older version of qemu
-7f1e510 (origin/wip-10400-quota-info-t) mds: add default ctor for quota_info_t
+46a1a4c If trusty, use older version of qemu
+7f1e510 mds: add default ctor for quota_info_t
 18d6b20 doc/release-notes: v0.90
 9b78daf osdc/Objecter: do notify completion callback in fast-dispatch context
 ecbdbb1 tests: temporarily disable unittest_msgr
@@ -1887,21 +2087,21 @@ ecbdbb1 tests: temporarily disable unittest_msgr
 49c2322 doc: Instead of using admin socket, use 'ceph daemon' command.
 a302c44 ceph-disk: Fix wrong string formatting
 2f63e54 cleanup : remove sync_epoch
-19dafe1 (origin/wip-10255-wusui) Remove sepia dependency (use fqdn)
-1eb0cd5 (origin/wip-osdmap) osd: only verfy OSDMap crc if it is known
+19dafe1 Remove sepia dependency (use fqdn)
+1eb0cd5 osd: only verfy OSDMap crc if it is known
 1b7585b stop.sh: only try killing processes that belong to me
-0af2a1c (origin/wip-10326) qa/workunits/rest/test.py: fix pg stat test
+0af2a1c qa/workunits/rest/test.py: fix pg stat test
 2a1bd76 .gitmodules: update ceph-object-corpus auth repo to github
 623ebf0 osd: clear ReplicatedPG::object_contexts when PG start a new interval
 1f9c087 AsyncConnection: Fix time event is called after AsyncMessenger destruction
 20ea086 PipeConnection: Avoid deadlock when calling is_connected
 9783a5c test/msgr/test_msgr: Fix potential unsafe cond wakeup and wrap check
-bba4d35 (origin/wip-librados-init) librados: init last_objver
-2cd9dc0 (origin/wip-caps-init) messages/MClientCaps: init peer.flags
-679652a (origin/wip-osdmap-leak) osd: fix leaked OSDMap
+bba4d35 librados: init last_objver
+2cd9dc0 messages/MClientCaps: init peer.flags
+679652a osd: fix leaked OSDMap
 18f545b librados: Avoid copy data from librados to caller buff when using rados_read_op_read.
 001ea29 Messenger: Create an Messenger implementation by name.
-3a2cb71 (origin/wip-fix-asok) mds: fix asok on rank 0
+3a2cb71 mds: fix asok on rank 0
 8de9a0f doc: Adds updated man page for ceph under man/
 8b79617 doc: Changes format style in ceph to improve readability as html.
 7093cb3 doc: Adds updated man page for ceph-disk under man/
@@ -1915,17 +2115,17 @@ d61b1d9 shared_cache: add lookup_or_create, get_next, etc. and their unittests
 2b577ce packaging: package ceph-deploy(8)
 c664818 doc: Adds updated man page for ceph-deploy under man/
 e638469 doc: Updates man page for ceph-deploy.
-a806778 (origin/wip-qa-empty-xattr) qa: test zero size xattr
+a806778 qa: test zero size xattr
 42dc937 librados: avoid memcopy for rados_getxattr.
-4f72ba5 (origin/wip-cot-rename) ceph_objectstore_tool: Rename generated binary to ceph-objectstore-tool
-1b2b344 (origin/wip-10335) MDS: do not allow invocation of most commands on an inactive MDS
+4f72ba5 ceph_objectstore_tool: Rename generated binary to ceph-objectstore-tool
+1b2b344 MDS: do not allow invocation of most commands on an inactive MDS
 69fa532 ceph.spec.in: quote %files macro in comment
 aea232c client, librados, osdc: do not shadow Dispatcher::cct
 378ebb7 python-rados: refactor class Rados a little bit
 59b70fe Cleanup: Drop hobject_incorrect_pool
 0c9d55d pybind/cephfs: Fix setxattr function. Pass value as character pointer
-023a8ac (origin/wip-test-helpers) tests: ignore xmlstarlet extra empty lines
-e582135 (origin/wip-pgmeta) os/FileStore: better debug on omap_setkeys
+023a8ac tests: ignore xmlstarlet extra empty lines
+e582135 os/FileStore: better debug on omap_setkeys
 f6ca2bc os/FileStore: better debug on unlink
 43f0bcb os/MemStore: drop support for collection attrs
 17e4e19 os/ObjectStore: deprecated collection_getattr et al
@@ -1961,7 +2161,7 @@ c765de6 common/hobject_t: fix whitespace
 69e169d os/DBObjectMap: new version v2; drop support for upgrading from v1
 462bad3 ceph_test_rados: generate mix of small and large xattrs
 456255b os/DBObjectMap: include hash in header key for EC objects
-9f53eeb (origin/wip-7317) doc: add cephfs ENOSPC and eviction information
+9f53eeb doc: add cephfs ENOSPC and eviction information
 a8babcb client: add 'status' asok
 6fdf890 client: propagate flush errors to fclose/fsync
 a8611ac client: handle ENOSPC in _flush
@@ -1972,7 +2172,7 @@ fcc64f3 mds: set epoch barrier on transition to active
 68ba7f5 messages: add osd_epoch_barrier to cap msgs
 fc7d62a mds: return ENOSPC on write ops while osds full
 09287fd osdc: add public Objecter::osdmap_full_flag
-56af795 (origin/wip-10329) rgw: return InvalidAccessKeyId instead of AccessDenied
+56af795 rgw: return InvalidAccessKeyId instead of AccessDenied
 ef75d72 rgw: return SignatureDoesNotMatch instead of AccessDenied
 bab3d3d osdc: remove spurious _maybe_request_map return value
 cf3101a osdc: implement Objecter::set_epoch_barrier
@@ -1982,17 +2182,17 @@ fe32d6e osdc/Objecter: add op_cancel_writes
 a991212 osdc/ObjectCacher: invoke flush_set_callback on purge_set
 bb80437 erasure-code: relax cauchy w restrictions
 058f433 man: Deprecate preferred OSD setting for cephfs
-37a9969 (origin/wip-10299) librbd: complete all pending aio ops prior to closing image
-02fae9f (origin/wip-10262) osd: handle no-op write with snapshot case
+37a9969 librbd: complete all pending aio ops prior to closing image
+02fae9f osd: handle no-op write with snapshot case
 db951ae cls/refcount: ENOENT when put on non-existent object
-9ff9144 (origin/wip-librados-fadvise) librados: do not choke on asphyxiate doc generation
-394fd4c (origin/wip-9405) librbd: fixed garbage output from test LibRBD.TestIOPP
-1853461 (origin/wip-10220) mon: Paxos: reset accept timeout before submiting work to the store
+9ff9144 librados: do not choke on asphyxiate doc generation
+394fd4c librbd: fixed garbage output from test LibRBD.TestIOPP
+1853461 mon: Paxos: reset accept timeout before submiting work to the store
 b5381c2 ReplicatedPG: Make pull and push op use sparse read
 31adfeb doc: fix spelling in corpus page
 12808b9 osdc/Objecter: respect honor_osdmap_full setting
 7e84034 os: free space tracking for MemStore
-e8d3399 (origin/wip-10201-osd-scrub-repair) tests: convert osd-scrub-repair to ceph_objectstore_tool
+e8d3399 tests: convert osd-scrub-repair to ceph_objectstore_tool
 aa54640 tests: shell functions toolbox dedicated to testing
 f0961ae mailmap: Blaine Gardner affiliation
 b0e88a0 mailmap: Lei Dong affiliation
@@ -2009,11 +2209,11 @@ e90818f mailmap: Dan Mick name normalization
 cc05518 mailmap: Adam Spiers affiliation
 41707ee mailmap: Nilamdyuti Goswami affiliation
 3886734 ceph_test_rados_api_io: fix new test
-e3ba3d2 (origin/wip-watch-notify) ceph_test_rados_api_watch_notify: use 5 min timeout for notifies
+e3ba3d2 ceph_test_rados_api_watch_notify: use 5 min timeout for notifies
 a2572c3 ceph_test_stress_watch: do not unwatch if watch failed
-35f084d (origin/wip-test-huge-tickets) qa: add script to test how libceph handles huge auth tickets
-e7d434b (origin/wip-warning) tests: fix signedness compilation warnings
-847e5e1 (origin/wip-9555) osd: check that source OSD is valid for MOSDRepScrub
+35f084d qa: add script to test how libceph handles huge auth tickets
+e7d434b tests: fix signedness compilation warnings
+847e5e1 osd: check that source OSD is valid for MOSDRepScrub
 707a111 osd: pass Message* to most require_* helpers
 09c1648 osd: drop redundant check in handle_replica_op
 b6401c1 ceph-disk: LOG.info instead of print
@@ -2025,10 +2225,10 @@ b9ddf97 documentation: simplify running make check
 85ab278 tests: install hdparm in containers
 60bca67 tests: update centos docker file to epel 7.5
 e038b126 tests: docker tests only need a workdir, not a clone
-53929ba (origin/wip-10270) librbd: gracefully handle deleted/renamed pools
+53929ba librbd: gracefully handle deleted/renamed pools
 f79b7fe librados: Added new API methods to create an ioctx by pool id
-5cf193c (origin/wip-10307) rgw: use s->bucket_attrs instead of trying to read obj attrs
-f773c74 (origin/wip-swift-storage-policy) rgw: cannot modify swift bucket policy
+5cf193c rgw: use s->bucket_attrs instead of trying to read obj attrs
+f773c74 rgw: cannot modify swift bucket policy
 07dc42a rgw: dump X-Storage-Policy header on bucket HEAD
 f16da1c rgw: compare placement target on bucket recreation
 c55d7da librados: remove IoCtxImpl lock member
@@ -2037,7 +2237,7 @@ c598e63 librados: stop using IoCtxImpl lock for watch/notify functions
 50e9e39 librados: do not overload C++ API methods with new signatures
 ffd6c7e doc: Adds man page for ceph under man/.
 76da87a doc: Adds man page for ceph.
-7409ab3 (origin/wip-9254) rgw: http headers need to end with \r\n
+7409ab3 rgw: http headers need to end with \r\n
 0801361 mon/OSDMonitor: dump inc and full maps we get a crc mismatch
 f31135c mon/OSDMonitor: do not reencode OSDMap on 'osd getmap'
 b1f1381 ceph-dencoder: mark OSDMap as featureful, but with stray data
@@ -2045,7 +2245,7 @@ b1f1381 ceph-dencoder: mark OSDMap as featureful, but with stray data
 32a837d osd: add osd_inject_bad_map_crc_probability option
 d898698 osd: verify our OSDMap encoding based on crc
 716f90f mon/OSDMonitor: verify full_crc when available
-5fc7a0b (origin/wip-10271) rgw: change multipart upload id magic
+5fc7a0b rgw: change multipart upload id magic
 7925b82 rgw: Conditional PUT on ETag
 023927b ReplicatedPG: For MAPEXT, using bl.length() instead of op.extent.length as num_rd_kb.
 c1dc361 ReplicatedPG: Don't use the return value of getattr_maybe_cache as attr length.
@@ -2072,7 +2272,7 @@ c5ed33d librados/ObjectOperation: add new function set_op_flags2
 b35cb48 librados: Add read/write fadvise op flags CEPH_OSD_OP_FLAG_FADVISE_*.
 5b54410 librados: Add read/write fadvise op flags in ObjectOperationFlags.
 f5abed7 librados.h: Add read/write op fadvise flags  LIBRADOS_OP_FLAG_FADVISE_*.
-e8e27a8 (origin/wip-10296) unittest_blkdev: test an abbreviated /sys/block dir
+e8e27a8 unittest_blkdev: test an abbreviated /sys/block dir
 5e454a8 common/blkdev: add simple sandboxing function for testing
 9b26de3 ReplicatedPG: fail a non-blocking flush if the object is being scrubbed
 dce6f28 ReplicatedPG::scan_range: an object can disappear between the list and the attr get
@@ -2080,16 +2280,16 @@ dce6f28 ReplicatedPG::scan_range: an object can disappear between the list and t
 2246dca common/blkdev: fix block device discard check
 25e3783 common/blkdev: get_block_device_base
 beaa04e mon: MonitorDBStore: allow randomly injecting random delays on writes
-2ad55cd (origin/wip-10296-journal-discard) tests: do not ignore ceph-disk.sh::test_activate_dev failure
+2ad55cd tests: do not ignore ceph-disk.sh::test_activate_dev failure
 9c5fd8c os: do not attempt to detect discard by default
 21e07eb rgw: url decode http query params correctly
 279c199 ceph_test_rados_api_watch_notify: fix a zillion warnings
 531e8bb ceph_test_rados_api_watch_notify: use GT macro
 008d788 ceph_test_rados_api_watch_notify: print err to debug
 c1dd92b osdc/Objecter: normalize watch error (ENOENT on delete)
-5559e6a (origin/wip-10288) mon: fix `fs ls` on peons
-b025f56 (origin/wip-typo) mds: fix log typo
-a8f85dc (origin/wip-9323) mon: allow full flag to be manually cleared
+5559e6a mon: fix `fs ls` on peons
+b025f56 mds: fix log typo
+a8f85dc mon: allow full flag to be manually cleared
 2e5ee30 Finisher: call signal if necessary in function queue
 d92e2ca lttng: add int type definitions
 060cbaa cycles: add reader for i386 and aarch64
@@ -2097,7 +2297,7 @@ d92e2ca lttng: add int type definitions
 6a45d75 Add diagnostic unshareable buffer.
 28725eb Restore zero-copy buffers in OSD fast path.
 5f551cc Add safe-sharing to buffer::list and buffer::ptr.
-b038e8f (origin/wip-8797) Call Rados.shutdown() explicitly before exit
+b038e8f Call Rados.shutdown() explicitly before exit
 5ba9b8f rados.py: remove Rados.__del__(); it just causes problems
 8b195ec check endpoints is not empty before use it.
 320c256 osdc/Objecter: only issue one error per watch; do it through one path
@@ -2106,33 +2306,33 @@ b038e8f (origin/wip-8797) Call Rados.shutdown() explicitly before exit
 6f43c6c osdc/Objecter: pass correct cookie value to error
 b34e545 os/FileStore.cc: insert not empty list<Context*> to op_finisher/ondisk_finisher.
 7ab4a39 ceph.conf: update sample
-efd9d8d (origin/wip-librbd-test-cleanup) tests: Minor cleanup to librbd test
+efd9d8d tests: Minor cleanup to librbd test
 78a15ee Fix libstriprados::remove, use strtoll insdead of strtol
-2d4dca7 (origin/wip-10029) SimpleMessenger: Retry binding on addresses if binding fails
+2d4dca7 SimpleMessenger: Retry binding on addresses if binding fails
 e8063a1 test: modify cephfs quota test case
 31a0cdc mds: fix parse_quota_vxattr for invalid data
 bab7122 OSD: FileJournal: call writeq_cond.Signal if necessary in submit_entry
 17d6390 os: IndexManager:: optimaze map<coll_t, CollectionIndex* > col_indices col_indices is just used to cache CollectionIndex, and use col_indices.find() to get its corresponding index. Without any using of up_bound() and low_bound(), we can use unordered_map to make it fast. Based on perf, when I chanage map to unordered_map, the cpu cost for get_index(coll_t c, const string& baseDir, Index *index) is much lower.
 4036b91 os: FileJournal:: fix, uninitialization of FileJournal throttle Since after firefly, take() in class throttle add if(0 == max.read()) return. If throttle is not initialized with max throttle value, it actually does not work. So initialize it in FileJournal
-6b51a9f (origin/wip-10164) mds: set dirfrag version when fetching dirfrag is skipped
-17c72f5 (origin/wip-10010) ceph-osd: remove extra close of stderr
+6b51a9f mds: set dirfrag version when fetching dirfrag is skipped
+17c72f5 ceph-osd: remove extra close of stderr
 5836899 Revert "client: support listxattr for quota attributes"
-89b2fee (origin/wip-crush-straw) mon: 'osd crush reweight-all'
+89b2fee mon: 'osd crush reweight-all'
 dd7b58f crush: set straw_calc_version=1 for default+optimal; do not touch for presets
 adf5c6d crush/builder: a note about the original crush_calc_straw()
 9000068 mon: add 'osd crush {get,set}-tunable <name> [value]' commands
-606b004 (origin/wip-gfcomplete-dirty) gf-complete: update submodule to newest upstream
-bf0d8d3 (origin/wip-cleanup-removal) osd: Remove dead code related to old pg removal mechanism
-0827bb7 (origin/wip-10277) client: use remount to trim kernel dcache
+606b004 gf-complete: update submodule to newest upstream
+bf0d8d3 osd: Remove dead code related to old pg removal mechanism
+0827bb7 client: use remount to trim kernel dcache
 dfcb1c9 client: cleanup client callback registration
 2f52202 Revert "client: invalidate kernel dentries one by one"
-9902383 (origin/wip-9998) crush/CrushWrapper: fix create_or_move_item when name exists but item does not
+9902383 crush/CrushWrapper: fix create_or_move_item when name exists but item does not
 8c87e95 crush/builder: prevent bucket weight underflow on item removal
 eeadd60 crush/CrushWrapper: fix _search_item_exists
 a198dee Modifying the docs to add the Get pool commands to match the CLI. Signed-off-by: Chris Holcombe <chris.holcombe@nebula.com>
 3a84602 Include common/likely.h in buffer.h
 e8b412c mailmap: Zhiqiang Wang name normalization
-c0ce4a5 (origin/xiaoxichen-cleanup_getheader) Cleanup:Use get_type()instead of get_header().type
+c0ce4a5 Cleanup:Use get_type()instead of get_header().type
 c2d9333 WBThrottle: make bytes/ios/inode_wb's perf counter effective
 12d85c6 Fix stack buffer overflow reported by ASan.
 f6f6ea2 Fix alloc-dealloc mismatch reported by ASan (new[] vs. delete).
@@ -2163,7 +2363,7 @@ f4735cf .gitignore: add ceph_perf_objectstore
 bcee92e StoreTest: Add tests for clone_range op
 cabb57a FileStore: Fix _do_sparse_copy_range don't truncate zero sections
 980f094 common: bufferlist::get_contiguous return 0 when param len == 0
-be11a45 (origin/wip-fadvise) os/FileStore: stop disabling fadvise on XFS
+be11a45 os/FileStore: stop disabling fadvise on XFS
 d6a7a7c os/FileStore: merge filestore_replica_fadvise -> filestore_fadvise
 5eacd3c ceph_objectstore_tool: Strip _* (always _head) from pgid in list entry output
 b617ee2 ceph_objectstore_tool: BUG: --op list wasn't including snapshots
@@ -2179,11 +2379,11 @@ a90233c objectstore_tool: update usage strings
 58682d1 ceph-disk: dmcrypt file permissions
 2b59c5a common/Initialize.h: add header file to Makefile.am
 5da15ee mds: drop dentry leases in deleted directory
-f55a1f8 (origin/wip-mds-readonly) mds: disallow flush dentry/journal when MDS is readonly
+f55a1f8 mds: disallow flush dentry/journal when MDS is readonly
 f4f1880 mds: properly unregister asok commands
 818a807 mds: drop dirty dentries in deleted directory
 ff901b5 arch: add support for HW_CAP based neon runtime detection
-360d627 (origin/wip-10104) pybind/test_rados: add test for wait_for_complete_and_cb()
+360d627 pybind/test_rados: add test for wait_for_complete_and_cb()
 19212cd rados.py: fix misnamed 'wait_*' routines, add true wait/wait-with-cb
 a53dbab librados:: carry IoCtx ref from WatchInfo
 a989fec osd: allow deletion of objects with watchers
@@ -2269,19 +2469,19 @@ e1a3bc8 ceph_test_rados_api_watch_notify: test notify2 api
 81cdff2 osd: implement notify ack payloads
 7e0c4efc librados: define updated watch/notify interface
 12940c9 librados: drop useless ver arg to _notify_ack
-22c1d9b (origin/wip-rados-include) librados: Fix rados include problem reported by "sponce"
+22c1d9b librados: Fix rados include problem reported by "sponce"
 7b621f4 rgw: run radosgw as apache with systemd
 3f2f42d doc/release-notes: v0.89
 237b29c Changed os-recommendation table sorting to remove implied bias.
 a6102f0 documentation: add centos 7 to ceph-deploy installation
 7631b10 os: add filestore_fadvise to control whether use posix_fadvise.
 1fba28f WBThrottle: Call posix_fadvise to free page cache if nocache set in clear().
-e42df6a (origin/wip-mon-mdsdne) MDSMonitor.cc: fix assertion caused by MDSMap::STATE_DNE state
-d3ee89a (origin/wip-10229) osdc/Filer: use finisher to execute C_Probe and C_PurgeRange
+e42df6a MDSMonitor.cc: fix assertion caused by MDSMap::STATE_DNE state
+d3ee89a osdc/Filer: use finisher to execute C_Probe and C_PurgeRange
 43d5c7c crush: fix crush_calc_straw() scalers when there are duplicate weights
 85498bc crush: fix distortion of straw scalers by 0-weight items
-6edaf4e (origin/wip-10231-gperftools-location) heap_profiler: support new gperftools header locations
-d5e2c2c (origin/wip-unsigned) mon: fix signed/unsigned comparison warning
+6edaf4e heap_profiler: support new gperftools header locations
+d5e2c2c mon: fix signed/unsigned comparison warning
 7c12036 crush/builder: break out new version 1 of crush_calc_straw
 f35a3d8 crush: pass crush_map * to various builder methods
 9565621 crush: default to straw_calc_version 1
@@ -2292,22 +2492,22 @@ c133a83 crush/CrushWrapper: dump chooseleaf_vary_r with other tunables
 3506293 crush: recalculate straw scalers during a reweight
 7a99b48 osdmaptool: --test-map-pgs-dump
 68fdc0f (tag: v0.89) 0.89
-d98cec7 (origin/wip-cephtool-exec) qa: fix teardown in cephtool's test_mon_mds
-8cd1fdd (origin/wip-10080) SimpleMessenger: allow RESETSESSION whenever we forget an endpoint
+d98cec7 qa: fix teardown in cephtool's test_mon_mds
+8cd1fdd SimpleMessenger: allow RESETSESSION whenever we forget an endpoint
 8e5dbe7 common/perf_counters: Remove the duplicated code.
 963b764 test/perf_counters: Replace perfcounters_dump to perf dump.
 eafb224 test/perf_counters: Add test case for cmd 'perf reset'
 5f8186b common/perf_counters: Add 'perf reset all|perfcountername' for 'ceph --admin-daemon'
 5d3bff0 doc: rm Fedora minor versions in os recommendations
-0d4dd10 (origin/wip-snapmapper) os/ObjectStore: drop tolerate_collection_add_enoent
+0d4dd10 os/ObjectStore: drop tolerate_collection_add_enoent
 bc5a22b osd: require SNAPMAPPER feature from peers
 b743a95 packaging: package ceph-disk(8)
 2497f16 doc: rm old releases in os recommendations page
 0bb2e1e doc: clarify "B" flag in os recommendations page
-3047c9e (origin/wip-cephtool) qa: cephtool/test.sh use regular strings to list tests
+3047c9e qa: cephtool/test.sh use regular strings to list tests
 e3e5741 tests: vstart_wrapper.sh must call vstart.sh with a list of daemons
 946bebd crush: add dprintk's for crush_calc_straw
-4e955f4 (origin/wip-10211-erasure-code-buffer-alignement) erasure-code: enforce chunk size alignment
+4e955f4 erasure-code: enforce chunk size alignment
 73ad2d6 common: allow size alignment that is not a power of two
 9ade88e common: add bufferlist::rebuild_aligned_size_and_memory
 56dae09 doc: Reformatting on rbd replay doc.
@@ -2315,9 +2515,9 @@ b8f6b5f doc: Added rbd-replay-many and restructured index.
 54d5ed3 doc: Fixed index syntax.
 3012c4a doc: add CentOS 7 to recommended OSes
 6862891 doc: Adds man page for ceph disk in TOC.
-491da51 (origin/wip-9997-1) client: invalidate kernel dentries one by one
-2fa4884 (origin/wip-flush-journal-fix) mds: fix race of trimming log segments
-70e1a5d (origin/wip-doc-rbd-replay) doc: Document RBD Replay
+491da51 client: invalidate kernel dentries one by one
+2fa4884 mds: fix race of trimming log segments
+70e1a5d doc: Document RBD Replay
 131f092 mds: don't blindly create empty object when dirfrag is missing
 9b9e3ed mds: allow choosing action for wirte error
 dafef3c mds: add asok command to force MDS readonly
@@ -2330,9 +2530,9 @@ cfef515 mds: disallow slave requests when MDS is readonly
 4aed047 mds: keep locks in sync state when MDS is readonly
 2d4a746 mds: don't trim log when MDS is readonly
 4f6474f mds: disallow write operations when MDS is readonly
-01df222 (origin/wip-10209) osd: tolerate sessionless con in fast dispatch path
+01df222 osd: tolerate sessionless con in fast dispatch path
 0f1c9fd msg: do not const methods that return a mutable pointer
-0d6c803 (origin/wip-kill-category) osd/osd_types: drop category from object_info_t
+0d6c803 osd/osd_types: drop category from object_info_t
 5ecdce3 osdc/Objecter: drop category from copy-get
 d229548 osd/ReplicatedPG: drop cateogry support from CREATE
 4e1f4cf rados: drop optional 'create [category]' arg
@@ -2352,7 +2552,7 @@ e0190bd KnieticStore: add necessary header file
 49bedd4 ObjectStoreBenchmark: Used to perf ObjectStore::Transaction
 929fcd6 better systemd support
 3376fee Cleanup noop in message
-5b5493d (origin/wip-9881) mds: implement "flush journal" asok
+5b5493d mds: implement "flush journal" asok
 efeaaaa mds: in segment expiry, use end instead of start
 2ec6773 mds: fix MDLog I/O callback without finisher
 dba078a Cycles: A precious performance profile tool using rdstc
@@ -2370,7 +2570,7 @@ ea3d4d7 AsyncConnection: Ensure "mark_down" complete when returned
 bdedad2 AsyncMessenger: Async event threads shared by all AsyncMessenger
 c10d639 Add isa-erasure yasm dep for deps.rpm.txt
 6a98dac rpm: unconditionally package rbd-replay-prep(8)
-dbb5a48 (origin/wip-librados-symbols) librados: Only public API symbols from the shared library
+dbb5a48 librados: Only public API symbols from the shared library
 03a61d2 Minor typos and trailing spaces
 782a74c KineticStore: Fix compile error and add _test_init
 21798f9 doc: fix some typos in ObjectStore.h
@@ -2378,7 +2578,7 @@ dbb5a48 (origin/wip-librados-symbols) librados: Only public API symbols from the
 8a48847 doc: Updates the man page for ceph-disk utility with some changes.
 3b00c6f safe_io: do not set ending \0 in safe_read_file()
 e6410eb added some consts Signed-off-by: Michal Jarzabek <stiopa@gmail.com>
-17b5fc9 (origin/wip-10135) mon: OSDMonitor: allow adding tiers to FS pools
+17b5fc9 mon: OSDMonitor: allow adding tiers to FS pools
 9a118d5 doc: Adds man page for ceph-disk utility.
 242dd1c doc: Removes ceph-deploy usage instances from ceph-disk man page.
 cb820f8 erasure-code: test NEON arch selection logic
@@ -2389,19 +2589,19 @@ a788829 erasure-code: include new headers in distribution
 987d54b aarch64: add support for HW_CAP based neon runtime detection
 cec00c9 autotools: ARM/AArch64 NEON detection similar to x86
 ba520bf erasure-code: conditionally build jerasure sse3/sse4 plugins
-0b985d2 (origin/wip-10185-neon) arch: fix neon feature detection
+0b985d2 arch: fix neon feature detection
 24eb564 Remove pidfile and asok after stopping ceph
 7dcc850 doc: Updates man page for ceph-disk utility.
 e983230 remove unneeded include file
 a1ba385 doc: rgw document s3 bucket location features
-0c33930 (origin/wip-10151) mon: fix MDS health status from peons
+0c33930 mon: fix MDS health status from peons
 a450cab doc: Adds man page for ceph-disk utility.
 4b35ae0 rgw: check for timestamp for s3 keystone auth
-61cae54 (origin/wip-10173-autogen) autogen.sh: git submodule sync
+61cae54 autogen.sh: git submodule sync
 00da974 test: extend quota test case
 5515cc4 client: fix problem with move files between quota tree
 b2c15d6 mds: Fix a problem with rstat refresh.
-12f1f21 (origin/wip-mailmap) mailmap: Update Warren Usui's attribution to Red Hat
+12f1f21 mailmap: Update Warren Usui's attribution to Red Hat
 43c75ee mailmap: Update Tyler Brekke's attribution to Red Hat
 9df4624 mailmap: Update Tamil Muthamizhan's attribution to Red Hat
 fb74152 mailmap: Update Sandon Van Ness' attribution to Red Hat
@@ -2426,12 +2626,12 @@ eaa9889 mailmap: Update Dan Mick's attribution
 e424d07 client: Fix problem in get_quota_root with update parent and ancestor
 6c7bb8c blkdev: using strncpy instead of strcpy.
 1fe8b84 PGLog: include rollback_info_trimmed_to in (read|write)_log
-627f138 (origin/wip-sepia-update) Updated sepia hardware list.
+627f138 Updated sepia hardware list.
 7a868fd ReplicatedPG: remove unused parameter in function write_update_size_and_usage
-0d89db5 (origin/wip-9557) mds: store backtrace for straydir
+0d89db5 mds: store backtrace for straydir
 a79ba32 mds: verify backtrace when fetching dirfrag
 5177759 KeyValueStore: Fix parse_header_key
-9d84d2e (origin/wip-10018-primary-erasure-code-hinfo) osd: deep scrub must not abort if hinfo is missing
+9d84d2e osd: deep scrub must not abort if hinfo is missing
 92662a9 mailmap: Loic Dachary name normalization
 77c1a35 rgw: support swift storage policy api
 f692bfe PG: always clear_primary_state on new interval, but only clear pg temp if not primary
@@ -2444,13 +2644,13 @@ dcecfb8 MemStore: Return -ENODATA when collection_getattr hit nonexist attr
 877237f KeyValueStore: Return -ENODATA if collection_getattr is nonexist
 00b275b StoreTest: Add collection_getattr(s) tests
 ffb6f78 KeyValueStore: Remove assert for collection_getattr method
-f3dab44 (origin/wip-10077) ceph_objectstore_tool: Add feature called set-allow-sharded-objects
+f3dab44 ceph_objectstore_tool: Add feature called set-allow-sharded-objects
 b3021b0 ceph_objectstore_tool: Add utility routine get_osdmap()
 86baf2d ceph_objectstore_tool: Clear ...INCOMPAT_SHARDS from feature if exporting replicated pg
 d3d5852 FileJournal: add journal_discard to control ssd whether support discard
 9f9eb67 FileJournal: Add ssd discard for journal which using ssd disk as journal.
-10f6ef1 (origin/wip-10114-fix-warning) erasure-code isa-l: remove duplicated lines (fix warning)
-c912116 (origin/wip-9665-ceph-disk-partprobe) autotools: add --enable-docker
+10f6ef1 erasure-code isa-l: remove duplicated lines (fix warning)
+c912116 autotools: add --enable-docker
 26bf8d1 ceph-disk: test prepare / activate on a device
 ecccb39 tests: helper to run unit / function tests in docker
 23aaf6c ceph-disk: implement init=none for block devices
@@ -2458,14 +2658,14 @@ fed3b06 ceph-disk: run partprobe after zap
 23e71b1 ceph-disk: use update_partition in prepare_dev and main_prepare
 922a15e ceph-disk: encapsulate partprobe / partx calls
 0e6db90 doc: update debian compilation dependencies
-8613984 (origin/sponce-master) Fixed locking issue in the trun method of libradosstriper leading to potential race conditions - Fixes: #10129
-9e53c35 (origin/wip-10128) tests: ceph_objectstore_tool.py test all variants of export/import
+8613984 Fixed locking issue in the trun method of libradosstriper leading to potential race conditions - Fixes: #10129
+9e53c35 tests: ceph_objectstore_tool.py test all variants of export/import
 8c87f32 ceph_objectstore_tool: Make --file option consistent by treating "-" as stdout/stdin
 0d5262a ceph_objectstore_tool: When exporting to stdout, don't cout messages
-0d350b6 (origin/wip-10123) librbd: protect list_children from invalid child pool IoCtxs
+0d350b6 librbd: protect list_children from invalid child pool IoCtxs
 de547c9 Fix bug #10096 (ceph-disk umount race condition)
-06fc39c (origin/wip-9321) mon: PaxosService: can be readable even if proposing
-d8a7db8 (origin/wip-9913) mon: Monitor: use session's entity name for audit log
+06fc39c mon: PaxosService: can be readable even if proposing
+d8a7db8 mon: Monitor: use session's entity name for audit log
 125b58d mon: Monitor: forward session entity name to leader
 ca8e1ef mon: Monitor: stash auth entity name in session
 8773474 messages: MForward: stash auth entity name
@@ -2474,7 +2674,7 @@ fe6679d Fix libstriprados::stat, use strtoll insdead of strtol
 11aa383 doc: fix typos in diagram for incomplete write
 2379c57 doc: fix incorrect equalities
 625dd40 doc: fix typo (superfluous "no")
-cbecab4 (origin/wip-10063-objectstore-tool-erasure-code) tests: ceph_objectstore_tool.py fix list-attr for erasure code
+cbecab4 tests: ceph_objectstore_tool.py fix list-attr for erasure code
 40717aa tests: ceph_objectstore_tool.py check for malformed JSON for erasure code objs
 eaf1d1e tests: ceph_objectstore_tool.py fix off by 1 ATTR_OBJS handling
 dcf09ae common: do not omit shard when ghobject NO_GEN is set
@@ -2490,16 +2690,16 @@ f04d4e7 tests: ceph_objectstore_tool.py run mon and osd on specific port
 74506d2 tests: ceph_objectstore_tool.py use env python
 d1c4e5b vstart: use hostname -s instead of fqdn
 cf2104d common: do not unlock rwlock on destruction
-06a245a (origin/wip-execstack) Add annotation to all assembly files to turn off stack-execute bit
-e25724b (origin/wip-warn-max-pg) mon: tighten pg vs osd warning bounds to 3x above/below 100 (target)
+06a245a Add annotation to all assembly files to turn off stack-execute bit
+e25724b mon: tighten pg vs osd warning bounds to 3x above/below 100 (target)
 7f3dcdb mon/PGMonitor: add max pgs per osd warning
 b70be56 mon/PGMonitor: make min pg warning based on pg *instances*
 5eb662c mon/PGMonitor: fix summation when we adjust up/acting
 d671e1c mon/PGMap: allow stat_pg_{add,sub} that only touches stats
 cf24117 osd/osd_types: include up and acting count in pool_sum_t
 c87bde6 PG: always clear_primary_state when leaving Primary
-b10bd19 (origin/wip-dumper-coverity) tools: Close the fd before returning in Dumper
-50f9edb (origin/wip-da-SCA-20141111) FileJournal.cc: fix _open() to return negative value in error case
+b10bd19 tools: Close the fd before returning in Dumper
+50f9edb FileJournal.cc: fix _open() to return negative value in error case
 0c8955b mailmap: Loic Dachary name normalization
 b6d6180 test_async_driver: fix warning
 175d6e0 doc: Removed separate build file for rpm.
@@ -2509,8 +2709,8 @@ a5a0d5c doc: Adds build-doc guidelines for Fedora and CentOS/RHEL.
 088230e Improve readability of the exception
 3c4b782 rgw: add location when data in another region.
 35ae591 doc: update the OpenStack glance configuration
-83e8b07 (origin/wip-librbd-symbols) librbd: Only public API symbols from the shared library
-8dde6a6 (origin/wip-10052) ceph_test_rados_api_tier: fix cleanup of whiteouts
+83e8b07 librbd: Only public API symbols from the shared library
+8dde6a6 ceph_test_rados_api_tier: fix cleanup of whiteouts
 34e4d24 osd/ReplicatedPG: allow whiteout deletion with IGNORE_CACHE flag
 a04bb13 Mailmap: add Rongze organization
 ef2565e vstart.sh: complain less about fullish mon disks
@@ -2530,12 +2730,12 @@ ed0d3ed st_rados_list_objects.cc: free resources in error case
 c73c47e ceph_erasure_code_benchmark.cc: prefer ++operator for non-primitive iterators
 3b31e74 crush/CrushWrapper.cc: prefer ++operator for non-primitive iterators
 35ab4d7 rgw/rgw_gc.cc: silence cppcheck
-699fc05 (origin/wip-10057) msg/simple: ms_die_on_skipped_message
+699fc05 msg/simple: ms_die_on_skipped_message
 20f99ca mds: don't overwrite reply's snapbl
-6f8b96a (origin/wip-10095) crush/CrushWrapper: fix detach_bucket
+6f8b96a crush/CrushWrapper: fix detach_bucket
 a46fb02 Makefile: include 'ceph' in base target
 585b906 msg/Makefile: add new header to tarball
-2fe5c4c (origin/wip-9921) msg/Pipe: inject delay in stop_and_wait
+2fe5c4c msg/Pipe: inject delay in stop_and_wait
 2d69805 SimpleMessenger: Pipe: do not block on takeover while holding global lock
 6e5bae4 mailmap: Dan Mick name normalization
 5fdec03 mailmap: Xan Peng affiliation
@@ -2551,8 +2751,8 @@ ee45f48 doc: Fix 2 syntax errors.
 ebc8875 AsyncMessenger: Support select for other OS such as Windows
 59d8c94 qa/workunits/fs/misc/quota.sh: simple quota test
 86f87bb fix
-78d1e6c (origin/wip-9439) osd: Check filter ops for pgls and pgnls
-9e05ba0 (origin/wip-9835) osd/OSD: use OSDMap helper to determine if we are correct op target
+78d1e6c osd: Check filter ops for pgls and pgnls
+9e05ba0 osd/OSD: use OSDMap helper to determine if we are correct op target
 89c0263 osd/OSDMap: add osd_is_valid_op_target()
 079a8d7 Add myself to <contact@intel.com>
 5ce0919 ceph_objectstore_tool: Fixes to make import work again
@@ -2567,17 +2767,17 @@ e27b0d9 mon: fix formatted 'pg stat'
 e94d3c1 qa: allow small allocation diffs for exported rbds
 09eefac Fix Yuan's mailmap
 05a1c3f doc/release-notes: v0.88
-90c5869 (origin/wip-7467) rgw: support multiple host names
-1342548 (origin/wip-crush-tree) crush: fix tree bucket functions
+90c5869 rgw: support multiple host names
+1342548 crush: fix tree bucket functions
 e444b22 crush/builder: replace printf with an empty dprintk macro
-109bcd4 (origin/wip-da-revert-10b68b) Revert "osd: detect (some) misordered ondisk tmaps"
+109bcd4 Revert "osd: detect (some) misordered ondisk tmaps"
 4be687b (tag: v0.88) 0.88
 d12fa35 AsyncMessenger: Fix large bufferlist send segment fault
 d145cca AsyncMessenger: Try send in queue bufferlist
 123d364 AsyncMessenger: Normalise log informations
 fc4e4f2 AsyncMessenger: Release connection if stopped
 4d4b7d0 doc/rados/configuration fix 'ods mkfs options' default
-41b5dd2 (origin/wip-da-SCA-20141028) AuthSessionHandler.h: init protocol in constructor
+41b5dd2 AuthSessionHandler.h: init protocol in constructor
 dbfb63e src/librbd/librbd.cc: fix potential null pointer deref
 4fc9428 osd/ReplicatedPG.cc: remove redundant check
 a4cecda test/librados/c_read_operations.cc: fix invalid checks
@@ -2585,12 +2785,12 @@ a4cecda test/librados/c_read_operations.cc: fix invalid checks
 e590d42 rados_sync.cc: fix xattr_diff() for the only_in_b checks
 04517f0 bench_log.cc: catch ceph::FailedAssertion exception
 60e7da9 osd/PGLog.cc: prefer empty() over size() for emptiness check
-fea7097 (origin/wip-rbd-python-tests) librbd: Python unit tests now use unique pools and images
+fea7097 librbd: Python unit tests now use unique pools and images
 c11cf2a bufferlist: Don't call rebuild(), c_strt() call it if bufferlist not contiguous.
-cd784ea (origin/wip-9854) osdc: Constrain max number of in-flight read requests
+cd784ea osdc: Constrain max number of in-flight read requests
 12913c0 AsyncMessenger: Eating up pipe buffer for waking up
-2704914 (origin/wip-10045) common/Readahead: use correct lock when waiting on the pending ops
-42b0a35 (origin/wip-scrub-coverity) mds: remove dead code from inode_t::compare()
+2704914 common/Readahead: use correct lock when waiting on the pending ops
+42b0a35 mds: remove dead code from inode_t::compare()
 f78cfa7 mds: CInode: catch exception by reference, not value
 dafd335 osd/OSDMap: verify CRC on decode
 33490b7 mon/OSDMonitor: populate Incremental::full_crc
@@ -2627,11 +2827,11 @@ a0c1f22 tests: use kill -0 to check process existence
 c3b51ef tests: remove vstart_wrapped_tests.sh
 7a6ca17 tests: use different ports for each mon
 bdca0ac tests: tolerate a disk 99% full
-f80499e (origin/wip-flush-snaps) osd/ReplicatedPG: flush snaps immediately
-560e22e (origin/wip-gtest-warnings) test: use unsigned ints to compare against size()
+f80499e osd/ReplicatedPG: flush snaps immediately
+560e22e test: use unsigned ints to compare against size()
 a21bca1 mailmap: Loic Dachary affiliation
-740a1bd (origin/wip-10025) tools: error handling on journal import/export
-3e0295f (origin/wip-doc-dumpling-to-firefly) doc: Added Dumpling to Firefly upgrade section.
+740a1bd tools: error handling on journal import/export
+3e0295f doc: Added Dumpling to Firefly upgrade section.
 15d487f MDS: clean up internal MDRequests the standard way
 07e0831 MDS: CInode: break out of validation early on symlinks
 f1677e7 common/ceph_strings: add some MDS internal op names to ceph_mds_op_name()
@@ -2667,19 +2867,19 @@ abc995b qa/workunits/fs/misc: combine sudo and echo effectively
 3aa7797 qa: use sudo even more when rsyncing /usr
 2a61735 Fedora 19 uses systemd but there is no systemd-run available in the release (rhbz#1157938), this patch makes sure that the init scripts check for availability of systemd-run before they use it (otherwise, they fall back to the default method)
 5ac05d4 Fix tests on btrfs: leftover subvolumes removed
-762eda8 (origin/wip-blacklist-respawn) osdc: fix Journaler write error handling
-61ebfeb (origin/wip-10030) librbd: don't close an already closed parent image upon failure
+762eda8 osdc: fix Journaler write error handling
+61ebfeb librbd: don't close an already closed parent image upon failure
 d13b478 EC: Allow bench.sh to test ISA backend also
-52cb44c (origin/wip-9887) osd, mon: Send initial pg create time from mon to osd
-2e63944 (origin/wip-rbd-test-fixtures) librbd: Refactor librbd unit tests to use test fixtures
-5d9f36f (origin/wip-9918) rgw: update swift subuser perm masks when authenticating
-ef6d3ad (origin/wip-9973) rgw: remove swift user manifest (DLO) hash calculation
-b1bfc3a (origin/wip-9479) rgw: send back ETag on S3 object copy
-3196345 (origin/wip-9478) rgw: S3 object copy content type fix
+52cb44c osd, mon: Send initial pg create time from mon to osd
+2e63944 librbd: Refactor librbd unit tests to use test fixtures
+5d9f36f rgw: update swift subuser perm masks when authenticating
+ef6d3ad rgw: remove swift user manifest (DLO) hash calculation
+b1bfc3a rgw: send back ETag on S3 object copy
+3196345 rgw: S3 object copy content type fix
 3103c8a ObjectStore: Fix a error comment.
 a1aa70f ObjectStore: Don't use largest_data_off to calc data_align.
 8ba504d buffer: Add _memcopy_count to track total count of memcopy by rebuild/rebuild_page_aligned/c_str.
-3d45a68 (origin/wip-log-client) mds: fix log_client config
+3d45a68 mds: fix log_client config
 7dc2ca8 osd: configure log_client properly
 da6a8a3 mon: move log config parsing into LogClient.h helper
 0fd54a7 move Monitor::update_log_client to LogChannel::update_config
@@ -2687,17 +2887,17 @@ da6a8a3 mon: move log config parsing into LogClient.h helper
 84fec86 osd: add 'cluster_log [type] [message ...]' tell command
 4f40975 commong/LogEntry: string_to_clog_type
 705a1e3 osd: cache pool: delete dead code in ReplicatedPG::agent_choose_mode
-fe7bf06 (origin/wip-9877) rgw: RGWRados::get_obj() returns wrong len if len == 0
+fe7bf06 rgw: RGWRados::get_obj() returns wrong len if len == 0
 f4ee949 osd: cache pool: flush object ignoring cache min flush age when cache pool is full Signed-off-by: Xinze Chi <xmdxcxz@gmail.com>
 6da9405 doc: Edited Key/Value store config reference.
 03be944 doc: Added Key/Value store config reference to index.
-72fc262 (origin/wip-doc-openstack-juno) doc: Update for OpenStack Juno.
-65c3350 (origin/wip-9977) tools: skip up to expire_pos in journal-tool
-e0166a2 (origin/wip-9986) osdc/Objecter: Fix a bug of dead looping in Objecter::handle_osd_map
+72fc262 doc: Update for OpenStack Juno.
+65c3350 tools: skip up to expire_pos in journal-tool
+e0166a2 osdc/Objecter: Fix a bug of dead looping in Objecter::handle_osd_map
 31c584c osdc/Objecter: e shouldn't be zero in Objecter::handle_osd_map
-093c5f0 (origin/wip-9987) mon/PGMap and PGMonitor: update last_epoch_clean cache from new osd keys
+093c5f0 mon/PGMap and PGMonitor: update last_epoch_clean cache from new osd keys
 3fb731b mon/PGMap: invalidate cached min_last_epoch_clean from new-style pg keys
-8924158 (origin/wip-6756) JounralingObjectStore: journal->committed_thru after replay
+8924158 JounralingObjectStore: journal->committed_thru after replay
 122c503 client: Inform mds file size when approaching quota limit
 a50b8eb client: Enforce quota check when changing file size
 bbfeaae client: Forbid moving files across quota trees
@@ -2722,30 +2922,30 @@ fb57e84 ceph: Add MClientQuota message type
 da488ce test: add test case for quota_info_t
 a071201 ceph: Add quota_info_t to store quota info
 3619ea8 ceph: Add quota feature flags
-a554766 (origin/wip-buffer) buffer: implement list::get_contiguous
+a554766 buffer: implement list::get_contiguous
 4a9ad7d osd/ReplicatedPG: fix compile error
 29d7786 ceph.in: remove '--' from injectargs, if there, as well
 7533245 Fix rados_shutdown hang forever when using radosstriper
-c5f8d6e (origin/wip-9752-past-intervals) osd: past_interval display bug on acting
-50c2c75 (origin/wip-9944) osdc/Objecter: fix null dref when pool dne
-1eb9bcb (origin/wip-9945) messages: fix COMPAT_VERSION on MClientSession
+c5f8d6e osd: past_interval display bug on acting
+50c2c75 osdc/Objecter: fix null dref when pool dne
+1eb9bcb messages: fix COMPAT_VERSION on MClientSession
 c96fe59 doc: update RBD for Juno
 56ee3b4 doc/release-notes: it's 8MB, not 32MB
 f7431cc msg/Pipe: discard delay queue before incoming queue
 c51c8f9 (tag: v0.87) 0.87
 ce6f22d AsyncMessenger: Add kqueue support
-5a4c3aa (origin/wip-9800-giant) client: allow xattr caps in inject_release_failure
-214ac9f (origin/wip-doc-fs-quickstart) doc: include 'fs new' stuff in cephfs quickstart
+5a4c3aa client: allow xattr caps in inject_release_failure
+214ac9f doc: include 'fs new' stuff in cephfs quickstart
 1fef4c3 Get the currently atime of the object in cache pool for eviction
 66b4cd9 tests: fix signed/unsigned warning
 4b87a81 rbd: Fix the rbd export when image size more than 2G
 ef1980f osd: tiering: calculate object age during eviction when there is no hit set
-6fca23f (origin/wip-9919-injectargs-side-effects) qa: avoid qa/workunits/cephtool/test.sh unstability
+6fca23f qa: avoid qa/workunits/cephtool/test.sh unstability
 5691c68 client: allow xattr caps in inject_release_failure
 5950710   Fix the match error when starting OSD daemons.   If we have osd.7 and osd.77 on the same host, osd.7 will not be mounted if   osd.77 is mounted.   Signed-off-by: huangjun <hjwsm1989@gmail.com>
 abd3fd3 fix can not disable max_size quota
 622c5ac osd: cache tiering: fix the atime logic of the eviction
-b90b483 (origin/wip-objectstore) remove collection_rename
+b90b483 remove collection_rename
 a80f2f6 ceph_filestore_dump: use "remove" marker instead of collection rename
 5dc990c osd: remove pgs with "remove" flag on startup
 856504c ceph_test_filestore_idempotent_sequence: drop collection_rename
@@ -2760,9 +2960,9 @@ de52873 osd, filestore: move automatic upgrade into mount()
 86919f5 osd, filestore: mount in upgrade() caller
 5f8a1df osd, filestore: move convertfs into FileStore
 b889b6b remove ceph_dupstore
-a5184cf (origin/wip-9869) client: cast m->get_client_tid() to compare to 16-bit Inode::flushing_cap_tid
-a4caed8 (origin/wip-9894) client: fix I_COMPLETE_ORDERED checking
-387d5d8 (origin/wip-vstart) init-ceph: make ./init-ceph behave from src dir on systemd
+a5184cf client: cast m->get_client_tid() to compare to 16-bit Inode::flushing_cap_tid
+a4caed8 client: fix I_COMPLETE_ORDERED checking
+387d5d8 init-ceph: make ./init-ceph behave from src dir on systemd
 a6357f2 unittest_shared_cache: fix build line
 1abb620 doc/release-notes: giant notes
 6a43809 rgw_rest_client.cc: remove self assignment of new_info.effective_uri
@@ -2783,7 +2983,7 @@ c952cb9 rgw/rgw_formats.cc: fix realloc memory leak
 5c7b8c6 rgw/rgw_rest_swift.cc: use empty() instead of size()
 17c327f rgw/rgw_rest_s3.cc: use !empty() instead of size() > 0
 84a5c84 vstart.sh: Fix usage
-a9a2185 (origin/wip-crush-link-id) mon: fix `osd crush link` id resolution
+a9a2185 mon: fix `osd crush link` id resolution
 1877670 Remove dead code in EC LRC plugin
 a05dedc check to_remove before setting transaction
 f99c5f9 rgw/rgw_rados.cc: remove unused variable 'objs'
@@ -2815,9 +3015,9 @@ d9abd53 ErasureCodeIsa.cc: reduce scope of variable
 e145bff ErasureCodePlugin.cc: reduce scope of variable
 c3ee13a cls_rbd_client.cc: reduce scope of variable
 53e2ba0 mailmap: Federico Gimenez affiliation
-eea9803 (origin/wip-enoent-race) os/LevelDBStore, RocksDBStore: fix race handling for get store size
+eea9803 os/LevelDBStore, RocksDBStore: fix race handling for get store size
 06a73c3 doc/release-notes: v0.87 giant (draft)
-ecbbf87 (origin/wip-da-SCA-20141010) Paxos.cc: use reinterpret_cast instead of c-style cast
+ecbbf87 Paxos.cc: use reinterpret_cast instead of c-style cast
 784f6d5 fuse_ll.cc: use reinterpret_cast instead of c-style cast
 3994cca librados.cc: use static_cast instead of c-style cast
 719dc17 Revert "Enforce cache size on read requests"
@@ -2826,18 +3026,18 @@ c2cebe5 Revert "osdc: Fix compiler warning"
 a1f23b7 Revert "rbd: ObjectCacher reads can hang when reading sparse files"
 b808cdf Revert "Fix read performance regression in ObjectCacher"
 c4b2abd .gitmodules: ignoring changes in rocksdb submodule
-082416f (origin/wip-rbd-revert) Revert "Enforce cache size on read requests"
+082416f Revert "Enforce cache size on read requests"
 544b9a8 Revert "rbd: ObjectCacher reads can hang when reading sparse files"
 3b1eafc Revert "Fix read performance regression in ObjectCacher"
-d8442eb (origin/wip-rwtimer) common/Timer: kill RWTimer
-f76f83c (origin/wip-9873) osdc/Objecter: fix tick_event handling in shutdown vs tick race
+d8442eb common/Timer: kill RWTimer
+f76f83c osdc/Objecter: fix tick_event handling in shutdown vs tick race
 4848435 common/Timer: recheck stopping before sleep if we dropped the lock
 8d51142 erasure-code: remove LRC dead code
 9d09e37 ECTransaction: Remove unused typedef.
 60eaeca .gitmodules: ignoring changes in rocksdb submodule
 a9dd4af rgw: send http status reason explicitly in fastcgi
-44a8d59 (origin/fix-fstat-mode) java: fill in stat structure correctly
-cb9262a (origin/wip-9806-giant) Objecter: resend linger ops on any interval change
+44a8d59 java: fill in stat structure correctly
+cb9262a Objecter: resend linger ops on any interval change
 1a3ad30 ReplicatedPG: writeout hit_set object with correct prior_version
 8ae942a Remove unnecessary expressions about conf_journal_sz
 024efeb EC: document the LRC per layer plugin configuration
@@ -2847,8 +3047,8 @@ fa07c04 qa: use sudo when rsyncing /usr so we can read everything
 4128814 FDCache: purge hoid on clear
 3abbd4c shared_cache: add purge and tests
 c116b4b shared_cache::add: do not delete value if existed
-227ecd8 (origin/wip-9859) mon: Monitor: MMonGetMap doesn't require caps
-9803ced (origin/wip-init-radosgw) init-radosgw.sysv: set ulimit -n before starting daemon
+227ecd8 mon: Monitor: MMonGetMap doesn't require caps
+9803ced init-radosgw.sysv: set ulimit -n before starting daemon
 e81d887 Make better error reporting for client's call to rados.Rados
 d9ff3a6 PG:: reset_interval_flush and in set_last_peering_reset
 a49d745 objecter: Unlock in shutdown before waiting for timer thread
@@ -2860,21 +3060,21 @@ fdeeeb1 erasure code: use 32-byte aligned buffers
 3ce0615 erasure code: use a function for the chunk mapping index
 6154339 common: add an aligned buffer with less alignment than a page
 681dad8 common: remove dead code in buffer.cc
-12f1151 (origin/wip-9852) mon: MDSMonitor: have 'filesystem_command' return int instead of bool
+12f1151 mon: MDSMonitor: have 'filesystem_command' return int instead of bool
 c589f3f mon: MDSMonitor: proper error output if pool DNE on 'add_data_pool'
 52180a5 mon: MDSMonitor: update function doxygen description
-64cf8ea (origin/wip-msgr) msg/async/AsyncConnection: drop unused port
+64cf8ea msg/async/AsyncConnection: drop unused port
 86d3b18 msg/Messenger: allow ms_type 'random'
 57d8195 msg/Makefile: keep headers
 c025632 msg/async: rename ms_event_ -> ms_async_, drop unused config options
 ddc9bc0 libcephfs.cc: use reinterpret_cast instead of c-style cast
-fbf89f5 (origin/wip-9857) rbd: Correct readahead divide by zero exception
+fbf89f5 rbd: Correct readahead divide by zero exception
 d9e340c Makefile.am: remove also old *.o/lo files
 89eb2fe crush/CrushWrapper.cc: use reinterpret_cast instead of c-style cast
 32665fa client/Client.cc: prefer empty() over size() for emptiness check
 4cf3b5c FileJournal.cc: use reinterpret_cast instead of c-style cast
 e72dfb4 Default configure with nss instead of cryptopp
-2ec3609 (origin/wip-9372-injectargs) cli: CEPH_ARGS must be before injectargs
+2ec3609 cli: CEPH_ARGS must be before injectargs
 a566610 doc: update injectargs syntax
 a458bd8 cli: do not parse injectargs arguments twice
 f1afb18 cli: add verbose information related to argument parsing
@@ -2886,8 +3086,8 @@ d80ea6a mailmap: Mehdi Abaakouk affiliation
 4eee5f0 mailmap: VRan Liu affiliation
 d8b260a mailmap: Yann Dupont affiliation
 65be257 Fix read performance regression in ObjectCacher
-349eb51 (origin/wip-9836-test-mon-id) tests: mon id is incorrectly skipped
-9fbc083 (origin/wip-9031-9262) rados command: Add format support for ls operation
+349eb51 tests: mon id is incorrectly skipped
+9fbc083 rados command: Add format support for ls operation
 81f1a54 doc: Changes to librados to fix doc errors
 09a6186 doc: The dot package is included in graphviz package
 aae0976 doc: Remove unused PendingReleaseNotes file
@@ -2905,8 +3105,8 @@ aa837b0 pybind: Add previously missed basic namespace to python bindings
 21a0eb3 test, key_value_store: Use pool rbd since no default data pool present
 d7a8148 ceph_test_rados_api_*: expose RadosTest::nspace Expose RadosTestEC::nspace Rename others to nspace for consistency
 e42fb5e Revert "ceph_test_rados_api_*: expose nspace"
-ac3c1cb (origin/wip-9820) qa/workunits: cephtool: don't remove self's key on auth tests
-98d7760 (origin/sponce-wip-9356) Added missing semaphore in libradosstriper AIO tests leading to potential memory corruption and thus test failures
+ac3c1cb qa/workunits: cephtool: don't remove self's key on auth tests
+98d7760 Added missing semaphore in libradosstriper AIO tests leading to potential memory corruption and thus test failures
 f26cd1b Fixed remaining part of the seg fault described in bug 9356 by adding reference counting to CompletionData
 783fc66 Fixed part of the seg fault described in bug 9356 by adding reference counting on RadosReadCompletionData
 52c97b0 Fixed part of the seg fault described in bug 9356 by cleaning reference counting on MultiAioCompletionImpl
@@ -2918,18 +3118,18 @@ ea100ac KeyValueStore: Add clone op detect to promote error
 f207416 mailmap: Cheng Cheng name normalization
 f76a676 osd: log when scrub,deep scrub, repair starts
 64d977b client: fix signed/unsigned compilation warnings
-cb290a1 (origin/wip-adamcrume) osdc: Fix compiler warning
+cb290a1 osdc: Fix compiler warning
 2ae1cba mon: MDSMonitor: wait for osdmon to be writable when requesting proposal
 0dd473c mon: MDSMonitor: have management_command() returning int instead of bool
 91b2a2b mon: MDSMonitor: don't return -EINVAL if function is bool
 1d1ae41 mon: MDSMonitor: check all conditions are met *before* osdmon proposal
 07b7f10 mon: MDSMonitor: return if fs exists on 'fs new'
-2c06413 (origin/wip-mds-coverity) mds: fix null dereference
-9e6ae73 (origin/giant-unknown-locktype) mds: reply -EOPNOTSUPP for unknown lock type
+2c06413 mds: fix null dereference
+9e6ae73 mds: reply -EOPNOTSUPP for unknown lock type
 bb9add6 test: fix compile warning in bufferlist.cc
 a49255f librbd: fix compile warning in librbd/internal.cc.
 69b5c72 doc: updates on Backfill Reservation
-4606af7 (origin/wip-9526-crush-rename-bucket) mon: unit tests for osd crush rename-bucket
+4606af7 mon: unit tests for osd crush rename-bucket
 aa67560 mon: add the osd crush rename-bucket command
 29d13d4 crush: unit tests for CrushWrapper rename item/bucket methods
 30f3ac3 crush: add CrushWrapper::rename_bucket and can_rename_bucket
@@ -2937,25 +3137,25 @@ aa67560 mon: add the osd crush rename-bucket command
 f810710 add unittest for Striper::get_num_objects
 236895e crush: improve constness of CrushWrapper methods
 7b66ee4 when non-default striping is used, internal methods can operate on extra objects
-3741aab (origin/wip-9790-display-auid) auth: unit tests for auid display
+3741aab auth: unit tests for auid display
 5558afa qa/workunits/rbd/import_export.sh: be case insensitive
 fcc3692 auth: add display auid to KeyServer::encode_secrets
 fa2ff33 auth: add display auid to KeyRing::encode_formatted
 2cbebc3 doc: correct command of `config push`
 107cb0d rgw: correct "If-Modified-Since" handle.
-ac92c45 (origin/wip-client-flock) qa/workunits/fs/misc: Add a workunit for file lock interruption
+ac92c45 qa/workunits/fs/misc: Add a workunit for file lock interruption
 b0e6e85 mds: fix neighbor lock check
 b61468d doc/dev/sepia: notes about sepia email list and irc channels
 6705180 doc/release-notes: v0.80.7
-c9f9e72 (origin/wip-9598) Revert "Objecter: disable fast dispatch of CEPH_MSG_OSD_OPREPLY messages"
+c9f9e72 Revert "Objecter: disable fast dispatch of CEPH_MSG_OSD_OPREPLY messages"
 00907e0 msg/simple: do not stop_and_wait on mark_down
 22637f4 doc: update lab notes
-7022679 (origin/wip-5977) librbdpy: Added missing method docstrings
+7022679 librbdpy: Added missing method docstrings
 6753923 mds: reply -EOPNOTSUPP for unknown lock type
-c4bac3e (origin/wip-inotable-init) mds: fix inotable initialization/reset
+c4bac3e mds: fix inotable initialization/reset
 c95bb59 mds: fix inotable initialization/reset
 f1fccb1 rpm: 95-ceph-osd-alt.rules is not needed for centos7 / rhel7
-b73fe1a (origin/wip-9730) doc: remove node requirement from 'mon create-initial'
+b73fe1a doc: remove node requirement from 'mon create-initial'
 264f0fc doc: remove whitespace
 20b2766 Update vstart to setup users for s3-tests
 0969945 client: use finisher to abort MDS request
@@ -2967,14 +3167,14 @@ e464a77 client: use atomic variable to track reference of MetaRequeset
 fbf4d47 KeyValueStore: Make clone error message more friendly
 b426460 GenericObjectMap: sync transaction avoid lookup_parent failed
 674c911 StoreTest: Add clone xattr test
-d947050 (origin/wip-9718) osd/osd_types: consider CRUSH_ITEM_NONE in check_new_interval() min_size check
-5ff4a85 (origin/wip-9747-ceph-spec) rpm: 95-ceph-osd-alt.rules is not needed for centos7 / rhel7
+d947050 osd/osd_types: consider CRUSH_ITEM_NONE in check_new_interval() min_size check
+5ff4a85 rpm: 95-ceph-osd-alt.rules is not needed for centos7 / rhel7
 50987ec libcephfs.h libcephfs.cc : Defined error codes for the mount function Used new error codes from libcephfs.h to replace the magic numbers in the mount functon found in libcephfs.cc.
 7bab093 return value of handle_message for MSG_OSD_SUBOP/MSG_OSD_SUBOPREPLY should be true
-d955676 (origin/wip-8983) rados: Use strict_strtoll instead of strtoll
-809ddd2 (origin/wip-9706) osdc/Objecter: fix use-after-frees in close_session, shutdown
+d955676 rados: Use strict_strtoll instead of strtoll
+809ddd2 osdc/Objecter: fix use-after-frees in close_session, shutdown
 72a2ab1 osdc/Objecter: fix tick() session locking
-d98b755 (origin/wip-9716) librados: Fix function prototypes in librados.h
+d98b755 librados: Fix function prototypes in librados.h
 d458b4f PGLog::IndexedLog::trim(): rollback_info_trimmed_to_riter may be log.rend()
 022bace rados: Add tests for CLI strict parsing
 26fe180 test: Fix rmpool in test_rados_tool.sh
@@ -2986,16 +3186,16 @@ e075c27 common: link mds/flock.o to libcommon
 89ebcaa Fixed JSON output for stray OSDs
 a8d597f Fix error message when stripping with format 1
 66afcd9 Check pointer before deleting
-2c7c03c (origin/wip-coverity-20141003) ceph_erasure_code_benchmark: fix parameter handling
+2c7c03c ceph_erasure_code_benchmark: fix parameter handling
 8021581 client: add missing dendl and s/dout/ldout/
-fa539b9 (origin/wip-9692) qa/workunits/fs/misc: fix syntax error
-9b18d99 (origin/wip-9696) PG::choose_acting: in mixed cluster case, acting may include backfill
-3dd4cca (origin/wip-7796) rgw: set length for keystone token validation request
-3cd8a7f (origin/giant-locker-null) mds: Locker: fix a NULL deref in _update_cap_fields
+fa539b9 qa/workunits/fs/misc: fix syntax error
+9b18d99 PG::choose_acting: in mixed cluster case, acting may include backfill
+3dd4cca rgw: set length for keystone token validation request
+3cd8a7f mds: Locker: fix a NULL deref in _update_cap_fields
 3b9dcff rados: Parse command-line arguments strictly
 aa138eb mds: MDirUpdate: initialize discover count to 0 if we're not discovering
 2a9ed93 mds: MDSAuthCaps: init "read" param in default constructor
-ce4436c (origin/wip-print-mode) client: print out mode, uid, gid if they are changed
+ce4436c client: print out mode, uid, gid if they are changed
 7cb2840 test_rgw_admin_log.cc: refactor to use calloc()
 c43c85f test_rgw_admin_log.cc: fix use-after-free
 c60a170 test/librados/c_write_operations.cc: free ressources
@@ -3009,9 +3209,9 @@ d75856b osd/ReplicatedBackend.cc: prefer ++operator for non-primitive iterators
 72e708c osd/OSDMap.cc: prefer ++operator for non-primitive iterators
 4669233 mount.ceph.c: ensure '\0' terminated string
 865a0dc build: add ceph-erasure-code-corpus to gitmodule_mirrors
-f06ffba (origin/wip-da-fix-make_check) Makefile.am: make sure everything was build before make check
+f06ffba Makefile.am: make sure everything was build before make check
 9b3d345 qa: move mon_mds tests last
-e27cf41 (origin/wip-9437) qa: cephtool tests for `tell mds.X`
+e27cf41 qa: cephtool tests for `tell mds.X`
 620a722 qa: fixup cephtool test when MDS exists
 82ecf60 test: unit tests for MDSAuthCaps
 d15ecaf vstart: create fewer pgs for fs pools
@@ -3043,11 +3243,11 @@ ed862ec AsyncMessenger: move Async* related file to msg/async
 268db10 AsyncConnection: Rescheduler write event when connect successfully
 b8ae562 AsyncConnection: Avoid seq ack not send and skip sd<0 shutdown
 e25f2fe AsyncMessenger: Avoid join when worker thread not started
-64ca744 (origin/wip-heap-profiler) doc: update memory-profiling with examples
+64ca744 doc: update memory-profiling with examples
 6f6e7e2 mon,mds: call ceph_heap_profiler_init() at boot time
 472a4b3 perfglue: profiler stats need more than 1024 bytes
 cb36ccb mailmap: add yuandong to organizationmap
-bc0209e (origin/wip-catch-options-errors) test,tools: indentation, whitespace only
+bc0209e test,tools: indentation, whitespace only
 3677fe0 tools: allow_unregistered() options
 29b3771 tools: move po::collect_unrecognized in the try block
 8e5b7ac tools: display boost::program_options errors
@@ -3084,13 +3284,13 @@ d41bb28 Add STANDBY state process
 071ba4a Add event option
 a653af1 Remove DispatchQueue in AsyncMessenger
 d09d28c Add AsyncMessenger support
-82175ec (origin/wip-9513) Fix read performance regression in ObjectCacher
-0dd3afd (origin/wip-9496) mon: PGMonitor: populate scrub timestamps with 'now' on pg creation
+82175ec Fix read performance regression in ObjectCacher
+0dd3afd mon: PGMonitor: populate scrub timestamps with 'now' on pg creation
 ccdbfb4 mon: PGMonitor: prettify access to pg_stats_t in register_pg
-9b39033 (origin/wip-9419) osd: Return EOPNOTSUPP if a set-alloc-hint occurs with OSDs that don't support
+9b39033 osd: Return EOPNOTSUPP if a set-alloc-hint occurs with OSDs that don't support
 70ef4c1 osd: Remove unused PG functions queue_notify(), queue_info(), queue_log()
 d14ca34 0.86
-7c4e278 (origin/wip-9677-ioprio-class-giant) common: ceph_ioprio_string_to_class always returns -EINVAL
+7c4e278 common: ceph_ioprio_string_to_class always returns -EINVAL
 822b088 osd: log error if set_ioprio fails to parse class
 efb23b8 common: set_ioprio debug message including pid
 62f0ef4 common: do not set ioprio if pid is not set
@@ -3098,7 +3298,7 @@ efb23b8 common: set_ioprio debug message including pid
 97dcc05 (tag: v0.86) 0.86
 32e8bcd Run configure without liblttng on squeeze as well.
 be6de4a Run configure without liblttng on squeeze as well.
-3535b7a (origin/wip-9677-ioprio-class) common: ceph_ioprio_string_to_class always returns -EINVAL
+3535b7a common: ceph_ioprio_string_to_class always returns -EINVAL
 5088e0d osd: log error if set_ioprio fails to parse class
 33339c7 common: set_ioprio debug message including pid
 c7e4c0b common: do not set ioprio if pid is not set
@@ -3107,32 +3307,32 @@ b2e4bd5 msg: move SimpleMessenger to msg/simple/
 5a860be librados: use Messenger factory method
 5eff0ee msg: use localized cct for derr
 06aef6f doc/release-notes: v0.86
-10fe7cf (origin/wip-ostool) ceph_objectstore_tool: Accept CEPH_ARGS environment arguments
-6aba0ab (origin/wip-9128) Add reset_tp_timeout in long loop in add_source_info for suicide timeout
-52ac520 (origin/wip-rm-legacy-cli) tools: remove old ceph.cc
+10fe7cf ceph_objectstore_tool: Accept CEPH_ARGS environment arguments
+6aba0ab Add reset_tp_timeout in long loop in add_source_info for suicide timeout
+52ac520 tools: remove old ceph.cc
 63c7e16 test/osd/Object: don't generate length of 0
-abe4c35 (origin/wip-os-recommend-doc-fix) doc: update kernel recommendations, add tunables link
-6b9e20a (origin/wip-9658) ceph.spec: make ceph -> python-ceph dependency specify version
+abe4c35 doc: update kernel recommendations, add tunables link
+6b9e20a ceph.spec: make ceph -> python-ceph dependency specify version
 69acc8a msg: make messenger type configurable
 62b0bfd msg/Message: drop unneeded #include
 e55cb1f mon/MonClient: use generic Messenger factory
-fe57fab (origin/wip-9663) client: clean-up objecter on failed client init
+fe57fab client: clean-up objecter on failed client init
 ca10ce4 Add one more case ( "=" ) and test get_str_vec as well. Signed-off-by: Yann Dupont <yann@objoo.org>
-257dcc9 (origin/wip-osd-op-macro) rados.h: use macros to generate osd ops definitons and strings
-1858f06 (origin/johnugeorge-wip-9492-crush-giant) Crush: Ensuring at most num-rep osds are selected
+257dcc9 rados.h: use macros to generate osd ops definitons and strings
+1858f06 Crush: Ensuring at most num-rep osds are selected
 01e389a Crush: Ensuring at most num-rep osds are selected
-f1becf9 (origin/wip-9655-osd-tell) qa: ceph tell must retry on ENXIO
-234b066 (origin/wip-9492-crush-indep) Crush: Ensuring at most num-rep osds are selected
+f1becf9 qa: ceph tell must retry on ENXIO
+234b066 Crush: Ensuring at most num-rep osds are selected
 5c6c366 debian/control: fix python-ceph -> ceph file move to allow upgrades
-35fd272 (origin/wip-9657) messages: provide an explicit COMPAT_VERSION in MMDSBeacon
-177a33b (origin/wip-9661) MemStore: Need set/get_allow_sharded_objects() to work for ceph_objectstore_tool
+35fd272 messages: provide an explicit COMPAT_VERSION in MMDSBeacon
+177a33b MemStore: Need set/get_allow_sharded_objects() to work for ceph_objectstore_tool
 0b155d0 ceph_objectstore_tool: MemStore needs a CephContext
 7f6c31b debian/control: BuildDepend on lsb-release
-73d5bdb (origin/wip-9245-test-mon-pending-giant) tests: remove tests requiring osdmonitor_prepare_command
+73d5bdb tests: remove tests requiring osdmonitor_prepare_command
 e865781 mon: obsolete osdmonitor_prepare_command
 d0c2d7d test: minor case fix
-d0ceb3a (origin/wip-9545) os/FileStore: do not loop in sync_entry on shutdown
-7e2bd22 (origin/wip-9418) mon: Monitor: let 'handle_command()' deal with caps validation
+d0ceb3a os/FileStore: do not loop in sync_entry on shutdown
+7e2bd22 mon: Monitor: let 'handle_command()' deal with caps validation
 f0653c0 qa/workunits: mon: auth_caps: account for mon blank caps
 87d06f1 mon: MonCommands: adjust indentation for 'auth add'
 c7d5c25 qa/workunits: mon: auth_caps: variables must be local
@@ -3146,59 +3346,59 @@ ea96863 qa/workunits: cephtool: test auth profiles
 d6b702c mon: MonCap: add new profiles
 940c4e2 mon: Monitor: match command module caps against what's on MonCommands.h
 8612461 mon: AuthMonitor: validate caps when creating or changing mon caps
-038de00 (origin/wip-9245-test-mon-pending) tests: remove tests requiring osdmonitor_prepare_command
+038de00 tests: remove tests requiring osdmonitor_prepare_command
 2abc8f4 mon: obsolete osdmonitor_prepare_command
 6f69837 test: minor case fix
-eb2f0f4 (origin/wip-9653-ceph-disk-bootstrap-osd-giant) ceph-disk: bootstrap-osd keyring ignores --statedir
-fa0bd06 (origin/wip-9653-ceph-disk-bootstrap-osd) ceph-disk: bootstrap-osd keyring ignores --statedir
+eb2f0f4 ceph-disk: bootstrap-osd keyring ignores --statedir
+fa0bd06 ceph-disk: bootstrap-osd keyring ignores --statedir
 19be358 PG::actingset should be used when checking the number of acting OSDs for a given PG. Signed-off-by: Guang Yang <yguang@yahoo-inc.com>
 8253ead osdc/Objecter: use SafeTimer; make callbacks race-tolerant
 6c37984 mailmap: Yehuda Sadeh name normalization
 beff616 ceph-disk: set guid if reusing a journal partition
-50e8040 (origin/wip-rados-empty-file) tools: rados put /dev/null should write() and not create()
-0b0a373 (origin/wip-ysw-mailmap) mailmap: update email address
+50e8040 tools: rados put /dev/null should write() and not create()
+0b0a373 mailmap: update email address
 188370a doc/release-notes: fix attributions for 8702 fix
 c0dc3a5 doc/release-notes: v0.80.6
-5b41d80 (origin/wip-8911) rgw: swift GET / HEAD object returns X-Timestamp field
+5b41d80 rgw: swift GET / HEAD object returns X-Timestamp field
 29356d8 qa: fix osd pool ls invalid test
 a1aa06b ReplicatedPG: dump snap_trimq on pg query
 34f38b6 ReplicatedPG: do not queue the snap trimmer constantly
 b29bf00 ReplicatedPG: clean out completed trimmed objects as we go
-3374a0b (origin/wip-coverity-20141002) BtrfsFileStoreBackend.cc: fix string overflow
+3374a0b BtrfsFileStoreBackend.cc: fix string overflow
 8b7fc61 test_librbd.cc: fix compiler warning, cast to size_t
-e506f89 (origin/wip-objecter-shutdown) Objecter: check the 'initialized' atomic_t safely
-0f731ae (origin/revert-2604-wip-9113) Revert "ReplicatedPG: clean out completed trimmed objects as we go"
-fea0154 (origin/wip-mon-status) mon: break recovery status onto separate lines
+e506f89 Objecter: check the 'initialized' atomic_t safely
+0f731ae Revert "ReplicatedPG: clean out completed trimmed objects as we go"
+fea0154 mon: break recovery status onto separate lines
 46a76d5 mon: put 'ceph status' quorum status on new line
 e127c89 mon: put 'ceph status' health items on separate lines
 da9ae5c ceph.spec: fix typo
-63b30d4 (origin/wip-8187) librbd: Skip tier pools in list_children and snap_unprotect
-63d0ec7 (origin/wip-9013) rgw: add civetweb as a default frontend
-d8ae14f (origin/wip-8188) librados: Add rados_pool_get_base_tier call
-5b58f16 (origin/wip-coverity-20141001) test_librbd.cc: fix compiler warning
+63b30d4 librbd: Skip tier pools in list_children and snap_unprotect
+63d0ec7 rgw: add civetweb as a default frontend
+d8ae14f librados: Add rados_pool_get_base_tier call
+5b58f16 test_librbd.cc: fix compiler warning
 58c732f client/SyntheticClient.cc: remove dead code
 3184a20 doc: A couple of fixes to the CloudStack documentation
 88022e8 SyntheticClient.cc: remove dead code
 17fa397 LogEntry.h: init LogEntry::prio in constructor
 7d6e21d osd: fix need_journal call
-8388836 (origin/wip-rpm-epoch) ceph.spec.: add epoch
-a470c96 (origin/wip-fsls-json) mon: fix JSON `fs ls` output
+8388836 ceph.spec.: add epoch
+a470c96 mon: fix JSON `fs ls` output
 2955b3d ObjectStore: Add "need_journal" interface to make aware of journal device
 05fd507 Pipe: avoid redundancy new/delete for struct iovec
-cefb1a3 (origin/wip-9635) mon: wait for paxos writes before touching state
+cefb1a3 mon: wait for paxos writes before touching state
 46c1d93 mon: flush paxos write before setting shutdown state
 4072ef7 mon: move paxos write wait into a helper
 624aaf2 PG: release backfill reservations if a backfill peer rejects
-62e2bca (origin/wip-8822) osd: swap state spinlock for atomic_t
+62e2bca osd: swap state spinlock for atomic_t
 a8ac4b6 osdc/Filer: drop probe/purge locks before calling objecter
 0ea20a6 Locker: accept ctime updates from clients without dirty write caps
 2e9c7c9 test-shared-cache:   Add test for "lower_bound" method.   Add multithread tests for "lookup" and "lower_bound" methods.
 d34c21c test-shared-cache:   Initial draft for the unit test of "common/shared_cache.hpp".
 de87d54 common: document C_GatherBuilder and C_Gather
-a67c2f9 (origin/wip-9628) mds: Add session to sessionmap when its state becomes opening
+a67c2f9 mds: Add session to sessionmap when its state becomes opening
 1feba20 Objecter: init with a constant of the correct type
-46d5518 (origin/wip-osd-objecter) osd: do not bind ms_objecter messenger
-fe3434f (origin/wip-python-flask) debian: move ceph_rest_api.py into ceph
+46d5518 osd: do not bind ms_objecter messenger
+fe3434f debian: move ceph_rest_api.py into ceph
 8cda623 ceph.spec.in: move ceph_rest_api.py into ceph
 b241624 ceph.spec: fix python-flask dependency
 e42424e debian: python-flask is needed by ceph, not python-ceph
@@ -3223,24 +3423,24 @@ b167f70 mailmap: Sahid Ferdjaoui affiliation
 b386b59 mailmap: JuanJose Galvez affiliation
 e6bba0d mailmap: Roman Haritonov affiliation
 e133a92 mailmap: Yongyue Sun affiliation
-beade63 (origin/wip-9620-test-mon-thrash) qa/workunits/cephtool/test.sh: fix thrash (ultimate)
+beade63 qa/workunits/cephtool/test.sh: fix thrash (ultimate)
 5d1d9db librados: cap the IoCtxImpl::{aio_}*{write,append} buffer length
 5f029ff os/FileStore: using FIEMAP_FLAGS_SYNC instead of fsync() before call fiemap.
 69fc171 Clock: Using clock_gettime instead of gettimeofday in linux os.
 becc114 librados: test s/E2BIG/TooBig/
 32195f9 librados: cap the rados_aio_*{write,append} buffer length
 f777fc6 osd: Make RPGTransaction::get_bytes_written return the correct size.
-7849d79 (origin/wip-crush-location) crushtool: add --show-location <id> command
+7849d79 crushtool: add --show-location <id> command
 33501d2 librados: cap the rados*{write,append} buffer length
 f8ac224 ceph-disk: add Scientific Linux as a Redhat clone
-6b4d1aa (origin/johnugeorge-wip-9492-crush) Crush: Ensuring at most num-rep osds are selected
+6b4d1aa Crush: Ensuring at most num-rep osds are selected
 5ca7ea5 ceph-disk: add Scientific Linux as a Redhat clone
 7827e00 os: io_event.res is the size written
 d851c3f osd: improve debug output for do_{notifies,queries,infos}
-126d0b3 (origin/wip-9582) osdc/Objecter: only post_rx_buffer if no op timeout
-ba02a5e (origin/wip-9536-isa-alignment) erasure-code: test isa encode/decode with various object sizes
+126d0b3 osdc/Objecter: only post_rx_buffer if no op timeout
+ba02a5e erasure-code: test isa encode/decode with various object sizes
 eb8fdfa erasure-code: add test for isa chunk_size method
-7a468f3 (origin/wip-msgr-shutdown) msg: allow calling dtor immediately after ctor
+7a468f3 msg: allow calling dtor immediately after ctor
 af07d29 erasure-code: isa encode tests adapted to per chunk alignment
 aa9d70b erasure-code: isa test compare chunks with memcmp instead of strncmp
 ed77178 erasure-code: run isa tests via libtool and valgrind
@@ -3248,26 +3448,26 @@ ed77178 erasure-code: run isa tests via libtool and valgrind
 28c2b6e erasure-code: isa uses per chunk alignment constraints
 6f4909a erasure-code: [ISA] modify get_alignment function to imply a platform/compiler independent alignment constraint of 32-byte aligned buffer addresses & length
 7552571 doc/release-notes: v0.67.11
-8dc94a2 (origin/wip-9562) osdc/Filer: drop probe/purge locks before calling objecter
+8dc94a2 osdc/Filer: drop probe/purge locks before calling objecter
 9593d87 documentation: erasure-code plugin isa does not require k/m
 6886224 mailmap: Yan Zheng affiliation
 fc1380b mailmap: Thorsten Glaser affiliation
-7973280 (origin/wip-zafman-cleanup) osd: Remove unused PG functions queue_notify(), queue_info(), queue_log()
-0f884fd (origin/wip-9008) For pgls OP, get/put budget on per list session basis, instead of per OP basis, which could lead to deadlock.
+7973280 osd: Remove unused PG functions queue_notify(), queue_info(), queue_log()
+0f884fd For pgls OP, get/put budget on per list session basis, instead of per OP basis, which could lead to deadlock.
 7f87cf1 ReplicatedPG: clean out completed trimmed objects as we go
 2cd9b5f tests: use memcmp to compare binary buffers
-c17ac03 (origin/wip-9487) ReplicatedPG: don't move on to the next snap immediately
+c17ac03 ReplicatedPG: don't move on to the next snap immediately
 255b430 osd: initialize purged_snap on backfill start; restart backfill if change
-f833f12 (origin/wip-5595) rgw: rados->set_attrs() updates bucket index
+f833f12 rgw: rados->set_attrs() updates bucket index
 44cfd88 rgw: PutObjMetadata, clear bufferlist before appending into it
 4be53d5 PG: check full ratio again post-reservation
 9c825ec documentation: revise placement group number guide
-7f71c11 (origin/wip-mon-fix-checks) ceph-mon: check fs stats just before preforking
+7f71c11 ceph-mon: check fs stats just before preforking
 9687150 erasure-code: isa/lrc plugin feature
-f51d21b (origin/wip-9572-erasure-code-blaumroth) erasure-code: restore jerasure BlaumRoth default w
+f51d21b erasure-code: restore jerasure BlaumRoth default w
 e270216 mailmap: William A. Kennington III affiliation
 9f0202b mailmap: Jason Dillaman affiliation
-89fceb3 (origin/wip-mon-data-space-die) mon: Monitor: log RO commands on 'debug' level, RWX on 'info'
+89fceb3 mon: Monitor: log RO commands on 'debug' level, RWX on 'info'
 2c5b12d mon: Monitor: use MonCommand::requires_perm() when checking perms
 bb55862 mon: Monitor.h: add 'requires_perm()' function to MonCommand struct
 f1b814e mon: Monitor: log RO admin socket commands on 'debug' level
@@ -3279,16 +3479,16 @@ f1b814e mon: Monitor: log RO admin socket commands on 'debug' level
 9996d44 mon: DataHealthService: use get_fs_stats() instead
 3d74230 common: util: add get_fs_stats() function
 f421d5c documentation: comment the CompatSet data members
-ce8eefc (origin/wip-8629) osd/ReplicatedPG: do not clone or preserve snapdir on cache_evict
+ce8eefc osd/ReplicatedPG: do not clone or preserve snapdir on cache_evict
 398c74e ceph_test_rados_api_tier: add EvictSnap2 test case
 682b9da os/FileJournal: do not request sync while shutting down
 544b8c7 ReplicatedPG::on_removal: clear rollback info
 781f05c Revert "PG::init: clear rollback info for backfill as well"
 a53ead1 osd: Cleanup boost optionals
-28b7b93 (origin/wip-log-msgs) mds: remove spurious logging
-226c0c7 (origin/wip-9547-python-rados-truncate) test: check python rados aio_read with buffers containing null
+28b7b93 mds: remove spurious logging
+226c0c7 test: check python rados aio_read with buffers containing null
 8bda44f pybind: Fix aio_read handling of string buffer
-9d9c8c7 (origin/wip-9539) Filer: add lock to protect strcut PurgeRange
+9d9c8c7 Filer: add lock to protect strcut PurgeRange
 b47fdd4 rbd: Use a rolling average to compute RBD write throughput
 f3acae4 rgw_main.cc: add missing virtual destructor for RGWRequest
 eeb74a1 os/GenericObjectMap.cc: pass big parameter by reference
@@ -3296,10 +3496,10 @@ eeb74a1 os/GenericObjectMap.cc: pass big parameter by reference
 f2a7d62 ErasureCodeLrc.h: fix UNINIT_CTOR
 1a74822 ErasureCodeLrc.h: fix data_chunk_count UNINIT_CTOR
 0e15df4 LogEntry.h: init LogEntry::seq with 0
-5bb94ed (origin/wip-9529) rgw: calculate hash after writing data
+5bb94ed rgw: calculate hash after writing data
 7b13724 crypto: don't hash zero sized buffer
 76eff95 include/util.h: prevent multiple inclusion of header
-b82ceda (origin/wip-coverity-20140919) rgw_main.cc: add missing virtual destructor for RGWRequest
+b82ceda rgw_main.cc: add missing virtual destructor for RGWRequest
 13b8c92 os/GenericObjectMap.cc: pass big parameter by reference
 45e0b33 common/buffer.cc: catch exception by reference
 7e82950 test/kv_store_bench.cc: fix coverity REVERSE_INULL
@@ -3311,36 +3511,36 @@ ea02dc3 ErasureCodeLrc.h: fix UNINIT_CTOR
 af039ce test/librados/aio.cc: close resource leak
 639c981 documentation: explain ceph osd reweight vs crush weight
 f51e368 erasure-code: fix assert overflow
-13780d7 (origin/wip-9538-format-plain) mon: osd find / metadata --format plain fallback
+13780d7 mon: osd find / metadata --format plain fallback
 0fb0967 documentation: tiering typo
-7ac60d8 (origin/wip-cephtool-test) tests: check osd health in cephtool/test.sh
+7ac60d8 tests: check osd health in cephtool/test.sh
 4d75c4c tests: qa/workunits/cephtool/test.sh ! and -e
 be97b7d documentation: fix bugous osd stop/start example
-3f23709 (origin/wip-giant-messenger-fixes) Objecter: disable fast dispatch of CEPH_MSG_OSD_OPREPLY messages
+3f23709 Objecter: disable fast dispatch of CEPH_MSG_OSD_OPREPLY messages
 681a754 Pipe: stop delayed delivery fast_dispatch in stop_and_wait()
 fb5a244 osd/Watch: handle con without sessions
 93dccdb osd/ReplicatedPG: handle sessionless op con in do_osd_op_effects
 5d37850 osd: drop dead shutdown message handler
 bb45621 common: Add cctid meta variable
-c421b55 (origin/wip-9301) mon: re-bootstrap if we get probed by a mon that is way ahead
+c421b55 mon: re-bootstrap if we get probed by a mon that is way ahead
 d81cd7f mon/Paxos: fix off-by-one in last_ vs first_committed check
-9132ca4 (origin/wip-5768) rbd-fuse: Fix memory leak in enumerate_images
-9a1ab95 (origin/wip-6926) rbd: Fix rbd diff for non-existent objects
+9132ca4 rbd-fuse: Fix memory leak in enumerate_images
+9a1ab95 rbd: Fix rbd diff for non-existent objects
 d6913ae mds: fix not journaling client metadata
-1395275 (origin/wip-9518) mds: fix not journaling client metadata
-346c06c (origin/wip-6613) client: preserve ordering of readdir result in cache
+1395275 mds: fix not journaling client metadata
+346c06c client: preserve ordering of readdir result in cache
 600af25 client: introduce a new flag indicating if dentries in directory are sorted
-59c8976 (origin/wip-acl-test) qa/workunits/fs/misc: Add a workunit for ACL
-2bd7cee (origin/wip-9341) client: trim unused inodes before reconnecting to recovering MDS
-95ee699 (origin/wip-rbd-readahead) client: Replace client readahead logic with Readahead
+59c8976 qa/workunits/fs/misc: Add a workunit for ACL
+2bd7cee client: trim unused inodes before reconnecting to recovering MDS
+95ee699 client: Replace client readahead logic with Readahead
 ad45d8c librbd: Add read-ahead
 830373e osdc: Fix ObjectCounter::_readx perf counters
 4809418 doc: Change listed RBD cache defaults to actual defaults
-4089684 (origin/wip-decode-dump) msg: hexdump bad messages at debug level 1 (not 30)
+4089684 msg: hexdump bad messages at debug level 1 (not 30)
 5495570 msg: hexdump messages we can't decode at configurable debug level
 7e13ac8 rgw: Export user stats in get-user-info Adminops API
 480c372 Revert "crushtool: safeguard for missing --num-rep when --test"
-288f05a (origin/wip-9189) mds: use new Session::human_name in health msgs
+288f05a mds: use new Session::human_name in health msgs
 6320e53 mds: implement const SessionMap::get_session
 32b51bb mds: generate friendly name for client sessions
 920cac9 ceph_fuse: include mount point in client metadata
@@ -3353,9 +3553,9 @@ cd215c7 messages: add cephfs client metadata to MClientSession
 0769310 PGLog::claim_log_and_clear_rollback_info: fix rollback_info_trimmed_to
 07f54f2 PG::find_best_info: let history.last_epoch_started provide a lower bound
 92cfd37 PG::choose_acting: let the pg go down if acting is smaller than min_size
-1f450fa (origin/wip-xattr-fix) client: request xattrs if xattr_version is 0
+1f450fa client: request xattrs if xattr_version is 0
 c837fb9 mds: return xattrs when client explictly requests xattrs
-681a49c (origin/wip-9435) mon: forbid tier changes when in use by FS
+681a49c mon: forbid tier changes when in use by FS
 80441cd mon: prevent cache pools being used CephFS
 86a4bed FileStore: Race condition during object delete is fixed
 10b8966 crushtool: safeguard for missing --num-rep when --test
@@ -3375,13 +3575,13 @@ daf6379 mailmap: correcting Zhiqiang Wang's mailmap and org affiliation
 1a8b91b doc: Add keyvaluestore config description
 bb49547 KeyValueStore: Reduce redundancy set_header call
 306fb2f mds: set new inode's xattr version to 1
-1b9226c (origin/wip-9219-giant) osd: subscribe to the newest osdmap when reconnecting to a monitor
-56ba341 (origin/wip-objecter-cancel) osdc/Objecter: fix command op cancellation race
+1b9226c osd: subscribe to the newest osdmap when reconnecting to a monitor
+56ba341 osdc/Objecter: fix command op cancellation race
 baf7be9 osdc/Objecter: cancel timeout before clearing op->session
-1149639 (origin/wip-xfs-inode64) ceph-disk: mount xfs with inode64 by default
+1149639 ceph-disk: mount xfs with inode64 by default
 ded1b30 erasure-code: preload fails if < 0
-27208db (origin/wip-doc-preflight) doc: Added feedback.
-a140439 (origin/wip-9284) mds: limit number of caps inspected in caps_tick
+27208db doc: Added feedback.
+a140439 mds: limit number of caps inspected in caps_tick
 bf590f8 mds: keep per-client revoking caps list
 a6a0fd8 xlist: implement copy constructor
 fd04d5e mds: health metric for late releasing caps
@@ -3396,7 +3596,7 @@ e6062b8 mds: add a health metric for failure to recall caps
 c328486 client: fix crash in trim_caps
 83fd1cf bugfix: wrong socket address in log msg of Pipe.cc
 868b6b9 doc: osd_backfill_scan_(min|max) are object counts
-cdb7675 (origin/wip-rbd-objectcacher-hang) rbd: ObjectCacher reads can hang when reading sparse files
+cdb7675 rbd: ObjectCacher reads can hang when reading sparse files
 ddd52e8 init-radosgw.sysv: Support systemd for starting the gateway
 d32b428 doc: Added bucket management commands to ops/crush-map
 d446a65 documentation: jerasure plugin is sub section of erasure code profile
@@ -3404,28 +3604,28 @@ d446a65 documentation: jerasure plugin is sub section of erasure code profile
 75f0fb2 documentation: erasure code profile update
 b8a1ec0 doc: fixes a formatting error on ops/crush-map
 c3c6468 mds: update segment references during journal rewrite
-a8c943a (origin/wip-9445) log: add simple test to verify an internal SEGV doesn't hang
-2313ce1 (origin/wip-client-msg-leak) client: fix a message leak
+a8c943a log: add simple test to verify an internal SEGV doesn't hang
+2313ce1 client: fix a message leak
 e3fe18a global/signal_handler: do not log if SEGV originated inside log code
 558463e log: add Log::is_inside_log_lock()
-386f2d7 (origin/wip-9427-rewrite) mds: update segment references during journal rewrite
-d41c3e8 (origin/wip-9307) rgw: push hash calculater deeper
+386f2d7 mds: update segment references during journal rewrite
+d41c3e8 rgw: push hash calculater deeper
 28d4460 DBObjectMap: restructure map_header_in_use locking
 0a1abac osd_types: fix pg_log_t tail dump
 4d3579d doc: Added clarifications and added additional preflight steps for CentOS/RHEL.
 1c8485e doc: Deleted redundant text string.
 ce7b2ec erasure-code: fix erasure_code_benchmark goop (decode)
-9ba4e78 (origin/wip-9446) mon: fix MDS health detail output
-2b45bfa (origin/majianpeng-fix3) buffer: Add a test for bufferlist::rebuild_page_aligned
+9ba4e78 mon: fix MDS health detail output
+2b45bfa buffer: Add a test for bufferlist::rebuild_page_aligned
 c268400 buffer: In rebuild_page_aligned for the last ptr is page aligned, no need call rebuild().
-bccb0eb (origin/wip-always-create-pidfile) daemons: write pid file even when told not to daemonize
+bccb0eb daemons: write pid file even when told not to daemonize
 aa5234e doc: Add file system osd config settings Add documentation for osd mkfs and osd mount options.
 f54d5c7 rbd-replay: Add code documentation
 8d23e8d rbd-replay: Add --dump-perf-counters option
 675a6a6 rbd-replay: Add rbd-replay-many
 398ebc0 librbd: Add missing tracepoints
 3911354 rbd-replay: Add --anonymize flag to rbd-replay-prep
-0e0a8d4 (origin/wip-7767-b) msg: prefetch data when doing recv()
+0e0a8d4 msg: prefetch data when doing recv()
 16bd457 ReplicatedPG: cancel cb on blacklisted watcher
 b7bdb93 erasure-code: fix erasure_code_benchmark goop
 11082f7 OpTracker: Race condition removed while dumping ops through admin socket
@@ -3434,27 +3634,27 @@ b7bdb93 erasure-code: fix erasure_code_benchmark goop
 3fac790 OpTracker: Sharding logic is implemented to improve performance
 2fbe82d doc: Fixed syntax error.
 7dbf750 doc: Updated authentication notes. Fixed syntax error.
-7281638 (origin/wip-mds-beacon) mds: sleep in progress thread if laggy and waiting_for_nolaggy waiters
+7281638 mds: sleep in progress thread if laggy and waiting_for_nolaggy waiters
 6fb5769 mds/Beacon: do not reconnect to mon in quick succession
-4ad5db0 (origin/wip-client-ll-ref) client: include ll_ref when printing inode
-cf70b90 (origin/wip-7934) test: Fix ceph_test_rados_watch_notify to delete the pools it creates
+4ad5db0 client: include ll_ref when printing inode
+cf70b90 test: Fix ceph_test_rados_watch_notify to delete the pools it creates
 2e4e98b ReplicatedPG: Make perfcounter record the read-size for  async-read.
 cf34e00 ReplicatedPG: record correctly subop for perfcounter.
-117de00 (origin/wip-9413-erasure-code-version-check) erasure-code: mon, osd etc. depend on the plugins
+117de00 erasure-code: mon, osd etc. depend on the plugins
 5a05e6b [rgw][s3] Allow colon ':' in access key
-f05c977 (origin/wip-pool-ls) mon: add 'osd pool ls [detail]' command
-46bbe30 (origin/wip-osdc-leak) osdc/Objecter: fix leak of MStatfsReply
+f05c977 mon: add 'osd pool ls [detail]' command
+46bbe30 osdc/Objecter: fix leak of MStatfsReply
 1ff94cc EC-ISA: avoid usage of table cache lock outside the class implementation by introducing the setEncodingTable/setEncodingCoefficient methods
 5b41dac EC-ISA: add intelligent table cache
-83bd343 (origin/wip-replay-locking) mds: fix replay locking
+83bd343 mds: fix replay locking
 3448d85 Cache tiering: do not allow flush/evict when there are requests pending
 b40cce7 osd: set min_read_recency_for_promote to default 1 when doing upgrade
 d734600 Change CrushWrapper::crush to private
-5a784cd (origin/wip-9241) osdc/Objecter: drop bad session nref assert
+5a784cd osdc/Objecter: drop bad session nref assert
 3c6e888 osd/ClassHandler: fix build
 d165238 FileStore: report l_os_j_lat as commit latency
-70ce400 (origin/wip-9365) osd/ClassHandler: improve error logging
-2305b28 (origin/wip-9362) osdc/Objecter: revoke rx_buffer on op_cancel
+70ce400 osd/ClassHandler: improve error logging
+2305b28 osdc/Objecter: revoke rx_buffer on op_cancel
 f295c1f ceph_test_rados_api_io: add read timeout test
 977d289 ceph_test_rados_api_*: expose nspace
 1349383 Objecter::_recalc_linger_op: resend for any acting set change
@@ -3464,7 +3664,7 @@ f917166 erasure-code: refactor jerasure Liberation parameters checks
 937d2b0 Revert "ReplicatedPG:start_flush send a second delete"
 78d7499 Revert "osd/ReplicatedPG: avoid dereferencing iterator at end()"
 3578b11 ReplicatedPG: create max hitset size
-e9b09e8 (origin/wip-9381-erasure-code-rpm) packaging: add all erasure code plugins to RPM packages
+e9b09e8 packaging: add all erasure code plugins to RPM packages
 c5bafae erasure-code: Avoid k/m that we set are not equal in erasure-plugin.
 9606232 KeyValueStore: Fix scrub causing inconsistence state
 ae05edd ObjectStore Test: Add test for simulating scrub behavior
@@ -3474,40 +3674,40 @@ c664179 KeyValueStore: Fix upgrade from non-exist superblock OSD version error
 2f2c37f mailmap: Marco Garcês affiliation
 0204998 mailmap: Erik Logtenberg affiliation
 284fb49 mailmap: François Lafont affiliation
-6307536 (origin/wip-yasm) configure: do not try yasm on x32
+6307536 configure: do not try yasm on x32
 d5777c4 doc: Fixed broken links and clarified terms for new authentication docs.
 e2de11a doc: Minor cleanup.
 9ab46dc debian: only B-R yasm on amd64
 836a670 doc/release-notes: v0.85
-591a179 (origin/wip-doc-qemu) doc: Added more robust usage example for uid and conf for QEMU.
+591a179 doc: Added more robust usage example for uid and conf for QEMU.
 b178e97 doc: Clean up syntax to suppress warnings.
 4ad1106 doc: Clean up syntax.
-7531b28 (origin/wip-9366) lttng: Fix 'make tag' when configured --without-lttng
-1c34601 (origin/wip-paxos-dout) mon/Paxos: make is_readable debug output show result
+7531b28 lttng: Fix 'make tag' when configured --without-lttng
+1c34601 mon/Paxos: make is_readable debug output show result
 62ca27d mon/Paxos: don't spam log with is_readable at dout level 1
 a0c2284 (tag: v0.85) 0.85
 f0e0c31 Include types.h after stdint.h to accomodate for older distributions. This fixes compilation on CentOS 5.
-9254792 (origin/wip-rbd-force-write-back) rbd should use write-back when caching is enabled
+9254792 rbd should use write-back when caching is enabled
 0fb3e52 correct error of repeatedly adding io_size to off in do_bench_write
-4fc9fff (origin/wip-6494) Enforce cache size on read requests
+4fc9fff Enforce cache size on read requests
 f0a4a2f tests: flush logs before grepping them
 03aa113 erasure-code: init function is extern "C"
 484fb85 doc: Update logging path to reflect log rotate script default path.
 f0a1d28 doc: Add a contributing file at the root of repo
 4673242 rgw: add .log to default log path
-6fac815 (origin/wip-formatter-va) formatter: clean up dump_format()
+6fac815 formatter: clean up dump_format()
 df3c70a qa: scripts to help test ceph-qa-suite
-2280736 (origin/wip-9358) osdc/Journaler: fix try_read_entry()/wait_for_readable() locking
-94173a3 (origin/wip-9282) mds: warn clients which aren't revoking caps
+2280736 osdc/Journaler: fix try_read_entry()/wait_for_readable() locking
+94173a3 mds: warn clients which aren't revoking caps
 d8e672f rgw: Implementation for S3 Get Bucket Location
 9e503b5 test/formatter: Add tests for dump_format_ns
 eaa2bb0 rgw_formats: dump_format_ns implementation
 2fb51b2 Formatter: add a dump_format_ns to base Formatter
-14d87bd (origin/xiaoxichen-refactor_lrc_crush) Refactor ErasureCodeLrc::create_ruleset
-eae88da (origin/wip-8648) mds: clear objects' dirty flags after log segment is expired
+14d87bd Refactor ErasureCodeLrc::create_ruleset
+eae88da mds: clear objects' dirty flags after log segment is expired
 69638df doc: fix missing bracket
 35663fa doc: attempt to get the ayni JS into all head tags
-409c955 (origin/wip-SCA-20140902) OSDMonitor.cc: fix potential division by zero
+409c955 OSDMonitor.cc: fix potential division by zero
 7b77210 objectstore/store_test.cc: fix unintentional integer overflow
 6b70483 os/HashIndex.cc: fix unintentional integer overflow
 f29e5b3 mount.ceph.c: free memory before return
@@ -3515,18 +3715,18 @@ f29e5b3 mount.ceph.c: free memory before return
 ece990d rados_list_parallel.cc: cleanup before return from run()
 135ccad erasure-code: warning fix
 7de8d17 FileStore: Remove unused code.
-41df414 (origin/wip-mds-lock) mds: don't take mds_lock when doing journal operations
+41df414 mds: don't take mds_lock when doing journal operations
 7ccabbf librbd.cc: add check to prevent null deref in rbd_list()
-4f35714 (origin/wip-9311) Parallelize RBD import/export
+4f35714 Parallelize RBD import/export
 f53bf53 PendingIO.cc: use static_cast instead of c-style cast
 cbd324d FileStore.cc: use static_cast instead of c-style cast
-ca6eb61 (origin/wip-9026) client: vxattr support for rstat
-c2443b9 (origin/wip-doc-authentication) doc: Provided additional detail on daemon-specific caps syntax.
+ca6eb61 client: vxattr support for rstat
+c2443b9 doc: Provided additional detail on daemon-specific caps syntax.
 8569b93 doc: Updated Keyring settings from comments and ceph-deploy defaults.
 b6a97d8 documentation: disk thread ioprio options
 1b9e670 systemd support in ceph-disk activate
 6ec08e0 client/Client.cc: fix null pointer checks for 'in'
-c8d2388 (origin/wip-9151) mon: add MDS metric metadata to health detail
+c8d2388 mon: add MDS metric metadata to health detail
 9ee8015 mds: add thread to progress queues outside dispatch
 1058a9e mon: handle beacon health metrics in MDSMonitor
 0fc8a0d mds: populate health metrics in beacon
@@ -3539,8 +3739,8 @@ f5e7a4b mds: use HeartbeatMap to control beacons
 e69f321 include/CompatSet: make merge const()
 46c94e9 mds/CInode.h: prefer ++operator for non-primitive iterators
 a5468ab ceph_objectstore_tool.cc: prefer ++operator for non-primitive iterators
-4d9927e (origin/wip-session-stats) mds: cap and lease count in `session ls` asok
-ea2a8d0 (origin/wip-request-count) mds: Fix Session::get_request_count
+4d9927e mds: cap and lease count in `session ls` asok
+ea2a8d0 mds: Fix Session::get_request_count
 15df8ac rbd_replay/Replayer.cc: pass const string parameter by reference
 9d926f1 ReplicatedPG.cc: prefer ++operator for non-primitive iterators
 dae0593 IndexManager.cc: prefer ++operator for non-primitive iterators
@@ -3554,7 +3754,7 @@ a754ce5 ErasureCodeLrc.cc: fix -Wmaybe-uninitialized compiler warning
 16cbaba osd/PGLog.h: prefer ++operator for non-primitive iterators
 8f368c5 mailmap: Ashish Chandra affiliation
 5fd50c9 mailmap: Boris Ranto affiliation
-a5b4c58 (origin/wip-9309) lockdep: increase max locks (1000 -> 2000)
+a5b4c58 lockdep: increase max locks (1000 -> 2000)
 9fac072 documentation: add the mark_unfound_lost delete option
 bec3032 osd: MissingLoc::get_all_missing is const
 e13ddc7 tests: qa/workunits/cephtool/test.sh early fail
@@ -3562,12 +3762,12 @@ fc499aa mailmap: add .peoplemap
 177202e erasure-code: lowercase LRC plugin name
 4c9fdbf common/LogEntry: fix warning on x86_64
 a24c8ba common/LogEntry: fix warning on i386
-acfe62e (origin/wip-aio-journal) Revert "os/FileJournal: For journal-aio-mode, don't use aio when closing journal."
+acfe62e Revert "os/FileJournal: For journal-aio-mode, don't use aio when closing journal."
 c776a89 os/FileJournal: stop aio completion thread *after* writer thread
-fa45ed8 (origin/wip-9285) osd/ReplicatedPG: do not evict blocked objects
-ded1cf4 (origin/wip-9294) osd/ReplicatedPG: avoid dereferencing iterator at end()
+fa45ed8 osd/ReplicatedPG: do not evict blocked objects
+ded1cf4 osd/ReplicatedPG: avoid dereferencing iterator at end()
 d20432e erasure-code: preload LRC plugin
-982c9dd (origin/wip-hitset-bytes) osd/ReplicatedPG: adjust avg_size calculation in agent_choose_mode
+982c9dd osd/ReplicatedPG: adjust avg_size calculation in agent_choose_mode
 3fc6a73 osd/ReplicatedPG: calculate num_user_bytes
 6ce36b0 osd/ReplicatedPG: scrub and repair hit_set_archive bytes
 3409c38 osd/ReplicatedPG: account for hit_set_archive bytes
@@ -3585,17 +3785,17 @@ c2ca011 erasure-code: delegate chunk remapping to the plugin
 b517ca4 erasure-code: override the default only if the plugin match
 4670d9e erasure-code: relax profile parameter syntax
 e2e07d9 erasure-code: add ErasureCodeInterface::get_coding_chunk_count
-9fc2684 (origin/wip-9281) tools: use cout instead of cerr in journal tool
-a994145 (origin/wip-mds-recover) mds/RecoveryQueue: do not start prioritized items synchronously
-e0b19e3 (origin/wip-hadoop) qa: fix+cleanup hadoop wordcount test
+9fc2684 tools: use cout instead of cerr in journal tool
+a994145 mds/RecoveryQueue: do not start prioritized items synchronously
+e0b19e3 qa: fix+cleanup hadoop wordcount test
 76b8e57 erasure-code: preload the default plugins in the mon
 c3e1466 Test: fixing a compile warning in ceph_objectstore_tool.cc
 1b42726 Cache tiering: use local_mtime to calculate the age of objects during evicting
 335c1f7 doc: Added rbd-replay-prep and rbd-replay manpages to block device TOC.
 b965398 doc: Fixed broken hyperlink.
 7948e13 doc: Added sysctl max thread count discussion.
-a257291 (origin/wip-9266) client: fix dispatcher ordering (broken fuse)
-ce29b76 (origin/wip-8231-forreview) Fix ceph_scratchtoolpp to create and delete its own pool
+a257291 client: fix dispatcher ordering (broken fuse)
+ce29b76 Fix ceph_scratchtoolpp to create and delete its own pool
 a03f719 ceph_objectstore_tool: Bug fixes and test improvements
 23ec93a ceph_objectstore_tool, test: Implement import-rados feature and unit test code
 b193812 tools/rados: Improve trigger for op_size rounding info message
@@ -3638,12 +3838,12 @@ dc6bd3b mds/Locker: if a client asks for file caps, prioritize file recovery
 bd3c8bc mds/RecoveryQueue: add method to prioritize a file recovery; fix logging
 8f4ea81 mds: change mds_max_file_recover from 5 -> 32
 0747ca7 mds: make max file recovers configurable
-848fcf7 (origin/wip-8718) rgw: don't try to authenticate a CORS preflight request
+848fcf7 rgw: don't try to authenticate a CORS preflight request
 e440fb4 test/mon/*: prime mon with initial command before injection
-7a93258 (origin/wip-mds-namespace) mds: remove `using namespace std` in headers
+7a93258 mds: remove `using namespace std` in headers
 fc89c27 messages: remove `using namespace std` in headers
 e5930a3 tests: reduce osd-crush.sh execution time
-b059bcd (origin/wip-jerasure-upgrade) erasure-code: assert the PluginRegistry lock is held when it must
+b059bcd erasure-code: assert the PluginRegistry lock is held when it must
 3c4220e erasure-code: add Ceph version check to plugins
 d4ea682 erasure-code: implement ErasureCodePluginRegistry::remove
 c02c41c erasure-code: wrap lines for emacs compile command
@@ -3656,8 +3856,8 @@ e9a05b8 doc: Update docs about OSD benchmark syntax
 a087f03 Revert "doc: Update docs about OSD benchmark syntax"
 36f15c3 doc: Update docs about OSD benchmark syntax
 ae3d873 PG::can_discard_op: do discard old subopreplies
-97e4e11 (origin/wip-9148) civetweb: update submodule
-1434e5c (origin/wip-blacklist-mds) mds: restart on -EBLACKLISTED
+97e4e11 civetweb: update submodule
+1434e5c mds: restart on -EBLACKLISTED
 bb11936 mon: flush paxos write on shutdown
 b1cf210 mon/Paxos: WRITING != WRITING_PREVIOUS
 96030d6 mon: _reset() before updating state
@@ -3675,7 +3875,7 @@ bb50371 mon/MonitorDBStore: drop useless ctor
 a6a1e99 mon: interact with MonitorDBStore::Transactions by shared_ptr Ref
 cfc6830 common/Finisher: fix perfcounter
 97f9b6d mon/OSDMonitor: fix double-free on old MOSDBoot
-06b92ce (origin/wip-rewrite-PR2189) Move fedora patch file (used by ceph.spec.in) to rpm/ subdir
+06b92ce Move fedora patch file (used by ceph.spec.in) to rpm/ subdir
 7474f72 ceph.spec.in: tests for rhel or centos need to not include _version
 e37b262 ceph.spec.in: Add a small comment on the empty %files section
 875a99e ceph.spec.in: Obsolete all older versions.
@@ -3687,7 +3887,7 @@ e9da2d8 ceph.spec.in: Add obsoletes for libcephfs
 6c264f2 ceph.spec.in: add ceph-libs-compat
 62d74b3 civetweb: update submodule
 11acb70 rgw: convert header field underscores into dashes
-06ec5ef (origin/wip-7988) test: common: test_config: whitelist '$channel' meta-variable
+06ec5ef test: common: test_config: whitelist '$channel' meta-variable
 8a9831f osd/mds/monc: Adjust for LogClient/LogChannel usage
 bb9d4ca mon: LogMonitor: debug update_from_paxos
 8f9e105 mon: LogMonitor: expand meta variables at time-of-call
@@ -3710,43 +3910,43 @@ b1af4bd common: str_map: add helper methods to get values from maps
 0d2a6c7 common: LogEntry: change field name from 'type' to 'prio' (aka priority)
 f25bca3 systemd: ceph-mds and ceph-mon need networking too
 c6f4b42 sample.ceph.conf: some updates
-2b13de1 (origin/wip-8863) osd/PG: fix crash from second backfill reservation rejection
-5a63215 (origin/wip-reweight) mon/OSDMonitor: make reweight_by_* output less misleading
+2b13de1 osd/PG: fix crash from second backfill reservation rejection
+5a63215 mon/OSDMonitor: make reweight_by_* output less misleading
 146e60d osd: Remove extra call to release_op_ctx_locks in eval_repop. It is called in remove_repop.
 3bfbc14 test/mon/mkfs.sh: fix test
-c2f21c0 (origin/wip-9218) osd: fix osd_tp shutdown
+c2f21c0 osd: fix osd_tp shutdown
 8346e10 PG: mark_log_for_rewrite on resurrection
 cb4c5e8 OSD::session_notify_pg_create: requeue at the start of the queue
-3c847c5 (origin/wip-config-diff) common: ceph_context: add admin socket command 'config diff'
+3c847c5 common: ceph_context: add admin socket command 'config diff'
 ef51160 common: config: let us obtain a diff between current and default config
 4b8b25e tests: histogram prevent re-use of local variables
-a525bf3 (origin/wip-9054) ReplicatedPG:start_flush send a second delete
+a525bf3 ReplicatedPG:start_flush send a second delete
 ee02293 tests: histogram prevent re-use of local variables
 66c7439 ReplicatedPG::start_flush: remove superfluous loop
 0416b88 update license for libcephfs
 e6da732 PG: recover from each osd at most once
 8a1723f PG: make the reservation sets more descriptively named
-bf3e483 (origin/wip-9238) mds: fix FP error in ROUND_UP_TO
+bf3e483 mds: fix FP error in ROUND_UP_TO
 4672e50 osd/OSDMap: encode blacklist in deterministic order
 a15ad38 vstart: start rgw on port specified by env var
 dbe6c79 don't update op_rw_rlatency/op_w_rlatency when rlatency is zero
 f3bf246 fix wrong value of op_w_latency perf counter
 501dd3c ceph_filestore_dump: Export omap in batches for large omap case
 398b418 ceph_filestore_dump: Remove unused bufferlist databl
-9449520 (origin/wip-9209-round-up-to) common: ROUND_UP_TO accepts any rounding factor
+9449520 common: ROUND_UP_TO accepts any rounding factor
 df3b6fc Fix syntax error in rst documentation
 cef1299 doc: Added links. Clarified namespace comments. Added limitations.
 d817a6a doc: Minor changes.
 16d946b qa/workunits/hadoop/wordcount: remove bogus rm -r
 5db51d6 doc: Added a few comments and links to other relevant docs.
-751b3e2 (origin/wip-9226) rgw: fix test to identify whether object has tail
-c7e1b9e (origin/wip-9221) ceph_test_rados_api_tier: make PromoteOn2ndRead test tolerate retries
+751b3e2 rgw: fix test to identify whether object has tail
+c7e1b9e ceph_test_rados_api_tier: make PromoteOn2ndRead test tolerate retries
 73733dd documentation: update recovery config options defaults
 97b1916 CollectionIndex: Collection name is added to the access_lock name
 3e85041 rgw: admin ops create user API can not determine existing user
 f7ca1bf Update python.rst
-f651f93 (origin/wip-9079) msg/Accepter: do not unlearn_addr on bind()
-a67421a (origin/wip-objecter) osd: update handle_osd_map call
+f651f93 msg/Accepter: do not unlearn_addr on bind()
+a67421a osd: update handle_osd_map call
 ef44292 common/Timer: fix deadlock in RWTimer::shutdown
 10efe17 osdc/Objecter: fix op_cancel on homeless session
 28110ff osdc/Objecter: hold session ref longer in resend
@@ -3863,25 +4063,25 @@ bcc69ed mds: adapt to new objecter interface
 74ce4f2 rbd: fix signess warning
 f7c0001 common: remove spurious uint32_t in buffer.c
 6ad8e61 Fix FTBFS on alpha due to incorrect check on BLKGETSIZE
-2554243 (origin/wip-mds-pc) mds/Server: rename perfcounters
+2554243 mds/Server: rename perfcounters
 b0cc869 mds: rename a bunch of metrics
 31ef1a9 mds: set l_mds_req on client request
 06682c4 vstart.sh: debug rgw = 20 on -d
-00c677b (origin/wip-civetweb-log) rgw: use a separate callback for civetweb access log
+00c677b rgw: use a separate callback for civetweb access log
 850242c rgw: separate civetweb log from rgw log
-f246b56 (origin/wip-weak-refs) common/shared_cache: dump weak refs on shutdown
+f246b56 common/shared_cache: dump weak refs on shutdown
 6cf583c common/shared_cache: take a cct
 2c27485 Doc: Add config option to turn off crush update
 78e84f3 CrushWrapper: pick a ruleset same as rule_id
 1835778 needs network or it will not start if enabled
 8c69054 osd: make coll_t::META static to each file
-493577b (origin/wip-9173) mds: fix crash killing sessions without conn
+493577b mds: fix crash killing sessions without conn
 dcf8c03 mds: logging in SessionMap
 01ce249 Revert "Merge pull request #2253 from adamcrume/wip-lttng"
-3ced97b (origin/wip-9176) mon: make dispatch(), _ms_dispatch() void
+3ced97b mon: make dispatch(), _ms_dispatch() void
 610f4be mon: always process the message in dispatch
 19df386 mon: fix occasional message leak after session reset
-b245d60 (origin/wip-fingerprint) mon: generate cluster_fingerprint if null
+b245d60 mon: generate cluster_fingerprint if null
 675b004 mon: add a cluster fingerprint
 552c4b4 rbd_replay: Add unit test for batch_unreachable_from
 7616092 rbd-replay: Add unit test for Ser
@@ -3964,10 +4164,10 @@ ae59946 lttng: Trace OpRequest
 3ac99e3 lttng: add pg and osd tracepoints
 7fa513e lttng: trace mutex::unlock
 115cfb3 tracing: bootstrap lttng-ust with mutex events
-e870fd0 (origin/wip-filejournal) os/FileJournal: For journal-aio-mode, don't use aio when closing journal.
+e870fd0 os/FileJournal: For journal-aio-mode, don't use aio when closing journal.
 a66a493 os/FileJournal: Only using aio then alloc the related resources.
 c8e2b89 os/FileJournal: Tune the judge logic for read_header.
-3ed8c68 (origin/wip-9153-jerasure-upgrade) erasure-code: do not preload the isa plugin
+3ed8c68 erasure-code: do not preload the isa plugin
 4c2ae69 add pom.xml so to deploy the libcephfs to maven repository. to build a jar, version=0.80-rc1-2008-gf71c889 mvn package -Dversioin=; and mvn deploy command will deploy the jar to maven central
 e45f5c2 TrackedOp:_dump_op_descriptor is renamed to _dump_op_descriptor_unlocked
 f680a24 TrackedOp: Removed redundant lock in OpTracker::_mark_event()
@@ -3980,8 +4180,8 @@ e665e62 Rebased and changed debug option
 615d2d9 CollectionIndex: Collection name is added to the access_lock name
 9b80270 erasure-code: preload the jerasure plugin
 fc41273 mon: fix signed/unsigned warnings
-1441ffe (origin/wip-8587) rgw: subuser creation fixes
-82409ee (origin/wip-reweight-tunables) mon: make reweight-by-* sanity limits configurable
+1441ffe rgw: subuser creation fixes
+82409ee mon: make reweight-by-* sanity limits configurable
 3304841 mon/OSDMonitor: respect CRUSH weights for reweight-by-pg
 1ecf44e mon/OSDMonitor: reweight-by-pg for pool(s)
 8b971e9 mon/OSDMonitor: adjust weights up, when possible
@@ -3997,8 +4197,8 @@ da37273 Add a new field 'expected_num_objects' to pg_pool_t which denotes the ex
 ab886c4 doc: Removed quick guide and wireshark from top-level IA.
 acee2e5 doc: Move wireshark documentation to dev.
 ce6e9a9 doc/release-notes: v0.84
-b016f84 (origin/wip-fs-docs) doc: add notes on using "ceph fs new"
-948178a (origin/wip-mon-empty-store) ceph_mon: check for existing mon store before opening db
+b016f84 doc: add notes on using "ceph fs new"
+948178a ceph_mon: check for existing mon store before opening db
 8336f81 (tag: v0.84) 0.84
 bda2301 qa/workunits/rbd/qemu-iotests: touch common.env
 1dc1fb8 qa/workunits/hadoop: move all hadoop tests into a hadoop/ dir
@@ -4019,7 +4219,7 @@ cc3b5ad mailmap: Abhishek Lekshmanan affiliation
 3279f3e qa/workunits/rest/test.py: do snap test on our data2/3 pool
 6d7a229 qa/workunits/rest/test.py: fix rd_kb -> rd_bytes
 0e07f7f osd: fix theoretical use-after-free of OSDMap
-904a5f1 (origin/wip-misplaced) vstart.sh: make filestore fd cache size smaller
+904a5f1 vstart.sh: make filestore fd cache size smaller
 932e478 mon: track stuck undersized
 190dc2f mon: track pgs that get stuck degraded
 5168907 osd: track last_fullsized in pg_stat_t
@@ -4033,14 +4233,14 @@ d734d7f mon: warn about misplaced objects, just like degraded
 a314999 osd: num_objects_misplaced
 14614e0 qa/workunits/rest/test.py: fix 'df' test to use total_used_bytes
 93c5b25 Revert "os/FileJournal: Update the journal header when closing journal"
-29e93f7 (origin/wip-9144) os/FileStore: rename start_sync() -> do_force_sync()
+29e93f7 os/FileStore: rename start_sync() -> do_force_sync()
 dd11042 os/FileStore: fix mount/remount force_sync race
 0395914 mailmap: Loic Dachary affiliation
-c83c90c (origin/wip-8621) rgw: update civetweb submodule
-0d6d1aa (origin/wip-init-ceph) init-ceph: don't use bashism
+c83c90c rgw: update civetweb submodule
+0d6d1aa init-ceph: don't use bashism
 7df67a5 Fix -Wno-format and -Werror=format-security options clash
-ae0b9f1 (origin/wip-osd-mon-feature) osd: fix feature requirement for mons
-0db3e51 (origin/wip-9119) ReplicatedPG::maybe_handle_cache: do not forward RWORDERED reads
+ae0b9f1 osd: fix feature requirement for mons
+0db3e51 ReplicatedPG::maybe_handle_cache: do not forward RWORDERED reads
 5040413 ReplicatedPG::cancel_copy: clear cop->obc
 2f0e295 unittest_osdmap: test EC rule and pool features
 0b27610 Remove Old Wireshark Dissectors
@@ -4048,9 +4248,9 @@ ae0b9f1 (origin/wip-osd-mon-feature) osd: fix feature requirement for mons
 1d95486 crush: add is_v[23]_rule(ruleid) methods
 b22d693 lttng: Add distro packaging
 6891f4e lttng: Fix "make distcheck"
-c54f1e4 (origin/wip-9053) mon/Paxos: share state and verify contiguity early in collect phase
+c54f1e4 mon/Paxos: share state and verify contiguity early in collect phase
 3e5ce5f mon/Paxos: verify all new peons are still contiguous at end of round
-5c2d232 (origin/wip-9025-chunk-remapping) erasure-code: remap chunks if not sequential
+5c2d232 erasure-code: remap chunks if not sequential
 164cfe8 erasure-code: parse function for the mapping parameter
 298da45 erasure-code: ErasureCodeInterface::get_chunk_mapping()
 240764f rgw: update civetweb submodule
@@ -4065,16 +4265,16 @@ b04d84d shared_cache: pass key (K) by const ref in interface methods
 95ac43f FileStore: remove the fdcache_lock
 a9f76d4 FDCache: implement a basic sharding of the FDCache
 4c2828e shared_cache: expose prior existence when inserting an element
-a1e79db (origin/wip-9039) rgw_admin: add --min-rewrite-stripe-size for object rewrite
+a1e79db rgw_admin: add --min-rewrite-stripe-size for object rewrite
 46d8c97 doc: Add documentation about Wireshark dissector.
 6a55543 rgw: fix compilation
 f6771f2 shared_cache: use a single lookup for lookup() too
-cec40da (origin/historic/old-wireshark-dissectors) qa/workunits/cephtool: verify setmaxosd doesn't let you clobber osds
+cec40da qa/workunits/cephtool: verify setmaxosd doesn't let you clobber osds
 a1c3afb OSDMonitor: Do not allow OSD removal using setmaxosd
 16a4360 rgw: pass set_mtime to copy_obj_data()
 800eff2 rgw: copy_obj_data() uses atomic processor
 5d3a7e5 rgw: copy object data if target bucket is in a different pool
-aec684b (origin/wip-9005) add calamari to the api/index section
+aec684b add calamari to the api/index section
 ac70490 doc: update kernel recommendations (avoid 3.15!)
 5374386 doc: Added user management link to quick start.
 5e8eae7 doc: Removed cephx intro. Moved details to user management, config, and architecture.
@@ -4083,13 +4283,13 @@ aac6aa2 doc: Removed auth intro and auth docs and added user management to index
 4c651b7 doc: Restructured auth configuration reference.
 3faf37a doc: Put architectural details of authentication in to architecture doc.
 118ae72 doc: Created a new User Management doc to replace authentication.
-0a49db8 (origin/wip-9062) msg/PipeConnection: make methods behave on 'anon' connection
+0a49db8 msg/PipeConnection: make methods behave on 'anon' connection
 8512904 lttng: Support --with-lttng=check
 bb046ed mon/Paxos: put source mon id in a temp variable
-d74d3f1 (origin/wip-8725) mds/MDSMap: fix incompat version for encoding
+d74d3f1 mds/MDSMap: fix incompat version for encoding
 369c639 mds/MDSMap: drop trailing else in favor of early return
-b2c1fa8 (origin/wip-9087) test/system/systest_runnable.cc: debugging on start and end
-d74ed9d (origin/wip-9102) ceph-disk: linter cleanup
+b2c1fa8 test/system/systest_runnable.cc: debugging on start and end
+d74ed9d ceph-disk: linter cleanup
 3efa30d lttng: Remove tracing from libcommon
 520b75b rbd-replay: Fix bug in rbd-replay-prep, Thread::issued_io with wrong IO
 89c3860 rbd-replay: Remove extent tracepoints and inline extents
@@ -4157,13 +4357,13 @@ d5b16e4 lttng: Trace OpRequest
 c5687b1 mon: fix potential divide by zero on can_mark_{down,out}
 f81d2b0 mon: fix divide by zero when pg_num adjusted and no osds
 8a647f7 mon: fix potential divide by zero on can_mark_{down,out}
-5ed9f4e (origin/wip-9029) mds: Revert from mds_mksnap_ setting to mds_snap_ settings
-6f7798e (origin/wip-ceph-disk) ceph-disk: warn about falling back to sgdisk (once)
+5ed9f4e mds: Revert from mds_mksnap_ setting to mds_snap_ settings
+6f7798e ceph-disk: warn about falling back to sgdisk (once)
 b1651af ceph-disk: only fall back to sgdisk for 'list' if blkid seems old
 b75e8a3 ceph-disk: add get_partition_base() helper
 c7a1ceb ceph-disk: display information about dmcrypted data and journal volumes
 5be56ff osd/ReplicatedPG: only do agent mode calculations for positive values
-7b3714c (origin/wip-9096) osd: fix some line wrapping
+7b3714c osd: fix some line wrapping
 df945a9 osd: fix require_same_peer_instance from fast_dispatch
 3d7e2b3 osd: inline require_osd_up_peer
 e86fdef rgw: move generic server usage after all options
@@ -4172,7 +4372,7 @@ f80ed26 ceph-disk: move fs mount probe into a helper
 6c77f5f ceph-disk: use partition type UUIDs, and blkid
 ea90d9f Revert "ReplicatedPG: do not pass cop into C_Copyfrom"
 300b5e8 ReplicatedPG: do not pass cop into C_Copyfrom
-24aeca9 (origin/wip-9064) ReplicatedPG::maybe_handle_cache: do not skip promote for write_ordered
+24aeca9 ReplicatedPG::maybe_handle_cache: do not skip promote for write_ordered
 984f614 erasure-code: isa plugin must link with ErasureCode.cc
 1088d6c ceph-disk: fix log syntax error
 41e4461 doc/changelog: v0.67.10 notes
@@ -4184,18 +4384,18 @@ ea90d9f Revert "ReplicatedPG: do not pass cop into C_Copyfrom"
 78dc4df doc: Replace [default] with [global].
 e5324ed doc: Added yum-priorities procedure to manual install.
 a01252a doc: Added priority = 2 to packages.
-3dfa72d (origin/wip-8912) librbd: fix error path cleanup for opening an image
+3dfa72d librbd: fix error path cleanup for opening an image
 2edf01f Revert "Fix for bug #6700"
 d6e6ba1 ceph-disk: fix verify_no_in_use check
 0a2b4c2 rgw: Don't send error body when it's a HEAD request
-b0f5ba9 (origin/wip-rados-df-json) rados: remove {read,write}_kb fields from rados df json output
+b0f5ba9 rados: remove {read,write}_kb fields from rados df json output
 5663f91 rados: fix {read,write}_bytes value
-8180713 (origin/wip-9057) msg/Pipe: do not wait for self in Pipe::stop_and_wait()
+8180713 msg/Pipe: do not wait for self in Pipe::stop_and_wait()
 fd421b2 mon/MonitorDBStore: add get_{keys,bytes}() accounting to Transaction
-d7fb7bf (origin/wip-9055) ceph_test_rados_api_tier: fix cache cleanup (ec too)
+d7fb7bf ceph_test_rados_api_tier: fix cache cleanup (ec too)
 ebbe8aa ceph_test_rados_api: fix cleanup of cache pool
 1d199fb librados/TestCase: inheret cleanup_default_namespace
-5808d6a (origin/wip-9044-use-ruleset) osd: improve ruleno/ruleset consistency
+5808d6a osd: improve ruleno/ruleset consistency
 3f5d86a erasure-code: ErasureCodeIsa::create_ruleset must return a ruleset
 0029a35 erasure-code: ErasureCodeJerasure::create_ruleset must return a ruleset
 04a484a erasure-code: OSDMonitor::crush_ruleset_create_erasure needs ruleset
@@ -4206,7 +4406,7 @@ ebbe8aa ceph_test_rados_api: fix cleanup of cache pool
 4a0c941 OSD: introduce require_self_aliveness(OpRequestRef&,epoch_t) function
 48c9b38 OSD: use OpRequestRef& for a few require_* functions
 f86bf1d OSD: introduce require_up_osd_peer() function for gating replica ops
-ee790e3 (origin/wip-problem-osds) osd/osd_types: s/int/int32_t/ in pg_stat_t
+ee790e3 osd/osd_types: s/int/int32_t/ in pg_stat_t
 d862731 osd/PG: bound number of blocked_by OSDs we report per PG
 bee79ec qa/workunits/cephtool: add trivial 'ceph osd blocked-by' test
 6380f47 qa/workunits/cephtool: add simple 'ceph osd perf' test
@@ -4217,9 +4417,9 @@ d55e973 mon/PGMap: track histogram of pg blocked_by
 ceaca9f osd/PG: set blocked_by during peering GetLog
 6e96c2d osd/PG: set blocked_by during peering GetInfo
 e4b0071 RadosClient: Enable pool existence check
-c34f935 (origin/wip-fsx-flatten) test_librbd_fsx: also flatten as part of randomize_parent_overlap
+c34f935 test_librbd_fsx: also flatten as part of randomize_parent_overlap
 214630b mds: Also check min/max uid on snap removal
-a52a855 (origin/wip-pg-epoch) osd: fix pg epoch floor tracking
+a52a855 osd: fix pg epoch floor tracking
 2120f4b OSD: move waiting_for_pg into the session structures
 71cb4d3 doc: Removed Debian reference from Upstart.
 8357cae doc: Incorporated user feedback to clarify upgrade doc.
@@ -4229,15 +4429,15 @@ b6bf33c doc: Added configuration discussion at end of gateway install with links
 11d6e5a OSD: rename session_waiting_for_map_lock to session_waiting_lock
 20fd714 OSD: wake_pg_waiters outside of the pgmap write_lock, pg_lock
 6e7b86a OSD: fix wake_pg_waiters revert error in _open_lock_pg
-4260767 (origin/wip-8625) osd_types: s/stashed/rollback_info_completed and set on create
+4260767 osd_types: s/stashed/rollback_info_completed and set on create
 d0ccb1c make ceph-disk use the new init flag for cluster
 23b4915 allow passing a --cluster flag to the init script
 6bd2b0f mds: Make min/max UID configurable for who is allowed to create a snapshot
 a5ecf15 powerdns: Update README with better markdown
-bf9726a (origin/xiaoxichen-fix_crush_ruleset) mon/OSDMonitor : Use user provided ruleset for replicated pool
+bf9726a mon/OSDMonitor : Use user provided ruleset for replicated pool
 f1aad8b RadosClient: Fixing potential lock leaks.
-26750fc (origin/wip-filestore-bigxattr) os/FileStore: force any new xattr into omap on E2BIG
-cc3112e (origin/wip-rados-xattr) rados: use STD{IN,OUT}_FILENO for magic values
+26750fc os/FileStore: force any new xattr into omap on E2BIG
+cc3112e rados: use STD{IN,OUT}_FILENO for magic values
 e3819b6 qa/workunits/rados/test_rados_tool: add a few xattr tests
 645c28a rados: optionally read setxattr value from stdin
 59a715a rados: don't add \n to getxattr
@@ -4258,25 +4458,25 @@ ee2dbdb mon/PGMonitor: remove {rd,wr}_kb from pool stat dumps
 adb2791 mon/PGMonitor: add _bytes fields for all usage dumps
 895318c README.md: word wrap
 500b95e README: symlink from README.md
-0114b33 (origin/wip-8496-erasure-code-base-class) erasure-code: rework ErasureCode*::parse methods
+0114b33 erasure-code: rework ErasureCode*::parse methods
 77690f6 erasure-code: move to ErasureCode::decode_concat
 54394fa erasure-code: move to ErasureCode::to_{int,bool}
 b4b7c51 erasure-code: move to ErasureCode::minimum_to_decode*
 4ff981f erasure-code: move to ErasureCode::{encode,decode}{,chunk}
 1ebce98 erasure-code: ErasureCode base class
-859944d (origin/wip-test-ceph-disk) test/osd/osd-test-helpers: mkdir -p for ceph-disk
+859944d test/osd/osd-test-helpers: mkdir -p for ceph-disk
 4b45e25 Add handles for the ceph-mon starting with upstart
 c2f58e6 test/ceph-disk.sh: mkdir -p
 a923e2c Renamed README to README.md to render in markdown
 52cf693 Developer quick start guide
 c09036a enable info_log_level config option for rocksdb
-66de51d (origin/wip-8875) be a bit more explicit about 'ceph-deploy new' in quickstart
+66de51d be a bit more explicit about 'ceph-deploy new' in quickstart
 b4c80e3 Do not make directories by mistake.
 f773b24 powerdns: Define a application variable when not invoked from Shell
 1682e62 doc: typo s/loose/lose
 466aba4 osd/osd_types: add blocked_by to pg_stat_t
 b9b022e add annotation for rocksdb config option
-8dcfbd8 (origin/wip-8998) osd: simplify dout_prefix macros
+8dcfbd8 osd: simplify dout_prefix macros
 80829d7 osd: reorder OSDService methods under proper dout_prefix macro
 047c18d doc/release-notes: make note about init-radosgw change
 354c411 doc: Added 'x' to monitor cap.
@@ -4291,7 +4491,7 @@ e11c3fc erasure-code: rework benchmark suite
 90592e9 erasure-code: properly indent ErasureCodePluginSelectJerasure.cc
 be3e1e4 erasure-code: control jerasure plugin variant selection
 5fb4354 erasure-code: reduce jerasure verbosity
-c7daaaf (origin/wip-8475) erasure-code: implement alignment on chunk sizes
+c7daaaf erasure-code: implement alignment on chunk sizes
 3987ac2 erasure-code: cauchy techniques allow w 8,16,32
 cb54605 mailmap: sort entries
 accf8c2 mailmap: Tommi Virtanen is not with Red Hat
@@ -4304,11 +4504,11 @@ b1ba72f mailmap: George Ryall affiliation
 6652494 mailmap: Accela Zhao affiliation
 794f70a mailmap: Kevin Cox affiliation
 d8e6415 mailmap: Ma Jianpeng affiliation
-3230060 (origin/wip-ceph-conf) ceph-conf: flush log on exit
+3230060 ceph-conf: flush log on exit
 076f33a ECBackend: Don't directly use get_recovery_chunk_size() in RecoveryOp::WRITING state.
-98997f3 (origin/wip-8891) msg/SimpleMessenger: drop msgr lock when joining a Pipe
+98997f3 msg/SimpleMessenger: drop msgr lock when joining a Pipe
 e36babc os/MemStore: fix lock leak
-e93818d (origin/wip-rgw-need-to-wait) rgw: need to pass need_to_wait for throttle_data()
+e93818d rgw: need to pass need_to_wait for throttle_data()
 3de7b7c doc/release-notes: fix syntax error
 c95e91e os/KeyValueStore: clean up operator<< for KVSuperBlock
 1417ede ceph_test_rados_api_tier: test promote-on-second-read behavior
@@ -4325,21 +4525,21 @@ da5edb8 add rocksdb bz2 dep
 3329352 rocksdb: require less shiny autoconf
 bcebf9c do_autogen.sh: build with static librocksdb
 eb1cd78 rocksdb: update submodule makefile
-2e549b4 (origin/wip-ec-isa) unittest_erasure_code_[plugin_]isa: conditionally compile
-04037ef (origin/wip-osd-leaks) osd: do not leak Session* ref in _send_boot()
+2e549b4 unittest_erasure_code_[plugin_]isa: conditionally compile
+04037ef osd: do not leak Session* ref in _send_boot()
 d00f23b erasure-code/isa: fix signed/unsigned comparison
 8a193ab erasure-code/isa: don't use typename outside of template
 92d0bbe ECBackend: Using ROUND_UP_TO to refactor function get_recovery_chunk_size()
 e4ed2cb ReplicatedPG: For async-read, set the real result after completing read.
 6e52efa doc/release-notes: tweak quoting
-8091173 (origin/wip-round) use llrintl when converting double to micro
+8091173 use llrintl when converting double to micro
 d8b291f configure: check for 'better' yasm that can build ISA-L
 1520b47 erasure-code/isa/Makefile: add missing \, and missing headers
 e1f32d9 yasm-wrapper: fix -f ...
 1670fd6 yasm-wrapper: turn -I foo into -i foo
 6d95797 yasm-wrapper: echo original args
 b7d0017 EC: add plugin for Intel ISA-L library
-383536a (origin/wip-8982) mon/OSDMonitor: warn when cache pools do not have hit_sets configured
+383536a mon/OSDMonitor: warn when cache pools do not have hit_sets configured
 caf554b osd/ReplicatedPG: improve agent_choose_mode args
 ce4e559 vstart.sh: limit open files
 ea4996d osd/ReplicatedPG: evict blindly if there is no hit_set
@@ -4347,25 +4547,25 @@ ea4996d osd/ReplicatedPG: evict blindly if there is no hit_set
 51c1f2a FileStore: Add omap_backend to "<<" operator
 7faed14 Add superblock to KeyValueStore
 b879e74 KeyValueStore: use generic KeyValueDB::create()
-9df9d28 (origin/wip-8969) mon/OSDMonitor: fix i386 floating point rounding error
-aa9ae1f (origin/wip-8944) qa/workunits/cephtool/test_daemon.sh: verify ceph -c works with daemon
+9df9d28 mon/OSDMonitor: fix i386 floating point rounding error
+aa9ae1f qa/workunits/cephtool/test_daemon.sh: verify ceph -c works with daemon
 22d20f3 qa/workunits/cephtool/test_daemon.sh: typo
 97a8d5a qa/workunits/cephtool/test_daemon.sh: allow local ceph command
 9686312 atomic: fix read() on i386, clean up types
 6d89a99 ceph.in: Pass global args to ceph-conf for proper lookup
-0190df5 (origin/wip-8714) osd: prevent old clients from using tiered pools
-605064d (origin/wip-cli-integration) test/cli-integration/rbd: fix trailing space
-d700076 (origin/wip-double-pc) mon: s/%%/%/
-0f8929a (origin/wip-8972) cls_rgw: fix object name of objects removed on object creation
-061c8e9 (origin/wip-rbd-flush) librbd: enable rbd cache by default; writethrough until flush
-4e1405e (origin/wip-erasure-code-profile-default) erasure-code: create default profile if necessary
+0190df5 osd: prevent old clients from using tiered pools
+605064d test/cli-integration/rbd: fix trailing space
+d700076 mon: s/%%/%/
+0f8929a cls_rgw: fix object name of objects removed on object creation
+061c8e9 librbd: enable rbd cache by default; writethrough until flush
+4e1405e erasure-code: create default profile if necessary
 5f65b4d os/FileJournal: When dump journal, using correctly seq avoid misjudging joural corrupt.
 7b169a0 rocksdb backend optimization
 708b5b8 add --with-librocksdb-static configure options
 101954c get a stable rocksdb (3.0)
 6eea02c add rocksdb submodule
 cbd0043 add rocksdb support
-5d5902a (origin/wip-filestore-omap) os/KeyValueStore: rename osd_keyvaluedb -> keyvaluestore_backend
+5d5902a os/KeyValueStore: rename osd_keyvaluedb -> keyvaluestore_backend
 1a5dea7 os/FileStore: use generic KeyValueDB::create(); store omap_backend in superblock
 a2a3619 mon/MonitorDBStore: use generic KeyValueDB::create()
 86a0b9d os/KeyValueDB: make compaction interface generic
@@ -4373,7 +4573,7 @@ a2a3619 mon/MonitorDBStore: use generic KeyValueDB::create()
 e141872 config: allow unsafe setting of config values
 2f9fe02 mailmap: Red Hat names normalization
 3cfda57 doc/release-notes: v0.83
-18ea2a8 (origin/wip-8586) rgw: fix crash in swift CORS preflight request
+18ea2a8 rgw: fix crash in swift CORS preflight request
 6bb3aea mds: remove some rogue "using namespace std;"
 c283ad4 mds: handle replaying old format journals
 07665ec mds: introduce explicit DaemonState instead of int
@@ -4386,42 +4586,42 @@ e587088 mds: remove unused purge_prealloc_ino
 06c4736 Remove reference from mkcephfs.
 4045b2e doc/release-notes: typo
 df1bad8 doc/release-notes: v0.80.5 release notes
-e99acf9 (origin/wip-8880) OSD: add require_same_peer_inst(OpRequestRef&,OSDMap&) helper
+e99acf9 OSD: add require_same_peer_inst(OpRequestRef&,OSDMap&) helper
 e179e92 OSD: introduce require_self_aliveness(OpRequestRef&,epoch_t) function
 f36cffc unittest_crush_wrapper: fix build
 eb2f1ea OSD: use OpRequestRef& for a few require_* functions
 1526546 Remove reference from mkcephfs.
 9b03752 Fix some style and checking issue
-5773a37 (origin/wip-upstart-nfile) upstart/ceph-osd.conf: bump nofile limit up by 10x
-d3e5961 (origin/wip-undump) tools/cephfs: fuller header in dump/undump
-e183a4d (origin/wip-fsx-overlap) test_librbd_fsx: clone/flatten probabilities
+5773a37 upstart/ceph-osd.conf: bump nofile limit up by 10x
+d3e5961 tools/cephfs: fuller header in dump/undump
+e183a4d test_librbd_fsx: clone/flatten probabilities
 bb095ff test_librbd_fsx: randomize_parent_overlap
 f6d1a92 test_librbd_fsx: introduce rbd_image_has_parent()
 eb697dd librbd: make rbd_get_parent_info() accept NULL out params
 04d0526 PGMonitor: fix bug in caculating pool avail space
-b08470f (origin/wip-libs) configure.ac: link libboost_thread only with json-spirit
+b08470f configure.ac: link libboost_thread only with json-spirit
 9d23cc6 configure: don't link blkid, udev to everything
-de9cfca (origin/wip-flush-set) Only write bufferhead when it's dirty
+de9cfca Only write bufferhead when it's dirty
 1c26266 ObjectCacher: fix bh_{add,remove} dirty_or_tx_bh accounting
 727ac1d ObjectCacher: fix dirty_or_tx_bh logic in bh_set_state()
 5283cfe Wait tx state buffer in flush_set
 d858fdc Add rbdcache max dirty object option
 b8a5668 Reduce ObjectCacher flush overhead
 288908b Revert "Merge pull request #2129 from ceph/wip-librbd-oc"
-0553890 (origin/wip-8937) rgw: call processor->handle_data() again if needed
+0553890 rgw: call processor->handle_data() again if needed
 d3de69f mds: fix journal reformat failure in standbyreplay
-8fb761b (origin/wip-8931) osd/ReplicatedPG: requeue cache full waiters if no longer writeback
+8fb761b osd/ReplicatedPG: requeue cache full waiters if no longer writeback
 36aaab9 osd/ReplicatedPG: fix cache full -> not full requeueing when !active
-ba9d52e (origin/wip-librbd-snap-meta) librbd: store and retrieve snapshot metadata based on id
-c5f766b (origin/wip-8932) ceph_test_rados_api_tier: do fewer writes in HitSetWrite
+ba9d52e librbd: store and retrieve snapshot metadata based on id
+c5f766b ceph_test_rados_api_tier: do fewer writes in HitSetWrite
 f360920 common/RefCountedObject: fix use-after-free in debug print
-14cad5e (origin/wip-rgw-align) rgw: object write should not exceed part size
+14cad5e rgw: object write should not exceed part size
 fc83e19 rgw: align object chunk size with pool alignment
 1f9c732 doc: Add additional hyperlink to Cache Tiering defaults.
 4047660 doc: Update doc from user feedback.
 d1dfb9b osd: fix bad Message* defer in C_SendMap and send_map_on_destruct
 5740266 test: catch a straggler still using 'data' pool
-4eb18dd (origin/wip-journal-header) os/FileJournal: Update the journal header when closing journal
+4eb18dd os/FileJournal: Update the journal header when closing journal
 63c1711 msg/SimpleMessenger: drop local_conneciton priv link on shutdwon
 2545e80 librbd: fix crash using clone of flattened image
 4fe0792 doc: Updated mon doc per feedback. Fixed hyperlinks.
@@ -4456,12 +4656,12 @@ afb4c37 msg: factor policy handling out of SimpleMessenger
 6597c20 mon: clean up ref counting for forwarded messages' sessions
 29e04c8 msgr: move PipeConnection out of Connection.h; make anon
 ea14d7b Refactor Messenger class family.
-63abf11 (origin/wip-8882) osd/ReplicatedPG: observe INCOMPLETE_CLONES in is_present_clone()
+63abf11 osd/ReplicatedPG: observe INCOMPLETE_CLONES in is_present_clone()
 4136471 osd/ReplicatedPG: observed INCOMPLETE_CLONES when doing clone subsets
 956f287 osd/ReplicatedPG: do not complain about missing clones when INCOMPLETE_CLONES is set
 54bf055 osd/osd_types: add pg_pool_t FLAG_COMPLETE_CLONES
 67d13d7 mon/OSDMonitor: improve no-op cache_mode set check
-d4faf74 (origin/wip-8701) ceph_test_objectstore: clean up on finish of MoveRename
+d4faf74 ceph_test_objectstore: clean up on finish of MoveRename
 3ec9a42 os/LFNIndex: use FDCloser for fsync_dir
 6fb3260 os/LFNIndex: only consider alt xattr if nlink > 1
 ec36f0a os/LFNIndex: remove alt xattr after unlink
@@ -4476,36 +4676,36 @@ c57811f Fix/add missing dependencies:
 dae6ecb ceph.spec.in: split out ceph-common as in Debian
 a05a0da common/random_cache: fix typo
 5efdc62 common/RandomCache: Fix inconsistence between contents and count
-356af4b (origin/wip-8889) osd/ReplicatedPG: debug obc locks
+356af4b osd/ReplicatedPG: debug obc locks
 6fe2782 osd/ReplicatedPG: greedily take write_lock for copyfrom finish, snapdir
 0962650 osd: allow greedy get_write() for ObjectContext locks
 ccd0eec OSD: introduce require_up_osd_peer() function for gating replica ops
-253ca2b (origin/wip-8897) os: make name/attr max methods unsigned
+253ca2b os: make name/attr max methods unsigned
 daac750 os/KeyValueStore: make get_max_object_name_length() sane
 e311a08 uncomment cleanup command
 c264774 init: add systemd service files
 d87e5b9 powerdns: RADOS Gateway backend for bucket directioning
-b551ae2 (origin/wip-8851) mon: AuthMonitor: always encode full regardless of keyserver having keys
+b551ae2 mon: AuthMonitor: always encode full regardless of keyserver having keys
 1518fa2 osd: init local_connection for fast_dispatch in _send_boot()
-34b0efd (origin/wip-librbd-oc) ObjectCacher: fix bh_{add,remove} dirty_or_tx_bh accounting
+34b0efd ObjectCacher: fix bh_{add,remove} dirty_or_tx_bh accounting
 8a05f1b ObjectCacher: fix dirty_or_tx_bh logic in bh_set_state()
 d358741 Wait tx state buffer in flush_set
 3c7229a Add rbdcache max dirty object option
 5cb4b00 Reduce ObjectCacher flush overhead
 9061988 osd: init local_connection for fast_dispatch in _send_boot()
 b6f3aff Fix mismatched tags (struct vs. class) inconsistency
-2aa3edc (origin/wip-8174) os/FileStore: fix max object name limit
+2aa3edc os/FileStore: fix max object name limit
 f4bffec ceph_test_objectstore: test memstore
 6f312b0 os/MemStore: copy attrs on clone
 8dd6b8f os/MemStore: fix wrlock ordering checks
 a2594a5 osd/MemStore: handle collection_move_rename within the same collection
-3467110 (origin/wip-dencoder) ceph-dencoder: don't link librgw.la (and rados, etc.)
+3467110 ceph-dencoder: don't link librgw.la (and rados, etc.)
 b1a641f rgw: move a bunch of stuff into rgw_dencoder
 1c17077 libosd_types, libos_types, libmon_types
 58cc894 Revert "ceph.spec: move ceph-dencoder to ceph from ceph-common"
 f181f78 Revert "debian: move ceph-dencoder to ceph from ceph-common"
 ad4a4e1 unittest_osdmap: revert a few broken changes
-d7209c1 (origin/wip-8858) rgw: dump prefix unconditionally
+d7209c1 rgw: dump prefix unconditionally
 dc417e4 rgw: list extra objects to set truncation flag correctly
 82d2d61 rgw: account common prefixes for MaxKeys in bucket listing
 924686f rgw: add NextMarker param for bucket listing
@@ -4516,58 +4716,58 @@ e6cf618 rgw: improve delmited listing of bucket
 bd3367e osd: add config for osd_max_attr_name_len = 100
 7c0b2a0 os: add ObjectStore::get_max_attr_name_length()
 7e0aca1 osd: add config for osd_max_object_name_len = 2048 (was hard-coded at 4096)
-e60dd0f (origin/wip-8811) osdc: refactor JOURNAL_FORMAT_* constants to enum
+e60dd0f osdc: refactor JOURNAL_FORMAT_* constants to enum
 8eef89e doc: fix example s/inspect/journal inspect/
 5438500 mds: fix journal reformat failure in standbyreplay
 ed3bc4c osdc/Journaler: validate header on load and save
 18ca6b6 test: add a missing semicolon
-0cd0268 (origin/wip-vstart-existing-mds) qa: generalise cephtool for vstart+MDS
+0cd0268 qa: generalise cephtool for vstart+MDS
 bb5a574 mon: carry last_failure_osd_epoch across `fs new`
 b936a27 mon/MDSMonitor: fix msg on idempotent `fs rm`
 06a8f7b configure: do not link leveldb with everything
 0193d3a AUTHORS
-14a9ca6 (origin/wip-logrotate) logrotate.conf: fix osd log rotation under upstart
+14a9ca6 logrotate.conf: fix osd log rotation under upstart
 7b342ef doc: Add Note about European mirror in Quick Start
-0f11aae (origin/wip-8849) remove suse service restarts
+0f11aae remove suse service restarts
 e3a5756 remove ceph restarts on upgrades for RPMs
 4d6899c qa/workunits/cephtool/test.sh: fix erasure_code_profile get test
 ce9f12d qa/workunits/cephtool/test.sh: test osd pool get erasure_code_profile
 e8ebcb7 mon: OSDMonitor: add "osd pool get <pool> erasure_code_profile" command
 5ccfd37 vstart.sh: default to 3 osds
-5f6b11a (origin/wip-8857) mon/MDSMonitor: make legacy 'newfs' command idempotent
+5f6b11a mon/MDSMonitor: make legacy 'newfs' command idempotent
 b89ab5f rgw: don't try to wait for pending if list is empty
-19e68ac (origin/wip-rbd-defaults) rbd: respect rbd_default_* parameters
+19e68ac rbd: respect rbd_default_* parameters
 e891a93 rbd: remove accidental repeated option
 0f87c55 librbd: use order-agnostic default stripe parameters
-f9f2417 (origin/wip-8846) rgw: don't try to wait for pending if list is empty
-420f0a4 (origin/wip-8813) set the default log level to WARNING
+f9f2417 rgw: don't try to wait for pending if list is empty
+420f0a4 set the default log level to WARNING
 3e0d980 init-ceph: wrap daemon startup with systemd-run when running under systemd
 99dfaf7 doc/release-notes: v0.80.4
 80ea606 Fix size of network protocol intergers.
 2f43cef doc: Extended discussion for building docs on CentOS / RHEL.
 124f97f doc: Added a script to build docs on CentOS / RHEL.
-6c48d07 (origin/wip-set_layout) doc: add cephfs layout documentation
+6c48d07 doc: add cephfs layout documentation
 af740ec cephfs: pool safety & print deprecation warning
 d915ceb update hadoop-wordcount test to be able to run on hadoop 2.x. The hadoop and mapreduce library are no longer hard coded so they can be specified to point to the right path. The relative paths hdfs are changed to absolute paths. A sample command to run the test on hadoop 2.x is TESTDIR=/home/test HADOOP_HOME=/usr/lib/hadoop HADOOP_MR_HOME=/usr/lib/hadoop-mapreduce sh workunits/hadoop-wordcount/test.sh starting hadoop-wordcount test
 cceab2b qa: retire kclient-specific layout test
 95f5a44 ceph.spec: move ceph-dencoder to ceph from ceph-common
 b37e3bd debian: move ceph-dencoder to ceph from ceph-common
-01cd3cd (origin/wip-8830) XfsFileStoreBackend: default to disabling extsize on xfs
+01cd3cd XfsFileStoreBackend: default to disabling extsize on xfs
 fc597e5 doc/release-notes: some additional warnings and recommendations against adjusting tunables
-e17e9d8 (origin/wip-8823) ceph_test_rados_api_tier: fix [EC] HitSet{Read,Write,Trim} tests
-a4ed336 (origin/wip-mds-session-asok-squash) mds: add `session ls` and `session evict` to asok
+e17e9d8 ceph_test_rados_api_tier: fix [EC] HitSet{Read,Write,Trim} tests
+a4ed336 mds: add `session ls` and `session evict` to asok
 0e0be07 client: include ID in mds_sessions asok
 52a2bc5 mon: remove unused attribute notified_global_id
 b120a48 common/admin_socket: remove dead code
 bb47ff3 osd: fix confusing debug output for op_applied
 586d3ee doc: Fixes a broken link on the rados deploy osd page.
 447f849 doc/release-notes: v0.80.3
-29f20b7 (origin/wip-test-post-file) qa/workunits/post-file.sh
+29f20b7 qa/workunits/post-file.sh
 c9e1e82 rbdmap: per-device post-map/pre-unmap hooks
-c93da05 (origin/wip-8815) osd/osd_types: be pedantic about encoding last_force_op_resend without feature bit
+c93da05 osd/osd_types: be pedantic about encoding last_force_op_resend without feature bit
 712d5d1 osd/osd_types: remove useless encode_compat local var for pg_pool_t::encode
-50e93c2 (origin/wip-8696) qa/workunits: cephtool: adjust pool name where missing as it has changed
-cf94cf3 (origin/wip-dump-new-crush) crush: include CRUSH_V3, v2/v3 rules checks in dump_tunables()
+50e93c2 qa/workunits: cephtool: adjust pool name where missing as it has changed
+cf94cf3 crush: include CRUSH_V3, v2/v3 rules checks in dump_tunables()
 daadff4 doc: minor format fix for radosgw admin docs
 b844ec9 rbdmap: per-device mount (Closes: #8538)
 02683ac rbd.cc: Check io-size avoid floating point exception.
@@ -4580,13 +4780,13 @@ df59449 qa/workunits: cephtool: split get/set on tier pools from get/set tests
 64bdf6c osd: pg_pool_t: clear tunables on clear_tier()
 f131dfb mon: OSDMonitor: limit tier-specific pool set/get on non-tier pools
 026b127 doc/changelog/v0.80.2: include tag
-59c00e5 (origin/wip-kinetic-os) os: add prototype KineticStore
+59c00e5 os: add prototype KineticStore
 74f5e5e PG::op_must_wait_for_map: pass the epoch rather than the map
 98f92d8 doc: Added CentOS/RHEL install for git.
 115c078 rgw: modelines
 c4afaf9 rgw: fix RGWObjManifestRule decoder
 0839e2a doc: Added keyring location note to resolve pull abandoned pull request #1946.
-4692257 (origin/wip-nuke-dlist) nuke dlist
+4692257 nuke dlist
 a3e5c6d Add random_cache.hpp to Makefile.am
 f51f162 test: fix make_pair() for c++11
 79e3761 Remove some not-resolving make_pair() invocations.
@@ -4608,37 +4808,37 @@ bb881e5 doc: fix a few typos in architecture page
 fcbdd2f doc: Fix a typo in the rbd man page
 ef117fe Use submit_transaction_sync to make change durable
 6ff5fed Add random cache and replace SharedLRU in KeyValueStore
-c0dc245 (origin/wip-7891) osd: cancel agent_timer events on shutdown
+c0dc245 osd: cancel agent_timer events on shutdown
 ef40737 osd: s/applying repop/canceling repop/
 cafceae osd: clear PGBackend state on shutdown
 e299357 osd: separate cleanup from PGBackend::on_change()
 b16b64e Support for READFORWARD in the caching tier
-b927c0d (origin/wip-8523) qa/workunits: cephtool: test for 'osd pool {get,set}-quota'
+b927c0d qa/workunits: cephtool: test for 'osd pool {get,set}-quota'
 714a9bb mon: OSDMonitor: add 'osd pool get-quota' command
-c92feeb (origin/wip-8727) messages: MForward: fix compat version
+c92feeb messages: MForward: fix compat version
 0bf4f65 osd: clear sessions_waiting_on_map on shutdown
 aefbac5 osd: fix session leak when waiting on map
 17ad083 osd: clear Sessions for loopback Connections on shutdown
 231fe1b Revert "OSD: move waiting_for_pg into Session"
 aa1be2e OSD: fix debug logging output
-b700963 (origin/wip-8306-rebase) ceph.spec.in: add bash completion file for radosgw-admin
+b700963 ceph.spec.in: add bash completion file for radosgw-admin
 235e4c7 ceph.spec.in: rhel7-related changes:
 7cf8132 Fix/add missing dependencies:
 ec8af52 ceph.spec.in: whitespace fixes
 e131b9d ceph.spec.in: split out ceph-common as in Debian
 08fa16b common: seq_read_bench argument order changed The argument order for seq_read_bench in src/common/obj_bencher.h has been changed to match the argument order in obj_bencher.cc
-cca5841 (origin/wip-8751) test: generalise default_pools in test_rados
-a7a631d (origin/wip-8754) tests: don't depend on 'data' pool in rbd test
+cca5841 test: generalise default_pools in test_rados
+a7a631d tests: don't depend on 'data' pool in rbd test
 cf5f535 doc/release-notes: clarify CRUSH notes about tunables
 d84d720 decrement WBThrottle perfcounters in clear_object
-16df4c3 (origin/wip-8745) mds: use client-provided time stamp for user-visible file metadata
+16df4c3 mds: use client-provided time stamp for user-visible file metadata
 73b2928 Remove exclusive lock on GenericObjectMap
 d104979 Add Header cache to KeyValueStore
 c0806bb doc: mention kernel support for rbd format 2
 c7937ff doc: Fix a typo regarding requiretty for RHEL based platforms
-54af810 (origin/wip-8738-next) mon: check changes to the whole CRUSH map and to tunables against cluster features
+54af810 mon: check changes to the whole CRUSH map and to tunables against cluster features
 2280c0e OSDMonitor: fix quorum_features comparison in check_cluster_features
-c0ba58c (origin/wip-refs) msg: debug refs on incoming Messages
+c0ba58c msg: debug refs on incoming Messages
 c0dcf3b common/RefCountedObject: make nref, cct private
 b0da92b msg/Message: use RefCountedObject ctor to set initial ref count
 e621856 msg/Pipe: debug Pipe refs
@@ -4652,34 +4852,34 @@ f7086d3 Automagically setup submodules on first run.
 0c7c722 ceph_argparse_flag has no regular 3rd parameter.
 909850e [werror] Fix c++11-compat-reserved-user-defined-literal
 fde99e6 OSD: adjust share_map() to handle the case that the osd is down
-ddc04c8 (origin/wip-8670) mon: OSDMonitor: 'osd pool' - if we can set it, we must be able to get it
+ddc04c8 mon: OSDMonitor: 'osd pool' - if we can set it, we must be able to get it
 0392ddb ReplicatedPG: Removed the redundant register_snapset_context call
 2f089d8 OpTracker: The optracker enabled/disabled check is added
 63be0f2 OpTracker: use mark_event rather than _mark_event
-bb3e1c9 (origin/wip-8728) qa/workunits/rest/test.py: make osd create test idempotent
-7e1deb6 (origin/wip-async-log) mds: defer encoding/submitting log events to separate thread
+bb3e1c9 qa/workunits/rest/test.py: make osd create test idempotent
+7e1deb6 mds: defer encoding/submitting log events to separate thread
 44199d6 mds: use mutex to protect log segment list
 6d8ccdd mds: add thread to encode/submit log events
-70c0723 (origin/wip-osd-dumpres) osd: add dump_reservations asok command
+70c0723 osd: add dump_reservations asok command
 6483710 common/AsyncReserver: add dump()
-9ce5ff9 (origin/wip-8692) mon: clear osd request queue latency info on down or up
+9ce5ff9 mon: clear osd request queue latency info on down or up
 f8c88a4 OSD: wake_pg_waiters after dropping pg lock
-e2b151d (origin/wip-fs-cmds-oops) mds: Update default FS name
+e2b151d mds: Update default FS name
 f62f7f5 qa: update cephtool EC pools test to respect IDs
 710561c mon/MDSMonitor: EC check in 'fs new' like newfs
 44eb259 qa: add a check for crash_replay_interval autoset
 c0ffa01 mon: Set crash_replay_interval automatically
 82d3fcc qa: Update data pool ID for vxattrs test
 917ef15 test: use 0U with gtest to avoid spurious warnings
-522174b (origin/wip-vstart-wrapped) qa: support running under non privileged user
+522174b qa: support running under non privileged user
 8697d6a OSD: await_reserved_maps() prior to calling mark_down
-6f97206 (origin/wip-osd-map-cache-size) osd: allow osd map cache size to be adjusted at runtime
+6f97206 osd: allow osd map cache size to be adjusted at runtime
 bcc09f9 qa/workunits/cephtool/test.sh: sudo ceph daemon
-959f2b2 (origin/wip-fix-pglog-unittest) PGLog: fix clear() to avoid the IndexLog::zero() asserts
-e0d3b78 (origin/wip-8699) rgw: fix uninit ofs in RGWObjManifect::obj_iterator
+959f2b2 PGLog: fix clear() to avoid the IndexLog::zero() asserts
+e0d3b78 rgw: fix uninit ofs in RGWObjManifect::obj_iterator
 73b929b osd: improve tests for configuration updates
-2dec8a8 (origin/wip-8542) qa/workunits/suites/fsx.sh: don't use zero range
-83f1906 (origin/wip-fs-cmds) mon/MDSMonitor: log warning while MDS up but no FS
+2dec8a8 qa/workunits/suites/fsx.sh: don't use zero range
+83f1906 mon/MDSMonitor: log warning while MDS up but no FS
 b7f09c2 mon/MDSMonitor: fix incorrect comment
 fc0f8bd mon/MDSMonitor: s/enabled/get_enabled()/
 641b419 mds: Handle setting 'enabled' in upgrades
@@ -4697,14 +4897,14 @@ f6d029d mon: warn in newfs if crash_replay_interval=0
 13305d5 mds: no initial filesystem
 8f7900a mds: add 'enabled' flag to MDSMap
 ef7d1bc doc: RPM instructions correction
-fcdf273 (origin/wip-port-fixes) mds: avoid comparing MutationRef with 0
-e473790 (origin/wip-krbd-settle) krbd: rework the unmap retry loop
+fcdf273 mds: avoid comparing MutationRef with 0
+e473790 krbd: rework the unmap retry loop
 59d18ac [RGW, memory leak] Memory leak in RGW has been fixed: deletion of allocated pointer to pointer to Log object has been added to "on_exit" handler.
 8e5c921 [RGW, memory leak] Memory leak in RGW GC (losing pointer during allocating Ceph-context) has been fixed.
 8706b74 [RGW, memory leaks] Memory leak in RGW initialization (Inserting new connection into connections map w/o check) has been fixed.
-9bcc19d (origin/wip-map-unmap) map-unmap.sh: fail if 'rbd rm' fails
+9bcc19d map-unmap.sh: fail if 'rbd rm' fails
 16b14ea map-unmap.sh: drop the get_id() logic
-abdb168 (origin/wip-fsx-random-ctx) test_librbd_fsx: use private RNG context
+abdb168 test_librbd_fsx: use private RNG context
 9517cea os/FileStore: put SUPER usage in ifdef __linux__
 b066e16 common: move #include syscall into ifndef DARWIN
 2db500b client: handle missing O_RSYNC constant
@@ -4733,8 +4933,8 @@ a17462c mds: add get_metablob() to log events
 1c93c61 MOSDOp: The functions are returned by const ref and parameters passed by ref
 ad81a98 Revert "ceph-disk: Enable creating multiple osds per dev"
 e02957d test: use (unsigned)0 with gtest to avoid spurious warnings
-f8df9bd (origin/wip-da-SCA-20140623) scratchtool.c: cleanup do_rados_getxattrs()
-4e9c2c1 (origin/wip-osd-ints) osd: fix pg_stat_t int -> int32_t
+f8df9bd scratchtool.c: cleanup do_rados_getxattrs()
+4e9c2c1 osd: fix pg_stat_t int -> int32_t
 238b1a3 osd: fix pg_shard_t int -> int32_t
 709f0c4 osd: fix pg_interval_t int -> int32_t
 a5f9a09 Fixed build on 32 bits platforms
@@ -4744,7 +4944,7 @@ f5a72b7 Added a couple of ASSERTS for avoiding coverity to complain about the po
 605d180 mount.ceph.c: fix strdup related memory leak
 7f7e56c scratchtool.c: fix resource leak and error handling
 bdb1346 scratchtool.c: fix resource leak
-48e38ac (origin/wip-refactor-cephtool-test) qa/workunits: cephtool: fix 'osd bench' test
+48e38ac qa/workunits: cephtool: fix 'osd bench' test
 802290d osd: OSD: better explanation on 'max_count' calculation for 'osd bench'
 4b0809a qa/workunits: cephtool: only run heap profiler test if tcmalloc enabled
 5c4616e qa/workunits: cephtool: set +e for the tcmalloc tests
@@ -4756,35 +4956,35 @@ f418408 qa/workunits: cephtool: cleanup state after erasure-code-profile test
 3d14a96 qa/workunits: cephtool: split into properly indented functions
 04658b7 qa/workunits: cephtool: move test line to where it's more appropriate
 db6cc13 qa/workunits: cephtool: split into functions
-3953053 (origin/wip-da-fix-make-check) test/ceph-disk.sh: fix for SUSE
+3953053 test/ceph-disk.sh: fix for SUSE
 be70c1f osdmaptool/test-map-pgs.t: fix escaping to fix run
 dc1a4df Revert "Give meaningful error when submodules are not checked out"
 9695535 Make <poolname> in "ceph osd tier --help" clearer.
 76361b8 mon: simplify output
-385fd6c (origin/wip-disable-static) do_autogen.sh: --disable-static
+385fd6c do_autogen.sh: --disable-static
 14085f4 (tag: v0.82) 0.82
 152bbd6 osd: workaround race condition in tests
-cb740b3 (origin/wip-mon-perf) mon: shut down perfcounters last
+cb740b3 mon: shut down perfcounters last
 524700f doc: Fix malformed parameters in librados.h
 56cad1a libcephfs/test.cc: fix use after free
 a5c704b RadosStriperImpl.cc: catch exception by reference
 6d79863 rgw/rgw_rados.h: use static_cast instead of c-style cast
-0b3a398 (origin/wip-8654) osd/OSD.cc: parse lsb release data via lsb_release
-d7350a3 (origin/wip-fix-rados-tool) rados.cc: fix pool alignment check
-2b007c2 (origin/wip-8624) mon: MDSMonitor: print pool name along with id during 'newfs' errors
+0b3a398 osd/OSD.cc: parse lsb release data via lsb_release
+d7350a3 rados.cc: fix pool alignment check
+2b007c2 mon: MDSMonitor: print pool name along with id during 'newfs' errors
 378b5ad qa/workunit: cephtool: test mds newfs and add_data_pool with ec pools
 d6f6813 mon: MDSMonitor: do not allow ec pools to be used for data or metadata
-20a1664 (origin/wip-mon-sanity-checks) common: LogClient: output to derr (i.e., dout(-1)) on CLOG_ERROR
+20a1664 common: LogClient: output to derr (i.e., dout(-1)) on CLOG_ERROR
 9804360 mon: Monitor: observe conf changes and report on unsage option values
 ec73888 mon: Monitor: sanitize options at start
 87f9dba Give meaningful error when submodules are not checked out
 58212b1 osd: Only normalize extent if op uses extent
-4225e2f (origin/wip-leveldb-stress) osd: remove OSD-specific leveldb options
+4225e2f osd: remove OSD-specific leveldb options
 52b147c ceph-mon: override 'leveldb_*' config options for the monitor
 d42d19d mon: MonitorDBStore: remove mon-specific leveldb options.
 9844885 mon: DataHealthService: s/mon_leveldb_size_warn/mon_data_size_warn/
-57c5d05 (origin/wip-8610) osd: ignore CRUSH_ITEM_NONE in compat_must_dispatch_immediately
-d9073f4 (origin/wip-disk-ioprio) osd: allow io priority to be set for the disk_tp
+57c5d05 osd: ignore CRUSH_ITEM_NONE in compat_must_dispatch_immediately
+d9073f4 osd: allow io priority to be set for the disk_tp
 dd6badc common/WorkQueue: allow io priority to be set for wq
 1b87410 common/Thread: allow io priority to be set for a Thread
 a2b4911 common/io_priority: wrap ioprio_set() and gettid()
@@ -4795,7 +4995,7 @@ da03e9e MDCache.h: init 'umaster::safe' in constructor
 3e93d4a osd: tests for osd bench
 74be320 Use sized integer.
 66a5f3b doc: Fixed Typo in pools documentation - replaced '-' with '_' in example set-quota comands.
-e189a66 (origin/wip-8603) log the command that is being run with subprocess
+e189a66 log the command that is being run with subprocess
 78cbac4 mailmap: Dmitry Smirnov name normalization
 efefbfd mailmap: koleosfuscus affiliation
 1cdea98 mailmap: Walter Huf name normalization
@@ -4811,9 +5011,9 @@ a58fbf7 mailmap: Colin Mattson affliation
 22c028d mailmap: Red Hat acquires InkTank
 c270172 mailmap: Sebastien Ponce affiliation
 39a4b78 mon: test that pools used in tiers cannot be removed
-1de9071 (origin/wip-misc-fixes) osd/osd_types.cc: dump correct pg_log_entry_t member variable
+1de9071 osd/osd_types.cc: dump correct pg_log_entry_t member variable
 363496a osd: use appropriate json types instead of stream when dumping info
-97772c2 (origin/wip-tiermsg) mon: name instead of id in "has tiers" message
+97772c2 mon: name instead of id in "has tiers" message
 4d5469a osd: ECMsgTypes: dump json bools instead of strings
 3f0ea95 osd: have 'tid' dumped as a json unsigned int where appropriate
 debaf61 mon: dump 'epoch' as json unsigned instead of int
@@ -4822,7 +5022,7 @@ debaf61 mon: dump 'epoch' as json unsigned instead of int
 b7ff393 mon: OSDMonitor: dump 'acting' as json array instead of string
 78f94a9 mailmap: Ailing Zhang affiliation
 d2e852e doc: Fixed an incorrect flag in radosgw admin docs.
-741ad3f (origin/fix_ut) autotools: avoid check_SCRIPTS duplication
+741ad3f autotools: avoid check_SCRIPTS duplication
 c0d78c6 Fix dist package run unit test failed.
 b3ace76 tests: prevent gitbuilder trigger in test-erasure-code.sh
 3a9c0fc test: fix -Wsign-compare warnings
@@ -4831,22 +5031,22 @@ c35ceef ReplicatedPG: 'ajusted' typo
 de2c085 rgw-admin: Fix the 'show log' command
 304b08a enforce rados put aligment
 8d9201f tests: remove spurious and harmless find command
-cdca7b7 (origin/wip-osd-stats) osd: move osd_stat into OSDService
+cdca7b7 osd: move osd_stat into OSDService
 4afffb4 osd: fix filestore perf stats update
-0985ae7 (origin/wip-backfill-priority) osd: prioritize backfill based on *how* degraded
+0985ae7 osd: prioritize backfill based on *how* degraded
 d20da8d osd: add osd_min_recovery_priority tunable
 b65ceb6 common/AsyncReserver: add a min_priority knob
 0e7a979 osd: fix word sizes in MBackfillReserve
-c4e8451 (origin/wip-scrub-sleep) osd: introduce simple sleep during scrub
+c4e8451 osd: introduce simple sleep during scrub
 7b580a2 mon: Monitor: complex code deduplication algorithm applied to tick()
 0ed1fe6 mon: Monitor: rework tick() so we don't calculate the same thing over and again
-ef8a128 (origin/wip-6703) support dmcrypt partitions when activating
+ef8a128 support dmcrypt partitions when activating
 7dc93a9   Fix EINVAL err when use "ceph tell osd.* bench"
-3ed7f2d (origin/wip-8593) mon: ensure HealthService warning(s) include a summary
+3ed7f2d mon: ensure HealthService warning(s) include a summary
 82e47db mon: refactor check_health()
 98883f6 mon: fix typos, punctuation for mon disk space warning(s)
 55a9778 mon/OSDMonitor: make down osd count sensible
-c5b5ed6 (origin/wip-ec-hitset) ceph_test_rados_api_tier: disable LibRadosTierECPP::HitSetWrite
+c5b5ed6 ceph_test_rados_api_tier: disable LibRadosTierECPP::HitSetWrite
 0bb0095 Revert "erasure-code: create default profile if necessary"
 f53bed1 mon/OSDMonitor: fix build error
 1c72465 osd: verify osd config sanity checks
@@ -4854,43 +5054,43 @@ f53bed1 mon/OSDMonitor: fix build error
 d93e74e common: Enforces the methods lru_pin() and lru_unpin()
 d48ed68 common: Fixes issue with lru_clear() + add new test
 62aa5c5 common: Adds simple tests to verify good behavior
-64f6232 (origin/wip-ceph-isatty) ceph: output prompt only if stdin is tty
-8d1cb8b (origin/wip-vstart-conf) vstart.sh: echo CEPH_{CONF,KEYRING} exports if necessary
+64f6232 ceph: output prompt only if stdin is tty
+8d1cb8b vstart.sh: echo CEPH_{CONF,KEYRING} exports if necessary
 2eb1f55 vstart.sh: rename conf variable to conf_fn
 18f5807 Make KeyValueStore not use expected_write_size
 360de6a erasure-code: create default profile if necessary
-f3ec7d0 (origin/wip-osd-configs) osd: add sanity check/warning on a few key configs
+f3ec7d0 osd: add sanity check/warning on a few key configs
 4786a48 osd: remove non const get_erasure_code_profile
 a1c13c5 tests: prevent kill race condition
 5c1f9aa osd: improve osd pool create error message readability
 6bf8183 erasure-code: consistent argument parsing for profiles
 3c63811 erasure-code: OSDMonitor::get_erasure_code is a const
 ff2eb23 erasure-code: pool create must not create profiles
-0d63cf2 (origin/wip-import-purge) qa: extend cephfs_journal_tool_smoke
+0d63cf2 qa: extend cephfs_journal_tool_smoke
 acd6ebb qa: set +x on cephfs_journal_tool_smoke
 ee487b4 tools/cephfs: Purge trailing objects during import
 ac05799 tools/cephfs: error handling in journal_export
 381163c tools/cephfs: Clean up waits in Dumper
 3fe1699 osd/OSDMap: do not require ERASURE_CODE feature of clients
 250677c osd/OSDMap: make get_features() take an entity type
-e29beff (origin/wip-8071) erasure-code: remove jerasure internals dependencies
-e720314 (origin/wip-doc-os-recommendations) doc: Updated the OS Recommendations for Firefly.
+e29beff erasure-code: remove jerasure internals dependencies
+e720314 doc: Updated the OS Recommendations for Firefly.
 2e3302c doc: Updated the example configuration.
 5a31df2 doc: Updated doc for more recent versions.
 2eab1c1 Update RBD doc for OpenStack
-a290d34 (origin/wip-fsx-sizeof) test_librbd_fsx: fix sign-compare gcc warning
+a290d34 test_librbd_fsx: fix sign-compare gcc warning
 40c48bc qa: add script to test krbd setting ro/rw ioctl
-b2542f8 (origin/wip-8585) rgw: set a default data extra pool name
+b2542f8 rgw: set a default data extra pool name
 94c8f70 doc: Made mention of "incomplete" status.
 29c33f0 qa: add an fsx run which turns on kernel debugging
-f978722 (origin/wip-xattr-spillout) FileStore: remove the user_only param from _fgetattrs
+f978722 FileStore: remove the user_only param from _fgetattrs
 bb4e3a9 FileStore: remove user_only options from getattrs through the ObjectStore stack
 fbe6009 FileStore: do not use user_only in collection_getattrs
 7267a37 FileStore: remove dead code
 e3b995e FileStore: set XATTR_NO_SPILL_OUT when creating new files.
 239476a FileStore: make _clone() copy spill out marker
 af8052b Add xattr test to ceph_test_objectstore
-d9fac9c (origin/wip-7774-3) rgw: chain to multiple cache entries in one call
+d9fac9c rgw: chain to multiple cache entries in one call
 c616358 rgw: chain binfo_cache to multiple cache entries
 7e81185 rgw: bucket info uses cache chaining
 a2f6709 rgw: user info uses cache chaining
@@ -4912,8 +5112,8 @@ a4923f5 fix compilation warnings
 737c13e Remove SequencerPosition from KeyValueStore
 ef06515 doc: fix typo in erasure coding section
 1080e7a Add upper limit to the write size of set_alloc_hint in KeyValueStore
-6a7e201 (origin/wip-8554) init-ceph: continue after failure doing osd data mount
-1f99cda (origin/wip-mon) mon: gather perf stats on elections
+6a7e201 init-ceph: continue after failure doing osd data mount
+1f99cda mon: gather perf stats on elections
 8f36d96 mon: gather perf stats on session adds, removes, counts
 ecda2fe OSD: move waiting_for_pg into Session
 1f40c35 Add set_alloc_hint test to ceph_test_objectstore
@@ -4922,14 +5122,14 @@ b0c66a7 doc: Fixes spelling errors on README
 910d73c Added RPM and debian packaging for libradosstriper, creating a new package called libradosstriper1
 fa01ca6 Added unit test suite for the Rados striping API.
 d160ce2 Implementation of the radosstriper interface.
-a6c34e4 (origin/wip-flag-known-redirs) osdc/Objecter: mark all ops as known-if-redirected
-bc3b30e (origin/wip-set-extsize-fix) XfsFileStoreBackend: call ioctl(XFS_IOC_FSSETXATTR) less often
+a6c34e4 osdc/Objecter: mark all ops as known-if-redirected
+bc3b30e XfsFileStoreBackend: call ioctl(XFS_IOC_FSSETXATTR) less often
 750b1db XfsFileStoreBackend: nuke redundant goto in set_extsize()
-524a155 (origin/wip-rgw-manifest-iter) rgw: reduce calls to rgw_obj.set_obj()
+524a155 rgw: reduce calls to rgw_obj.set_obj()
 e31d3fe doc: Descrption => Description Correct spelling error.
 0ca43d8 doc: Use write_full for C++ example Latest version of librados uses write_full when writing entire object.
 0bd6f67 OSD::calc_priors_during: handle CRUSH_ITEM_NONE correctly
-2081c99 (origin/wip-i386-atomic) include/atomic: make 32-bit atomic64_t unsigned
+2081c99 include/atomic: make 32-bit atomic64_t unsigned
 64e99d8 ceph-objectstore-test: fix warning in collect_metadata test
 e1ad0bf Added a striper interface on top of rados called radosstriper.
 7ceeb9f Completed librados documentation of rados_write_op_cmpxattr and rados_read_op_cmpxattr concerning their error reporting
@@ -4937,11 +5137,11 @@ e1ad0bf Added a striper interface on top of rados called radosstriper.
 8c12491 Fixed usage of rhel_version in spec file : it should have been rhel
 f92d7bb Fixed missing include of assert.h in RWLock interface
 b9a35b3 Extracted RadosXattrIter from librados.cc into independent .h anc .cc files. This makes this interface usable by clients of librados.
-aede832 (origin/wip-os-rename) os: rename get_*() -> decode_*()
-5bb078f (origin/wip-sahid-dist) Populate ChangeLog when distribute
+aede832 os: rename get_*() -> decode_*()
+5bb078f Populate ChangeLog when distribute
 b22cc85 Populate AUTHORS when distribute
 d76936b OSD::calc_priors_during: fix confusing for loop bracing (cosmetic)
-59d727d (origin/wip-da-SCA-20140604) kv_flat_btree_async.cc: remove consecutive break after return
+59d727d kv_flat_btree_async.cc: remove consecutive break after return
 82f5df4 JournalScanner.cc: catch exception by reference
 53533ee KeyValueStore.cc: silence gcc -Wunused-variable
 e24213e MemStore.cc: silence gcc -Wunused-variable
@@ -4950,21 +5150,21 @@ a325e3e Revert "Remove unused variables in KeyValueStore.cc"
 cac902e os/KeyValueStore.cc: fix possible null pointer deref warning
 3ee3e66 librbd/internal.cc: check earlier for null pointer
 f17a963 test/librbd/fsx.c: fix gcc warning
-f31e4c8 (origin/wip-da-update-libs3) libs3: update to latest git master of ceph/libs3
+f31e4c8 libs3: update to latest git master of ceph/libs3
 18c07ec common/addr_parsing.c: fix realloc memory leak
 5f86652 daemon_config.cc: add some more asserts
-703d0eb (origin/wip-8452-2) rgw: set meta object in extra flag when initializing it
+703d0eb rgw: set meta object in extra flag when initializing it
 23b657c Remove unused variables in KeyValueStore.cc
 307ba48 Remove unused variables in MemStore.cc
-5185a36 (origin/wip-autotools-dummy) automake: add dummy.cc to fix 'make tags'
-35509d274 bloom_filter, add test to validate assignement operator
+5185a36 automake: add dummy.cc to fix 'make tags'
+35509d2 bloom_filter, add test to validate assignement operator
 c50f85e bloom_filter, remove unecessary operators
 90cc6dd bloom_filter, add assertion to test validate element_count()
 c323c5b Fix keyvaluestore fiemap bug
-3ec32a6 (origin/wip-8447) librados: simplify/fix rados_pool_list bounds checks
+3ec32a6 librados: simplify/fix rados_pool_list bounds checks
 5569d40 documentation: add osd erasure-code-profile {set,rm,get,ls}
 8ff4edd documentation: update osd pool create erasure
-22bc886 (origin/wip-rbd-doc-fix) doc: fix 'rbd map' example
+22bc886 doc: fix 'rbd map' example
 4f834fa doc/release-notes: v0.81
 f4e81d3 librbd: clarify license header
 884a6b3 RadosClient: Avoid the DispatchQueue for OSD responses.
@@ -4974,7 +5174,7 @@ f4e81d3 librbd: clarify license header
 cabb8f0 doc: Added a section for ceph df.
 8de9501 (tag: v0.81) 0.81
 4bc5aef doc: Updated packages to reference firefly.
-c18cbef (origin/wip-runxfstests) qa: add run_xfstests_krbd.sh wrapper
+c18cbef qa: add run_xfstests_krbd.sh wrapper
 cd65246 qa: catch up with xfstests changes
 703166c qa: cp run_xfstests.sh run_xfstests-obsolete.sh
 601e25e erasure-code: Ceph distributed storage system
@@ -4983,23 +5183,23 @@ e158ad9 erasure-code: make decode_concat virtual
 6aa45b1 common: s/stringstream/ostream/ in str_map
 319cb50 Make KeyValueStore support "ceph osd perf" command
 06c0a42 Update INSTALL to mention the submodules/recursive
-2dbd85c (origin/wip-sharded-threadpool) WorkQueue: The variable name is corrected. Modified the variable name from shardedpol_cond->shardedpool_cond
+2dbd85c WorkQueue: The variable name is corrected. Modified the variable name from shardedpol_cond->shardedpool_cond
 3e3632e WorkQueue: Removed the unused in_process variable
 b05da1c WorkQueue: Taking care of potential race condition during pause() Introduced two variables to keep track of number of threads paused and drained during threadpool pause/drain. The pause()/drain() call is waiting till number of pause/drain threads equals to toral number of thread pool threads.
 b15bf6b OSD:Derived sharded queue implementation is changed All the threadpool related stuff like stop/pause/drain etc. are not handled by sharded queue anymore. All it is implementing are related to processing,enqueue , signaling of waiting threads and shard queue status. The pg ordering is been taken care of by introducing a map <pg,op> in each shard.
 c24ef00 ceph-common: The Sharded threadpool worker logic changed Now, the _process() of the derived queue is processing one request at a time and the outer loop is controlled by the sharded threadpool. The stop/pause/drain functionalities are controlled by the sharded TP.
 06845d0 OSD: Sharded Op worker queue implementation for handling OSD ops This is the implementation for the client of the sharded thread pool/sharded workQ. Removed the op_wq class and now OSD ops are going through sharded workqueue model which is used by the sharded threadpool. Derived ShardedOpWQ implementation has a data structure called ShardData which has it's own lock/cond and storage. ShardedOpWQ holds a vector of that and the size of the vector is a config option. During enqueue operation on the queue, the ops are sharded across these ShardData based on pg hash % number of shards. Similarly, in the _process function the sharded thread pool threads are divided across ShardData based on thread index % number of shards
 8369c08 ceph-common: Implementation of the sharded threadpool. Threadpool will only be having a single work queue and internally the work queue will be having multiple storage data structures. Based on some logic (which is derived class implementation specific) the work queue will shard the requests among these storage structures. Each storage will be guarded by finer grained sunchronization objects. Sharded threadpool threads will be assigned to work on a shard based on some algorithm which is again derived class implementation specific.
-83ccba3 (origin/wip-sock-cmp) msg: remove comparison operators for sockaddr_storage
-70afaaa (origin/wip-8452) rgw: fetch object attrs on multipart completion
+83ccba3 msg: remove comparison operators for sockaddr_storage
+70afaaa rgw: fetch object attrs on multipart completion
 669b605 PGLog: initialize complete_to
-b300318 (origin/wip-8311) rgw: if extra data pool name is empty, use data pool name instead
-38405d3 (origin/wip-8265) qa/workunits/cephtool: test setting options using SI units
+b300318 rgw: if extra data pool name is empty, use data pool name instead
+38405d3 qa/workunits/cephtool: test setting options using SI units
 5500437 common/config.cc: allow integer values to be parsed as SI units
 40587d4 test/strtol.cc: Test 'strict_strtosi()'
 67dc575 common/strtol.cc: strict_strtosi() converts str with SI units to uint64_t
 9c56c86 rgw: calc md5 and compare if user provided appropriate header
-cae085b (origin/wip-8472) msg_types.h: Don't use strncmp for comparing sockaddr_in.
+cae085b msg_types.h: Don't use strncmp for comparing sockaddr_in.
 00b9211 doc: Improve man page for rados bench
 2da2699 doc: update pools documentation
 ab59a10 doc: Improve man page for bench
@@ -5012,20 +5212,20 @@ e52b9c6 doc: Added osd pool default size setting example.
 20a04c6 doc: Moved redundant text out of quick-common.
 6786d60 common: WRITE_{EQ,CMP}_OPERATORS_1
 8679cdb osd_types: add pg_log_t::rollback_info_trimmed_to
-f1b890e (origin/wip-8465) osd: fix bad is_active() assert in share_map()
+f1b890e osd: fix bad is_active() assert in share_map()
 f153bc1 doc: Made additional changes s/CRUSH/Ceph for pull request #1855
 c08f481 doc: alter doc CSS for the removal of Apex Sans
 7f46b7b doc: removed Apex Sans font, replace with font from GFE
 692f998 doc: Fixes broken hyperlinks
-93a61df (origin/wip-8259) Makefile: make install-deps rule
+93a61df Makefile: make install-deps rule
 6fe7564 debian: improve package dep list
-e06c58c (origin/wip-smart-df) mon: set min_size to data chunk count for erasure pools
+e06c58c mon: set min_size to data chunk count for erasure pools
 7a9652b mon: include 'max avail' in df output
 2f63a30 mon: right justify df values
 2339d4a vstart.sh: -e to create an ec pool called 'ec'
 297f616 crush: add get_rule_weight_map
 0b5a674 rest-api: key missing for per "rx" and "rwx"
-634780a (origin/wip-8321) remove unused variables, gets all tox envs passing
+634780a remove unused variables, gets all tox envs passing
 23b75b5 add backport of collections.Counter for python2.6
 59b7113 intial take on ceph-brag-client and tox. Python 2.7 passes
 bc85b5d mailmap: Aristoteles Neto affiliation
@@ -5041,45 +5241,45 @@ dbc66d7 mailmap: Walter Huf affiliation
 be9f743 mailmap: Daniel J. Hofmann affiliation
 c758584 mailmap: Kevin Dalley affiliation
 7d1a493 mailmap: Florent Flament affiliation
-2815e4d (origin/wip-tier-doc) doc: Fix cache tier docs
+2815e4d doc: Fix cache tier docs
 08b3cff os: FileStore::create_backend unit tests
 3081652 os: ObjectStore::collect_metadata unit tests
-97023dc (origin/wip-reweight-tree) mon/OSDMonitor: simplify 'osd crush reweight ...' flow
+97023dc mon/OSDMonitor: simplify 'osd crush reweight ...' flow
 576315a mon/OSDMonitor: add 'osd crush reweight-subtree ...'
 2916148 crush: add adjust_subtree_weight()
 4021fb6 osd/: move split_list and split_request into OSD
 26862ca Fix Documentation Typo
 d4e8119 doc: Added primary affinity. Some minor rewrap edits.
-1ac3a50 (origin/wip-8292) better error reporting on incompatible device requirements
+1ac3a50 better error reporting on incompatible device requirements
 c2225f8 mon: fix set cache_target_full_ratio
-4c22c6f (origin/wip-pybind-timeout) pybind/rados: Fix timeouts for small t
-1e0a82f (origin/wip-map-advance) osd: fix map advance limit to handle map gaps
+4c22c6f pybind/rados: Fix timeouts for small t
+1e0a82f osd: fix map advance limit to handle map gaps
 641732d documentation: update pid file description
 c9ff481 Improvements to radosgw docs - Correct a typo (`rados-admin`) in admin docs - Reorder sections in config so "above example" is in expected position
 e741ea4 os/FileStore: include filestore backend, f_type in osd metadata
 827df7d Fix Doc Typo
 9312c5e os/FileStore: refactor backend instantiation
 3cf723c os/FileStore: fix journal-less operation
-200d0ae (origin/wip-multipartition) ceph-disk: Enable creating multiple osds per dev
-2ceb13a (origin/wip-8428) rgw: check appropriate entity permission on put_metadata
+200d0ae ceph-disk: Enable creating multiple osds per dev
+2ceb13a rgw: check appropriate entity permission on put_metadata
 ab0db34 documentation: adapt PG formula for erasure coded pools
 d3af8fa Update architecture.rst:Calculating PG IDs
 99b9682 documentation: update osd pool default size from 2 to 3.
-4d4b77e (origin/wip-java-build) cephfs-java: build against older jni headers
+4d4b77e cephfs-java: build against older jni headers
 6069ff0 doc/release-notes: v0.67.9
-f51e33b (origin/wip-librbd-flush) Avoid extra check for clean object
-9235dcb (origin/wip-mon-get-version) mon: set MMonGetVersionReply tid
+f51e33b Avoid extra check for clean object
+9235dcb mon: set MMonGetVersionReply tid
 ba53889 README: move package dependencies into separate files
 77066a2 README: clean up some whitespace
 c08adbc Fix set_alloc_hint op cause KeyValueStore crash problem
-d04b386 (origin/wip-8342) init-ceph: if we fail to set an OSD's crush position, continue
+d04b386 init-ceph: if we fail to set an OSD's crush position, continue
 46f1eb6 init-ceph: continue loop immediately on daemon start failure
 3bbe29e common/Finisher: add queue(list<Context*>&)
 c2644b2 Update manual-deployment.rst
 74218f3 Define AO_REQUIRE_CAS (fixes FTBFS on 'hppa')
-fb504ba (origin/wip-8373) mon: Fix check of ruleset id on pool update
+fb504ba mon: Fix check of ruleset id on pool update
 1d9e4ac mon: Fix default replicated pool ruleset choice
-799f76a (origin/wip-client-time) mds: remove unused Mutation::now
+799f76a mds: remove unused Mutation::now
 8768857 mds: use mds_stamp for mksnap
 d4bfa39 mds: reset mds_stamp for readdir, rename, link
 a09547b mds: use real timestamp for readdir leases
@@ -5089,8 +5289,8 @@ fd1f9bd mds: do rstat timestamps (rctime, fragstat mtime) in terms of op stamp
 29c6844 mds: make sure mds_stamp is set when we journal
 3569e80 mds: set mds_stamp on lock acquisition
 e4c9c34 mds: add {mds,op}_stamp to Mutation
-401319a (origin/wip-buildroot) ceph.spec.in: remove BuildRoot
-93a5b88 (origin/wip-journal-tool) tools/cephfs: error handling in EventOutput
+401319a ceph.spec.in: remove BuildRoot
+93a5b88 tools/cephfs: error handling in EventOutput
 3207c50 osdc/Journaler: fix obj count in Journaler:erase
 2621b5d tools/cephfs-journal-tool: handle --help cleanly
 d66fa53 tools/MDSUtility: fix crash on bad config
@@ -5126,19 +5326,19 @@ f7e9ff1 tools: Create cephfs-journal-tool
 107821f Fix formatting of header
 ad2e20f client: set timestamp in MDS requests
 a91e072 mds: include timestamp in MClientRequest
-d71839a (origin/wip-doc-openstack) doc: clarify openstack cow sentence
+d71839a doc: clarify openstack cow sentence
 0f7f1e8 doc: note cinder multi-backend restriction
 e92f2d9 doc: link to ephemeral rbd patches
 13d6c3c doc: quick-ceph-deploy cleanup Improve documentation in quick-ceph-deploy.rst Use admin-node consistently. ceph should be installed on admin-node for the following reasons:  "ceph-deploy admin admin-node" assumes that /etc/ceph exists.  "ceph health" requires the use of ceph
 d40ba05 doc: mention admin-node in common documentation
-29f615b (origin/wip-8334) ReplicatedPG::start_flush: fix clone deletion case
-5ff95db (origin/wip-8332) HashIndex: in cleanup, interpret missing dir as completed merge
+29f615b ReplicatedPG::start_flush: fix clone deletion case
+5ff95db HashIndex: in cleanup, interpret missing dir as completed merge
 bc897b8 rados.py: clarify recent change on write return value
 6372118 doc: Clean up pre-flight documentation Mention recent Ceph releases. Move important message about sudo and ceph-deploy closer to the use of ceph-deploy. Mention files created by ceph-deploy comment Separate apt-get from yum command
 06d05fd doc: fix link to FAQ The location of the ceph wiki FAQ has changed. Now, the link from ceph documentation matches the current FAQ location
 03e3ccd doc: Restored glance_api_version=2 setting.
-e8756be (origin/wip-8380-b) osdc/Objecter: flag ops that have been redirected
-cf2b172 (origin/wip-8380) osd: skip out of order op checks on tiered pools
+e8756be osdc/Objecter: flag ops that have been redirected
+cf2b172 osd: skip out of order op checks on tiered pools
 e47049b erasure-code: fix URL in developer notes
 23787ba mailmap: Sahid Orentino Ferdjaoui affiliation
 30ae96a Ensure autogen.sh to be executed at the top-level
@@ -5159,7 +5359,7 @@ e56b88f mds: Add ENoOp for padding journals
 e3a9f66 objecter: Don't warn on multiple admin sockets
 d4a250c common: Add write_stream(ostream) to bufferlist
 5b20deb mds: Add LogEvent::get_type_str()
-d776ec4 (origin/wip-multimds) mds: queue waiters in MDCache::force_dir_fragment()
+d776ec4 mds: queue waiters in MDCache::force_dir_fragment()
 b223055 mds: fix remote auth pin race
 57c89bf mds: fix Server::submit_mdlog_entry()
 f19cd4f mds: drop locks after removing import/export state
@@ -5169,19 +5369,19 @@ affce7a mds: journal rename source inode when rollback rename
 6fe7d17 mds: skip journaling slave rename when possible
 3783653 mds: include all of directory inode's replicas in rmdir witnesses
 08b79ea mds: journal EImportFinish after adjusting subtree auth
-c18da04 (origin/wip-osd-refs) osd: fix narrow session refcount race
+c18da04 osd: fix narrow session refcount race
 2c4391b osd: fix session leak in ms_handle_fast_connect
 15350de Add header cache to DBObjectMap
 ee92a39 MDS: add admin socket cleanup on shutdown
-a78b14e (origin/wip-osdmon-pa-wait) OSDMonitor: set next commit in mon primary-affinity reply
+a78b14e OSDMonitor: set next commit in mon primary-affinity reply
 6dfc544 sample.ceph.conf: minor update
-290ac81 (origin/wip-osdmap-sub-bug) OSD: fix an osdmap_subscribe interface misuse
-6ec3c46 (origin/osd-metadata) osd: include osd_objectstore in metadata reported to mon
+290ac81 OSD: fix an osdmap_subscribe interface misuse
+6ec3c46 osd: include osd_objectstore in metadata reported to mon
 405063b workunits: provide some output in the dirfrag.sh test
-aec5634 (origin/wip-8104) osd_types: remove the pool_id argument from (is|check)_new_interval
+aec5634 osd_types: remove the pool_id argument from (is|check)_new_interval
 f47c160 PG: replace is_split, acting_up_affected with should_restart_peering
 2ee3551 osd_types: factor out is_new_interval from check_new_interval
-c48a4ef (origin/wip-perf-atomic) common/perf_counters: use second atomic to make counters safe to read
+c48a4ef common/perf_counters: use second atomic to make counters safe to read
 ab907c5 doc: Clarified Debian uses sysvinit.
 c71c292 doc: Added rgw print continue guidance.
 b082fd6 doc: Minor edit.
@@ -5194,8 +5394,8 @@ ca833bd doc: Added clarifying text to CRUSH add command.
 26151ec mds: lower IO priority of storing backtrace
 019483f mds: reduce verbosity of handle_client_file_{readlock,setlock}
 ca313c2 mds: add a Server::submit_mdlog_entry() to provide event marking
-9f0825c (origin/wip-8338) OSD: verify that client ops are targeted correctly in the current epoch
-7411477 (origin/wip-8011) ReplicatedPG: block scrub on blocked object contexts
+9f0825c OSD: verify that client ops are targeted correctly in the current epoch
+7411477 ReplicatedPG: block scrub on blocked object contexts
 2ec2182 ReplicatedPG::start_flush: send delete even if there are no snaps
 ca91743 Locker: mark_event in acquire_locks() when blocking or succeeding
 2df68b6 Server: mark events when journaling and replying
@@ -5208,7 +5408,7 @@ ae80a1f MDS: add stubs for an AdminSocketHook
 428319e doc/release-notes: v0.80.1
 19f8849 doc: Improvements to qemu installation.
 6e4455d doc: Added note on Default requiretty for CentOS and others.
-8b682d1 (origin/java-gcj) prioritise use of `javac` executable (gcj provides it through alternatives).
+8b682d1 prioritise use of `javac` executable (gcj provides it through alternatives).
 89fe035 pass '-classpath' option (gcj/javah ignores CLASSPATH environment variable).
 0f4120c look for "jni.h" in gcj-jdk path, needed to find "jni.h" with gcj-jdk_4.9.0
 2001572 mds: deny reconnect for closed session
@@ -5217,7 +5417,7 @@ f35648b mds: properly clear new flag for stale client cap
 58ee556 mds: propagate inode rstat if it has never been propagated
 54a9037 mds: avoid journaling unnecessary dir context
 1f92f55 mds: cleanup usage of MDCache::predirty_journal_parent()
-3d7f527 (origin/wip-da-SCA-20140510) BtrfsFileStoreBackend.cc: fix ::unlinkat() result handling
+3d7f527 BtrfsFileStoreBackend.cc: fix ::unlinkat() result handling
 5f89128 TestLFNIndex.cc: remove unused variable 'mangled_name'
 a445529 rgw_user.cc: remove dead assignment in generate_key()
 b119679 rgw_user.cc: cleanup RGWAccessKeyPool::check_op()
@@ -5238,12 +5438,12 @@ d69fd90 test_rgw_admin_opstate.cc: prefer ++operators for iterators
 0f899c8 test_rgw_admin_meta.cc: prefer ++operators for iterators
 f523d64 TestErasureCodePluginJerasure.cc: prefer ++operators for non-primitive types
 014f050 test/ObjectMap/KeyValueDBMemory.cc: use empty() instead of size()
-d9fff40 (origin/wip-old-out) mon: restore previous weight when auto-marked out osd boots
+d9fff40 mon: restore previous weight when auto-marked out osd boots
 87722a4 mon: remember osd weight when auto-marking osds out
 45281d9 common/perf_counters: use atomics instead of a mutex
 bf3ba60 atomic_t: add atomic64_t
 b24b77a FileStore.cc: remove some dead assignments
-39c071f (origin/wip-update-gitignore) .gitignore: ignore files generated by ctags on topdir
+39c071f .gitignore: ignore files generated by ctags on topdir
 e847d56 add gitignore for wireshark subdir to track *.patch only here
 b9cf708 .gitignore: add some patch/diff related files
 f067013 .gitignore: add no longer used mkcephfs
@@ -5251,7 +5451,7 @@ ea69f6b cls_kvs.cc: return 'r' from get_idata_from_key()
 574a940 cls_kvs.cc: remove dead assignment
 36c1c97 rgw_user.cc:
 a121d01 libcephfs.cc: fix possible NULL pointer deref
-76568aa (origin/wip-8305) Objecter::_op_submit: only replace the tid if it's 0
+76568aa Objecter::_op_submit: only replace the tid if it's 0
 94773ac osd/OSD.cc: fix possible NULL pointer deref in share_map()
 0d67f9b osd/ReplicatedPG: do not queue NULL dup_op
 79c6491 mds/flock.cc: remove dead initialization of 'new_lock_end'
@@ -5263,7 +5463,7 @@ dd700bd osdc/Objecter: resend ops in the last_force_op_resend epoch
 b3203e5 rbd.cc: remove used parameter from set_pool_image_name()
 fe75075 test_librbd.cc: fix sizeof() in malloc call
 eb2def8 CrushWrapper.cc: fix sizeof() call in calloc
-11e5eef (origin/wip-5021) client: fix whitespace in stat relpath
+11e5eef client: fix whitespace in stat relpath
 cdbe6cf client: use __func__ instead of incorrect function name in insert_readdir_results
 3eb2a77 client: make less noise when unlinking during readdir
 d1c872d client: invalidate dentry leases when unlinking
@@ -5271,26 +5471,26 @@ d852a69 client: audit unlink() callers
 3b867d3 TrackedOp: create an "initiated" event on construction
 bdee119 msg: Fix inconsistent message sequence negotiation during connection reset
 b5e4cd1 osd: fix MOSDMarkMeDown name
-6b858be (origin/wip-8319) osd: handle race between osdmap and prepare_to_stop
+6b858be osd: handle race between osdmap and prepare_to_stop
 b640301 osd: fix state method whitespace
 ba01445 Fixed missing initializers issues
 60b1071 Removed extra semicolons
 5986f74 :doc Ceph OSD is standard name This is a method of standardizing the usage of OSD so that "Ceph OSD" is the daemon, and OSD maintains its industry standard usage of Object Storage Device.
-ddc2e1a (origin/wip-8169) rgw: calculate user manifest
-589b639 (origin/wip-7588) osd/ReplicatedPG: carry CopyOpRef in copy_from completion
+ddc2e1a rgw: calculate user manifest
+589b639 osd/ReplicatedPG: carry CopyOpRef in copy_from completion
 db4ccb0 ReplicatedPG: block scrub on blocked object contexts
 3152faf osd/osd_types: add last_force_op_resend to pg_pool_t
-0f19626 (origin/wip-6966) ceph-disk: partprobe before settle when preparing dev
-5690232 (origin/wip-da-sca-20140507) rbd-fuse.c: remove ridiculous linebreak
+0f19626 ceph-disk: partprobe before settle when preparing dev
+5690232 rbd-fuse.c: remove ridiculous linebreak
 7a3724b rbd-fuse.c: fix indentation
 8101f98 rbd-fuse.c: fix -Wmissing-field-initializers
-65ca867 (origin/wip-krbd-fixes) krbd: fix sysfs path in the comment
+65ca867 krbd: fix sysfs path in the comment
 f1d953e krbd: match new with delete, not free()
 082367e rbd.cc: init 'snap_protected' to fix -Wconditional-uninitialized
 0d01563 rbd-fuse.c: init 'rbd' in open_rbd_image()
 cfc885f ObjectCacher::_wait_for_write(): init 'bool done'
 8322878 Objecter::calc_target(): init best_locality with 0
-13750a1 (origin/wip-jcsp-clang) rgw: Remove trailing ; from fn definitions
+13750a1 rgw: Remove trailing ; from fn definitions
 447335a os/FileJournal: remove unused attribute
 f0231ef mon: Fix % escaping (\% should be %%)
 d85b8fa mds: Remove redundant 'using namespace std'
@@ -5310,14 +5510,14 @@ b4b79eb remove superfluous second semicolons at end of lines
 635607f client: skip insert_trace on safe requests
 f1d412c doc: Common graph used in 2 quick start files
 d130763 vstart.sh: fix client admin socket path
-0ee409b (origin/wip-7553) osd: Remove classic scrub code since Argonaut osd can't join
+0ee409b osd: Remove classic scrub code since Argonaut osd can't join
 81c7418 ECUtil.h: clarify calculation with braces
 13f54b7 PG::start_peering_interval: use check_new_interval for same_interval_since
 5752d76 rgw_acl_swift.h: fix #define header guard
 8059c9f rgw_rest_metadata.cc: fix -Wparentheses-equality
 8a0c016 ReplicatedPG.cc: fix -Wparentheses
 a0f59df test_rgw_manifest.cc: fix VLA of non-POD element type
-817985b (origin/wip-fsx-krbd) test_librbd_fsx: align temporary buffers allocated in check_clone()
+817985b test_librbd_fsx: align temporary buffers allocated in check_clone()
 ab9de9c test_librbd_fsx: wire up O_DIRECT mode
 c4a764c test_librbd_fsx: fix a bug in docloseopen()
 421e6c5 test_librbd_fsx: add krbd mode support
@@ -5328,7 +5528,7 @@ d63808e test_librbd_fsx: make resizes sector-size aligned
 7df50ec test_librbd_fsx: align temp_buf by readbdy instead of writebdy
 d13e32e test_librbd_fsx: move prterrcode() and simple_err()
 8d41f86 test_librbd_fsx: update usage
-99400f8 (origin/wip-da-cleanup-includes) osdmaptool.cc: cleanup included headers
+99400f8 osdmaptool.cc: cleanup included headers
 a5e0d80 monmaptool.cc: cleanup included headers
 537385c ceph_osdomap_tool.cc: cleanup included headers
 d57561a ceph_monstore_tool.cc: cleanup included headers
@@ -5355,8 +5555,8 @@ f9a91f2 Update doc to reflect the bahavior change for filestore_merge_threshold
 334c43f client: avoid blindly removing dentries
 25d2469 client: leave NULL dentry in place on ENOENT during lookup
 cc65c39 client: add debugging around traceless reply failures
-545d8ad (origin/wip-8269) rgw: extend manifest to avoid old style manifest
-9968b93 (origin/wip-8299) rgw: fix stripe_size calculation
+545d8ad rgw: extend manifest to avoid old style manifest
+9968b93 rgw: fix stripe_size calculation
 6c2b173 mds: handle export freezen race
 a09070a mds: allow negetive rstat
 22abd7b mds: cancel fragmenting dirfrags when cluster is degraded
@@ -5373,21 +5573,21 @@ f386e16 mds: pre-allocate inode numbers less frequently
 7a066f8 mds: include authpinned objects in remote authpin request
 5b86a13 mds: send dentry unlink message to replicas of stray dentry
 7d1fd66 mds: maintain auth bits during replay
-09beebe (origin/wip-7157) ceph-disk: fix list for encrypted or corrupt volume
+09beebe ceph-disk: fix list for encrypted or corrupt volume
 bd8e026 rgw: don't allow multiple writers to same multiobject part
-03b0d1c (origin/wip-8289) rgw: cut short object read if a chunk returns error
+03b0d1c rgw: cut short object read if a chunk returns error
 2d5d309 Pipe: wait for Pipes to finish running, instead of just stop()ing them
-6ec99f7 (origin/wip-rbd-clang) librbd: check return value during snap_unprotect
+6ec99f7 librbd: check return value during snap_unprotect
 6f2edda ObjectCacher: remove useless assignment
-3e387d6 (origin/wip-8296) osd/ReplicatedPG: fix whiteouts for other cache mode
-5cc5686 (origin/wip-8170) rgw: send user manifest header field
+3e387d6 osd/ReplicatedPG: fix whiteouts for other cache mode
+5cc5686 rgw: send user manifest header field
 e65a9da Revert "Fix installation into user home directory, broken by d3f0c0b"
 b78644e (tag: v0.80) 0.80
 cdbbf86 doc: Fixed artifacts from merge.
 a31b9e9 doc: Added sudo to setenforce. Restored merge artifact.
 5158272 doc: Added erasure coding and cache tiering notes. Special thanks to Loic Dachary.
 08a4e88 Variable length array of std::strings (not legal in C++) changed to std::vector<std::string>
-ae434a3 (origin/wip-8290) client: check snap_caps in Incode::is_any_caps()
+ae434a3 client: check snap_caps in Incode::is_any_caps()
 4bf20af SimpleMessenger: Don't grab the lock when sending messages if we don't have to
 b038f0c OSD: rename share_map_incoming and share_map_outgoing
 e1277ba OSD: move the peer_epoch and map sharing infrastructure into OSDService
@@ -5436,29 +5636,29 @@ ec16357 OSD: replace handle_pg_scan, handle_pg_backfill with handle_replica_op
 37fac29 OSD::_share_map_incoming: line wrap debug output
 78f310d PG: constify the init() function params
 816b10e RWLock: assert pthread function return values
-e2b62bc (origin/wip-messageless-tracker) TrackedOp: do not require a Message when creating new Ops
+e2b62bc TrackedOp: do not require a Message when creating new Ops
 95fc551 TrackedOp: do not track a Message
 5a3efda TrackedOp: introduce an _unregistered() function to let implementations clean up
 2e674de TrackedOp: rename arrived_at to initiated_at, specify when constructed
 6a559a5 TrackedOp: introduce a _dump_op_descriptor function
 d7e04cc TrackedOp: remove the init_from_message function
-fc3318e (origin/wip-doc-radosgw-80) doc: Fix hyperlink.
+fc3318e doc: Fix hyperlink.
 a7e7219 doc: Index update and librados.
 fcbc5fa doc: Quotas for Admin Ops API.
 e97b56e doc: New Admin Guide for Ceph Object Storage.
 7539281 Fix installation into user home directory, broken by d3f0c0b
 24c5ea8 osd: check blacklisted clients in ReplicatedPG::do_op()
-f92677c (origin/wip-blacklist) osd: check blacklisted clients in ReplicatedPG::do_op()
+f92677c osd: check blacklisted clients in ReplicatedPG::do_op()
 c64b67b ceph-object-corpus: rebase onto firefly corpus
 077e6f8 ceph-object-corpus: v0.80-rc1-35-g4812150
 8bd4e58 Fix out of source builds
 3aee1e0 Fix clone problem
-fd970bb (origin/wip-8155) mon: OSDMonitor: disallow nonsensical cache-mode transitions
-72fdd55 (origin/wip-8283) osd/ReplicatedPG: fix trim of in-flight hit_sets
+fd970bb mon: OSDMonitor: disallow nonsensical cache-mode transitions
+72fdd55 osd/ReplicatedPG: fix trim of in-flight hit_sets
 8472805 Revert "ReplicatedPG: block scrub on blocked object contexts"
-f47f867 (origin/wip-8113) osd: Prevent divide by zero in agent_choose_mode()
+f47f867 osd: Prevent divide by zero in agent_choose_mode()
 b7d31e5 osd, common: If agent_work() finds no objs to work on delay 5 (default) secs
-fe0031d (origin/wip-da-SCA-fixes-20140501) rados.cc: fix typo in help output
+fe0031d rados.cc: fix typo in help output
 8bf039d Dumper::dump_entries(): reduce scope of 'got_data'
 296b8ed PG::read_info(): pass 'const coll_t coll' by reference
 8fad144 PGBackend::be_compare_scrubmaps(): pass pgid by reference
@@ -5478,16 +5678,16 @@ d024594 mailmap: Florent Bautista affiliation
 7b192f7 mailmap: Guang Yang name normalization
 4662890 sample.ceph.conf update:
 9cf470c osd/ReplicatedPG: agent_work() fix next if finished early due to start_max
-9f1a916 (origin/wip-snapmapper-debug) osd/SnapMapper: pass snaps set by const ref
+9f1a916 osd/SnapMapper: pass snaps set by const ref
 6105c35 osd/SnapMapper: debug
-f065809 (origin/wip-7576) mon/OSDMonitor: do not reply to MOSDMarkMeDown if ack is not requested
+f065809 mon/OSDMonitor: do not reply to MOSDMarkMeDown if ack is not requested
 58ace1a osd: fix 'ack' to be 'request_ack' in MOSDMarkMeDown
 49a3b22 osd: ignore MarkMeDown message if we aren't in PREPARING_TO_STOP state
 cf25bdf osd: prevent pgs from getting too far ahead of the min pg epoch
 81e4c47 osd: track per-pg epochs, min
 c879e89 doc: Include links from hardware-recommendations to glossary Included :term: in parts of hardware-recommendations so that glossary links appear. Signed-off-by: Kevin Dalley <kevin@kelphead.org>
-cc04322 (origin/wip-fix-master) mds: note MDiscoverReply encoding change in corpus
-e597068 (origin/wip-mds-shutdown) mds: remove mdsdir in the final step of shutdown MDS
+cc04322 mds: note MDiscoverReply encoding change in corpus
+e597068 mds: remove mdsdir in the final step of shutdown MDS
 1f4a3e1 mds: bump protocol
 1ac05fd doc/release-notes: changelog link
 ffef20f doc/release-notes: final v0.67.8 notes and changelog
@@ -5516,14 +5716,14 @@ ef0de7a OSDMap.cc: prefer prefix ++operator for non-trivial iterator
 5562428 OSDMonitor.cc: prefer prefix ++operator for non-trivial iterator
 e4b3109 KeyValueStore: rename s/logger/perf_logger/
 a84fed6 crush/mapper.c: fix printf format for unsigned variable
-21bbdf5 (origin/wip-early-reply) mds: avoid adding replicas of target dentry to rename witnesses
+21bbdf5 mds: avoid adding replicas of target dentry to rename witnesses
 3a7d668 mds: allow early reply when request's witness list is empty
 41d93aa mds: include authority of the source inode in rename witnesses
-68b440d (origin/wip-8147) osd: automatically scrub PGs with invalid stats
+68b440d osd: automatically scrub PGs with invalid stats
 d01aa5b mon: OSDMonitor: return immediately if 'osd tier cache-mode' is a no-op
-f689e5f (origin/wip-no-anchor) mds: remove discover ino
+f689e5f mds: remove discover ino
 913a5dd mds: remove anchor table
-8217600 (origin/wip-doc-radosgw) doc: Ensure fastcgi socket doesn't clash with gateway daemon socket.
+8217600 doc: Ensure fastcgi socket doesn't clash with gateway daemon socket.
 9c9b92f doc: Verified RHEL configuration.
 ec11bf7 doc: Fixed inconsistent header.
 63b2964 doc: Added rhel-6-server-optional-rpms repo.
@@ -5533,46 +5733,46 @@ f674f36 Copy range using fiemap not entire length
 e08b8b6 librbd: check return code and error out if invalidate_cache fails
 b1df2c3 Changed the -i parameter to -r in order to avoid a conflict with a generic flag interpreted by the common code.
 a027100 rgw: fix url escaping
-9e3b860 (origin/wip-7500-wusui) Fix s3 tests in the rgw workunit.
+9e3b860 Fix s3 tests in the rgw workunit.
 3ec0040 Added a new command line parameter (-i or --image=) that allows rbd-fuse to specify a single image to be made available within the mount directory. The purpose of this is to allow a single RBD to be "mounted" in userspace without opening (and locking) the other RBDs in the pool.
-060105c (origin/wip-8086) ReplicatedPG: we can get EAGAIN on missing clone flush
+060105c ReplicatedPG: we can get EAGAIN on missing clone flush
 d83b8f5 ReplicatedPG: do not preserve op context during flush
 a60e15a doc/release-notes: v0.67.8 notes
-bcf92c4 (origin/wip-8202) rgw: fix url escaping
+bcf92c4 rgw: fix url escaping
 27ec495 Added Java Example
 8f64b5c Update librados-intro.rst
-3e41f92 (origin/wip-client-sleep) client: cleanup unsafe requests if MDS session is reset
+3e41f92 client: cleanup unsafe requests if MDS session is reset
 70ab079 client: wake up cap waiters if MDS session is reset
 b8aa58a client: drop dirty/flushing caps if auth MDS' session is reset
 09a1bc5 client: add asok command to kick sessions that were remote reset
 998b365 Changed the java code example
-5d49782 (origin/wip-7966) mds: terminate readlink result in resapwn
-d0f1806 (origin/wip-8193) ceph_test_rados_api_tier: increase HitSetTrim timeouts
+5d49782 mds: terminate readlink result in resapwn
+d0f1806 ceph_test_rados_api_tier: increase HitSetTrim timeouts
 9ac264a Skipping '_netdev' Debian fstab option
-499adb1 (origin/wip-7941) rados.h,ReplicatedPG: add CEPH_OSD_FLAG_ENFORCE_SNAPC and use on flush
-ddf37d9 (origin/wip-uselocalgithubforqemu-wusui) Use new git mirror for qemu-iotests
-1885792 (origin/wip-8161) ECBackend::continue_recovery_op: handle a source shard going down
+499adb1 rados.h,ReplicatedPG: add CEPH_OSD_FLAG_ENFORCE_SNAPC and use on flush
+ddf37d9 Use new git mirror for qemu-iotests
+1885792 ECBackend::continue_recovery_op: handle a source shard going down
 c0c2361 brag : implement --verbose on client
 7009211 brag : document the zero argument behavior
 2b16a81 brag : meaningfull error messages
-83f8934 (origin/wip-8168) ReplicatedPG::do_osd_ops: consider head whiteout in list-snaps
+83f8934 ReplicatedPG::do_osd_ops: consider head whiteout in list-snaps
 39c1bfc ReplicatedPG::do_op: don't return ENOENT for whiteout on snapdir read
 a83aff5 test_rbd.py: ignore children in cache pools
 aae16ab mon: add ceph osd pool set <pool> auid
-606e725 (origin/wip-7882-wusui) Support latest qemu iotest code
-f631854 (origin/wip-libkrbd) rbd: deprecate --no-settle option
+606e725 Support latest qemu iotest code
+f631854 rbd: deprecate --no-settle option
 0c2b0fb doc: 'rbd showmapped' doesn't need privileges
 4238ffd doc: do not mention modprobe in rbd docs
 0ba3960 rbd: switch to libkrbd for 'rbd {map,showmapped,unmap}' operations
 2521e73 mount.ceph: switch to module_load()
 2651750 rbd: add libkrbd convenience library
-bad34e9 (origin/wip-fs-client) client: check cap ID when handling cap export message
+bad34e9 client: check cap ID when handling cap export message
 383d21d client: avoid releasing caps that are being used
-d726251 (origin/wip-doc-cache-tier) doc: Fix hyperlink to CRUSH maps.
+d726251 doc: Fix hyperlink to CRUSH maps.
 6902e22 doc: Added cache tiering settings to ceph osd pool set.
 0d964bc doc: Added new cache tiering doc to index/TOC.
 44e4e3d doc: Added new cache tiering doc to main docs.
-2182815 (origin/wip-7439) ReplicatedPG: handle ec pools in mark_all_unfound_lost
+2182815 ReplicatedPG: handle ec pools in mark_all_unfound_lost
 6769f4d (tag: v0.80-rc1) 0.80-rc1
 245923e ReplicatedPG: enable mark_unfound_lost delete for ec pools
 009e874 qa/workunits/rbd/copy.sh: skip some tests when tiering is enabled
@@ -5583,11 +5783,11 @@ ac9b461 common: add module_{load,has_parameter}()
 070a820 configure: check for blkid/blkid.h header
 9004049 rbd: use stringify() in options parsing routines
 be081db stringify: use ostringstream instead of stringstream
-cac15c7 (origin/wip-coverity-respawn) mds: make strncpy in ::respawn safer
-b4eb502 (origin/wip-coverity) osd/osd_types: RWState: initialize snaptrimmer_write_marker
+cac15c7 mds: make strncpy in ::respawn safer
+b4eb502 osd/osd_types: RWState: initialize snaptrimmer_write_marker
 4e5f442 osdc/Objecter: drop unused field
 124a663 doc/release-notes: a bit of prose about firefly
-18aded2 (origin/wip-8139) osd/osd_types: pg_interval_t: include primaries in operator<<
+18aded2 osd/osd_types: pg_interval_t: include primaries in operator<<
 931ae6b osd/osd_types: pg_interval_t: include up_primary in pg_interval_t
 66170f3 osd/osd_types: pg_interval_t: dump primary
 000233f osd: change in up set primary constitutes a peering interval change
@@ -5603,7 +5803,7 @@ c3833d7 doc: Fixed syntax to include 'pool'.
 f3df501 ReplicatedPG: do not create whiteout clones
 caa6356 ReplicatedPG,rados: add CEPH_OSD_[COPY_FROM]_MAP_SNAP_TO_CLONE
 2cb0bac qa/workunits/cephtool/test.sh: make set pg_num test non-racy
-506dce8 (origin/wip-8124) ReplicatedPG: do not use shard for hit_set object names
+506dce8 ReplicatedPG: do not use shard for hit_set object names
 f7e7588 ReplicatedPG::agent_load_hit_sets: take ondisk_read_lock
 16eccdd PG,PGLog: update hit_set during peering
 5821cc7 osd/: propogate hit_set history with repop
@@ -5614,30 +5814,30 @@ ddf1e98 osd: track the number of hit_set archive objects in a pg
 95d0278 ReplicatedPG::mark_all_unfound_lost: delete local copy if necessary
 61b6564 Simple mechanical cleanups
 7a61cdb buffer: adjust #include order
-f9e9365 (origin/wip-8153) Revert "ReplicatedPG::get_snapset_context: assert snap obj is not missing"
-4413670 (origin/wip-throttle-snap-master) osd: throttle snap trimmming with simple delay
+f9e9365 Revert "ReplicatedPG::get_snapset_context: assert snap obj is not missing"
+4413670 osd: throttle snap trimmming with simple delay
 82edda2 test: handle the create-pg delay when testing cache split syntax
-b2112d5 (origin/wip-7784) mon: OSDMonitor: HEALTH_WARN on 'mon osd down out interval == 0'
-09985d2 (origin/wip-7997) mon: wait for PaxosService readable in handle_get_version
+b2112d5 mon: OSDMonitor: HEALTH_WARN on 'mon osd down out interval == 0'
+09985d2 mon: wait for PaxosService readable in handle_get_version
 8fb2388 osd_types: pg_t: add get_ancestor() method
-7e697b1 (origin/wip-8091) ReplicatedPG::recover_replicas: do not recover clones while snap obj is missing
-3ad51c8 (origin/wip-num_objects_omap) osd_types::object_stat_sum_t: fix add/sub for num_objects_omap
-3d0e80a (origin/wip-8048) osd/ReplicatedPG: check clones for degraded
-93c0515 (origin/wip-8130) osdc/Objecter: fix osd target for newly-homeless op
-881680e (origin/wip-8132) mon: set leader commands prior to first election
-40e8dbb (origin/wip-poolset-noblock) mon: EBUSY instead of EAGAIN when pgs creating
+7e697b1 ReplicatedPG::recover_replicas: do not recover clones while snap obj is missing
+3ad51c8 osd_types::object_stat_sum_t: fix add/sub for num_objects_omap
+3d0e80a osd/ReplicatedPG: check clones for degraded
+93c0515 osdc/Objecter: fix osd target for newly-homeless op
+881680e mon: set leader commands prior to first election
+40e8dbb mon: EBUSY instead of EAGAIN when pgs creating
 f22e2e9 spelling corrections
 18caa1c OSD: split pg stats during pg split
 5e4a5dc osd_types::osd_stat_sum_t: fix floor for num_objects_omap
 a3d452a common/obj_bencher: Fix error return check from read that is negative on error
 4db1984 osd/ReplicatedPG: add missing whitespace in debug output
-924064f (origin/wip-mds-op-prio) mds: dynamically adjust priority of committing dirfrags
-0640a08 (origin/wip-8092) mds: fix cap revoke confirmation
+924064f mds: dynamically adjust priority of committing dirfrags
+0640a08 mds: fix cap revoke confirmation
 8c7a5ab Use string instead of char* when saving arguments for rest-bench
 0d2177a ReplicatedPG::get_snapset_context: assert snap obj is not missing
-015df93 (origin/wip-8043) mon/OSDMonitor: require force argument to split a cache pool
-c252345 (origin/wip-8108) osd: OSDMap: have osdmap json dump print valid boolean instead of string
-aa6df59 (origin/wip-7699) mds: Fix respawn (add path resolution)
+015df93 mon/OSDMonitor: require force argument to split a cache pool
+c252345 osd: OSDMap: have osdmap json dump print valid boolean instead of string
+aa6df59 mds: Fix respawn (add path resolution)
 f6db1bc mds: share max size to client who is allowed for WR cap
 358bde5 Add clone test on store_test
 308758b Make rados/rest bench work for multiple write instances without metadata conflict. Signed-off-by: Guang Yang <yguang@yahoo-inc.com>
@@ -5646,8 +5846,8 @@ f6db1bc mds: share max size to client who is allowed for WR cap
 3f7861e ReplicatedPG::agent_work: skip if head is missing
 d39e003 ReplicatedPG::cancel_flush: requeue dup_ops even if !op
 edda6f7 ReplicatedPG::_rollback_to: fix comment, clone certainly could be missing
-37ed4b6 (origin/wip-stress-watch) ceph_test_stress_watch: test over cache pool
-d0a7632 (origin/wip-strerror) Use cpp_strerror() wherever possible, and use autoconf for portability
+37ed4b6 ceph_test_stress_watch: test over cache pool
+d0a7632 Use cpp_strerror() wherever possible, and use autoconf for portability
 502cc61 ReplicatedPG::agent_work: skip hitset objects before getting object context
 0d4aed8 mon: fix Session ref leak in handle_get_version
 d563434 doc: Distro specific rgw.conf example.
@@ -5657,30 +5857,30 @@ bd22cac doc: Distro specific rgw.conf example.
 1310af2 doc: Reworked the simple configuration guide to be more generic.
 6853d21 doc: New admin guide for Ceph Object Gateway. Needs some clarification (todo).
 e02b845 doc: Admin API usage for quotas. Needs additional clarification on syntax.
-d0d162a (origin/wip-8097) buffer: use Mutex instead of Spinlock for raw crcs
+d0d162a buffer: use Mutex instead of Spinlock for raw crcs
 7c17fc4 mds: don't modify inode when calculating client ranges
-65ec24e (origin/wip-client-debug) client: print inode max_size
+65ec24e client: print inode max_size
 d6c71b7 osd/ReplicatedPG: add missing whitespace in debug output
-171d5c5 (origin/wip-librados-tests) ceph_test_rados_api_*: fix build warnings, memset ranges
-8905e3e (origin/wip-8089) osd/ReplicatedPG: handle dup ops earlier in do_op
+171d5c5 ceph_test_rados_api_*: fix build warnings, memset ranges
+8905e3e osd/ReplicatedPG: handle dup ops earlier in do_op
 26659a5 mds: don't issue/revoke caps before client has caps
 bd8aa6f mds: do file recover after authpin inode
-a72bcdd (origin/wip-8085) osd/ReplicatedPG: handle misdirected do_command
-4ccc845 (origin/wip-mds-typo) mds: fix typo in Server::do_rename_rollback()
-809d0fa (origin/wip-hitset-missing) osd/ReplicatedPG: handle missing hit_set on HITSET_GET rados op
+a72bcdd osd/ReplicatedPG: handle misdirected do_command
+4ccc845 mds: fix typo in Server::do_rename_rollback()
+809d0fa osd/ReplicatedPG: handle missing hit_set on HITSET_GET rados op
 53a4b71 ceph_test_rados_api_watch_notify: test over cache pool
 b31107b test/librados/TestCase: add Param option that can set up a cache pool
-3ce4078 (origin/wip-7940) test: Add --pool-snaps option to ceph_test_rados
+3ce4078 test: Add --pool-snaps option to ceph_test_rados
 09b5538 test: Fix ceph_test_rados to not core dump with invalid arguments
 b6b0c3b librados: Add ObjectWriteOperation::snap_rollback() for pool snapshots
 6e0496b librados: Rollback interface additions
-6ff645f (origin/wip-8008) osd/PG: fix repair_object when missing on primary
-19acfeb (origin/wip-8063) ceph_test_librados_tier: tolerage EAGAIN from pg scrub command
-39b9d9d (origin/wip-osd-boot) mon/OSDMonitor: fix osd epoch in boot check
-78df66f (origin/wip-8077) osd/ReplicatedPG: skip missing hit_sets when loading into memory
-7077438 (origin/wip-8054) mds: finish table servers recovery after creating newfs
+6ff645f osd/PG: fix repair_object when missing on primary
+19acfeb ceph_test_librados_tier: tolerage EAGAIN from pg scrub command
+39b9d9d mon/OSDMonitor: fix osd epoch in boot check
+78df66f osd/ReplicatedPG: skip missing hit_sets when loading into memory
+7077438 mds: finish table servers recovery after creating newfs
 052519e Revert "mds: finish table servers recovery after creating newfs"
-82d8397 (origin/wip-5170-firefly) rgw: update bucket / object rewrite
+82d8397 rgw: update bucket / object rewrite
 6f2ee99 radosgw-admin: add some conditions for bucket rewrite
 9130e7d radosgw-admin: new 'bucket rewrite' command
 f12bccc radosgw-admin: check params for object rewrite
@@ -5690,33 +5890,33 @@ ad40356 Included the total cluster size in components_count object
 db3e0b5 erasure-code: document the ruleset-root profile parameter
 6d42bd9 While generating crush_types, avoiding item parsing, and calculating type count by just iterating thorugh buckets list
 1987832 Bug fix in the way crush_type is extracted from osd crush dump
-072d371 (origin/wip-lockdep) RWLock: make lockdep id mutable
+072d371 RWLock: make lockdep id mutable
 da0d382 Revert "RWLock: don't assign the lockdep id more than once"
 632098f common_init: remove dup lockdep message
 3c54a49 Wordsmith the erasure-code doc a bit
 f6c2073 mds: finish table servers recovery after creating newfs
 3db7486 mds: issue new caps before starting log entry
-07e8ee2 (origin/wip-7437) test: Add EC testing to ceph_test_rados_api_aio
+07e8ee2 test: Add EC testing to ceph_test_rados_api_aio
 69afc59 test: Add multiple write test cases to ceph_test_rados_api_aio
 d99f1d9 test, librados: aio read *return_value consistency, fix ceph_test_rados_api_aio
 3d290c2 test: Add EC unaligned append write test to ceph_test_rados_api_io
 39bf68c pybind, test: Add python binding for append and add to test
 d211381 pybind: Check that "key" is a string
 9812720 librados, test: Have write, append and write_full return 0 on success
-008663a (origin/wip-7499) rgw, radosgw-admin: bucket link uses bucket instance id now
-6ce7116 (origin/wip-7786) civetweb: update subproject
+008663a rgw, radosgw-admin: bucket link uses bucket instance id now
+6ce7116 civetweb: update subproject
 43d837d rgw: radosgw-admin object rewrite
-4c99e97 (origin/wip-8062) mon/OSDMonitor: ignore boot message from before last up_from
+4c99e97 mon/OSDMonitor: ignore boot message from before last up_from
 a8f0953 osd/ReplicatedPG: adjust obc + snapset_obc locking strategy
-86b8594 (origin/wip-6789) mon: Monitor: suicide on start if mon has been removed from monmap
+86b8594 mon: Monitor: suicide on start if mon has been removed from monmap
 02048dc mds: guarantee message ordering when importing non-auth caps
 ac51fca mds: include truncate_seq/truncate_size in filelock's state
 808ba13 mds: remove wrong assertion for remote frozen authpin
 860d727 osdc/Objecter: move mapping into struct, helper
-18642ed (origin/wip-8042) mon: tell peers missing features during probe
+18642ed mon: tell peers missing features during probe
 39ca440 mon: move required_features back into Monitor
 c8039ab mon: ignore sync clients without required_features
-50ed65f (origin/wip-6480) auth: remove unused get_global_id() method
+50ed65f auth: remove unused get_global_id() method
 b297689 auth: make AuthClientHandler::validate_ticket() protected
 3ccef66 auth: AuthClientHandler const cleanup
 9af10b2 auth: CephxProtocol const cleanup
@@ -5731,34 +5931,34 @@ b297689 auth: make AuthClientHandler::validate_ticket() protected
 edd542e tools: Improve ceph_scratchtoolpp
 34d69cd mon: refresh elector required_features when they change
 b3b502f mon/Elector: ignore ACK from peers without required features
-f1c6b65 (origin/wip-8028) ceph.spec.in: require redhat-lsb-core
+f1c6b65 ceph.spec.in: require redhat-lsb-core
 ae09361 mailmap: Yan, Zheng name normalization
 5ee0b7b mailmap: Nikola Kotur affiliation
-02aedbc (origin/wip-8004) client: wake up umount waiter if receiving session open message
+02aedbc client: wake up umount waiter if receiving session open message
 409999c rbd: Prevent Seg fault by checking read result in snap_read_header()
 9c6733e librados: Allow rados_pool_list() to get NULL buffer if len == 0
 1848a23 librados: Fix typo for read functions documentation
-a8330f5 (origin/wip-5469) librbd: fix zero length request handling
-22a0c1f (origin/wip-8045) osd: do not block when updating osdmap superblock features
+a8330f5 librbd: fix zero length request handling
+22a0c1f osd: do not block when updating osdmap superblock features
 43f0519 doc: Made minor changes to quick start preflight for RHEL.
 ab7a25c doc: Notes and minor modifications to gateway installation doc.
 1d74170 pipe: only read AuthSessionHandler under pipe_lock
-084db49 (origin/wip-die-mkcephfs) remove mkcephfs
-277e7ac (origin/wip-5835) debian: update ceph description
+084db49 remove mkcephfs
+277e7ac debian: update ceph description
 72dc732 ceph.spec: update ceph description
-79ac2f7 (origin/wip-8001) osd/PG: set CREATING pg state bit until we peer for the first time
-4de49e8 (origin/wip-8019) os/FileStore: reset journal state on umount
+79ac2f7 osd/PG: set CREATING pg state bit until we peer for the first time
+4de49e8 os/FileStore: reset journal state on umount
 1cdb738 vstart.sh: make crush location match up with what init-ceph does
-d2edd9c (origin/wip-8031) osd: drop unused same_for_*() helpers
+d2edd9c osd: drop unused same_for_*() helpers
 5d61161 osd: drop previous interval ops even if primary happens to be the same
 d3833dd osd: make misdirected checks explicit about replicas, flags
-55cfb14 (origin/wip-8026) mds: fix shared_ptr MDRequest bugs
-2ba00bd (origin/wip-7914) erasure-code: thread-safe initialization of gf-complete
+55cfb14 mds: fix shared_ptr MDRequest bugs
+2ba00bd erasure-code: thread-safe initialization of gf-complete
 0022d91 mailmap: Paul Meserve affiliation
 f261ad1 mailmap: Michael Nelson affiliation
 89a5ec7 mailmap: Sandon Van Ness name normalization
 010dff1 osd_types: fix pg_stat_t::encode, object_stat_sum_t::decode version
-22894c3 (origin/wip-4354-shared_ptr) SimpleLock: Switch MutationRef& for MutationRef in get_xlock()
+22894c3 SimpleLock: Switch MutationRef& for MutationRef in get_xlock()
 5f2ccab MDCache: use raw MutationImpl* instead of MutationRef in a few places
 6c3fc3e Locker: use raw MutationImpl* instead of MutationRef in several places
 920fd6c Locker: use a null_ref instead of NULL
@@ -5771,33 +5971,33 @@ a6a0800 Server: use MutationRef instead of raw pointer
 4dedab6 MDS: switch cache object classes to use MutationRef instead of raw pointers
 9a4a429 ceph_test_rados_api_misc: print osd_max_attr_size
 4b66868 doc: Removed --stable arg and replaced with --release arg for ceph-deploy.
-7273d9e (origin/wip-7975) osd/ReplicatedPG: warn if invalid stats prevent us from activating agent
+7273d9e osd/ReplicatedPG: warn if invalid stats prevent us from activating agent
 02d7e84 osd/ReplicatedPG: dump agent state on pg query
 fa46aec osd/ReplicatedPG: kickstart the agent if scrub stats become valid
-07099ec (origin/wip-8003) ReplicatedPG: do not evict head while clone is being promoted
+07099ec ReplicatedPG: do not evict head while clone is being promoted
 67b2342 ReplicatedPG::trim_object: account evicted prev clone for stats
 6ff6c19 ReplicatedPG::make_writeable: check for evicted clone before adjusting for clone_overlap
 a8a49a0 ReplicatedPG: use get_clone_bytes on evict/promote
 3286283 ReplicatedPG::_scrub: account for clone_overlap on each clone
 4d5db06 ReplicatedPG::find_object_context: check obs.exists on clone obc before checking snaps
 d0e2c98 ReplicatedPG::finish_promote: add debugging assert for clone_size
-e213ee1 (origin/wip-7919) qa: workunits: mon: auth_caps.sh: test 'auth' caps requirements
+e213ee1 qa: workunits: mon: auth_caps.sh: test 'auth' caps requirements
 85a1cf3 mon: MonCommands: have all 'auth' commands require 'execute' caps
 4c2d73a (tag: v0.79) 0.79
 51da3bb mds: fix uninit val in MMDSSlaveRequest
-09586ec (origin/wip-shrink-icache) client: pin parent dentry of inode who has ll_ref > 0
+09586ec client: pin parent dentry of inode who has ll_ref > 0
 76cbd5d mds: fix uninit MMDSSlaveRequest lock_type
-4ea9e48 (origin/wip-8002) osd: fix map subscription in YOU_DIED osd_ping handler
+4ea9e48 osd: fix map subscription in YOU_DIED osd_ping handler
 2f7522c msgr: add ms_dump_on_send option
 87e6a62 mds: fix uninitialized fields in MDiscover
 67fd421 mon: wait for quorum for MMonGetVersion
 a75af4c client: try shrinking kernel inode cache when trimming session caps
-82015e4 (origin/wip-7958) client: release clean pages if no open file want RDCACHE
+82015e4 client: release clean pages if no open file want RDCACHE
 9484daf osd: disable agent when stats_invalid (post-split)
-232ac1a (origin/wip-7994) OSD: _share_map_outgoing whenever sending a message to a peer
-6f40b64 (origin/wip-7993) ceph-post-file: use getopt for multiple options, add longopts to help
-2f6a62b (origin/wip-7992) ceph-post-file: fix installation of ssh key files
-e02b7f9 (origin/wip-7983) osd/ReplicatedPG: do not hit_set_persist while potentially backfilling hit_set_*
+232ac1a OSD: _share_map_outgoing whenever sending a message to a peer
+6f40b64 ceph-post-file: use getopt for multiple options, add longopts to help
+2f6a62b ceph-post-file: fix installation of ssh key files
+e02b7f9 osd/ReplicatedPG: do not hit_set_persist while potentially backfilling hit_set_*
 4aef403 doc/release-notes: note about emperor backport of mon auth fix
 db266a3 mon: MonCommands.h: have 'auth' read-only operations require 'x' cap
 9caf3db Migrator: use a null ref instead of NULL when calling into path_traverse
@@ -5819,48 +6019,48 @@ abc19dd client: drop Fr cap before gettattr CEPH_STAT_CAP_SIZE
 2d5bd84 client: assign implemented caps to caps field of MClientCaps
 1538a98 client: hold Fcr caps during readahead
 701c22a client: implement RDCACHE reference tracking
-b219c8f (origin/wip-cache-create-fix) ReplicatedPG: fix CEPH_OSD_OP_CREATE on cache pools
-be8b228 (origin/wip-7922) osd: Send REJECT to all previously acquired reservations
+b219c8f ReplicatedPG: fix CEPH_OSD_OP_CREATE on cache pools
+be8b228 osd: Send REJECT to all previously acquired reservations
 18201ef doc/release-notes: v0.79 release notes
 4dc6266 Fix byte-order dependency in calculation of initial challenge
-6cb50d7 (origin/wip-7964) ReplicatedPG::_delete_oid: adjust num_object_clones
+6cb50d7 ReplicatedPG::_delete_oid: adjust num_object_clones
 0f2ab4d ReplicatedPG::agent_choose_mode: improve debugging
-0552ecb (origin/wip-7978) rgw: only look at next placement rule if we're not at the last rule
+0552ecb rgw: only look at next placement rule if we're not at the last rule
 eb23ac4 ReplicatedPG::agent_choose_mode: use num_user_objects for target_max_bytes calc
 cc9ca67 ReplicatedPG::agent_choose_mode: exclude omap objects for ec base pool
 a130a44 osd/: track num_objects_omap in pg stats
 9894a55 ReplicatedPG: handle FLAG_OMAP on promote and copyfrom
-a11b3e8 (origin/wip-7858) ReplicatedPG::do_op: use get_object_context for list-snaps
+a11b3e8 ReplicatedPG::do_op: use get_object_context for list-snaps
 78e9813 ReplicatedPG: do not create snapdir on head eviction
-31df91e (origin/wip-backfill) osd: add 'osd debug reject backfill probability' option
-d323634 (origin/wip-test-alloc-hint-ec-fix) qa: test_alloc_hint: set ec ruleset-failure-domain to osd
-8e46fe0 (origin/wip-vstop-unmap) stop.sh: unmap rbd images when stopping the whole cluster
+31df91e osd: add 'osd debug reject backfill probability' option
+d323634 qa: test_alloc_hint: set ec ruleset-failure-domain to osd
+8e46fe0 stop.sh: unmap rbd images when stopping the whole cluster
 afc5dc5 stop.sh: do not trace commands
 0110a19 stop.sh: indent 4 spaces universally
-e4a8535 (origin/wip-vstart-erasure-code-default) vstart: set a sensible default for ruleset-failure-domain
-c43822c (origin/wip-7965) lockdep: reset state on shutdown
+e4a8535 vstart: set a sensible default for ruleset-failure-domain
+c43822c lockdep: reset state on shutdown
 7a49f3d lockdep: do not initialize if already started
-6bf46e2 (origin/wip-7915) OSDMap: bump snap_epoch when adding a tier
-01445d5 (origin/wip-7937) ReplicatedPG::_scrub: don't bail early for snapdir
-5f680f9 (origin/wip-7659) ReplicatedPG::_verify_no_head_clones: missing implies that the clone exists
-7909262 (origin/wip-init) debian: fix control to allow upgrades
+6bf46e2 OSDMap: bump snap_epoch when adding a tier
+01445d5 ReplicatedPG::_scrub: don't bail early for snapdir
+5f680f9 ReplicatedPG::_verify_no_head_clones: missing implies that the clone exists
+7909262 debian: fix control to allow upgrades
 17732dc debian: move rbdmap config and sysvinit/upstart scripts into ceph-common
 1d42de5 init.d: correcting rbdmap init order:
-771e88a (origin/wip-dirfrag) mds: fix check for merging/spliting dirfrag
-43bc39b (origin/wip-largedir2, origin/wip-largedir) mds: ignore CDir::check_rstats() when debug_scatterstat is off
+771e88a mds: fix check for merging/spliting dirfrag
+43bc39b mds: ignore CDir::check_rstats() when debug_scatterstat is off
 5a9b99a mds: initialize bloom filter according to dirfrag size
 16af25f mds: add dentries in dirfrag to LRU in reverse order
 06ecb2c mds: handle freeze authpin race
 d1967f3 mds: treat cluster as degraded when there is clientreplay MDS
 b65a818 mds: don't start new segment while finishing disambiguate imports
 ff44a99 mds: trim non-auth subtree more aggressively
-c09f58e (origin/wip-7450) radosgw-admin: don't always generate access key for subusers
+c09f58e radosgw-admin: don't always generate access key for subusers
 e1783a6 rgw: subuser creation can be idempotent
 f54c684 radosgw-admin: fix subuser modify
 e095b1d debian: make ceph-common own etc/ceph, var/log/ceph
-d4d39a0 (origin/wip-7907) osd/ReplicatedPG: mark_unrollbackable when _rollback_to head
+d4d39a0 osd/ReplicatedPG: mark_unrollbackable when _rollback_to head
 1acd547 debian: move ceph-rest-api from ceph-common to ceph
-a76a129 (origin/wip-7939) PG: set role for replicated even if role != shard
+a76a129 PG: set role for replicated even if role != shard
 ef94fcd test: Add EC testing to ceph_test_rados_api_snaphots
 1871fe7 test: Add EC testing to ceph_test_rados_api_lock
 759878c test: Add EC testing to ceph_test_rados_api_tier
@@ -5876,8 +6076,8 @@ c106976 librados: Add missing C variants for alignment
 2d7da1d librados: Add missing rados_wait_for_latest_osdmap()
 dde1c91 osd/ReplicatedPG: continue scrub logic when snapset.head_exists doesn't match
 c2e5a42 osd/ReplicatedPG: handle snapdir properly during scrub
-ed5a5e0 (origin/wip-7935) rgw: reverse logic to identify next part
-48fbce9 (origin/wip-7916) ReplicatedPG: improve get_object_context debugging
+ed5a5e0 rgw: reverse logic to identify next part
+48fbce9 ReplicatedPG: improve get_object_context debugging
 5c9b8a2 osd/PG: debug cached_removed_snaps changes
 824da20 librbd: skip zeroes when copying an image
 e44f85c qa/workunits/cephtool/test.sh: test 'osd pg-temp ...'
@@ -5887,8 +6087,8 @@ e44f85c qa/workunits/cephtool/test.sh: test 'osd pg-temp ...'
 07dcffa OSDMonitor: add 'osd pg-temp ...' command
 d3183e3 java/test: ceph.file.layout xattr is still not there now
 cd1a9c4 Add ceph-client-debug and jerasure shared objects to RPM spec file.
-81853c6 (origin/wip-7912) mon/PGMap: clear pool sum when last pg is deleted
-8c761c4 (origin/wip-ec-profile-idempotent) mon: make 'ceph osd erasure-code-profile set ...' idempotent
+81853c6 mon/PGMap: clear pool sum when last pg is deleted
+8c761c4 mon: make 'ceph osd erasure-code-profile set ...' idempotent
 7d321d8 qa/workunits/rados/test_alloc_hint: fix erasure syntax
 2826fda doc: fix typos in glossary
 7fa025e .gitignore: add examples/librados files
@@ -5897,33 +6097,33 @@ cd1a9c4 Add ceph-client-debug and jerasure shared objects to RPM spec file.
 ff51d3f doc: pgbackend dev doc outdated notice
 d5973aa doc: update jerasure plugin
 402e104 doc: erasure code developer notes updates
-74fa3a7 (origin/wip-fuse-access) fuse: implement 'access' low level function
+74fa3a7 fuse: implement 'access' low level function
 e672c52 osd/ReplicatedPG: fix cache tier scrub again
 ea47b4a ceph_test_rados_api_tier: improve promote+scrub test
-fc1a424 (origin/wip-7849) ceph-conf: use global_pre_init to avoid starting logging
+fc1a424 ceph-conf: use global_pre_init to avoid starting logging
 98551fc global: separate first half of global_init into global_pre_init
-c3292e4 (origin/wip-cache-scrub) ceph_test_rados_api_tier: improve cache tier + scrub test
+c3292e4 ceph_test_rados_api_tier: improve cache tier + scrub test
 cfd6f23 osd/ReplicatedPG: tolerate trailing missing clones on cache tiers
 b8ea656 java/test: ceph.file.layout xattr is not there now
 4f9f7f8 qa/workunits/fs/misc/layout_vxattrs: ceph.file.layout is not listed
 b71e64d mds: find approximal bounds when adjusting subtree auth
 fd28ad5 doc: erasure-code development complete
-399de24 (origin/wip-sse-i386) erasure-code: do not attempt to compile SSE4 on i386
+399de24 erasure-code: do not attempt to compile SSE4 on i386
 07ccc4e mds: commit new dirfrag before splitting it
 bd6e35c rbd.cc: yes, cover formatted output as well.  sigh.
 780fa91 Revert "ceph-conf: do not log"
 b5a6320 Revert "ceph-conf: no admin_socket"
 44afc23 init: fix OSD startup issue
 fd76fec rbd.cc: tolerate lack of NUL-termination on block_name_prefix
-056151a (origin/wip-7888) mon/MonClient: use keepalive2 to verify the mon session is live
+056151a mon/MonClient: use keepalive2 to verify the mon session is live
 d747d79 msgr: add KEEPALIVE2 feature
-1aa1d93 (origin/wip-7904) ReplicatedPG: hit_set_setup, agent_setup, skip if !active
-f1c7b4e (origin/wip-7867) client: pin Inode during readahead
+1aa1d93 ReplicatedPG: hit_set_setup, agent_setup, skip if !active
+f1c7b4e client: pin Inode during readahead
 032d4ec osdc/ObjectCacher: call read completion even when no target buffer
-68dc0c6 (origin/wip-7903) rgw: move max_chunk_size initialization
+68dc0c6 rgw: move max_chunk_size initialization
 a6be1d6 PG: always clear agent_state in clear_primary_state
 dfd3cb5 rgw: only look at prefetched data if we actually prefetched
-d78e678 (origin/wip-7902) osd/PG: fix choose_acting revert to up case
+d78e678 osd/PG: fix choose_acting revert to up case
 0bb911c mds: don't trim non-auth root inode/dirfrag
 90b4e53 mds: include authority of the overwrited inode in rename witnesses
 367987f mds: don't increase nlink when rollback stray reintegration
@@ -5945,7 +6145,7 @@ e535f7f mds: avoid journaling non-auth opened inode
 ffcbcdd mds: handle race between cache rejoin and fragmenting
 6963a8f mds: handle interaction between slave rollback and fragmenting
 72eaa5e doc: fix typos in tiering dev doc
-1b5e8f4 (origin/wip-7880) mds: properly propagate dirty dirstat to auth inode
+1b5e8f4 mds: properly propagate dirty dirstat to auth inode
 38d4c71 Pipe: rename keepalive->send_keepalive
 c64d03d mon/OSDMonitor: require OSD_CACHEPOOL feature before using tiering features
 69321bf mon/OSDMonitor: prevent setting hit_set unless all OSDs support it
@@ -5953,12 +6153,12 @@ eb71924 osd/ReplicatedPG: tolerate missing clones in cache pools
 6508d5e osd/ReplicatedPG: improve clone vs head checking
 9e2cd5f osd/ReplicatedPG: do not assert on clone_size mismatch
 7f026ba ceph_test_rados_api_tier: scrub while cache tier is missing clones
-7cb1d3a (origin/wip-fix-pools) qa/workunits/mon/pool_ops.sh: fix test
+7cb1d3a qa/workunits/mon/pool_ops.sh: fix test
 233801c qa/workunits/mon/pool_ops.sh: use expect_false
-72715b2 (origin/wip-7849-b) ceph-conf: no admin_socket
+72715b2 ceph-conf: no admin_socket
 fb20823 jerasure: fix up .gitignore
 acc31e7 ceph-conf: do not log
-ffd69ab (origin/wip-7876) rgw: use s->content_length instead of s->length
+ffd69ab rgw: use s->content_length instead of s->length
 501e31d logrotate: do not rotate empty logs (2nd logrotate file)
 91176f1 erasure-code: test encode/decode of SSE optimized jerasure plugins
 b76ad97 erasure-code: test jerasure SSE optimized plugins selection
@@ -5970,26 +6170,26 @@ cc0cc15 erasure-code: gf-complete / jerasure modules updates
 12d4f38 erasure-code: allow loading a plugin from factory()
 506d2bb logrotate improvement: do not rotate empty logs
 dc3ce58 osd: do not make pg_pool_t incompat when hit_sets are enabled
-92859ed (origin/wip-7837) ReplicatedPG: include pending_attrs when reseting attrs in WRITEFULL
-b6a431b (origin/wip-7874) ReplicatedPG: disable clone subsets for cache pools
-56974b9 (origin/wip-7860) test: Wait for tier removal before next test starts
-7999bc9 (origin/wip-7828) ReplicatedPG:: s/_delete_head/_delete_oid, adjust head_exists iff is_head
+92859ed ReplicatedPG: include pending_attrs when reseting attrs in WRITEFULL
+b6a431b ReplicatedPG: disable clone subsets for cache pools
+56974b9 test: Wait for tier removal before next test starts
+7999bc9 ReplicatedPG:: s/_delete_head/_delete_oid, adjust head_exists iff is_head
 9865409 rgw: configurable chunk size
-832c007 (origin/wip-7871) RadosModel: allow --no-omap to be specified seperately from --ec-pool
-555ae12 (origin/wip-7870) ReplicatedPG::do_osd_ops: only return ENOTSUP on OMAP write ops
-6cb8595 (origin/wip-7835) ReplicatedPG::make_writeable: fill in ssc on clone
-21fc535 (origin/wip-7823) osd: trim copy-get backend read to object size
+832c007 RadosModel: allow --no-omap to be specified seperately from --ec-pool
+555ae12 ReplicatedPG::do_osd_ops: only return ENOTSUP on OMAP write ops
+6cb8595 ReplicatedPG::make_writeable: fill in ssc on clone
+21fc535 osd: trim copy-get backend read to object size
 18c3e9e osd: fix tests due to no default erasure-code ruleset
 29f7420 Revert "osd: create the erasure-code ruleset in OSDMap::build_simple"
 4cf9a73 fix bug in 'defaultweight' calculation on OSD start.
-2779e2a (origin/wip-7863-wusui) Make sure s3_utilities are found.
+2779e2a Make sure s3_utilities are found.
 38bcd3c osd: start_flush() should check for missing clones and return if requested
 bf87562 osd: Error from start_flush() not checked in agent_maybe_flush()
 ed43aa0 osd: Add logging of missed l_osd_agent_skip cases
 d1d99df osd: Improve logging output including pg_shard_t as osd#(shard)
 4ac7808 minor corrections to package descriptions
 012bb5f minor init.d scripts lintianisation:
-14b743b (origin/wip-7676-firefly) rgw: don't modify rgw_bucket for data extra pool
+14b743b rgw: don't modify rgw_bucket for data extra pool
 7989cbd rgw: multipart meta object uses extra data pool
 f023f90 rgw: zone placement info includes extra data pool
 3677076 rgw: add data_extra pool to bucket
@@ -6001,19 +6201,19 @@ a310ea2 mailmap: Guang Yang affiliation
 2faf271 mailmap: Mohammad Salehe affiliation
 27c28ad mailmap: Sharif Olorin affiliation
 9fd61c7 mailmap: Stephan Renatus affiliation
-01b9966 (origin/wip-dz-watch-test) qa: Add ceph_multi_stress_watch for rep and ec
-6ec28fd (origin/wip-6465) ensure pybind is in the PYTHONPATH
+01b9966 qa: Add ceph_multi_stress_watch for rep and ec
+6ec28fd ensure pybind is in the PYTHONPATH
 37899fa be nitpicky about missing references
 4186916 Revert "erasure-code: gf-complete detects SSE at runtime"
-3f014da (origin/wip-status-function-names) mon: Monitor: s/_mon_status()/get_mon_status()/
+3f014da mon: Monitor: s/_mon_status()/get_mon_status()/
 ed780ad mon: Monitor: s/get_status()/get_cluster_status()/
-08a3d6b (origin/wip-listxattr) client: don't include ceph.{file,dir}.layout vxattr in listxattr()
+08a3d6b client: don't include ceph.{file,dir}.layout vxattr in listxattr()
 1bc680e erasure-code: deactivate SSE optimizations
-8116394 (origin/wip-7827) msg: set recv stamp for local delivery
+8116394 msg: set recv stamp for local delivery
 3ebeb8e mailmap: Allen Samuels affiliation
 a217cd6 mailmap: Warren Usui is with Inktank
 a4c652c document adding dev key for custom Apache/FCGI install
-fb72330 (origin/wip-7810) mds: reset connection priv after connection's session is removed
+fb72330 mds: reset connection priv after connection's session is removed
 e4f2d9f doc/release-notes: 0.78 final notes
 185bcc4 doc/release-notes: final 0.78
 1817c23 rgw: get rid of a memory allocation
@@ -6023,16 +6223,16 @@ f6c746c (tag: v0.78) 0.78
 49a0190 doc/release-notes: 0.78 notes
 dbcf447 erasure-code: gf-complete detects SSE at runtime
 8c7f6c1 autotools: AX_SSE detects the compiler SSE capabilities
-5a3f6c7 (origin/wip-7438) test: Add erasure coding to stress watch test
+5a3f6c7 test: Add erasure coding to stress watch test
 6fb6588 test: Reorg multi_stress_watch to prepare for ec option
 b110275 test: Fix ceph_filestore_dump.sh test for new EC pool creation
 dad0faf tests: use ^ instead of ! as invalid char
 d4d77d7 doc/release-notes: stop confusing sphinx
-78ede90 (origin/wip-7780) objecter: waive OSDMAP_FULL check for MDS
-a4849fb (origin/wip-flush-journal-asok) qa: test_alloc_hint: flush journal before prodding the FS
+78ede90 objecter: waive OSDMAP_FULL check for MDS
+a4849fb qa: test_alloc_hint: flush journal before prodding the FS
 9d31c1b osd: add flush_journal admin socket command
-b444e88 (origin/wip-multimds-fixes) mds: fix typo in MDCache::handle_cache_rejoin_strong
-ddbb2f7 (origin/wip-jerasure-submodules) erasure-code: add gf-complete / jerasure submodules
+b444e88 mds: fix typo in MDCache::handle_cache_rejoin_strong
+ddbb2f7 erasure-code: add gf-complete / jerasure submodules
 5c34a0f erasure-code: remove copy of gf-complete / jerasure
 0d167d2 mds: fix NULL pointer dereference in Server::handle_client_rename
 272b53b mds: avoid infinite loop in MDLog::submit_entry()
@@ -6053,23 +6253,23 @@ e909eaf mds: drop auth pins before waiting for dir unfreeze
 bc3325b mds: fix stack overflow caused by nested dispatch
 63a597b mds: rollback slave request after slave prepare is journalled
 a1ff489 mds: treat flushing as dirty when rejoining scattered locks
-1268dbb (origin/wip-tid_t) Change tid_t to ceph_tid_t to avoid conflicts with a popular type
-b227426 (origin/wip-no-version) Add NO_VERSION to avoid rebuilding ceph_ver.h and relinking
-cfb04b2 (origin/wip-limit-libkeyutils) Makefiles: remove libkeyutils from every binary except two
+1268dbb Change tid_t to ceph_tid_t to avoid conflicts with a popular type
+b227426 Add NO_VERSION to avoid rebuilding ceph_ver.h and relinking
+cfb04b2 Makefiles: remove libkeyutils from every binary except two
 e9eb641 remove gf-complete / jerasure sub modules
-fdcf3eb (origin/wip-7777) ReplicatedPG::do_op: delay if snapdir is unreadable
-7f7a998 (origin/wip-7708) mds/Locker: fix null deref on cap import
+fdcf3eb ReplicatedPG::do_op: delay if snapdir is unreadable
+7f7a998 mds/Locker: fix null deref on cap import
 4221e0d build: add gf-complete/jerasure to gitmodule_mirrors
-25d04fb (origin/wip-pq) osd: dump priority queue state on dequeue at level 30
+25d04fb osd: dump priority queue state on dequeue at level 30
 ff11965 osd: fix OpWQ dump locking
 4a3464c common/PrioritizedQueue: include first item's cost in dump
 de576d5 common/PrioritizedQueue: constify a few things
 8bd8944 common/PrioritizedQueue: fix remove_by_class() corner case
 f1e3bc9 doc/dev/cache-pool: describe the tiering agent
-d728426 (origin/wip-7733) PG::start_peering_interval: always send_notify if !primary
-b4420ff (origin/wip-7755) PG::find_best_info: fix log_tail component
+d728426 PG::start_peering_interval: always send_notify if !primary
+b4420ff PG::find_best_info: fix log_tail component
 1ddae7e erasure-code: jerasure and gf-complete moved to ceph namespace
-01a0f2d (origin/wip-6806) mon: OSDMonitor: don't rely on client-side validation for command arguments
+01a0f2d mon: OSDMonitor: don't rely on client-side validation for command arguments
 074c880 mon: Monitor: handle invalid 'quorum' command argument
 652056e mon: Properly handle errors from 'cmd_getval()' when needed
 543c642 erasure-code: disable SSE extensions
@@ -6087,19 +6287,19 @@ f8aa1ed mon: set the profile and ruleset defaults early
 063de51 osd: obsolete pg_pool_t properties with erasure_code_profile
 04d2fd1 mon: add the erasure-code-profile {set,get,rm,ls} MonCommand
 fa1d957 mon/Paxos: commit only after entire quorum acks
-aed0744 (origin/wip-7738) os/FileJournal: return errors on make_writeable() if reopen fails
-c31f38c (origin/wip-7728) ReplicatedPG: if !obc->obs->exists, lock snapdir obc if exists
+aed0744 os/FileJournal: return errors on make_writeable() if reopen fails
+c31f38c ReplicatedPG: if !obc->obs->exists, lock snapdir obc if exists
 9ee1084 ReplicatedPG: disallow trans which atomically create and remove an object
 f094400 Add file to store mirror location of module's.
-a9f8a9e (origin/wip-cli-err) ceph.in: Better error on bad arg to 'tell'
+a9f8a9e ceph.in: Better error on bad arg to 'tell'
 1a451f2 mon: functional tests teardown must be run on error
 514b5e3 mon: add helper to selection functions implementing tests
 e4b4b1f osd: OSDMap::erasure_code_profile accessors
 c4f8f26 osd: add OSDMap::erasure_code_profile
-2b9bd26 (origin/wip-tmap2omap-warn) mds: avoid spurious TMAP2OMAP warning
-e39c213 (origin/wip-7611) ceph.in: do not allow using 'tell' with interactive mode
-b2af217 (origin/wip-remotebit-dump) mds: Fix remotebit::dump for less common types
-9d77ce1 (origin/wip-rados-outfile) tools/rados: Allow binary file output of omap data
+2b9bd26 mds: avoid spurious TMAP2OMAP warning
+e39c213 ceph.in: do not allow using 'tell' with interactive mode
+b2af217 mds: Fix remotebit::dump for less common types
+9d77ce1 tools/rados: Allow binary file output of omap data
 be31998 erasure-code: make libcommon include liberasure-code
 e6d9066 erasure-code: add ostream to factory()
 de62572 erasure-code: remove dependency to the global context
@@ -6116,53 +6316,53 @@ cf25946 mon: create-erasure uses crush_ruleset_create_erasure
 8e07dbc mon: crush_ruleset_create_erasure error codes
 402e646 mon: crush_ruleset_create_erasure reduce verbosity
 6a16eac mon: create crush_ruleset_create_erasure helper
-1ae3314 (origin/wip-7684) client: force getattr when inline data is missing
-04de781 (origin/wip-7740) OSD::handle_pg_query: on dne pg, send lb=hobject_t() if deleting
+1ae3314 client: force getattr when inline data is missing
+04de781 OSD::handle_pg_query: on dne pg, send lb=hobject_t() if deleting
 9e21840 mds: include inline data in lock messages
 5b3422a mds: fix corner case of pushing inline data
-b2fcc6e (origin/wip-s3pm-wusui) Remove code duplication from s3 tests.
-979e8b4 (origin/wip-7732) PG::build_might_have_unfound: check pg_whomai, not osd whoami
-0f75c54 (origin/wip-7712) osd/ReplicatedPG: fix enqueue_front race
+b2fcc6e Remove code duplication from s3 tests.
+979e8b4 PG::build_might_have_unfound: check pg_whomai, not osd whoami
+0f75c54 osd/ReplicatedPG: fix enqueue_front race
 ef1d7c9 rados.py: Fixed docstring syntax warnings.
 02b746d doc: Fixed release notes syntax warnings.
 9cd67bb doc: Fixed hyperlink.
-599a8d7 (origin/wip-7698) test: Add ceph_filestore_dump.sh to test ceph_filestore_dump
+599a8d7 test: Add ceph_filestore_dump.sh to test ceph_filestore_dump
 31a6679 tools: Fix ceph_filestore_dump to fully operate on EC pools
 f633a03 tools: Cleanups in ceph_filestore_dump
-bbc0d6d (origin/wip-7718) PG::issue_repop: only adjust peer_info last_updates if not temp
+bbc0d6d PG::issue_repop: only adjust peer_info last_updates if not temp
 35f1b04 RGWListBucketMultiparts: init max_uploads/default_max with 0
 ab91b80 mon/OSDMonitor: fix fall-thru case
-fc85075 (origin/wip-cache-last-epoch-clean) mon/PGMap: only recalculate min_last_epoch_clean if incremental touches old min
+fc85075 mon/PGMap: only recalculate min_last_epoch_clean if incremental touches old min
 208959a mon/PGMap: cache min_last_epoch_clean
 6f9db6c unittest_mon_pgmap: fix warnings
 e941fef unittest_ceph_argparse: fix warnings
 f2c6ff3 tools/: make filenames consistent
-e330097 (origin/wip-7719) PG: clear want_pg_temp in clear_primary_state only if primary
+e330097 PG: clear want_pg_temp in clear_primary_state only if primary
 da159f8 doc/release-notes: note that radosgw's should be upgraded together
-f1bd59f (origin/wip-7692) mon: only do timecheck with known monmap
+f1bd59f mon: only do timecheck with known monmap
 fba88de ceph-mon: be a bit more verbose on error
-62af51c (origin/wip-7696) PG::activate: handle peer contigious with primary, but not auth_log
-70d87df (origin/wip-7489) ceph_mon: output error message if unable to bind.
+62af51c PG::activate: handle peer contigious with primary, but not auth_log
+70d87df ceph_mon: output error message if unable to bind.
 5ad9c16 ceph_mon: all output after initial fork go to dout/derr
 c95234a ceph_mon: split postfork() in two and finish postfork just before daemonize
 ceac36b doc/release-notes: 0.78 draft nodes; firefly draft notes
-87c911c (origin/wip-7709) osd/ReplicatedPG: release op locks on on commit+applied
+87c911c osd/ReplicatedPG: release op locks on on commit+applied
 c5b557e qa/workunits: misc -> fs/misc
 8c8b3e9 PGLog: remove unused variable
 282497e osd: add tunables for cache_min_{flush,evict}_age
 fa6887b osd: set default cache_target_{dirty,full}_ratios based on configurable
 a72b636 mds: fix empty fs rstat
-f2124c5 (origin/wip-7705) ceph_test_rados: wait for commit, not ack
+f2124c5 ceph_test_rados: wait for commit, not ack
 dd946e0 MOSDOp: include reassert_version in print
-73f6b4c (origin/wip-7706) config_opts: raise ms_pq_max_tokens_per_priority to 16MB
+73f6b4c config_opts: raise ms_pq_max_tokens_per_priority to 16MB
 2722a0a PrioritizedQueue: cap costs at max_tokens_per_subqueue
-88cb1c4 (origin/wip-3863) tools: Create ceph-client-debug
+88cb1c4 tools: Create ceph-client-debug
 d2ce029 libcephfs: add ceph_ll_lookup_inode
 724f30e client: Add lookup_parent & lookup_name
 f1f2826 mds: Return EINVAL for parent lookup on root ino
-a19ef01 (origin/wip-7703) rgw: manifest hold the actual bucket used for tail objects
+a19ef01 rgw: manifest hold the actual bucket used for tail objects
 33b889f rbd-fuse: fix signed/unsigned warning
-c973e46 (origin/wip-coverity-20140312) mds/Mutation.h: init export_dir with NULL in ctor
+c973e46 mds/Mutation.h: init export_dir with NULL in ctor
 fd383a9 mds/Migrator.h: init some members of import_state_t in ctor
 5a53aa8 mds/Migrator.h: init some export_state_t members in ctor
 b10692f CInode::encode_cap_message: add assert for cap
@@ -6176,33 +6376,33 @@ fe8a715 Make the configuration "filestore merge threshold" can be negative which
 94acb6b test_librbd.cc: add missing va_end() to test_ls_pp
 fb4ca94 mailmap: Danny Al-Gaaf name normalization
 fb8ff44 doc/release-notes: note that WATCH can get ENOENT now
-2cbad1b (origin/wip-7671) test/librados/watch_notify: create foo before watching
+2cbad1b test/librados/watch_notify: create foo before watching
 9d549eb test/system/st_rados_watch: expect ENOENT for watch on non-existent object
 b23a141 RGWListBucketMultiparts: init max_uploads/default_max with 0
 4057a30 AbstractWrite: initialize m_snap_seq with 0
-90a2654 (origin/wip-7682) ReplicatedPG::already_(complete|ack) should skip temp object ops
+90a2654 ReplicatedPG::already_(complete|ack) should skip temp object ops
 72bc1ef AdminSocket: initialize m_getdescs_hook in the constructor
 f7529cf RGWPutCORS_ObjStore_S3::get_params: check data before dereference
 5334d5c mds/Server.cc: check straydn before dereference
 047287a doc: Add "nearest power of two" to PG rule-of-thumb
 7bb0359 OSDMonitor::prepare_pool_op: add missing break in case
-a4a91cc (origin/wip-7649) PG: do not wait for flushed before activation
+a4a91cc PG: do not wait for flushed before activation
 a576eb3 PG: do not serve requests until replicas have activated
-980d2b5 (origin/wip-7681) ECBackend: when removing the temp obj, use the right shard
+980d2b5 ECBackend: when removing the temp obj, use the right shard
 dc00661 osd_types: print lb if incomplete even if empty
-8e76e4e (origin/wip-7695) build-doc: fix checks for required commands for non-debian
-dc82cd7 (origin/wip-7641) debian: make ceph depend on ceph-common >= 0.67
-d573710 (origin/wip-7687) rgw: don't overwrite bucket entry data when syncing user stats
+8e76e4e build-doc: fix checks for required commands for non-debian
+dc82cd7 debian: make ceph depend on ceph-common >= 0.67
+d573710 rgw: don't overwrite bucket entry data when syncing user stats
 2fbd772 qa/workunits/cephtool/test.sh: fix thrash (more)
 64a6b26 doc/release-notes: fill in some firefly history
 f4196cc doc/release-notes: firefly draft release notes
 24774a8 osd/ReplicatedPG: fix typo
 3d5a4b5 ReplicatedPG: CEPH_OSD_OP_WATCH return -ENOENT if !obs.exists
-00bf3b5 (origin/wip-7674) osd/ReplicatedPG: do not include hit_set objects in full calculation
-1836b6c (origin/wip-7592-final) osd: hit_set_persist(): Verify all objects aren't degraded
-42ef8ba (origin/wip-6889) rgw: don't log system requests in usage log
-406ff0b (origin/wip-is_down-boolean) OSDMap: clarify is_{down,in}() definitions
-fe4ad29 (origin/wip-rbd-fuse-enumerate) rbd-fuse: fix enumerate_images() image names buffer size issue
+00bf3b5 osd/ReplicatedPG: do not include hit_set objects in full calculation
+1836b6c osd: hit_set_persist(): Verify all objects aren't degraded
+42ef8ba rgw: don't log system requests in usage log
+406ff0b OSDMap: clarify is_{down,in}() definitions
+fe4ad29 rbd-fuse: fix enumerate_images() image names buffer size issue
 377c919 rados_connect not thread-safe when using nss (documentation)
 861e62a Update Python hashbang to respect environment
 fa30eb5 rados.py: fix typo in Ioctx::read() docstring
@@ -6210,19 +6410,19 @@ fa30eb5 rados.py: fix typo in Ioctx::read() docstring
 745f72c Fixed get_status() to find client.radosgw fields inside of ps output.
 880bc3a Fix get_status() to find client.rados text inside of ps command results.
 fbd9c15 osd: Remove unused checkpoint code
-d3e3df7 (origin/wip-flock) mds: fix owner check of file lock
-8a72de3 (origin/wip-7663) ReplicatedPG: adjust pending_attrs correctly in copy_from
+d3e3df7 mds: fix owner check of file lock
+8a72de3 ReplicatedPG: adjust pending_attrs correctly in copy_from
 6669e4d ReplicatedPG: _delete_head should adjust pending_attrs
 60c1b9a ReplicatedPG: use pending_attrs in rollback
 d7c4d6a doc: Added init caps to Signed-off-by: and Fixes:
-2b28407 (origin/wip-doc-prereq) doc: update build prerequisites
+2b28407 doc: update build prerequisites
 7ac98b2 doc: Updated sign-off by to sign-off-by
-2e420f9 (origin/wip-build-doc) doc: rm duplicate info from release-process
+2e420f9 doc: rm duplicate info from release-process
 52a2d69 doc: fix reST formatting in release-process
 bb73711 doc: update release-process for packages
 dd5a378 doc: misc updates for release-process
-e272f74 (origin/wip-coverity-20140409) rgw_rados.h: RGWRegion: initialize cct and store with NULL
-8de8819 (origin/wip-7672) PG::choose_acting: filter CRUSH_ITEM_NONE out of have
+e272f74 rgw_rados.h: RGWRegion: initialize cct and store with NULL
+8de8819 PG::choose_acting: filter CRUSH_ITEM_NONE out of have
 c7c9ae3 RadosModel.h: initialize CopyFromOp::snap
 d7af7eb RadosModel.h: TestOp: initialize comp with NULL
 9df9f4c ReplicatedPG.h: CopyResults() initialize final_tx with NULL
@@ -6240,7 +6440,7 @@ d61fcfa ceph-filestore-dump.cc: pass OSDSuperblock by reference
 62763d5 watch_info_t: pass parameter by reference
 246564b pg_t::get_split_bits: add assert to silence coverity
 aba5b7c rbdmap: bugfix upstart script
-2e342d6 (origin/wip-libxfs-flag) FileStore: support compiling without libxfs
+2e342d6 FileStore: support compiling without libxfs
 2626604 erasure-code: LARGEST_VECTOR_WORDSIZE is always 16
 2beb2a5 erasure-code: upgrade to jerasure version 2
 b74115a autotools: set SIMD_FLAGS with SSE flags
@@ -6252,8 +6452,8 @@ eb6ffdb erasure-code: remove jerasure version 1
 7884780 osd_types.cc: add missing break in operator<< case handling
 83731a7 ReplicatedPG::finish_ctx: clear object_info if !obs.exists
 a7afa14 config.cc: add debug_ prefix to subsys logging levels
-55c23a1 (origin/wip-hint-tests) qa: add script for testing rados allocation hint
-54ffdcc (origin/wip-da-fix-doc) get-involved.rst: update information
+55c23a1 qa: add script for testing rados allocation hint
+54ffdcc get-involved.rst: update information
 d1a888e swift/containerops.rst: fix some typos
 93b95a2 radosgw/troubleshooting.rst: s/ceph-osd/OSD/
 2223a37 radosgw/config-ref.rst: fix typo
@@ -6269,73 +6469,73 @@ cf9f017 config.rst: fix typo
 f581bda rados: add set-alloc-hint command
 a4cbb19 rados/operations/control.rst: fix typo
 9bf39e2 Broke down sysinfo's format into a histogram with a value and count so that we just see how many of each version/distro/kernel/os/arch/cpu/etc are running
-2591668 (origin/wip-div) PGLog::proc_replica_log: select divergent log entries correctly
+2591668 PGLog::proc_replica_log: select divergent log entries correctly
 3befb93 PGLog::_merge_object_divergent_entries: handle missing.have == prior_version
 7c77ff6 TestPGLog: add a test case verifying case where we have the prior_version
 e830f9f TestPGLog: check on last_update in run_test_case
 4d6a74d TestPGLog::proc_replica_log: call doesn't adjust olog
-71b4474 (origin/wip-nfs-export) client: fix Client::getcwd()
+71b4474 client: fix Client::getcwd()
 617ce67 mds: introduce LOOKUPNAME MDS request
 1c8c618 qa/workunits/cephtool/test.sh: fix 'osd thrash' test
-b62f9f0 (origin/wip-7642) mon/OSDMonitor: feature feature check bit arithmetic
-8d52fb7 (origin/wip-7652) mon/PGMap: send pg create messages to primary, not acting[0]
+b62f9f0 mon/OSDMonitor: feature feature check bit arithmetic
+8d52fb7 mon/PGMap: send pg create messages to primary, not acting[0]
 c8b34f1 mon/PGMonitor: improve debugging on PGMap updates slightly
 819cce2 mon/OSDMonitor: make osdmap feature checks non-racy
 b9bcc15 mon/OSDMonitor: prevent set primary-affinity unless all OSDs support it
-5f7efec (origin/wip-7650) tools/rados/rados.cc: use write_full for sync_write for ec pools
-38fd666 (origin/wip-7210) qa: workunits/mon/rbd_snaps_ops.sh: ENOTSUP on snap rm from copied pool
+5f7efec tools/rados/rados.cc: use write_full for sync_write for ec pools
+38fd666 qa: workunits/mon/rbd_snaps_ops.sh: ENOTSUP on snap rm from copied pool
 c13e1b7 mon: OSDMonitor: don't remove unamanaged snaps from not-unmanaged pools
-135c27e (origin/wip-7575) osd: Add hit_set_flushing to track current flushes and prevent races
+135c27e osd: Add hit_set_flushing to track current flushes and prevent races
 3dd09e3 Removed nw_info from sysinfo
 09a317f Made crush_types to be a map of type to count, so we can tell how many racks/rows/hosts/etc are there
 e53aed2 SubmittingPatches: clarify "github fork" in preference to "clone"
 c9eaa65 Changed Availability section of ceph-mds.rst to reference ceph-mds, not ceph-mon. Signed-off-by: James Ryan Cresawn <jrcresawn@gmail.com>
-09668a4 (origin/wip-7637) osd: fix agent thread shutdown
+09668a4 osd: fix agent thread shutdown
 7411c3c logrotate: copy/paste daemon list from *-all-starter.conf
-b6872b2 (origin/wip-7638) ReplicatedPG::trim_object: use old_snaps for rollback
-b5b67d1 (origin/wip-7634) ReplicatedPG: use hobject_t for snapset_contexts map
-b436930 (origin/wip-firefly-misc) qa/workunits/rest/test.py: do not test 'osd thrash'
+b6872b2 ReplicatedPG::trim_object: use old_snaps for rollback
+b5b67d1 ReplicatedPG: use hobject_t for snapset_contexts map
+b436930 qa/workunits/rest/test.py: do not test 'osd thrash'
 237f0fb os/ObjectStore: dump COLL_MOVE_RENAME
-f888ab4 (origin/wip-7632) ReplicatedPG: consistently use ctx->at_version.version for stashed object
-eca7e63 (origin/wip-7393) ReplicatedPG: clean up num_dirty adjustments
-173116f (origin/wip-scrub-lock) osd: only register for scrub if we are the PG primary
+f888ab4 ReplicatedPG: consistently use ctx->at_version.version for stashed object
+eca7e63 ReplicatedPG: clean up num_dirty adjustments
+173116f osd: only register for scrub if we are the PG primary
 d379b1f osd: bracket role changes with scrub reg/unreg
 c8c2f54 Client: fix build issue (lost semicolon)
-d171418 (origin/wip-7610) obj_bencher: allocate contentsChars to object_size, not op_size
-bafd76a (origin/wip-7624) ReplicatedPG: ensure clones are readable after find_object_context
+d171418 obj_bencher: allocate contentsChars to object_size, not op_size
+bafd76a ReplicatedPG: ensure clones are readable after find_object_context
 90f5a68 1. Removed name of the pool from pool_metadata 2. Included pool type in pool_metadata 3. Renamed rep_size attribute to size in pool_metadata
 da97fee 1. simplified the 'bytes' info to just be bytes 2. prefix all the members of the components_info with 'num_'
-2adc534 (origin/wip-pool-delete) mon/OSDMonitor: fix pool deletion checks, races
-d9e8806 (origin/wip-7618) ReplicatedPG::wait_for_degraded_object: only recover if found
+2adc534 mon/OSDMonitor: fix pool deletion checks, races
+d9e8806 ReplicatedPG::wait_for_degraded_object: only recover if found
 a222e7a ReplicatedPG::recover_replicas: do not assume that missing objects are unfound
 3f59f02 Revert "c_read_operations.cc: fix resource leak"
-a71ddb0 (origin/wip-7562) mon: make quorum list (by name) be in quorum order
-240446e (origin/wip-7487) test: merge unittest_crushwrapper and unittest_crush_wrapper
+a71ddb0 mon: make quorum list (by name) be in quorum order
+240446e test: merge unittest_crushwrapper and unittest_crush_wrapper
 772968e mon/OSDMonitor: disallow crush buckets of type 0
-8b3934f (origin/wip-7616) PGBackend::rollback_stash: remove the correct shard
+8b3934f PGBackend::rollback_stash: remove the correct shard
 1ddec86 FileStore::_collection_move_rename: propogate EEXIST
 ca12e0d qa/workunits/mon/crush_ops: use expect_false
-e016e83 (origin/wip-7608) test: Fix tiering test cases to use ---force-nonempty
-0592368 (origin/wip-cache-warn-full) mon: warn when pool nears target max objects/bytes
-f6edcee (origin/wip-pgmap-stat) mon/PGMap: return empty stats if pool is not in sum
-640ff98 (origin/wip-vstart-paths) test: Use non-default out/ dev/ paths in vstart
-1685c6f (origin/wip-crush-json) crush: revise JSON format for 'item' type
+e016e83 test: Fix tiering test cases to use ---force-nonempty
+0592368 mon: warn when pool nears target max objects/bytes
+f6edcee mon/PGMap: return empty stats if pool is not in sum
+640ff98 test: Use non-default out/ dev/ paths in vstart
+1685c6f crush: revise JSON format for 'item' type
 d4950a1 mailmap: Danny Al-Gaaf affiliation
 0eac1ba mailmap: Bjørnar Ness affiliation
 fdb644a mailmap: Ron Allred affiliation
 a85d0ef mailmap: Steve Stock affiliation
 076bec8 mailmap: Christopher O'Connell affiliation
-4cb1cbf (origin/wip-7607) ReplicatedPG::fill_in_copy_get: fix omap loop conditions
+4cb1cbf ReplicatedPG::fill_in_copy_get: fix omap loop conditions
 11393ab ReplicatedPG::fill_in_copy_get: remove extraneous if statement
 8fdfece ReplicatedPG::fill_in_copy_get: fix early return bug
-364fed8 (origin/wip-debian-files) packaging: use wildcard for test files in Debian
-65f3354 (origin/wip-7293) Make symlink  of librbd to qemu's folder so it can detect it.
-d0b1094 (origin/wip-7447) ECBackend,ReplicatedPG: delete temp if we didn't get the transaction
+364fed8 packaging: use wildcard for test files in Debian
+65f3354 Make symlink  of librbd to qemu's folder so it can detect it.
+d0b1094 ECBackend,ReplicatedPG: delete temp if we didn't get the transaction
 f2a4eec PGBackend/ECBackend: handle temp objects correctly
 308ea1b ECMsgTypes: fix constructor temp_added/temp_removed ordering to match users
 3e21996 ReplicatedPG::finish_ctx: use correct snapdir prior version in events
 a7057e1 doc: Improve CloudStack RBD documentation
-31eb533 (origin/wip-da-SCA-firefly-20140304) librados.cc: remove unused variable cpp_category
+31eb533 librados.cc: remove unused variable cpp_category
 c2cc178 ECBackend.cc: use !empty() instead of size()
 35ae7ed ceph_argparse.cc: prefer prefix ++operator for non-trivial iterator
 39fc1db KeyValueStore: use !empty() instead of size()
@@ -6350,15 +6550,15 @@ c2f3f2b close file descriptor in error case
 724ad02 doc: update the operator create pool reference
 7461410 doc: erasure coded pool developer documentation
 6d323c0 mailmap: Mike Lundy affiliation
-49e54ab (origin/wip-cache-add) mon/OSDMonitor: fix race in 'osd tier remove ...'
+49e54ab mon/OSDMonitor: fix race in 'osd tier remove ...'
 241b9e8 mon/OSDMonitor: fix some whitespace
 c029c2f mon/OSDMonitor: add 'osd tier add-cache <pool> <size>' command
 62e0eb7 mon/OSDMonitor: handle 'osd tier add ...' race/corner case
 0e5fd0e osd: make default bloom hit set fpp configurable
 eddf7b6 osd/ReplicatedPG: fix agent division by zero
-08efb45 (origin/wip-tier-add) OSDMonitor: do not add non-empty tier pool unless forced
-12909bb (origin/wip-2288) mds: check projected xattr when handling setxattr
-20fe162 (origin/wip-7563) TestPGLog: tests for proc_replica_log/merge_log equivalence
+08efb45 OSDMonitor: do not add non-empty tier pool unless forced
+12909bb mds: check projected xattr when handling setxattr
+20fe162 TestPGLog: tests for proc_replica_log/merge_log equivalence
 9a64947 TestPGLog::proc_replica_log: adjust wonky test
 6b6065a TestPGLog::proc_replica_log: adjust to corrected proc_replica_log behavior
 97f3596 TestPGLog::proc_replica_log: add prior_version to some entries
@@ -6370,9 +6570,9 @@ c99b7e1 PG,PGLog: replace _merge_old_entry with _merge_object_divergent_entries
 ff329ac TestPGLog:rewind_divergent_log: set prior_version for delete
 9e43dd6 TestPGLog: ignore merge_old_entry return value
 3cc9e22 TestPGLog: not worth maintaining tests of assert behavior
-a234053 (origin/wip-osd-verbosity) OSD,config_opts: log osd state changes at level 0 instead
+a234053 OSD,config_opts: log osd state changes at level 0 instead
 68890b2 osd: be a bit more verbose on startup
-4e06dfd (origin/wip-messenger-shutdown) msg: Make SimpleMessenger shutdown safer
+4e06dfd msg: Make SimpleMessenger shutdown safer
 371a80c librbd: prefix rbd writes with CEPH_OSD_OP_SETALLOCHINT osd op
 8e49bc3 FileStore: add option to cap alloc hint size
 1f5b796 FileStore: introduce XfsFileStoreBackend class
@@ -6386,8 +6586,8 @@ d00a927 Revert "librbd: remove limit on number of objects in the cache"
 f3d6491 Following changes are made 1. Increased the String length for distro, version and os_desc columns in osds_info table 2. Corrected version information extraction in client/ceph-brag 3. Removed the version_id json entry when version list returned for UUID 4. Updated the README to reflect point 3
 3cc8b27 Modifed the String variables in db.py to be of fixed length to support databases which doesn't have VARCHAR support
 30a5bdb Added an instruction in 'How to deploy' field in README.md
-aca6ac3 (origin/wip-7248) qa: workunits: cephtool: test 'osd bench' limits
-09099c9 (origin/wip-osd-status) osd: 'status' admin socket command
+aca6ac3 qa: workunits: cephtool: test 'osd bench' limits
+09099c9 osd: 'status' admin socket command
 25a9bd3 osd: OSD: limit the value of 'size' and 'count' on 'osd bench'
 ef25135 erasure-code: test rados put and get
 0b612d1 mon: prepend current directory to PATH for tests
@@ -6399,14 +6599,14 @@ e782051 mailmap: Andrey Kuznetsov affiliation
 7b6d417 mailmap: Wang, Yaguang affiliation
 855edc6 Fix typo ceph-disk
 43b7b0b mailmap: The Linux Box affiliations
-62fd382 (origin/wip-7539) osd_types,PG: trim mod_desc for log entries to min size
+62fd382 osd_types,PG: trim mod_desc for log entries to min size
 d4118e1 MOSDECSubOpWrite: drop transaction, log_entries in clear_buffers
 718cda6 TrackedOp: clear_payload as well in unregister_inflight_op
 59ff572 OpTracker: clarify that unregister_inflight_op is only called if enabled
 fc9b8ef MOSDOp: drop ops vector in clear_data()
 1ea59f6 ReplicatedPG: delete mark_all_unfound_lost transactions after completion
-e19dffb (origin/wip-7572) mon: fix 'pg dump' JSON output
-1a4657a (origin/wip-fix-coverity-20140228) req_state: fix uninitialized bool var
+e19dffb mon: fix 'pg dump' JSON output
+1a4657a req_state: fix uninitialized bool var
 605e645 Objecter::recalc_op_target: fix uninitialized scalar variable
 754a368 PGMonitor: fix uninitialized scalar variable
 1747c58 MDCache: fix potential null pointer deref
@@ -6417,8 +6617,8 @@ ad9b6d2 c_write_operations.cc: fix some ioctx resource leaks
 e8533ee ReplicatedBackend: check result of dynamic_cast to fix null pointer deref
 8d6b25a mds: use "lookup-by-ino" helper to handle LOOKUPPARENT request
 dc20c7d OSDMonitor: enable getting hit set parameters We would like to get the hit set parameters: hit_set_type | hit_set_period | hit_set_count | hit_set_fpp via OSDMonitor
-5b88856 (origin/wip-s3radoscheck-wusui) Use pgrep radosgw to determine if rados gateway is running. Fixes: 7528 Signed-off-by: Warren Usui <warren.usui@inktank.com>
-0ed63fd (origin/wip-libcephfs-fixes) client: fix Client::trim_caps()
+5b88856 Use pgrep radosgw to determine if rados gateway is running. Fixes: 7528 Signed-off-by: Warren Usui <warren.usui@inktank.com>
+0ed63fd client: fix Client::trim_caps()
 cdbe413 client: update dirfragtree/fragmap according to mds request reply
 214977a client: choose hash function according to dir layout
 23de48b client: check inode's cap when looking up dentry
@@ -6430,46 +6630,46 @@ a7b7c31 client: use ceph_seq_cmp() to compare cap seq/mseq
 0bf5f86 store_test.cc: fix unchecked return value
 7eefe85 histogram.h: fix potential div by zero
 500206d ReplicatedPG.cc: fix ressource leak, delete cb
-fbb1ec8 (origin/wip-7542) ECBackend: don't leak transactions
+fbb1ec8 ECBackend: don't leak transactions
 b0d4264 OSD::handle_misdirected_op: handle ops to the wrong shard
-123ff9e (origin/wip-7458) osd: stray pg ref on shutdown
-448fc0e (origin/wip-pg-msg) mon/OSDMonitor: missing space in string
+123ff9e osd: stray pg ref on shutdown
+448fc0e mon/OSDMonitor: missing space in string
 799cde0 Fix python-requests package dependencies.
-bfad17b (origin/wip-librados-end-iterator) librados: fix ObjectIterator::operator= for the end iterator
-a850a38 (origin/wip-doc-cache-pool) doc/dev/cache-pool: fix notes
-f0241c8 (origin/wip-cache-pool) mon/OSDMonitor: make default false-positive-probability 5%
+bfad17b librados: fix ObjectIterator::operator= for the end iterator
+a850a38 doc/dev/cache-pool: fix notes
+f0241c8 mon/OSDMonitor: make default false-positive-probability 5%
 30aa2d6 client: clear migrate seq when MDS restarts
 c1e40c6 client: fix race between cap issue and revoke
 5c55eb1 client: check mds_wanted for imported cap
 9476f84 client: allow revoking duplicated caps issued by non-auth MDS
 6797d30 client: call handle_cap_grant() for cap import message
 154efb1 client: don't update i_max_size when handle reply from non-auth MDS
-9a0ef6a (origin/wip-requests-dependencies) Fix python-requests package dependencies.
-c07a758 (origin/wip-mds-dumper) mds: Add dump-journal-entries
+9a0ef6a Fix python-requests package dependencies.
+c07a758 mds: Add dump-journal-entries
 7a985df mds: Create MDSUtility as base for Dumper/Resetter
 410c507 mds: Fix Dumper shutdown
 7ba3200 mds: fix nested_anchors update during journal replay
-1040d1b (origin/wip-primary-temp-fix) osd/OSDMap: respect temp primary without temp acting
-8020dcf (origin/wip-7375-wusui) Fixed get_status() to find client.radosgw fields inside of ps output. Fixes: 7375 Signed-off-by: Warren Usui <warren.usui@inktank.com>
-8200b8a (origin/wip-7374-wusui) Fix get_status() to find client.rados text inside of ps command results. Added port (fixed value for right now in teuthology) to hostname. Fixes: 7374 Signed-off-by: Warren Usui <warren.usui@inktank.com>
-be2748c (origin/wip-7537) OSDMap::_pg_to_up_acting_osds: use _acting_primary unless acting is empty
+1040d1b osd/OSDMap: respect temp primary without temp acting
+8020dcf Fixed get_status() to find client.radosgw fields inside of ps output. Fixes: 7375 Signed-off-by: Warren Usui <warren.usui@inktank.com>
+8200b8a Fix get_status() to find client.rados text inside of ps command results. Added port (fixed value for right now in teuthology) to hostname. Fixes: 7374 Signed-off-by: Warren Usui <warren.usui@inktank.com>
+be2748c OSDMap::_pg_to_up_acting_osds: use _acting_primary unless acting is empty
 dc079eb OSDMonitor: when thrashing, only generate valid temp pg mappings
 891343a rados.py: add aio_remove
-9f7f4ed (origin/wip-dz-scrub-fixes) Revert "osd/PG: fix assert when deep repair finds no errors"
+9f7f4ed Revert "osd/PG: fix assert when deep repair finds no errors"
 728e391 osd: Don't include primary's shard in repair result message
-3ee71a5 (origin/wip-mon-docs) doc: troubleshooting-mons.rst: better document how to troubleshoot mons
-69082a6 (origin/wip-7485) mds: add mds_kill_create_at for testing
+3ee71a5 doc: troubleshooting-mons.rst: better document how to troubleshoot mons
+69082a6 mds: add mds_kill_create_at for testing
 27968a7 ceph_test_objectstore: fix i386 build (again)
-14ea815 (origin/wip-osdmap-inc) mon/OSDMonitor: fix osdmap encode feature logic
-7357b6e (origin/wip-7517) PG: skip pg_whoami.osd, not pg_whoami.shard in scrub feature check
-696fa36 (origin/wip-7512) OSD::project_pg_history needs to account for acting_primary/up_primary
+14ea815 mon/OSDMonitor: fix osdmap encode feature logic
+7357b6e PG: skip pg_whoami.osd, not pg_whoami.shard in scrub feature check
+696fa36 OSD::project_pg_history needs to account for acting_primary/up_primary
 0442b45 Objecter/OSDMap: factor out primary_changed() into static OSDMap method
 d0359f7 PG: clarify same_primary_since updates regarding primary rank
-73c59a0 (origin/wip-last-epoch-clean) mon/PGMap: fix osd_epochs update
+73c59a0 mon/PGMap: fix osd_epochs update
 df3ba72 mon/PGMap: add unit test for min_last_epoch_clean
 8913ab4 ECBackend: skip canceled xattr reads as well
-0e376ee (origin/port/temp-failure-retry) compat: avoid unused warn with TEMP_FAILURE_RETRY
-23e538e (origin/wip-create-null) client: fix possible null dereference in create
+0e376ee compat: avoid unused warn with TEMP_FAILURE_RETRY
+23e538e client: fix possible null dereference in create
 bcc18d4 osd: increase default leveldb write buffer, cache size
 c4a3a86 ceph_test_objectstore: fix i386 build error
 b25c22a ceph_test_objectstore: fix signed/unsigned warning
@@ -6478,10 +6678,10 @@ cfafa0b README: add build dep
 1340b36 erasure-code: test that changing the pool size is not allowed
 d74f128 os/ObjectStore: document interface
 6d8cb22 unittest_ecbackend: fix signed/unsigned warnings
-fed655e (origin/wip-scrub-primary) mon/PGMonitor: fix primary osd check on deep-scrub
-7b0f3d9 (origin/wip-7513) PGLog::activate_not_complete: fix log.complete_to increment typo
-e3e3328 (origin/wip-repair) osd/PG: fix assert when deep repair finds no errors
-9da4d40 (origin/wip-ec-bugs) PGLog: test for missing using the correct shard value
+fed655e mon/PGMonitor: fix primary osd check on deep-scrub
+7b0f3d9 PGLog::activate_not_complete: fix log.complete_to increment typo
+e3e3328 osd/PG: fix assert when deep repair finds no errors
+9da4d40 PGLog: test for missing using the correct shard value
 ace65fe OSD: fix query for ec pgs
 93983c9 Objecter: make is_pg_changed static and const for old/newacting
 8b4cf1c OSDMap: make calc_pg_rank/role const for acting
@@ -6490,7 +6690,7 @@ b7de0fd ECTransaction: require hash_infos for deleted objects
 ab4c9a6 ECUtil: clear() should reset hashes to -1, not 0
 8593ad7 ReplicatedPG::cancel_pull: ECBackend might cancel_pull on a non-missing object
 9b85241 ECBackend::filter_read_op: clean up read state properly
-70d23b9 (origin/wip-subscribe) osd: fix off-by-one is boot subscription
+70d23b9 osd: fix off-by-one is boot subscription
 90ebdcc Rename keyvaluestore_check_backend to keyvaluestore_debug_check_backend
 a52d7cd Add KeyValueStore op thread options
 62c1631 Remove eio inject codes in KeyValueStore
@@ -6513,18 +6713,18 @@ c9fdcee Add test for omap interface
 2b9e893 Move perf counter and add op queue reserve throttle
 5eb7592 Fix deadlock caused by hold collection obj
 c278269 Added a note that the ceph-osd command requires the cluster option.
-0da25e6 (origin/wip-librados-object-iterator) librados: implement ObjectIterator copying and assignment
+0da25e6 librados: implement ObjectIterator copying and assignment
 d9bedb9 Added evaluation of cluster and fixed evaluation when setting initial weight on start in verbose mode
 8a0017a librados: don't destroy ObjListCtx when iterator reaches the end
 d8a7bef librados: remove extra advance from objects_begin(position)
-a9677e1 (origin/wip-6685-firefly) Revert "ReplicatedPG::recover_backfill: adjust last_backfill to HEAD if snapdir"
+a9677e1 Revert "ReplicatedPG::recover_backfill: adjust last_backfill to HEAD if snapdir"
 133ddb7 packaging: match all test files
 1c129df packaging: add missing file
-bd59db2 (origin/wip-corpus) ceph-object-corpus: prune some old releases
-76046cf (origin/port/updates) dencoder: check for radosgw build option
+bd59db2 ceph-object-corpus: prune some old releases
+76046cf dencoder: check for radosgw build option
 5373ee2 osd: use ceph scoped shared_ptr
 0ebb1f8 mon/MDSMonitor: Cope with failures during creation
-c6e6ced (origin/wip-copyget) PG::build_might_have_unfound: skip CRUSH_ITEM_NONE
+c6e6ced PG::build_might_have_unfound: skip CRUSH_ITEM_NONE
 1f30d1a ECBackend: deal with temp collection details in handle_sub_write
 c703a89 ReplicatedPG::on_global_recover: requeue degraded, then unreadable
 caf2edf rgw: minor cleanup
@@ -6533,7 +6733,7 @@ caf2edf rgw: minor cleanup
 2762ede mds/CDir: Remove a few lines of cruft
 a4d0eb1 mds: Remove some unused #defines
 5fb90a2 Fix generate keystone token from credentials
-541beb8 (origin/wip-mds-dencoder) mds: Add encode/decode/dump for use with dencoder
+541beb8 mds: Add encode/decode/dump for use with dencoder
 ebd4397 RadosModel: copyfrom should result in a dirty object
 68184d4 PG: fix scrub feature check
 67d1f36 ReplicatedPG: assert no omap for ec pool in _write_copy_chunk and skip
@@ -6546,11 +6746,11 @@ b3bb9ef doc/release-notes: v0.77
 fa96de9 doc/release-notes: v0.67.7
 1bca9c5 (tag: v0.77) v0.77
 40bdcb8 osd/,mon/: add (up|acting)_primary to pg_stat_t
-0427f61 (origin/wip-7099) rgw: fix swift range response
-2b3e3c8 (origin/wip-6830) rgw: fix etag in multipart complete
-859ed33 (origin/wip-6951) rgw: reset objv tracker on bucket recreation
-53de641 (origin/wip-6936) radosgw-admin: don't generate access key if user exists
-9e8882e (origin/wip-da-SCA-20140218) BackedUpObject::get_xattr()  pass function parameter by reference
+0427f61 rgw: fix swift range response
+2b3e3c8 rgw: fix etag in multipart complete
+859ed33 rgw: reset objv tracker on bucket recreation
+53de641 radosgw-admin: don't generate access key if user exists
+9e8882e BackedUpObject::get_xattr()  pass function parameter by reference
 53b3689 TestRados.cc: use !empty() instead of size()
 86b0879 ErasureCodeBench: prefer prefix ++operator for non-trivial iterator
 200ebb9 ceph_erasure_code.cc: prefer prefix ++operator for non-trivial iterator
@@ -6579,20 +6779,20 @@ ab45d44 BarrierContext: prefer prefix ++operator for non-trivial iterator
 4adcfa5 BarrierContext: reduce scope of 'done' variable
 19dad03 MonClient: pass function parameter by reference
 314116e PG: insert into stray set if !us_up() && !is_acting()
-a5c5d92 (origin/wip-agent) osd/ReplicatedPG: EOPNOTSUPP on hit_set_get on non-replicated pools
+a5c5d92 osd/ReplicatedPG: EOPNOTSUPP on hit_set_get on non-replicated pools
 a40cd50 osd/ReplicatedPG: load older HitSets into memory
 0af7375 osd/ReplicatedPG: strengthen agent_work assertions
 1d907c6 OSD: consider up/acting primary for new intervals
-afbd58e (origin/wip-7064) rgw: don't try to read bucket's policy if it doesn't exist
+afbd58e rgw: don't try to read bucket's policy if it doesn't exist
 3ed68eb rgw: return error if accessing object in non-existent bucket
 b0dcc79 radosgw-admin: gc list --include-all
 609f4c5 Throw a Timeout exception on timeout.
-1975441 (origin/wip-rgw-manifest-2) dencoder: fix for new rgw manifest code
+1975441 dencoder: fix for new rgw manifest code
 b3ce188 cls/rgw: fix debug output
 3fb6e25 test/rgw: manifest unitest
 da64bf7 rgw: scalable manifest object
-db88e7f (origin/wip-7463) ceph_rest_api.py: don't fail if no up OSDs found on startup
-7a019b3 (origin/wip-librados-ops-and-rvals) test/librados: remove unused lines and fix return code for cmp guards
+db88e7f ceph_rest_api.py: don't fail if no up OSDs found on startup
+7a019b3 test/librados: remove unused lines and fix return code for cmp guards
 bfbfcd6 ReplicatedPG: fix successful write condition
 18f08cd ReplicatedPG: clear osd op reply output for writes
 1d661ca ReplicatedPG: set individual osd op rvals
@@ -6624,14 +6824,14 @@ d3c6f17 test/librados: use connect_cluster_pp() instead of duplicating it
 9630f2f test/librados: create general test case classes
 6273ba4 test/librados: move test.cc into its own library
 abca34a Objecter: keep ObjectOperation rval pointers for writes
-4bee6ff (origin/wip-cache-perf) osd/ReplicatedPG: clean up agent skip debug output
+4bee6ff osd/ReplicatedPG: clean up agent skip debug output
 d1a185b osd: l_osd_agent_{wake,skip,flush,evict}
 dbec109 osd: l_osd_tier_[dirty|clean]
 150e87a osd: l_osd_tier_whiteout
 2d5371d osd: l_osd_tier_evict
 c45a477 osd: l_osd_tier_[try_]flush[_fail]
 4b0a0a1 osd: l_osd_copyfrom
-5e727bf (origin/wip-ecbackend-for-review, origin/wip-ecbackend-12) RadosModel: only output if missing header is actually a problem
+5e727bf RadosModel: only output if missing header is actually a problem
 11f288e Objecter: track primary explicitly to detect changing primaries
 bc31c4b ReplicatedPG: add some debugging if waiting_for_commit is non-empty
 b90584a osd/: instantiate the right backend based on pool
@@ -6698,12 +6898,12 @@ e0b0508 ReplicatedPG: reject unaligned writes on ec pools
 bd8fcd2 osd: improve whiteout debug prints
 63f5a79 osd/ReplicatedPG: make agent skip blocked obcs
 7997646 ReplicatedBackend: print char ack_type as int
-a71d829 (origin/wip-barrier) client: disable barrier support
+a71d829 client: disable barrier support
 747002c client: fix barrier interval
 d7457f7 client/barrier: drop unused active_commit_interval
 ce643e0 client: don't populate Client::barriers from read accesses
 a1dbc9c qa/workunits/suites/pjd: use test suite with acl tweak
-623748e (origin/wip-dirfrags) mds: bump the protocol version
+623748e mds: bump the protocol version
 2a19a1b osd/ReplicatedPG: allow is_degraded_object() to be called outside of backfil
 e5457df mds: open sessions for rejoin imported caps
 c54b3ce mds: fix slave rename rollback
@@ -6736,7 +6936,7 @@ b88034e mds: use discover_path to open remote inode
 3154ee8 mds: acquire locks required by exporting dir
 3fb408e mds: introduce nonlocking auth pin
 d0df841 mds: allow acquiring wrlock and remote wrlock at the same time
-1dae27c (origin/wip-7371) ReplicatedPG: return no data if read size is trimmed to zero
+1dae27c ReplicatedPG: return no data if read size is trimmed to zero
 774125c osd: set client incarnation for Objecter instance
 0dd1e07 osd: schedule agent from a priority queue
 a812982 osd/ReplicatedPG: simplify agent_choose_mode
@@ -6779,27 +6979,27 @@ fb4152a histogram: move to common, add unit tests
 8b68ad0 histogram: calculate bin position of a value in the histrogram
 d921d9b qa: do not create erasure pools yet
 4560078 common: ping existing admin socket before unlink
-c673f40 (origin/wip-primary-affinity) osd/OSDMap: include primary affinity in OSDMap::print
+c673f40 osd/OSDMap: include primary affinity in OSDMap::print
 87be7c1 osd/OSDMap: remove bad assert
 ba3eef8 mon/OSDMonitor: add 'mon osd allow primary affinity' bool option
 c360c60 ceph_psim: some futzing to test primary_affinity
 f825624 osd/OSDMap: add primary_affinity feature bit
 8ecec02 osd/OSDMap: apply primary_affinity to mapping
-871a5f0 (origin/wip-brag) ceph.spec: add ceph-brag
+871a5f0 ceph.spec: add ceph-brag
 4ea0a25 debian: add ceph-brag
 57d7018 ceph-brag: add Makefile
-cf4f702 (origin/wip-7212-sage-b) mon/Elector: bootstrap on timeout
+cf4f702 mon/Elector: bootstrap on timeout
 4595c44 mon: tell MonmapMonitor first about winning an election
 7bd2104 mon: only learn peer addresses when monmap == 0
-3c76b81 (origin/wip-7395) OSD: use the osdmap_subscribe helper
+3c76b81 OSD: use the osdmap_subscribe helper
 6db3ae8 OSD: create a helper for handling OSDMap subscriptions, and clean them up
 5b9c187 monc: new fsub_want_increment( function to make handling subscriptions easier
 7d398c2 doc/release-notes: v0.67.6
-0ed6a81 (origin/wip-osdmaptool-pool-fix) osdmaptool: add tests for --pool option
+0ed6a81 osdmaptool: add tests for --pool option
 f98435a osdmaptool: add --pool option for --test-map-pgs mode to usage()
 eedbf50 osdmaptool: fix --pool option for --test-map-object mode
 e44122f test: fix signed/unsigned warnings in TestCrushWrapper.cc
-64cedf6 (origin/wip-7394) OSD: disable the PGStatsAck timeout when we are reconnecting to a monitor
+64cedf6 OSD: disable the PGStatsAck timeout when we are reconnecting to a monitor
 794c86f monc: backoff the timeout period when reconnecting
 60da8ab monc: set "hunting" to true when we reopen the mon session
 1a8c434 monc: let users specify a callback when they reopen their monitor session
@@ -6824,8 +7024,8 @@ f77e8ea crush: add CrushWrapper::dump_rules() unit test
 07c494b mon: add --mon-advanced-debug-mode
 5ea156a mon: Monitor::send_reply gracefully handles no connection
 53e92f6 mon: split prepare_command in two
-d012119 (origin/wip-null-xattr) mds: remove xattr when null value is given to setxattr()
-6e6a333 (origin/wip-open-truncate) mds: properly replay dentry trace for open truncate.
+d012119 mds: remove xattr when null value is given to setxattr()
+6e6a333 mds: properly replay dentry trace for open truncate.
 9035227 doc/release-notes: do not downgrade from v0.67.6
 7533b3b doc/release-notes: note about dumpling xattr backport
 cc1e844 PendingReleaseNotes: note about cephfs backtrace updates
@@ -6834,25 +7034,25 @@ e107938 osd/OSDMap: fix _raw_to_up_osds for EC pools
 1cc8c25 mon/OSDMonitor: add 'osd primary-affinity ...' command
 cee9142 osd/OSDMap: add osd_primary_affinity fields, accessors, encoding
 af4c142 mon/OSDMonitor: fix legacy tunables warning
-a0b2c74 (origin/wip-moncap) osd/OSDCap: handle any whitespace (not just space)
+a0b2c74 osd/OSDCap: handle any whitespace (not just space)
 824dd52 mon/MonCap: handle any whitespace (not just space)
 5a6c950 packaging: do not package libdir/ceph recursively
 840e918 tests: fix packaging for s/filestore/objectstore/
 b64f1e3 tests: fix objectstore tests
-f34eb1b (origin/wip-update-backtrace) mds: force update backtraces for previously created FS
+f34eb1b mds: force update backtraces for previously created FS
 b5c10bf Fix bad dealloctor
 a4b3b78 correct one command line at building packages section
 33692a2 osdmaptool: fix cli test
 fed8396 tset_bufferlist: fix signed/unsigned comparison
-8ca3d95 (origin/wip-7346) rgw: multi object delete should be idempotent
-bf38bfb (origin/wip-7271) rgw: set bucket permissions, cors on swift creation
-2682b64 (origin/wip-doc-librados-intro) doc: Incorporated feed back from Loic and Dan.
+8ca3d95 rgw: multi object delete should be idempotent
+bf38bfb rgw: set bucket permissions, cors on swift creation
+2682b64 doc: Incorporated feed back from Loic and Dan.
 0da9621 doc: Adds additional terms for use with librados.
 e1a49e5 ObjectCacher: remove unused target/max setters
 0559d31 librbd: remove limit on number of objects in the cache
 db034ac ObjectCacher: use uint64_t for target and max values
 bf8cf2d ObjectCacher: remove max_bytes and max_ob arguments to trim()
-d136eb4 (origin/wip-crush) mon: allow firefly crush tunables to be selected
+d136eb4 mon: allow firefly crush tunables to be selected
 e3309bc doc/rados/operations/crush: describe new vary_r tunable
 525b2d2 crush: add firefly tunables baseline test
 37f840b crushtool: new cli tests for the vary-r tunable
@@ -6873,17 +7073,17 @@ f2f4eb5 Updated client code to complete PUT and DELETE requests
 d389e61 msg/Pipe: add option to restrict delay injection to specific msg type
 671a76d MonClient: add a timeout on commands for librados
 3e1f7bb Objecter: implement mon and osd operation timeouts
-9bcc42a (origin/wip-7334) alert the user about error messages from partx
+9bcc42a alert the user about error messages from partx
 42900ff use partx for red hat or centos instead of partprobe
-6926272 (origin/wip-fsetpipesz-fix) common/buffer: fix build breakage for CEPH_HAVE_SETPIPE_SZ
+6926272 common/buffer: fix build breakage for CEPH_HAVE_SETPIPE_SZ
 a5f479c configure: fix F_SETPIPE_SZ detection
 450163e configure: don't check for arpa/nameser_compat.h twice
 c1d2a99 libcephfs: fix documentation for ceph_readlink
 dbaf71a mailmap: Moritz Möller is with Bigpoint.com
 4cf2c72 Server changes to deploy in a production env 1. Added the wsgi entry point app.wsgi 2. Updated client code to mandate the update-metadata to have url to publish and unpublish 3. Updated the README to describe a bit about the server operations as well.
-575566b (origin/wip-7329) ceph_test_rados_api_tier: try harder to trigger the flush vs try-flush race
+575566b ceph_test_rados_api_tier: try harder to trigger the flush vs try-flush race
 a8e6c9f crush: add chooseleaf_vary_r tunable
-f17caba (origin/wip-7370) crush: allow crush rules to set (re)tries counts to 0
+f17caba crush: allow crush rules to set (re)tries counts to 0
 795704f crush: fix off-by-one errors in total_tries refactor
 ed32c40 crushtool: add cli test for off-by-one tries vs retries bug
 75c5525 qa/workunits/rest: use larger max_file_size
@@ -6917,7 +7117,7 @@ ff04629 client: add barrier and types
 7f6d755 client: whitespace
 7f9fdc3 osdc/Objecter: whitespace
 548ccd9 mds/Server: whitespace
-3a5fa87 (origin/wip-osdmap-primary) osd/OSDMap: populate *primary when pool dne
+3a5fa87 osd/OSDMap: populate *primary when pool dne
 5b7e2b2 rgw: initialize variable before call
 45d31f0 osdmaptool: tests for --test-map-pgs
 b98eaa5 osdmaptool: test --import/export-crush
@@ -6932,27 +7132,27 @@ e1e6c45 Completed model and controller code 1. GET, PUT and DELETE request are a
 42a64e1 Revert test case of "mon: OSDMonitor: do not allow changing an erasure-coded pool's size"
 0aa25b1 Some suggested changes, both errors and rewordings
 30fd0c5 Intial version of the server code. 1. Database modelling is done 2. PUT request is completed
-fc963ac (origin/wip-erasure-code-directory) erasure-code: move test files to a dedicated directory
+fc963ac erasure-code: move test files to a dedicated directory
 7baa62f erasure-code: move source files to a dedicated directory
-9ecf3467 (origin/wip-rgw-vg) rgw: initialize variable before call
+9ecf346 rgw: initialize variable before call
 ce0e3bd qa/workunits/snaps: New allow_new_snaps syntax
 22b0057 mon: test osd pool create pg_pool_t::stripe_width behavior
 dfc90cf mon: osd pool create sets pg_pool_t::stripe_width
 33b8ad8 common: add osd_pool_erasure_code_stripe_width
 798b56a unittests: update osdmaptools with stripe_width
 11c11ba mon: add erasure-code pg_pool_t::stripe_width
-922e5cf (origin/port/fixes) osd: fix type mismatch warning
+922e5cf osd: fix type mismatch warning
 6fda45b os/kvstore: remove used var
 994bdea os/kvstore: trivial portability fixes
 377a845 common: simpler erasure code technique
-04b1ae4 (origin/wip-7336) rgw: fix rgw_read_user_buckets() use of max param
-fdeb18e (origin/wip-7109) mon: MDSMonitor: Forbid removal of first data pool
+04b1ae4 rgw: fix rgw_read_user_buckets() use of max param
+fdeb18e mon: MDSMonitor: Forbid removal of first data pool
 c7d265a mon: OSDMonitor: Refuse to delete CephFS pools
-e80b084 (origin/wip-erasure-code-command) erasure-code: add ceph_erasure_code debug command
-68e6dad (origin/wip-mds-cluster) mds: avoid sending duplicated discovers during recovery
+e80b084 erasure-code: add ceph_erasure_code debug command
+68e6dad mds: avoid sending duplicated discovers during recovery
 bec1209 erasure-code: benchmark moves to a dedicated directory
 ad8c666 mon: check cluster features before rule create-erasure
-c8c4cc6 (origin/wip-7146) mon: OSDMonitor: do not allow changing an erasure-coded pool's size
+c8c4cc6 mon: OSDMonitor: do not allow changing an erasure-coded pool's size
 7b15cb1 mon: osd-pool-create test no longer use hardcoded ruleset
 428c75e mon: osd-pool-create test EAGAIN when pending
 59ba03b mon: test erasure code pool creation
@@ -6991,7 +7191,7 @@ e5ed1b2 mon: do not force proposal when no osds
 3b99013 (tag: v0.76) v0.76
 7ff2b54 client: use 64-bit value in sync read eof logic
 2f85b8c doc: Incorporated feedback.
-684e5c4 (origin/wip-performance-configs) Pipe, cephx: Message signing under config option
+684e5c4 Pipe, cephx: Message signing under config option
 5fde828 cmp.h: boost tuple comparison is replaced by regular comparison
 8e19488 TrackedOp: optionally disable the actual tracking operations
 98ae059 Throttle: Turn off throttle based on max bytes
@@ -6999,7 +7199,7 @@ e5ed1b2 mon: do not force proposal when no osds
 ee48c87 common/shared_cache.hpp: compact to a single lookup where possible
 27b5f2b common/shared_cache.hpp: avoid list::size()
 ee4cfda doc: rgw: el6 documentation fixes
-48fbcce (origin/wip-5997) osd: Change some be_compare_scrub_objects() args to const
+48fbcce osd: Change some be_compare_scrub_objects() args to const
 ce1ea61 osd: Change be_scan_list() arg to const
 e1bfed5 common: buffer::ptr::cmp() is a const function
 34eb549 osd: Move the rest of scrubbing routines to the backend
@@ -7009,9 +7209,9 @@ f9128e8 osd: Move PG::_scan_list() to backend as ReplicatedBackend::be_scan_list
 d508079 OSDMonitor: use deepish_copy_from for remove_down_pg_temp
 61914d8 OSDMap: deepish_copy_from()
 802692e os/KeyValueStore: fix warning
-0389f1d (origin/wip-osdmap-features) mon/OSDMonitor: encode full OSDMap with same feature bits as the Incremental
+0389f1d mon/OSDMonitor: encode full OSDMap with same feature bits as the Incremental
 b9208b4 OSDMap: note encoding features in Incremental encoding
-e4dd1be (origin/wip-pybind-enverr) pybind: improve EnvironmentError output
+e4dd1be pybind: improve EnvironmentError output
 754ddb1 rgw: fix build on centos
 1628423 mailmap: Rutger ter Borg affiliation
 3a1a8c3 mailmap: Laurent Barbe affiliation
@@ -7036,7 +7236,7 @@ ad515bf ceph-disk: support and test the absence of PATH
 d70efe9 FileStore: avoid leveldb check for xattr when possible
 6d1daea unittest_striper: fix warning
 f9071a7 doc: cls moved to subdirectory
-e78f756 (origin/wip-rbd-rm-watchers) run-rbd-tests: run remove_with_watcher test
+e78f756 run-rbd-tests: run remove_with_watcher test
 4ebc32f rbd: don't forget to call close_image() if remove_child() fails
 0a553cf rbd: check for watchers before trimming an image on 'rbd rm'
 dcbe872 pybind: work around find_library() not searching LD_LIBRARY_PATH
@@ -7056,9 +7256,9 @@ b31c0f0 civetweb: fix warning
 fd260c9 cls_user: init cls_user_stats fields in ctor
 d0f13f5 OSDMap: fix deepish_copy_from
 d7b0c7f ceph-disk: run the right executables from udev
-318e208 (origin/wip-7190) OSD: don't assume we have the pool in handle_pg_create
+318e208 OSD: don't assume we have the pool in handle_pg_create
 2a737d8 leveldb: add leveldb_* options
-11cf9bb (origin/wip-7169-2) rgw: fix multipart min part size
+11cf9bb rgw: fix multipart min part size
 12ba8a3 Add a virtual interface init, open, create_and_open to KeyValueDB
 2e7bd83 rgw: fix multipart upload listing
 f1b5309 osd: OSDMonitor: ignore pgtemps from removed pool
@@ -7066,8 +7266,8 @@ ff5abfb buffer: make 0-length splice() a no-op
 86c3c5a test/Makefile.am: update test_cls_rgw* rules
 26ace1e test_rgw_admin_opstate: get it compiled
 28c7388 osdc/Striper: test zero-length add_partial_result
-f513f66 (origin/wip-7116-joao) osd: OSDMonitor: ignore pgtemps from removed pool
-3c77c4c (origin/wip-7060) OSDMap: use deepish_copy_from in remove_redundant_temporaries
+f513f66 osd: OSDMonitor: ignore pgtemps from removed pool
+3c77c4c OSDMap: use deepish_copy_from in remove_redundant_temporaries
 368852f OSDMap: fix damaging input osdmap from remove_down_temps
 bd54b98 OSDMap: deepish_copy_from()
 9e52398 packaging: apply udev hack rule to RHEL
@@ -7095,7 +7295,7 @@ eff9f02 If 'ceph osd metadata' isn't working, inform the user about it via stder
 fffbfc9 mon: test for MForward messages
 d9a689d mon: shell test helpers to run MONs from sources
 c06eca2 unittests: fail early when low on disk
-9413a51 (origin/wip-user-quota-2) rgw: simplify a code path
+9413a51 rgw: simplify a code path
 1b0567b radosgw-admin: add usage for user stats [--sync-stats]
 97edd2f doc: Switched logging to true. Now required for sync agent.
 9a55fa1 cls_user: add generate_test_instances() implementation
@@ -7103,7 +7303,7 @@ e5dc8d6 rgw, cls_user: handle error cases related to response decoding
 8a69ac8 rgw: implement restful set user quota request
 92cabd4 rgw: new restful api for retrieving user quota info
 0f7b3c7 rgw: quota thread for full user stats sync
-51ffede (origin/wip-7215-quorum-features) mon: do not use CEPH_FEATURES_ALL for things that touch the disk
+51ffede mon: do not use CEPH_FEATURES_ALL for things that touch the disk
 3d4a673 Elector: send an OP_NAK MMonElection to old peers who support it
 687b570 Elector: ignore messages from mons without required feature capabilities
 41796c0 Monitor: add a function to get the required quorum features from the local compatset
@@ -7143,7 +7343,7 @@ b90570f Fix 404 broken links to logging and debug configuration
 4553e6a Fix trailing space
 7bed2d6 called sysinfo.append(meta) in get_sysinfo within the while loop
 ef3fe7b Updated README with How-to-use instructions
-faae5b9 (origin/use-ceph-sharedptr) libc++: convert tr1 uses
+faae5b9 libc++: convert tr1 uses
 ea026c6 doc: Added domain pool, and changed zone configs to use domain tool so they don't clash.
 0303f0f doc: Change zone domain to include "domain" so it is clear.
 95e63ac doc: Added space between {Query_String} and [E=HTTP ... to solve for 500 error.
@@ -7151,16 +7351,16 @@ ea026c6 doc: Added domain pool, and changed zone configs to use domain tool so t
 df4df46 Monitor: use a single static accessor for getting CompatSet features off disk
 6915053 doc: Adding more information on style and usage for documenting Ceph.
 2216afd doc: Fixed omission of a comma in zone configuration.
-55ab35b (origin/wip-7207) FileStore: perform LFNIndex lookup without holding fdcache lock
-1560cc0 (origin/wip-rgw-civetweb-2) mongoose: git rm src/mongoose
+55ab35b FileStore: perform LFNIndex lookup without holding fdcache lock
+1560cc0 mongoose: git rm src/mongoose
 bd089b1 civetweb: md5.inl -> md5.h
 1a2bed1 civetweb: add include to makefile
 287ea5c rgw: modify the civetweb rule
 d26e766 civetweb: fix module uri
 3f20a41 civetweb: update submodule
 f2f7475 rgw: switch mongoose to civetweb
-08fa34d (origin/wip-erasure-rule) osd/OSDMap: do not create erasure rule by default
-6f8541c (origin/use-unordered-map) osd: use ceph:: scoped hash_map
+08fa34d osd/OSDMap: do not create erasure rule by default
+6f8541c osd: use ceph:: scoped hash_map
 289a400 Corrected ownership info which was presented as string, added stub code for unpublish
 ecbdeb1 PGBackend: clarify rollback_stash name and method comments
 4fc4573 PG: drop messages from down peers
@@ -7222,7 +7422,7 @@ b7d100b FileStore::_collection_move_rename: remove source before closing guard
 06f7a98 ReplicatedBackend.h: don't need to be active for pushes
 518774d ObjectStore: improve name of the queue_transaction which cleans up the transaction
 c03d027 hobject: admit that gen_t is actually version_t
-8060afd (origin/wip-osdmapenc-fix) MOSDMap: reencode maps if target doesn't have OSDMAP_ENC
+8060afd MOSDMap: reencode maps if target doesn't have OSDMAP_ENC
 9792500 doc: add-or-rm-mons.rst: better explanation on number of monitors
 9eac5e3 Added update_metadata, clear_metadata, and usage description code
 dcca413 added perl script for rgw bucket quota tests
@@ -7230,11 +7430,11 @@ dcca413 added perl script for rgw bucket quota tests
 54caa01 removing rgw_tests.sh
 8b8ede7 modified the port to 7280 in the script instead of the default 80
 850b4f4 script for rgw bucket quota testing
-339bed1 (origin/wip-cache-mode-fix) mon/MonCommands: 'invalidate+forward' -> 'forward'
+339bed1 mon/MonCommands: 'invalidate+forward' -> 'forward'
 b88c8ea doc: Added Documenting Ceph (draft) document.
 90aea59 doc: Added documenting Ceph to the toc tree.
 ed2decb doc: Fixed end string from '' to `` to stop warnings. Enforced 80 char line.
-584c2dd (origin/wip-stray-mdsmaps) mon/MDSMonitor: do not generate mdsmaps from already-laggy mds
+584c2dd mon/MDSMonitor: do not generate mdsmaps from already-laggy mds
 4c96853 packaging: ship libdir/ceph
 6bee188 Docs: Add backfill_toofull to list of PG states
 199e614 Initial version of the source code. Statistics extraction is done
@@ -7246,27 +7446,27 @@ c78c300 Remove some almost-duplicate COMMAND definitions
 586ad1f rgw: Use correct secret key for POST authn
 52a9154 rgw: Fix signature variable naming/failure print
 6dcf462 rgw: Document fields for access/secret key
-7314cde (origin/wip-7184) osd: ignore num_objects_dirty for old pools
-1b308b6 (origin/port/libc++) libc++: fix null pointer comparison
+7314cde osd: ignore num_objects_dirty for old pools
+1b308b6 libc++: fix null pointer comparison
 1fcbddc libc++: avoid hash re-definitions
 aae4700 libc++: use ceph::shared_ptr in installed header
 4c4e1d0 libc++: use ceph:: namespaced data types
 8e86720 libc++: create portable smart ptr / hash_map/set
-7e7eda4 (origin/wip-osdmap-7177) OSDMap: Populate primary_temp values a little more carefully
+7e7eda4 OSDMap: Populate primary_temp values a little more carefully
 47bc71a fixed the syntax for test maxmds=2
 a13ebd3 fix for the test maxmds=2
 ad203d5 doc: Fixed ruleset typo.
-6b7f27c (origin/wip-rgw-contention) librados: use rwlock for lookup pool, cache results
+6b7f27c librados: use rwlock for lookup pool, cache results
 4b31456 rgw: add .h file to Makefile rule
 d1de32c doc: Added default-placement to list of placement targets. Added SSL commentary.
 80212ea doc: Added additional comment about port number.
-0215342 (origin/wip-rgw-loadgen) rgw: loadgen, configurable num of objs, buckets
+0215342 rgw: loadgen, configurable num of objs, buckets
 7c86764 rgw: loadgen shutdown, error out on failures
 85267cf rgw: sign loadgen requests
 e8a4b30 rgw: loadgen frontend read uid, init access key
 57137cb rgw: add a load generation frontend
 f01202d Fixes: #7172
-b1a853e (origin/wip-rbd-mount_timeout) rbd: expose mount_timeout map option
+b1a853e rbd: expose mount_timeout map option
 8ec7fa8 PendingReleaseNotes: note ceph -s fix
 6e93132 doc: Removed Calxeda example.
 dd4a9e1 doc: Removed saucy salamander reference.
@@ -7279,7 +7479,7 @@ f7f9bed doc: Added source file for graphic.
 c30b138 doc: Added third monitor icon.
 add59b8 doc: Added additional monitor icon.
 4b03326 doc: Removed old file. Changed file name.
-86c1548 (origin/wip-7168) rgw: handle racing object puts when object doesn't exist
+86c1548 rgw: handle racing object puts when object doesn't exist
 5c24a7e rgw: don't return -ENOENT in put_obj_meta()
 a84cf15 rgw: use rwlock for cache
 790dda9 osd: OSDMap: fix output from ceph status --format=json for num_in_osds num_up_osds returns as an int value, while num_in_osds returns as a string. Since only an int can be returned from get_num_in_osds(), num_in_osds should should also be an int to remain consistant with num_up_osds.
@@ -7288,14 +7488,14 @@ ec5f7a5 client: ceph-fuse use fuse_session_loop_mt to allow multithreaded operat
 e1fd0e8 first commit
 ac5a9fe mon: larger timeout for mon mkfs.sh test
 50808af ceph-disk: larger timeout in the test script
-1aa2601 (origin/wip-7166) osd: OSDMap: build reverse name->pool map upon decoding
-f97264d (origin/wip-rgw-expose-bucket) 6748: rgw: Optionally return the bucket name in a response header.
-2d0d48b (origin/wip-7117-redhat) packaging: ship libdir/ceph
+1aa2601 osd: OSDMap: build reverse name->pool map upon decoding
+f97264d 6748: rgw: Optionally return the bucket name in a response header.
+2d0d48b packaging: ship libdir/ceph
 8b09a43 doc/release-notes: v0.76 draft notes
 2b36761 mon: favor 'mds set max_mds' over 'mds set_max_mds'
 e60dcfa packaging: add missing test files
-5ed7865 (origin/wip-7073) rgw: use configurable prime number for gc hash
-e7b3236 (origin/wip-temp-primary) OSDMonitor: make sure we don't send out maps with a primary_temp mapping
+5ed7865 rgw: use configurable prime number for gc hash
+e7b3236 OSDMonitor: make sure we don't send out maps with a primary_temp mapping
 28e0b76 test: add an OSDMap unittest
 b183115 OSDMap: move temp manipulation functions out of OSDMonitor
 fafc8e9 OSDMap: pay attention to the temp_primary in _get_temp_osds
@@ -7321,8 +7521,8 @@ c1a95f8 OSDMap: remove get_pg_primary() function
 7a9c171 OSDMap: doc the different pg->OSD mapping functions
 268ae82 osd: do not misuse calc_pg_role
 a09d4f1 PG: do not use role == 0 as a determinant of primacy
-644afd6 (origin/wip-3454) radosgw-admin: add temp url params to usage
-fdf1a41 (origin/fix-configure-rerunning) autogen: re-run aclocal after libtoolize
+644afd6 radosgw-admin: add temp url params to usage
+fdf1a41 autogen: re-run aclocal after libtoolize
 970f938 doc: Updated paths for OSDs using the OS disk.
 4425f9e librados: Add C API coverage for atomic write operations
 1ffe422 mailmap: add athanatos <sam.just@inktank.com>
@@ -7334,9 +7534,9 @@ caf7971 mds: Add inline fields to inode_t
 b67e9ef ceph: Add inline state definition
 978ec18 ceph: Add inline data feature
 e268e95 updated "sample.ceph.conf":
-91b8c78 (origin/wip-tier-bits) mon/OSDMonitor: simplify and make 'osd pool set ...' output consistent
+91b8c78 mon/OSDMonitor: simplify and make 'osd pool set ...' output consistent
 413fc23 osd/ReplicatedPG: no HitSet on non-primary
-be8db8c (origin/wip-cache-snap) osd/ReplicatedPG: use get_object_context in trim_object
+be8db8c osd/ReplicatedPG: use get_object_context in trim_object
 b5ae76e ceph_test_rados: do not delete in-use snaps
 8b39719 osd/OSDMonitor: fix 'osd tier add ...' pool mangling
 d41a1d3 osd/ReplicatedPG: update ObjectContext's object_info_t for new hit_set objects
@@ -7384,17 +7584,17 @@ b840aae osd/ReplicatedPG: adjust clone stats when promoting clones
 6dd0a1f osd/ReplicatedPG: include snaps in copy-get results
 d22ecf3 osd/ReplicatedPG: using missing_oid to decide which object to promote
 c3c1541 osd/ReplicatedPG: make find_object_context() pass missing_oid
-33b5ef4 (origin/wip-mon-pgmap) mon/PGMap: make decode version match encode version
+33b5ef4 mon/PGMap: make decode version match encode version
 a5aaab3 ceph-dencoder: include offset in 'stray data' error message
 1308225 buffer: do not append trailing newline when appending empty istream
 946d603 (tag: v0.75) v0.75
 9034370 doc: Added comment and example for SSL enablement in rgw.conf
 9615645 doc: Added python example of handle, and closing session examples.
-c0d92b6 (origin/wip-5858-rebase) osd: Implement multiple backfill target handling
+c0d92b6 osd: Implement multiple backfill target handling
 a657fad osd: Interim backfill changes
 54e588c doc: Modified doc examples to use rados_create2.
-4c92dc6 (origin/wip-7141) DBObjectMap::clear_keys_header: use generate_new_header, not _generate_new_header
-93a9b68 (origin/wip-vector-op) erasure-code: use uintptr_t instead of long long
+4c92dc6 DBObjectMap::clear_keys_header: use generate_new_header, not _generate_new_header
+93a9b68 erasure-code: use uintptr_t instead of long long
 0082d88 doc: format man pages with s/2013/2014/
 b4054fc doc: copyright s/2013/2014/
 efbdd16 doc: update the crushtool manual page
@@ -7409,15 +7609,15 @@ d3d75a2 crush: crushtool --build informative messages
 2765f81 crush: parse CEPH_ARGS in crushtool
 cf9a764 osd: factorize build_simple_crush_map* rulesets creation
 7676550 osd: ostream is enough for build_simple*
-cec8d85 (origin/wip-omapdirfrag2) mds: require CEPH_FEATURE_OSD_TMAP2OMAP
+cec8d85 mds: require CEPH_FEATURE_OSD_TMAP2OMAP
 1d8429d osd/OSDMap: get_up_osd_features()
 b8dfcc1 mds: use OMAP to store dirfrags
 0f0dd74 osd: introduce TMAP->OMAP conversion operation
-90d6cec (origin/wip-7135) src/test/ObjectMap: test clear_keys_header() call
+90d6cec src/test/ObjectMap: test clear_keys_header() call
 617a50c src/test/librados/misc.cc: verify that omap_clear doesn't blast xattr
 0c81849 os/DBObjectMap, FileStore: omap_clear should not remove xattrs
 6225f2c mailmap: fix typo in Alexandre Maragone
-d429ab5 (origin/wip-tier-snap) osd/OSDMonitor: fix 'osd tier add ...' pool mangling
+d429ab5 osd/OSDMonitor: fix 'osd tier add ...' pool mangling
 f49d9cd osd: fix propagation of removed snaps to other tiers
 3b3511c mon: debug propagate_snaps_to_tiers
 631d0c7 erasure-code: erasure code decode interface helper
@@ -7439,10 +7639,10 @@ f18b310 mailmap: remove company name from Pascal de Bruijn name
 0e43ac9 rgw: add optional tenant name for swift urls
 2626101 rgw: can set temp url key on user
 efb4cf6 doc: Removed extraneous comment from snapshot text.
-5070597 (origin/install-erasure-headers) osd: add missing header to install list
-a5f8cc7 (origin/wip-7110) rgw: convert bucket info if needed
+5070597 osd: add missing header to install list
+a5f8cc7 rgw: convert bucket info if needed
 029b9ef remove spurious executable permissions on files
-995a3cc (origin/wip-max-file-size) mds/MDSMap: include max_file_size in plaintext print output
+995a3cc mds/MDSMap: include max_file_size in plaintext print output
 2de2148 mailmap: add Yan Zheng fixes for Reviewed-by:
 62fbcac mailmap: add Loic Dachary fixes for Reviewed-by:
 3fe5f11 mailmap: add Gary Lowell fixes for Reviewed-by:
@@ -7471,20 +7671,20 @@ b780f4b osd: Remove redundant incompat feature
 31f3745 mailmap: Adds Christophe Courtaut
 7d5674c doc: Added librados introduction doc. Still wip.
 33e78a4 doc: Updated terminology. Added librados intro to index.
-7acb0a1 (origin/port/onexit) on_exit: remove side effects from asserts
+7acb0a1 on_exit: remove side effects from asserts
 e3d0b0a common: fix large output in unittest_daemon_config
 822ad58 configure: support Automake 1.12
-b1976dd (origin/wip-7083) radosgw-admin: fix object policy read op
+b1976dd radosgw-admin: fix object policy read op
 3f34dc7 common: unit tests for config::expand_meta
 9485409 common: recursive implementation of config::expand_meta
 87db534 common: cosmetic inversion of tests arguments
 5bb1545 common: multiple variable occurence expansion test
-98ed9ac (origin/wip-7093) mon: only send messages to current OSDs
+98ed9ac mon: only send messages to current OSDs
 f68de9f osd: ignore OSDMap messages while we are initializing
 35da8f9 osd: do not send peering messages during init
 7aa9805 log: use on exit manager to flush logs on exit
 2181d25 onexit: add an on exit callback utility
-3d19f7c (origin/port/misc) test: disable cross process sem tests on non-Linux
+3d19f7c test: disable cross process sem tests on non-Linux
 6342d05 pipe: handle missing MSG_MORE and MSG_NOSIGNAL
 26c07d9 ipaddr: use IN6_ARE_ADDR_EQUAL for comparison
 ef6a56a keyutils: handle non-linux platform
@@ -7493,7 +7693,7 @@ bb8b750 add autotools-generated files to .gitignore
 f2e33e8 mon: get rid of --keyring /dev/null hack
 d110c91 doc: Removed dash from --dmcrypt option.
 c772b6d ceph-disk: fix false positive for gitbuilder
-e2ee528 (origin/wip-objectcacher-backoff) osdc/ObjectCacher: back off less during flush
+e2ee528 osdc/ObjectCacher: back off less during flush
 daefe81 Be more explicit how to discover available API calls
 de8522f ceph-disk: tests for the --data-dir code path
 a71025d ceph-disk: implement --sysconfdir as /etc/ceph
@@ -7516,7 +7716,7 @@ b82ccfb ceph-disk: fix Error() messages formatting
 6b8d418 init-ceph: pass config file path when adjust crush position
 2ba6930 ceph-disk: cannot run unit tests
 24417f9 test/cli-integration/rbd: silence stderr
-8220549 (origin/port/bitsandints) inttypes: detect and define missing integer types
+8220549 inttypes: detect and define missing integer types
 8f91cac endian: check byte order on OSX
 46a5674 doc/release-notes: fix bobtail version
 f6bbcf4 mon: tests for ceph-mon --mkfs
@@ -7528,10 +7728,10 @@ f6bbcf4 mon: tests for ceph-mon --mkfs
 4c8a313 mon: implement --key for --mkfs
 ab6203f mon: fix indentation
 e946df1 mon: do not use the keyring if auth = none
-f12abbf (origin/wip-6914) mds: don't allow changing layout for non-regular file
+f12abbf mds: don't allow changing layout for non-regular file
 f292992 mds: always store backtrace xattr in the default pool
 cae663a osd/ReplicatedPG: improve debug output from check_local
-ac547a5 (origin/wip-empty-rbd-ls) rbd: return 0 and an empty list when pool is entirely empty
+ac547a5 rbd: return 0 and an empty list when pool is entirely empty
 e91fb91 librbd: better error when unprotect fails on unprotected snap
 42e98ac Be more explicit how to discover available API calls
 eeba294 mon: remove fixture directory between runs
@@ -7544,7 +7744,7 @@ a194513 mon: do not daemonize if CINIT_FLAG_NO_DAEMON_ACTIONS
 e0bae95 Fix typos in erasure code documents
 2b0a435 osd_types: add missing osd op flags
 f8e413f msgr: fix rebind() race stop the accepter and mark all pipes down before rebind to avoid race
-8fcfc91 (origin/wip-listomapvals) qa: test rados listomapvals with >512 keys
+8fcfc91 qa: test rados listomapvals with >512 keys
 be5afa2 rados: allow listomapvals to list all k/v pairs
 c165483 (tag: v0.74) v0.74
 b4fc16c make: conditionally build filestore backends
@@ -7560,7 +7760,7 @@ f7a66d6 make: restrict use of --as-needed to Linux
 b5c17f6 vstart: set fsid in [global]
 d7d7ca8 Fix qa/workunits/rados/test_cache_pool.sh typos
 cc67b7b Fix test/filestore/store_test.cc error
-e8e174e (origin/port/public-hdrs) rados: include struct timeval definition
+e8e174e rados: include struct timeval definition
 356d71a inttypes: use portable types in public headers
 76ad85d test: include headers for struct statfs
 93c125c test: remove platform specific header
@@ -7572,7 +7772,7 @@ a48d038 test: fix VLA of non-POD type
 891801e warning: fix typo and -Wmismatched-tags
 c7e1c4b c++11: fix std::lock naming conflicts
 bbcb022 kvstore: only build on linux
-1fec818 (origin/port/spinlock) spinlock: add generic spinlock implementation
+1fec818 spinlock: add generic spinlock implementation
 12f4631 qa/workunits/rest/test.py: rbd pool ruleset is now 0
 b286e4f ceph_test_rados_api_tier: retry EBUSY race checks
 b88af07 libcephfs: get osd location on -1 should return EINVAL
@@ -7580,15 +7780,15 @@ b88af07 libcephfs: get osd location on -1 should return EINVAL
 d4f07cd crush: fix get_full_location_ordered
 fd57d99 Fix rbd bench-write improper behavior
 30078e6 autoconf: trim duplicated headers
-f9f5c37 (origin/wip-rgw-leak) rgw: fix leak of RGWProcess
-96fe80d (origin/wip-snaps) osd: preserve user_version in snaps/clones
+f9f5c37 rgw: fix leak of RGWProcess
+96fe80d osd: preserve user_version in snaps/clones
 80b5487 ceph_test_rados: test read from snapshots
 2f8b602 osd/OSDMap: observe 'osd crush chooseleaf type' option for initial rules
 9b7364d rbd: expose options available to rbd map
 b3bda08 Lack of "start" member function declare in WBThrottle.h
 4a9c770 messages: add tid to string form of MForward
 67f99f3 packaging: make check needs argparse and uuidgen
-4cea789 (origin/wip-rbd-tinc-5426) librbd: call user completion after incrementing perfcounters
+4cea789 librbd: call user completion after incrementing perfcounters
 f8a4001 osd: create default ruleset for erasure pools
 8b2b5a3 mon: implement --osd-pool-default-crush-erasure-ruleset
 dd81858 mon: implement --osd-pool-default-crush-replicated-ruleset
@@ -7604,9 +7804,9 @@ c6d876a mon: osd-pool-create must not loop forever on kill
 272eed3 client: SyntheticClient uses the first available pool
 20b3da0 mon: MDS data and metadata pool numbers are hardcoded
 bf24317 Fix WBThrottle thread disappear problem
-87b8e54 (origin/wip-argparse-fix) ceph_argparse: kill _daemon versions of argparse calls
+87b8e54 ceph_argparse: kill _daemon versions of argparse calls
 ea4724d rados: deprecated attribute has no argument
-e7bf5b2 (origin/wip-librados-lock) librados: lockless get_instance_id()
+e7bf5b2 librados: lockless get_instance_id()
 771da13 objecter, librados: create Objecter::Op in two phases
 5ff30d6 crush/CrushWrapper: note about get_immediate_parent()
 0cdbc97 librados: mark old get_version() as deprecated
@@ -7618,18 +7818,18 @@ ac14d4f osdc/Objecter: maintain crush_location multimap
 dcc5e35 crush/CrushWrapper: add get_common_ancestor_distance()
 0903f3f mon/OSDMonitor: use generic CrushWrapper::parse_loc_map helper
 8f48906 crush/CrushWrapper: add parse_loc_[multi]map helpers
-8fc66a4 (origin/wip-7056) osd/ReplicatedPG: fix copy-get iteration of omap keys
+8fc66a4 osd/ReplicatedPG: fix copy-get iteration of omap keys
 0c9acf1 ceph_test_rados: s/tmap/omap/
 3b0d9b2 vstart/stop: do not loop forever on kill
 4ce6400 config: add 'crush location' option
 19213e6 doc: Fix caps documentation for Admin API
-ac10aa5 (origin/wip-fix-mon-fwd) mon: fix forwarded request features when requests are resent
+ac10aa5 mon: fix forwarded request features when requests are resent
 2e4c61b osd/ReplicatedPG: include omap header in copy-get
-537a7c3 (origin/wip-crush-shrink-diff) crush: misc formatting and whitespace fixes
+537a7c3 crush: misc formatting and whitespace fixes
 fa6a99a crush: use kernel-doc consistently
 6e36794 crush/mapper: unsigned -> unsigned int
 d8512f1 mon: use kill instead of pkill in osd-pool-create
-c030569 (origin/wip-7051) osd: OSDMap: dump osd_xinfo_t::features as an int
+c030569 osd: OSDMap: dump osd_xinfo_t::features as an int
 b4fbe4f mon: Monitor: Forward connection features
 93c44cb mon: unit test for osd pool create
 59941b1 mon: erasure code pool properties defaults
@@ -7664,7 +7864,7 @@ cdc178f Revert "Enable libs3 support for debian packages"
 1e238e6 mon: pool create will not fail if the type differs
 5f1957d doc/release-notes: v0.67.5
 98a1525 unittests: fail if one test fail
-9ab947c (origin/port/buffer) buffer: use int64_t instead of loff_t
+9ab947c buffer: use int64_t instead of loff_t
 03693ac osd: git ignore erasure code benchmark binary
 42b4fe1 osd: erasure code benchmark is installed is part of ceph-test
 81dee1b osd: erasure code benchmark workunit
@@ -7674,7 +7874,7 @@ c7d8ba7 osd: better performances for the erasure code example
 ff9455b osd: conditionally disable dlclose of erasure code plugins
 8879e43 osd: Fix assert which doesn't apply when compat_mode on
 0bd5cb6 Add backward comptible acting set until all OSDs updated
-8d31f71b osd/ReplicatedPG: fix promote cancellation
+8d31f71 osd/ReplicatedPG: fix promote cancellation
 923bff1 osd/ReplicatedPG: drop RepGather::ondone callback
 2a9c6fc vstart.sh: go faster
 bc893f5 osd/ReplicatedPG: fix undirty on clean object
@@ -7699,18 +7899,18 @@ ea519b4 qa/workunits/rados: test cache-{flush,evict,flush-evict-all}
 71cd4a2 rados: add cache-flush, cache-evict, cache-flush-evict-all commands
 ad3b466 osd/ReplicatedPG: implement cache-flush, cache-try-flush
 edaec9a osd: Fix assert which doesn't apply when compat_mode on
-ac16a9d (origin/wip-kill-raid4) osd: remove remaining instances of raid4 pool types (never implemented)
+ac16a9d osd: remove remaining instances of raid4 pool types (never implemented)
 40a48de mds: fix Resetter locking
 087fe57 packaging: revert adding argparse and uuidgen
 8272538 packaging: make check needs argparse and uuidgen
 f193925 autogen: test compare strings with != not -ne
 98af37d Fix segmentation fault when handler is NULL pointer
-44aacae (origin/wip-mds-coverity2) mds: fixes for coverity scan
+44aacae mds: fixes for coverity scan
 8b38f10 crush/mapper: fix crush_choose_firstn comment
 ea3a0bb crush/mapper: attempts -> tries
 0497db4 crush/mapper: finish adding choose_local_[fallback_]tries
-99f41de (origin/sage-valgrind) vstart.sh: NOTE, not WARNING, to make gitbuilder happy
-b3ee598 (origin/wip-6028) qa: workunit: cephtool: test osd pool create with erasure type
+99f41de vstart.sh: NOTE, not WARNING, to make gitbuilder happy
+b3ee598 qa: workunit: cephtool: test osd pool create with erasure type
 250b446 pybind: test_ceph_argparse: test 'ceph osd pool create' with pool type
 c996f66 mon: OSDMonitor: add optional 'pool type' arg to 'osd pool create'
 bdeaa84 osd: OSDMap: add 'get_up_osds()' function
@@ -7729,7 +7929,7 @@ e6ad4d4 osd: make obc copyfrom blocking generic
 8dec2b2 librados, osd: add flags to COPY_FROM
 e624e16 crush: silence error messages in unit tests
 9414970 ARCH: adding SSE2 flag to arch-test
-7e0c84b (origin/wip-crush-2) mon/OSDMonitor: 'osd crush show-tunables'
+7e0c84b mon/OSDMonitor: 'osd crush show-tunables'
 88365c2 crush: expand info about tunables that we dump
 d0f14df mon: warn if crush has non-optimal tunables
 d129e09 crush: add set_choose_local_[fallback_]tries steps
@@ -7737,14 +7937,14 @@ d129e09 crush: add set_choose_local_[fallback_]tries steps
 b86d450 upstart: add rbdmap script
 e4537d3 ARCH: add variable for sse2 register
 0d217cf qa/workunits/cephtool/test.sh: clean up our client.xx.keyring
-7e4a800 (origin/wip-7026) osd/ReplicatedPG: fix hit_set_setup() on_activate()
-19cff89 (origin/wip-6990) Add backward comptible acting set until all OSDs updated
+7e4a800 osd/ReplicatedPG: fix hit_set_setup() on_activate()
+19cff89 Add backward comptible acting set until all OSDs updated
 b153067 erasure-code: tests must use aligned buffers
 f5d32a3 mds: drop unused find_ino_dir
 c60a364 Fix typo in #undef in ceph-dencoder
 9e45655 qa: add ../qa/workunits/cephtool/test.sh to unittests
 c1eb55c qa: vstart wrapper helper for unittests
-0edbda2 (origin/wip-rbd-coverity) rbd: make coverity happy
+0edbda2 rbd: make coverity happy
 d93881f vstart/stop: use pkill instead of killall
 ae56cef qa: recursively remove .gcno and .gcda
 b082c09 crushtool: reorg test-map-* cli tests
@@ -7752,16 +7952,16 @@ b082c09 crushtool: reorg test-map-* cli tests
 685c695 crush/mapper: generalize descend_once
 6f43120 ceph_test_rados_api_tier: fix HitSetTrim vs split, too
 c5bccfe ceph_test_rados_api_tier: fix HitSetRead test race with split
-7e618c9 (origin/wip-7009) mon: move supported_commands fields, methods into Monitor, and fix leak
-deded44 (origin/wip-rgw-standalone-2) mongoose: update submodule
+7e618c9 mon: move supported_commands fields, methods into Monitor, and fix leak
+deded44 mongoose: update submodule
 ef10a5c rgw: fix memory leak
-824b3d8 (origin/wip-linux-version) FileJournal: use pclose() to close a popen() stream
+824b3d8 FileJournal: use pclose() to close a popen() stream
 6696ab6 FileJournal: switch to get_linux_version()
 fcf6e98 common: introduce get_linux_version()
 a2babe2 configure: break up AC_CHECK_HEADERS into one header-file per line
 fae569d Rename filestore_perf_t to objectstore_perf_t
 015e981 Move PerfCounter from ObjectStore.h to FileStore.h
-4526d13 (origin/wip-mds-cluster2) mds: fix stale session handling for multiple mds
+4526d13 mds: fix stale session handling for multiple mds
 43f7268 mds: properly set dirty flag when journalling import
 802df76 mds: properly update mdsdir's authority during recovery
 b6d1d8f mds: finish opening sessions even if import aborted
@@ -7771,7 +7971,7 @@ ebb3ad9 osd/PG: move some pg stat update into a helper
 05274f3 osd: include peer_info in pg query
 5fdcc56 mds: fix bug in MDCache::open_ino_finish
 71d1eb3 mds: add CEPH_FEATURE_EXPORT_PEER and bump the protocal version
-d0b744a1 client: handle session flush message
+d0b744a client: handle session flush message
 05b192f mds: simplify how to export non-auth caps
 9dc52ff mds: send cap import messages to clients after importing subtree succeeds
 6a56588 mds: re-send cap exports in resolve message.
@@ -7870,14 +8070,14 @@ b371dd8 ReplicatedPG: promote: first draft pass at doing object promotion
 a3e50b0 rgw: rework framework configuration
 b7946ff doc: Added additional comments on placement targets and default placement.
 902f19c doc: Updates to federated config.
-29cc722 (origin/wip-hitset) test_ipaddr: add another unit test
+29cc722 test_ipaddr: add another unit test
 026b724 osd/ReplicatedPG: drop unused hit_set_start_stats
 3d768d2 osd/ReplicatedPG: maintain stats for the hit_set_* objects
 9814b93 osd/ReplicatedPG: set object_info_t, SnapSet on hit_set objects
 dabd5d6 vstart.sh: --hitset <pool> <type>
 5bb0476 test/libcephfs: release resources before umount
-897dfc1 (origin/wip-6979) use the new get_command helper in check_call
-eae8531 (origin/wip-rbd-single-major) rbd: modprobe with single_major=Y on newer kernels
+897dfc1 use the new get_command helper in check_call
+eae8531 rbd: modprobe with single_major=Y on newer kernels
 8a473bc rbd: add support for single-major device number allocation scheme
 784cc89 rbd: match against both major and minor on unmap on newer kernels
 462b389 rbd: match against whole disks on unmap
@@ -7885,7 +8085,7 @@ a421305 rbd: switch to strict_strtol for major parsing
 24a048b Document librados's rados_write's behaviour in reguards to return value.
 a865fec osd/ReplicatedPG: debug: improve hit_set func banners
 b6871cf osd/ReplicatedPG: do not update current_last_update on activate
-bcde200 (origin/wip-vstart-memstore) vstart.sh: add --memstore option
+bcde200 vstart.sh: add --memstore option
 a9334a1 use the absolute path for executables if found
 43561f7 remove trailing semicolon
 a33c95f radosgw: increase nofiles ulimit on sysvinit machines
@@ -7896,8 +8096,8 @@ ee3173d doc/release-notes: fix indentation; sigh
 bb50276 Revert "Partial revert "mon: osd pool set syntax relaxed, modify unit tests""
 0cd36e0 mon/OSDMonitor: take 'osd pool set ...' value as a string again
 e19e380 replace sgdisk subprocess calls with a helper
-4b6d721 (origin/wip-hashpspool) osd: enable HASHPSPOOL by default
-fb47d54 (origin/wip-mon-api) mon: if we're the leader, don't validate command matching
+4b6d721 osd: enable HASHPSPOOL by default
+fb47d54 mon: if we're the leader, don't validate command matching
 2bfd34a mon: by default, warn if some members of the quorum are "classic"
 e620057 add apt-get install pkg-config for ubuntu server
 b8884e0 MemStore: update for the new ObjectStore interface
@@ -7915,7 +8115,7 @@ a888a57 crush: implement --show-bad-mappings for indep
 fbc4f99 crush: remove scary message string
 472f495 crush: document the --test mode of operations
 ea86444 Monitor: Elector: share the classic command set if we have a classic mon
-f1ccdb41 Elector: share local command set when deferring
+f1ccdb4 Elector: share local command set when deferring
 ba673be Monitor: import MonCommands.h from original Dumpling and expose it
 3cb58f7 Monitor: validate incoming commands against the leader's set too
 cb51b1e Monitor: disseminate leader's command set instead of our own
@@ -7935,19 +8135,19 @@ c928f07 crush: output --show-bad-mappings on err
 ef4061f librbd: remove unused private variable
 ad3825c TrackedOp: remove unused private variable
 3b39a8a librbd: rename howmany to avoid conflict
-539fe26 (origin/port/fdatasync) wbthrottle: use feature check for fdatasync
+539fe26 wbthrottle: use feature check for fdatasync
 663da61 rados_sync: fix mismatched tag warning
 60a2509 rados_sync: remove unused private variable
 43c1676 mon: check for sys/vfs.h existence
 c99cf26 make: increase maximum template recursion depth
-e2be099 (origin/port/compat) compat: define replacement TEMP_FAILURE_RETRY
-3b3cbf5 (origin/wip-fix-tunables) crush/CrushCompiler: make current set of tunables 'safe'
+e2be099 compat: define replacement TEMP_FAILURE_RETRY
+3b3cbf5 crush/CrushCompiler: make current set of tunables 'safe'
 8535ced crushtool: remove scary tunables messages
 4eb8891 crush/CrushCompiler: start with legacy tunables when compiling
 e8fdef2 crush: add indep data set to cli tests
-564de6e (origin/wip-fix-3x) osdmaptool: fix cli tests for 3x
+564de6e osdmaptool: fix cli tests for 3x
 6704be6 osd: default to 3x replication
-8d0180b (origin/wip-objecter-full-2) objecter: don't take extra throttle budget for resent ops
+8d0180b objecter: don't take extra throttle budget for resent ops
 38647f7 Revert "osd: default to 3x replication"
 cbeb1f4 crush: detach_bucket must test item >= 0 not > 0
 2cd73f9 crush: remove obsolete comments from link_bucket
@@ -8027,12 +8227,12 @@ cb88763 crush/mapper: fix up the indep tests
 b819018 crush: unittest use const instead of define
 dc09521 crush: unittest CrushWrapper::check_item_loc
 000c59a crush: unittest remove useless c->create()
-7a9a088 (origin/wip-6940) rgw: fix reading bucket policy in RGWBucket::get_policy()
-cb26fbd (origin/wip-3x) osd: default to 3x replication
+7a9a088 rgw: fix reading bucket policy in RGWBucket::get_policy()
+cb26fbd osd: default to 3x replication
 aedbc99 crush: check for invalid names in loc[]
 fe03ad2 osd: queue pg deletion after on_removal txn
 aa63d67 os/MemStore: implement reference 'memstore' backend
-47ee797 (origin/wip-mon-mds-trim) mon: ceph-kvstore-tool: get size of value for prefix/key
+47ee797 mon: ceph-kvstore-tool: get size of value for prefix/key
 c98c104 tools: ceph-kvstore-tool: output value contents to file on 'get'
 00048fe mon: Have 'ceph report' print last committed versions
 cc64382 mon: MDSMonitor: let PaxosService decide on whether to propose
@@ -8051,8 +8251,8 @@ a70200e os/ObjectStore: pass cct to ctor
 cae1083 ObjBencher: add rand_read_bench functions to support rand test in rados-bench
 e829859 doc/rados/operations/crush: fix more
 7709a10 doc/rados/operations/crush: fix rst
-68fdcfa (origin/wip-6922) FileSTore: do not time out threads while they're waiting for op throttle
-7ff7cf2 (origin/wip-doc-build-cluster) doc: Partially incorporated comments form Loic Dachary and Aaron Ten Clay.
+68fdcfa FileSTore: do not time out threads while they're waiting for op throttle
+7ff7cf2 doc: Partially incorporated comments form Loic Dachary and Aaron Ten Clay.
 5e34beb init, upstart: prevent daemons being started by both
 c43c893 crush/mapper: new SET_CHOOSE_LEAF_TRIES command
 2731d30 crush/mapper: pass parent r value for indep call
@@ -8068,7 +8268,7 @@ d51a219 osd/osd_types: pg_pool_t: fix /// -> ///< comments
 86e9780 crush: use breadth-first search for indep mode
 b1d4dd4 crush: return CRUSH_ITEM_UNDEF for failed placements with indep
 1cfe140 crush: eliminate CRUSH_MAX_SET result size limitation
-858a21b (origin/wip-filestore-remount) common/WorkQueue: allow start() after stop()
+858a21b common/WorkQueue: allow start() after stop()
 36505e8 os/FileStore: allow mount after umount
 cd6be29 common/Finisher: allow finisher to be restarted
 941875d doc: Partially incorporated comments from Aaron Ten Clay.
@@ -8082,7 +8282,7 @@ de09778 test/filestore: add check of return values in StoreTest::SetUp
 f502530 pybind: syntax check osd metadata
 6570197 ceph-disk: blacklist /dev/fd0
 bcb6bfd test/ceph_decoder: add return value check for read_file()
-20507b5 (origin/wip-crush-tunables) crush/CrushWrapper: default to the "new" bobtail-era tunables
+20507b5 crush/CrushWrapper: default to the "new" bobtail-era tunables
 07978bb crush/CrushWrapper: explicitly set tunables on create, decode
 3f1352f doc/rados/operations/crush-map: describe crush locations, hook
 396ee0d add script/run-coverity
@@ -8095,11 +8295,11 @@ f57dad6 OSDMonitor: prevent extreme multipliers on PG splits
 c77ce90 doc: Fixed hyperlink to the manual installation section.
 648f3bc doc: Added a link to get packages.
 16b7576 osd/OSDMap: fix typo and crush types helper
-6298a57 (origin/wip-crush-chassis) osd/OSDMap: add region, pdu, pod types while we are at it
+6298a57 osd/OSDMap: add region, pdu, pod types while we are at it
 3a6707a osd/OSDMap: add 'chassis' to default type hierarchy
 5e1fc14 README: update a list of build deps for rpm-based systems
 e80ab94 Partial revert "mon: osd pool set syntax relaxed, modify unit tests"
-fd175ab (origin/wip-6699) sysvinit, upstart: use df -P when weighting new OSDs
+fd175ab sysvinit, upstart: use df -P when weighting new OSDs
 4d140a7 os/ObjectStore: add {read,write}_meta
 6bb42a0 osd: move peek_journal_fsid() into ObjectStore (from OSD)
 bf5a7b2 os/ObjectStore: generalize the FileStore's target_version
@@ -8112,15 +8312,15 @@ ea9dabf mon/OSDMonitor: include osd metadata in 'ceph report'
 c4f817f mon/OSDMonitor: move osd metadata dump into a helper
 838b6c8 PG: don't query unfound on empty pgs
 964c8e9 PG: retry GetLog() each time we get a notify in Incomplete
-14cf4ca (origin/wip-6892) rgw: don't error out on empty owner when setting acls
+14cf4ca rgw: don't error out on empty owner when setting acls
 7ec21ed Mark libcls_kvs as a module
 e5357c0 test: remove zero-copy read_fd test temporarily
 bafb5c3 doc: clarify crush rule create-simple and fix typos
 371dc71 doc: fix formatting typo in mon configuration
 00ee9a5 doc: improve ceph-mon usage, fix ceph tell examples
 4fa8f68 README: add yum command line
-b0dce8a (origin/wip-mds-assert) mds: Add assertion to catch object mutation error
-09a4c1b (origin/wip-5871) mds: remove superfluous warning of releasing lease
+b0dce8a mds: Add assertion to catch object mutation error
+09a4c1b mds: remove superfluous warning of releasing lease
 c409e36 mon: osd dump should dump pool snaps as array, not object
 03d63c4 buffer: turn off zero-copy reads for now
 784d188 mds: Release resource before return
@@ -8130,7 +8330,7 @@ c409e36 mon: osd dump should dump pool snaps as array, not object
 ab05580 Add missing stuff to clean target
 ae46c38 Correctly mark library modules
 94ca1cc ceph-object-corpus: revert accidental revert
-75d4a72 (origin/wip-zero-copy-bufferlist-last) buffer: enable tracking of calls to c_str()
+75d4a72 buffer: enable tracking of calls to c_str()
 445fb18 buffer: try to do zero copy in read_fd
 be29b34 buffer: attempt to size raw_pipe buffers
 3f6fa05 buffer: add methods to read and write using zero copy
@@ -8145,14 +8345,14 @@ fc5789d doc: Added commentary to configure pg defaults. Clarified size commentar
 dceaef4 doc: PG splitting added to docs.
 d39676b doc: Took out "future" reference to namespaces.
 9a55d89 doc: Clarification of terms.
-b35fc1b (origin/wip-6804) rgw: lower some debug message
-561e7b0 (origin/wip-6829) rgw: initialize RGWUserAdminOpState::system_specified
-b2ee935 (origin/wip-6796) PendingReleaseNotes: mention 6796 and 'ceph osd pool set' behavior change
+b35fc1b rgw: lower some debug message
+561e7b0 rgw: initialize RGWUserAdminOpState::system_specified
+b2ee935 PendingReleaseNotes: mention 6796 and 'ceph osd pool set' behavior change
 7c6d43c doc: rados: operations: pools: document 'osd pool set foo hashpspool'
 49d2fb7 mon: OSDMonitor: don't crash if formatter is invalid during osd crush dump
 337195f mon: OSDMonitor: receive CephInt on 'osd pool set' instead on CephString
 7191bb2 mon: OSDMonitor: drop cmdval_get() for unused variable
-50868a5 (origin/wip-6705) qa: workunits: mon: ping.py: test 'ceph ping'
+50868a5 qa: workunits: mon: ping.py: test 'ceph ping'
 6b5aaf3 doc: Minor updates to manual deployment document.
 3502d4f init: fix typo s/{$update_crush/${update_crush/
 29178d8 doc: Cleanup of Add/Remove OSDs.
@@ -8161,7 +8361,7 @@ de2bcd5 doc: Added a manual deployment doc.
 10b4bf6 doc: Added manual deployment section to index.
 f753d56 test: use older names for module setup/teardown
 72bba1f doc: Added fixes to osd reporting section.
-86e4fd4 (origin/wip-flush-5855-review) osd: Backfill peers should not be included in the acting set
+86e4fd4 osd: Backfill peers should not be included in the acting set
 19dbf7b osd: Simple dout() fix
 82e1e7e PG: remove unused Peering::flushed
 9ff0150 PG: don't requeue waiting_for_active unless flushed and active
@@ -8172,7 +8372,7 @@ da77553 ReplicatedPG,PG: move duplicate FlushedEvt logic info on_flushed()
 68e0e06 doc: warn about #6796 in release notes
 574cb61 man: re-generate changed man pages
 0de0efa RBD Documentation and Example fixes for --image-format
-40a76ef (origin/wip-osd-bench-size) osd: fix bench block size
+40a76ef osd: fix bench block size
 703f9a0 Revert "JounralingObjectStore: journal->committed_thru after replay"
 f0c8931 release-notes: clarify that the osd data directory needs to be mounted
 ba67b9f doc/release-notes.rst: v0.72.1 release notes
@@ -8182,10 +8382,10 @@ bf7c09a osd_types: fix object_info_t backwards compatibility
 1212a21 CephContext: unregister lockdep after stopping service thread
 dd9d8b0 ReplicatedPG: test for missing head before find_object_context
 d8d27f1 JounralingObjectStore: journal->committed_thru after replay
-a7063a1 (origin/wip-6768) Use clearer "local monitor storage" in log messages
-dcef9fb (origin/po-pr838) automake: replaced hardcoded '-lboost_program_options' with a macro
+a7063a1 Use clearer "local monitor storage" in log messages
+dcef9fb automake: replaced hardcoded '-lboost_program_options' with a macro
 125582e autoconf: add check for the boost_program_options library
-cfb82a1 (origin/port/fallocate) filejournal: add journal pre-allocate for osx
+cfb82a1 filejournal: add journal pre-allocate for osx
 d39ff4c mon/OSDMonitor: 'osd metadata N' command
 ea16435 mon/OSDMonitor: record osd metadata key/value info
 6d40e94 osd: send host/kernel metadata to mon on boot
@@ -8194,10 +8394,10 @@ aef3402 doc/release-notes: fix dup
 8b5719f doc: Added Emperor upgrade.
 7f45e72 doc: Added dumpling to the sequence.
 efe55b1 doc: Remove redundant command for quick start preflight
-fbdfe61 (origin/port/unused-headers) trace: remove unused header
+fbdfe61 trace: remove unused header
 762acec mon: Monitor: make 'quorum enter/exit' available through the admin socket
-01f7b46 (origin/port/stat) client: use platform-specific stat time members
-2f76ac3 (origin/wip-da-SCA-master) mon/MDSMonitor.cc: remove some unused variables
+01f7b46 client: use platform-specific stat time members
+2f76ac3 mon/MDSMonitor.cc: remove some unused variables
 91627f2 test_seek_read.c: remove unused variable 'off64_t so'
 0da5a01 rgw: remove unused variables
 6566dfb osd/ReplicatedPG.cc: remove unused variable
@@ -8219,11 +8419,11 @@ d8f0502 doc/release-notes: note crush update timeout on startup change
 082e7c9 Ceph: Fix memory leak in chain_flistxattr()
 c7a30b8 ReplicatedPG: don't skip missing if sentries is empty on pgls
 5fe3dc6 objecter: clean pause / unpause logic
-98ab7d6 (origin/wip-objecter-full) objecter: set op->paused in recalc_op_target(), resend in not paused
-afb3566 (origin/port/detect-clang) conf: use better clang detection
-ac04481 (origin/port/func-name) assert: choose function-var name on non-gnu
-1d030d1 (origin/port/gtest-death-tests) test: Only build death tests on platforms that support them
-c6826c1 (origin/wip-6719) PG: fix operator<<,log_wierdness log bound warning
+98ab7d6 objecter: set op->paused in recalc_op_target(), resend in not paused
+afb3566 conf: use better clang detection
+ac04481 assert: choose function-var name on non-gnu
+1d030d1 test: Only build death tests on platforms that support them
+c6826c1 PG: fix operator<<,log_wierdness log bound warning
 f4648bc PGLog::rewind_divergent_log: log may not contain newhead
 25b7349 osd/ErasureCodePlugin: close library before return on error
 c3d20f2 osd/erasurecode: free allocated memory before return NULL
@@ -8231,16 +8431,16 @@ bfd5b90 mon/MDSMonitor: remove unnecessary assignment
 89d5396 osd/erasurecode: correct one variable name in jerasure_matrix_to_bitmatrix()
 2aaed99 Revert "doc: radosgw workaround for OpenStack Horizon bug"
 c5c399d objecter: don't resend paused ops
-5a44e17 (origin/wip-6677) rgw: add compatibility for MultipartUpload
+5a44e17 rgw: add compatibility for MultipartUpload
 a3ccd29 RadosModel: use sharedptr_registry for snaps_in_use
 c22c84a osdmaptool: don't put progress on stdout
-81a3ea1 (origin/port/rgw) rgw: add compat file for name service macros
+81a3ea1 rgw: add compat file for name service macros
 5dc6419 rgw: avoid sighandler_t in favor of sig_t
-e9880cf (origin/port/missing-headers) crush: add mising header for count
+e9880cf crush: add mising header for count
 a10345a auth: add missing header for list
 01a5a83 mon: add missing header for std::find
 e71a2f0 auth: add missing header file for std::replace
-0209568 (origin/port/utime) utime: use to_timespec for conversion
+0209568 utime: use to_timespec for conversion
 4c3b6d6 rgw: allow multiple frontends of the same framework
 e25d32c rgw: clean up shutdown signaling
 6d737ce rgw: clean up front end configuration
@@ -8248,8 +8448,8 @@ abc2177 rgw: more flexible frotnend handler config
 bbcddef Add a verbose argument and some verbosity
 c4b0431 Verify that radosgw started, return appropriate exit code
 0c61091 We should exit 1 if radosgw is not executable
-1cc8558 (origin/port/detect-libresolv) autoconf: check for res_nquery explicitly
-ea725d3 (origin/port/bootstrap) autogen.sh: use glibtoolize when available
+1cc8558 autoconf: check for res_nquery explicitly
+ea725d3 autogen.sh: use glibtoolize when available
 00734ec autogen: set exit on error
 154ee0b FileStore::_collection_move_rename: handle missing dst dir on replay
 1fe762c rgw: refactor request handling processing
@@ -8262,44 +8462,44 @@ fe6cd9b rgw: rebase mongoose prototype
 ed3caf7 mongoose: submodule, v4.1
 2fcaa1f pdatedoc: Added index link to new install doc. Requires merge of wip-doc-install to work.
 917dd71 doc: Deleted old manual install doc.
-195e861 (origin/wip-doc-install) doc: Mentioned that install procedure is for manual deployments, not ceph-deploy or others.
+195e861 doc: Mentioned that install procedure is for manual deployments, not ceph-deploy or others.
 2aa6cde doc: Changed text for ceph-extras. Made it required. Mentioned newer versions.
-d03924c (origin/wip-da-fix-galois-warning) galois.c: fix compiler warning
-6821a6e (origin/wip-static-cast) assert: use feature test for static_cast
+d03924c galois.c: fix compiler warning
+6821a6e assert: use feature test for static_cast
 330a6a7 wbthrottle: use posix_fadvise if available
 2bf8ff4 doc: Added DNS and SSL dialog.
 cd0d612 OSD: allow project_pg_history to handle a missing map
 9ab5133 OSD: don't clear peering_wait_for_split in advance_map()
 545135f ReplicatedPG::recover_backfill: adjust last_backfill to HEAD if snapdir
-324dd54 (origin/wip-blkdev) test: test helper for get_block_device_size
+324dd54 test: test helper for get_block_device_size
 268785f blkdev: support blkdev size query on osx
 75b4b47 doc: Implemented changes suggested from feedback.
-41e052d (origin/revert-struct-init) Revert "fix -Wgnu-designator warnings"
+41e052d Revert "fix -Wgnu-designator warnings"
 96f4607 test/libcephfs: free cmount after tests finishes
 c0bcdc3 osd/erasurecode: correct one variable name in jerasure_matrix_to_bitmatrix()
-09e1597 (origin/wip-pgmap) mon/PGMap: use const ref, not pass-by-value
+09e1597 mon/PGMap: use const ref, not pass-by-value
 fb0f198 rbd: omit 'rw' option during map
 2db20d9 qa: don't run racy xfstest 008
-1bb5aad (origin/wip-6698) upstart: fix ceph-crush-location default
+1bb5aad upstart: fix ceph-crush-location default
 c3c962e doc: radosgw workaround for OpenStack Horizon bug
 cbc15bf doc: fix typo in openstack radosgw integration
 4032501 mon/OSDMonitor: refix warning
-9834ab9 (origin/wip-6673b) OSDMonitor: be a little nicer about letting users do pg splitting
-59a55fd (origin/wip-pipe) pipe: use pipe2 feature test; check fcntl retval
+9834ab9 OSDMonitor: be a little nicer about letting users do pg splitting
+59a55fd pipe: use pipe2 feature test; check fcntl retval
 5d0d0a9 fix -Wmismatched-tags warnings
 6efc2b5 fix -Wgnu-designator warnings
 382149c OSD: remove unused private var [-Wunused-private-field]
 cf29574 CrushTester: remove unused private var [-Wunused-private-field]
 cc08a4a auth: remove unused private var [-Wunused-private-field]
 306ec71 rgw: don't turn 404 into 400 for the replicalog api
-cd30e5f (origin/master-new) common/buffer.cc: fix rebuild_page_aligned typo
+cd30e5f common/buffer.cc: fix rebuild_page_aligned typo
 ffdd30e test: add gcc compile test for installed headers
 12238d0 libcephfs: Fix compilation for C compiler
 b3b1650 ceph: Fix compilation with GCC compiler
 524aee6 Really use the hostname, otherwise ambiguous
 f2622a4 ceph-object-corpus: revert accidental revert
 df3af6c docs: Fix a typo in RGW documentation
-588ed60 (origin/next-new) Wrap hex_to_num table into class HexTable
+588ed60 Wrap hex_to_num table into class HexTable
 148023d [rgw] Set initialized to true after populating table in hex_to_num()
 28e4271 sharedptr_registry.hpp: removed ptrs need to not blast contents
 4402898 prio-q: initialize cur iterator
@@ -8334,44 +8534,44 @@ fba056a doc: Removed install libvirt. Consolidated to install-vm-cloud.
 6b9104d doc/release-notes: formatting
 04710b5 doc/release-notes: fix formatting
 b605c73 doc/release-notes: fix indentation
-1de46d6 (origin/next-fix) os/chain_listxattr: fix leak fix
+1de46d6 os/chain_listxattr: fix leak fix
 6efd82c ceph: Release resource before return in BackedObject::download()
 e22347d ceph: Fix memory leak in chain_listxattr
 905243b Fix memory leak in Backtrace::print()
-be12f7f (origin/wip-6683) mon: OSDMonitor: proper error msg on invalid epoch on 'osd getmap/dump'
+be12f7f mon: OSDMonitor: proper error msg on invalid epoch on 'osd getmap/dump'
 e5efd88 mon: MonmapMonitor: support 'mon getmap [epoch]'
 e11c975 (tag: v0.72-rc1) v0.72-rc1
-a3119bc (origin/wip-crush-hook) upstart, sysvinit: use ceph-crush-location hook
+a3119bc upstart, sysvinit: use ceph-crush-location hook
 9f6af8b ceph-crush-location: new crush location hook
 1e2e429 Revert "ceph-crush-location: new crush location hook"
 22ff717 Revert "upstart, sysvinit: use ceph-crush-location hook"
-0c18609 (origin/wip-6605) mon: OSDMonitor: fix comparison between signed and unsigned integer warning
+0c18609 mon: OSDMonitor: fix comparison between signed and unsigned integer warning
 e02740a mon: OSDMonitor: only allow an osd to boot iff it has the fsid on record
 42c4137 mon: OSDMonitor: fix some annoying whitespace
 60264f9 doc: Fixed formatting. Fixed hyperlink.
 46d897a doc: fix formatting.
 111a37e upstart, sysvinit: use ceph-crush-location hook
 fc49065 ceph-crush-location: new crush location hook
-df229e5 (origin/wip-6673) mon/PGMonitor: always send pg creations after mapping
+df229e5 mon/PGMonitor: always send pg creations after mapping
 2181b4c mon/OSDMonitor: fix signedness warning on poolid
 7a06a71 ReplicatedPG::recover_backfill: update last_backfill to max() when backfill is complete
-e46d2ca (origin/wip-pr781)   fix the bug  ctypes.util.find_library to search for librados failed on Centos6.4.   Signed-off-by: huangjun  <hjwsm1989@gmail.com>
+e46d2ca   fix the bug  ctypes.util.find_library to search for librados failed on Centos6.4.   Signed-off-by: huangjun  <hjwsm1989@gmail.com>
 f8fa309 ReplicatedPG: src_obcs can now be empty
-3b99cd0 (origin/wip-readdirend) mds: fix readdir end check
+3b99cd0 mds: fix readdir end check
 6eded8a doc: Fixes to normalize header hierarchy. Tweaked IA slightly.
 bd507ef doc: Updated with a verified installation procedure and latest usage.
-4e48dd5 (origin/wip-6585) osd/ReplicatedPG: use MIN for backfill_pos
+4e48dd5 osd/ReplicatedPG: use MIN for backfill_pos
 4139e75 ReplicatedPG: recover_backfill: don't prematurely adjust last_backfill
 ecddd12 ReplicatedPG: add empty stat when we remove an object in recover_backfill
 9ec35d5 ReplicatedPG: replace backfill_pos with last_backfill_started
 8774f03 PG::BackfillInfo: introduce trim_to
 46dfd91 PG::BackfillInterval: use trim() in pop_front()
 0a9a2d7 ReplicatedPG::prepare_transaction: info.last_backfill is inclusive
-5939eac (origin/wip-5612) upstart: fail osd start if crush update fails
+5939eac upstart: fail osd start if crush update fails
 177e2ab init-ceph: make crush update on osd start time out
-b28b64a (origin/wip-scripts) pybind: use find_library for libcephfs and librbd
-d5d36d0 (origin/wip-6621) radosgw-admin: accept negative values for quota params
-9d136a4 (origin/wip-obc) ReplicatedPG: no need to clear repop->*obc
+b28b64a pybind: use find_library for libcephfs and librbd
+d5d36d0 radosgw-admin: accept negative values for quota params
+9d136a4 ReplicatedPG: no need to clear repop->*obc
 f58396a doc/release-notes: emperor blurb
 8db03ed ReplicatedBackend: don't hold ObjectContexts in pull completion callback
 5a416da ReplicatedPG: put repops even in TrimObjects
@@ -8385,7 +8585,7 @@ ce33892 PG: call on_flushed on FlushEvt
 9b003b3 OpRequest: move method implementations into cc
 c4442d7 ReplicatedPG: reset new_obs and new_snapset in execute_ctx
 8a62bf1    fix the bug if we set pgp_num=-1 using "ceph osd pool set data|metadata|rbd -1"    will set the pgp_num to a hunge number.
-c7d975a (origin/wip-ceph-context) ceph_context: use condition variable for wake-up
+c7d975a ceph_context: use condition variable for wake-up
 e5efc29 test: Use a portable syntax for seq(1)
 fbabd42 test: Change interpreter from /bin/bash to /bin/sh
 0a1579d test: Use portable arguments to /usr/bin/env
@@ -8400,7 +8600,7 @@ f0f6750 common: add an hobject_t::is_min() function
 fe30ac6 rgw: Use JSONFormatter to use keystone API
 5733f9c rgw: Use keystone password to validate token too
 bd04a77 rgw: Adds passwd alternative to keystone admin token
-8282e24 (origin/wip-6635) mon/OSDMonitor: make racing dup pool rename behave
+8282e24 mon/OSDMonitor: make racing dup pool rename behave
 66a9fbe common: rebuild_page_aligned sometimes rebuilds unaligned
 c14c98d mon: OSDMonitor: Make 'osd pool rename' idempotent
 284b73b packages: ceph.spec.in is missing make as a build dependency
@@ -8420,13 +8620,13 @@ e17ff19 osd/osd_types: init SnapSet::seq in ctor
 d2b661d os/FileStore: fix getattr return value when using omap
 3a469bb os/ObjectStore: fix RMATTRS encoding
 847ea60 PGLog::read_log: don't add items past backfill line to missing
-3c0042c (origin/wip-rbd-parent-info) rbd.py: increase parent name size limit
+3c0042c rbd.py: increase parent name size limit
 87d3f88 PGMap::dirty_all should be asserting about osd_epochs, not in.osd_epochs
 0388b71 Update init-rbdmap
 0d326c3 ceph: tolerate commands without any child args
 cfe8451 rgw: eliminate one unnecessary case statement
 80384a1 Update init-rbdmap
-f9a6d71 (origin/wip-rgw-sync-next) radosgw-admin: remove unused function escape_str()
+f9a6d71 radosgw-admin: remove unused function escape_str()
 ec45b3b rgw: escape bucket and object names in StreamReadRequests
 dd308cd rgw: move url escaping to a common place
 e0e8fb1 rgw: update metadata log list to match data log list
@@ -8434,10 +8634,10 @@ c275912 rgw: include marker and truncated flag in data log list api
 e74776f cls_log: always return final marker from log_list
 ea816c1 rgw: skip read_policy checks for system_users
 1d7c204 Add a configurable to allow bucket perms to be checked before key perms through rgw_defer_to_bucket_acls config option.  This configurable defaults to an empty string.  Option values include:
-0e8182e (origin/wip-6620) mds: MDSMap: adjust buffer size for uint64 values with more than 5 chars
+0e8182e mds: MDSMap: adjust buffer size for uint64 values with more than 5 chars
 af1dee5 doc: clarify that mons must have qurorum during deploy
 4c8be79    rename test_arch.c --> test_arch.cc to avoid undefined reference to `__gxx_personality_v0' error.    Signed-off-by: huangjun  <hjwsm1989@gmail.com>
-7ba4bc4 (origin/wip-monc-ping) cli: ceph: add support to ping monitors
+7ba4bc4 cli: ceph: add support to ping monitors
 400cb18 pybind: rados: ping a monitor via librados
 1a2e0eb pybind: rados: support ETIMEDOUT on make_ex()
 2d7ccab librados: support pinging a monitor without auth via RadosClient
@@ -8464,7 +8664,7 @@ df9315c doc: Removed RGW from quick start, since it is not ceph-deploy enabled.
 8a36503 doc: Moved CPU Profiler docs to dev.
 06ec0f6 doc: Removed Calxeda reference since it is now the same as normal install.
 b422d4a doc: Removed old files. Consolidated contents into new IA.
-1821ad7 (origin/wip-6242-b) pybind/rados: create InterruptedOrTimeoutError exception
+1821ad7 pybind/rados: create InterruptedOrTimeoutError exception
 1230886 ceph: move timeout
 8baeac0 ceph: catch exceptions thrown during the rados handle init
 d60e532 ceph: show basic help before initializing cluster connection
@@ -8473,8 +8673,8 @@ b33c315 ceph: default 5 second timeout for -h
 e922475 ceph: print basic options before connecting
 445e8c9 ceph: fixup do_help() function connection check
 32a23c5 ceph.in: add emacs modeline
-771b0c5 (origin/wip-6606) rgw: don't bother to call c_str() on strings passed to dump_string()
-dff41cd (origin/wip-test-librbd) ceph_test_librbd: fix heap overrun
+771b0c5 rgw: don't bother to call c_str() on strings passed to dump_string()
+dff41cd ceph_test_librbd: fix heap overrun
 eb5dd55   test_ceph_argparse.py: No assert_not_in and assert_in in nose.tools   Signed-off-by: huangjun  <hjwsm1989@gmail.com>
 ccaab2a rgw: init src_bucket_name, src_object in the S3 handler
 db7eb77 rgw: get rid of req_state.bucket_name
@@ -8482,14 +8682,14 @@ cbf8f9a rgw: turn swift COPY into PUT
 1f6b8b2 librbd: parse args to ceph_test_librbd
 ad4553a librbd: fix build error
 bd2eeb7 ceph-mon: add debug to ip selection
-a107030 (origin/wip-5668-b) librbd: wire up flush counter
-715d2ab (origin/wip-6603) common/BackTrace: fix memory leak
+a107030 librbd: wire up flush counter
+715d2ab common/BackTrace: fix memory leak
 687ecd8 common/cmdparse: fix memory leak
-9fa357d (origin/wip-backtrace) mds: update backtrace when old format inode is touched
-34d0941 (origin/wip-6599) client: fix invalid iterator dereference in Client::trim_caps()
+9fa357d mds: update backtrace when old format inode is touched
+34d0941 client: fix invalid iterator dereference in Client::trim_caps()
 4f299ca autoconf: fix typo on AM_COMMON_CFLAGS
 94080de common: get_command_descriptions use cout instead of dout
-8586c75 (origin/wip-6582) ReplicatedPG: copy: conditionally requeue copy ops when cancelled
+8586c75 ReplicatedPG: copy: conditionally requeue copy ops when cancelled
 6dff926 PG: add a requeue_op() function to complement requeue_ops().
 45d1846 doc: Removed references to Chef.
 89995ef doc/release-notes: missed mds snaps
@@ -8497,10 +8697,10 @@ a107030 (origin/wip-5668-b) librbd: wire up flush counter
 5d2cf46 Update ceph-authtool.rst
 7bcfe09 ceph.spec.in:  Add erasure-code related files. Signed-off-by: huangjun  <hjwsm1989@gmail.com>
 533626c Add Redhat init script option
-3cfe9f6 (origin/wip-cache-crc) common/buffer: invalidate crc on zero, copy_in
+3cfe9f6 common/buffer: invalidate crc on zero, copy_in
 8ec3aed common/buffer: fix crc_map types
 394ec17 common/buffer: drop unused fields
-2edc04c (origin/wip-6475-gl) ceph.spec.in:  Need to cread radosgw log directory.
+2edc04c ceph.spec.in:  Need to cread radosgw log directory.
 1f291f5 qa/workunits/rest/test.py: fix mds {add,remove}_data_pool test
 11fc80d doc/release-notes: link ot the changelog
 eb0a3b7 doc/release-notes: v0.61.9
@@ -8508,10 +8708,10 @@ d3f0c0b Makefile: fix /sbin vs /usr/sbin behavior
 15ec533 OSD: check for splitting when processing recover/backfill reservations
 08177f2 ceph: Remove unavailable option with clang
 e509cb1 (tag: v0.71) v0.71
-10b466e (origin/wip-6475) radosgw: create /var/log/radosgw in package, not init script
+10b466e radosgw: create /var/log/radosgw in package, not init script
 5c280a2 .gitignore: ceph-kvstore-tool
 14e91bf debian, specfile: fix ceph-kvstore-tool packaging
-fd6e2b8 (origin/wip-kvstore-tool) ceph-kvstore-tool: copy one leveldb store to some other place
+fd6e2b8 ceph-kvstore-tool: copy one leveldb store to some other place
 85914b2 ceph-kvstore-tool: calc store crc
 da69fa0 tools: move 'test_store_tool' to 'tools/ceph-kvstore-tool'
 eafdc92 common/buffer: behave when cached crc stats don't start at 0
@@ -8527,21 +8727,21 @@ a3e9344 common/buffer: explicitly init zbuf to zeros
 6464516 common/buffer: instrument utilization of cached crcs
 0c23a56 common/buffer: cache crcs in buffer::raw
 8757775 include: add Spinlock
-72ce2ef (origin/wip-4047) cls_rbd: do not make noise in osd log on rbd removal
+72ce2ef cls_rbd: do not make noise in osd log on rbd removal
 e550e3d test_ceph_argparse: fix typo
 dbd6d97 test_ceph_argparse: fix mds {add,remove}_data_pool tests
 5838c09 common: fix non-daemon init
 1d4f501 test/filestore/run_seed_to.sh: avoid obsolete --filestore-xattr-use-omap
 982511e MonCommands: note that pg dump options don't work in plaintext
-c7acc2a (origin/wip-5716) rgw: gracefully handle bad root pool names
+c7acc2a rgw: gracefully handle bad root pool names
 488678f ceph_test_rados: fix snap remove vs rollback fix
 2701231 os/LevelDBStore: handle deletion race when checking store size
 92ea0d1 test/librados/cmd: fix compile error
-c69e76c (origin/wip-6059) ReplicatedPG: remove the other backfill related flushes
+c69e76c ReplicatedPG: remove the other backfill related flushes
 3469dd8 RadosModel: send racing read on write
 0246d47 ReplicatedPG: block reads on an object until the write is committed
 c658258 OSD: ping tphandle during pg removal
-4f403c2 (origin/wip-6334) common: don't do special things for unprivileged daemons
+4f403c2 common: don't do special things for unprivileged daemons
 5aa237e mon, osd: send leveldb log to /dev/null by default
 ab8f9b1 doc: Update from user feedback. Needed to enable S3/Keystone.
 4bb2a4b doc: Updated to ensure that socket name isn't static.
@@ -8550,21 +8750,21 @@ bd7a7dd os/FileStore: fix fiemap double-free(s)
 8b43d72 vstart.sh: create dev/ automatically
 8d7dbf8 rgw: change default log level
 70cc681 mon/PGMonitor: set floor below which we do not warn about objects/pg
-bebbd6c (origin/wip-6553) rgw: fix authenticated users acl group check
+bebbd6c rgw: fix authenticated users acl group check
 08327fe mon: osd pool set syntax relaxed, modify unit tests
 02b5eb2 ceph.spec.in: do not list ceph-rest-api twice; add missing cls_hello files
 dd33c98 osd/osd_types: generalize pg_pool_t::get_flags_string()
-5abe5c2 (origin/wip-6147) mon: OSDMonitor: add 'osd pool stats' command
+5abe5c2 mon: OSDMonitor: add 'osd pool stats' command
 2cd5320 mon: PGMap: rework client IO rate calc and output
 e3ba8e8 mon: PGMap: reuse existing summary functions to output pool stats
 82e3317 mon: PGMap: keep track of per-pool stats deltas
-e2602c5 (origin/wip-pool) mon: make 'mon {add,remove}_data_pool ...' take pool name or id
-d6146b0 (origin/wip-formatter-newlines) common/Formatter: add newline to flushed output if m_pretty
+e2602c5 mon: make 'mon {add,remove}_data_pool ...' take pool name or id
+d6146b0 common/Formatter: add newline to flushed output if m_pretty
 f2645e1 rgw: swift update obj metadata also add generic attrs
 6641273 SignalHandler: fix infinite loop on BSD systems
 2cc5805 doc: Removed underscore for consistency.
-4b8eb4f (origin/wip-rgw-quota) radosgw-admin: add --quota-scope param to usage
-f568501 (origin/wip-5025) mds: flock: fix F_GETLK
+4b8eb4f radosgw-admin: add --quota-scope param to usage
+f568501 mds: flock: fix F_GETLK
 3c6710b qa/workunits/misc/dirfrag: make it work on ubuntu
 b0f49e0 ReplicatedPG.h: while there cannot be a read in progress, there may be a read blocked
 bf82ba9 doc: disable cephx requires auth_supported = none
@@ -8585,14 +8785,14 @@ cdd851b doc: Moved installation portion to the installation section.
 a182535 librados: add some clarifying comments
 7ef5eb0 librados: drop reference to completion in container destructor
 f13cc68 doc: Fixed hyperlinks. Cleanup of old references to Chef.
-70250e8 (origin/wip-mon-pool-set) osd: osd_types: Output pool's flag names during dump
-7113186 (origin/wip-objecter-errors) osdc/Objecter: clean up completion handlers that set *prval=0
+70250e8 osd: osd_types: Output pool's flag names during dump
+7113186 osdc/Objecter: clean up completion handlers that set *prval=0
 82e9330 osdc/Objecter: only make handlers set *prval if EIO
 1c28869 mon: OSDMonitor: allow (un)setting 'hashpspool' flag via 'osd pool set'
 2fe0d0d mon: OSDMonitor: split 'osd pool set' out of 'prepare_command'
 6bbb772 test/filestore/run_seed_to_range.sh: fix -d syntax
-4e2ff53 (origin/wip-truncate2) mds: avoid leaking objects when purging file.
-eb381ff (origin/wip-filerecover) mds: don't decrease file size when recovering file
+4e2ff53 mds: avoid leaking objects when purging file.
+eb381ff mds: don't decrease file size when recovering file
 1803f3b radosgw-admin: limit user bucket-level quota
 18a271d mds: optimize map element dereference
 d8faa82 ReplicatedPG: remove unused RWTracker::ObjState::clear
@@ -8604,8 +8804,8 @@ fc35807 rgw: protect against concurrent async quota updates
 2e4ecc2 rgw: async quota update
 5bc6327 doc: Merge cleanup.
 c0c332c doc: minor clean up.
-007f06e (origin/wip-4405) mds: fix infinite loop of MDCache::populate_mydir().
-1f50750 (origin/wip-5992-3) ReplicatedPG: remove the other backfill related flushes
+007f06e mds: fix infinite loop of MDCache::populate_mydir().
+1f50750 ReplicatedPG: remove the other backfill related flushes
 db6623f RadosModel: send racing read on write
 2b216c3 ReplicatedPG: block reads on an object until the write is committed
 e8a2992 rgw: rearrange includes
@@ -8614,7 +8814,7 @@ e8a2992 rgw: rearrange includes
 768fb0a doc: fix openstack rbd installation command
 e21e573 os: stronger assert on FileStore::lfn_open
 0f323bc common: unintended use of the wrong bloom_filter prototype
-4b911cf (origin/wip-rval) ReplicatedPG: copy: use aggregate return code instead of individual Op return
+4b911cf ReplicatedPG: copy: use aggregate return code instead of individual Op return
 6da4b91 os/FileStore: fix ENOENT error code for getattrs()
 71ee6d7 mon: allow MMonGetMap without authentication
 f279641 mon: do not put() unhandle message
@@ -8647,9 +8847,9 @@ f989396 mds: properly store fragmenting dirfrags
 4014ba2 mds: delete orphan dirfrags during MDS recovers
 a881c1d mds: journal original dirfrags for rollback
 e927941 doc/release-notes: v0.67.4
-3fc6cfb (origin/wip-optracker) Makefile: add include/histogram.h to noinst_HEADERS
-bb9b9c8 (origin/wip-6143) common, os: Perform xattr handling based on detected fs type
-b87bc23 (origin/wip-5992-2) ReplicatedPG: lock snapdir obc during write
+3fc6cfb Makefile: add include/histogram.h to noinst_HEADERS
+bb9b9c8 common, os: Perform xattr handling based on detected fs type
+b87bc23 ReplicatedPG: lock snapdir obc during write
 0c2769d PGLog: on split, leave log head alone
 391a885 FileStore: make _setattrs not return -ENOENT most of the time
 0c1e251 ReplicatedPG: add debugging in recover_replicas for objects added for backfill
@@ -8663,7 +8863,7 @@ e73ec48 common/hobject: add is_degenerate method
 c8a4411 PGMap: calc_min_last_epoch_clean() will now also use osd_epochs
 091809b PGMap,PGMonitor: maintain mapping of osd to recent stat epoch
 e3bb065 (tag: v0.70, tag: mark-v0.70-wip) v0.70
-806725a (origin/wip-start-copy) ReplicatedPG: copy: add op progression output
+806725a ReplicatedPG: copy: add op progression output
 639ff9f ReplicatedPG: copy: don't leak a ctx on failed copy ops
 469d471 ReplicatedPG: assert that we have succeeded in do_osd_ops on copyfrom repeats
 f3733a2 ReplicatedPG: copy: switch CopyCallback to use a GenContext
@@ -8688,7 +8888,7 @@ f1e2393 mon: Monitor: reuse 'src_is_mon' bool on dispatch
 b8a1488 mon: Monitor: dissociate msg handling from session & connection logic
 d0d61b4 mon: Monitor: drop client msg if no session exists and msg is not MAuth
 ed1a54e mon: Monitor: assert on absense of connection during dispatch
-dce3d26 (origin/wip-5896) mon: MonmapMonitor: make 'ceph mon add' idempotent
+dce3d26 mon: MonmapMonitor: make 'ceph mon add' idempotent
 8cfeb83 common/bloom_filter: note that uint32_t interface requires well-mixed values
 9299f50 common/bloom_filter: speed up unit tests a bit
 4b23b65 common/bloom_filter: test binning fpp behavior
@@ -8706,7 +8906,7 @@ a8761a5 TrackedOp: just make CephContext member public
 ebae077 rgw: bucket stats also dump quota info
 7973d44 OpTracker: give TrackedOp a default dump() function
 baf1d40 rgw: init quota
-721f170 (origin/wip-fuse) client: remove requests from closed MetaSession
+721f170 client: remove requests from closed MetaSession
 63f5814 ceph: Update FUSE_USE_VERSION from 26 to 30.
 f8a947d client: trim deleted inode
 563517d rgw: update quota stats when needed
@@ -8783,7 +8983,7 @@ b032931 PendingReleaseNotes: update regarding librados change
 b245ca1 os/FileStore: add sloppy crc tracking
 8912462 rgw: drop async pool create completion reference
 4605792 librados: pool async create / delete does not delete completion handle
-7d1dc55 (origin/wip-doc-quickstart) doc: Diagram update and clarification on ceph-deploy admin results.
+7d1dc55 doc: Diagram update and clarification on ceph-deploy admin results.
 b23718a doc: Diagram update from feedback.
 245296a doc: Diagram updates from feedback.
 71ba833 doc: Updated block device quick start to use ceph-deploy. OS neutral.
@@ -8934,7 +9134,7 @@ ed73e0a doc: Adding context to the federated configuration guide.
 157754b common/config: include --cluster in default usage message
 362dba1 os, ceph_osd: Rename on_disk_version to target_version
 7b7e004 os: Prior version bump should have updated this
-27fb44b (origin/automake-fix-common) make: build common/secret only on linux
+27fb44b make: build common/secret only on linux
 8407669 os: Code conformance of os/LFNIndex.cc
 0d47bf8 os: Fix typo in comment
 c4bcb46 common: Fix get_namespace() definition in hobject_t
@@ -8948,7 +9148,7 @@ c4bcb46 common: Fix get_namespace() definition in hobject_t
 67386e4 mds: don't trim stray inode from the cache.
 0f3ba29 mds: remove unnecessary MDCache::maybe_eval_stray() calls
 cbf1f3c mds: evaluate stray when releasing inode/dentry's reference
-0a43974 (origin/automake-flags) automake: add per-target AM_CPPFLAGS
+0a43974 automake: add per-target AM_CPPFLAGS
 11d8d75 makefile-env: separate cppflags and cflags usage
 2b75abb ceph_test_rados: fix COPY_FROM completion
 935eb22 ceph_test_rados: fix seq_num, improve error output
@@ -8964,7 +9164,7 @@ c55d7ac doc: Updated graphic to use same name as command line examples.
 5eb4db1 doc: Removed Get Involved from Quick Start.
 af7ad1d doc: Changed title, and removed recommendations sections.
 dc19d24 doc: Moved recommendations sections to Intro.
-b1eeadd (origin/wip-6361) qa: workunits: cephtool: check if 'heap' commands are parseable
+b1eeadd qa: workunits: cephtool: check if 'heap' commands are parseable
 296f2d0 osd: OSD: add 'heap' command to known osd commands array
 238fe27 mds: MDS: pass only heap profiler commands instead of the whole cmd vector
 c98b910 perfglue/heap_profiler.cc: expect args as first element on cmd vector
@@ -8990,7 +9190,7 @@ a8bbb81 OpTracker: remove the references to "osd" in config variables
 5c46fc4 doc: Made some changes and incorporated a draft diagram.
 5bb7417 doc: Added draft of region/zone diagram.
 bcc1680 mon: fix inverted test in osd pool create
-f3718c2 (origin/prctl-getname-test) code_env: use feature test for PR_GET_NAME support
+f3718c2 code_env: use feature test for PR_GET_NAME support
 08fe028 rgw: use bufferlist::append() instead of bufferlist::push_back()
 fd6646f Makefile: fix unittest_arch
 5421d6d Makefile: fix unittest_crc32c
@@ -9031,7 +9231,7 @@ df7c36a osd/ReplicatedPG: factor some bits into finish_copy
 59147be osd: compute full ratio from kb_avail
 89e8b8b ErasureCode: improve API implementation example
 3966e6e ErasureCode: proofread abstract API documentation
-971bf60 (origin/wip-buck-centos-core) Remove unneeded junit4 check
+971bf60 Remove unneeded junit4 check
 e38bd8d Removing extraneous code
 cd6f4bc Use a loop for testing jdk paths
 3cef755 fix some comments
@@ -9045,7 +9245,7 @@ abd2fcd ErasureCode: fix uninitialized variable warning
 4216eac rgw: try to create log pool if doesn't exist
 b86c068 hadoop: remove hadoop shim
 e7f7483 rgw: NULL terminate buffer before parsing it
-3f8c969 (origin/fix-no-tcmalloc-build) make: add tmalloc lib dep in tcmalloc guard
+3f8c969 make: add tmalloc lib dep in tcmalloc guard
 daf417f osd/ReplicatedPG.cc: Verify that recovery is truly complete
 139a714 osd/OSD.cc: Use MIN() so that we don't exceed osd_recovery_max_active
 4633729 mon/OSDMonitor: make busy creating pgs message more explicit
@@ -9098,7 +9298,7 @@ e435468 ErasureCodeJerasure: base class for jerasure ErasureCodeInterface
 661b377 os/FileStore: pass old + new object name to lfn_link
 deea63f osd: expose bytes used/avail via perf / asok
 3bc618b qa: workunits: mon: crush_ops: test 'ceph osd crush move'
-7d3799f (origin/wip-6230) mon: MonCommands: expect a CephString as 1st arg for 'osd crush move'
+7d3799f mon: MonCommands: expect a CephString as 1st arg for 'osd crush move'
 132e403 autoconf: use $(LIBOSD) $(LIBCOMMON) instead of libosd.a libcommon.la
 4c5b3c7 doc: Syntax fix to suppress gitbuilder errors.
 8bf858f doc: Removed mkcephfs reference.
@@ -9275,7 +9475,7 @@ ea2fc85 SharedPtrRegistry: get_next must not delete while holding the lock
 af5281e common: move SharedPtrRegistry test after t.join
 c5b5ce1 osd: install admin socket commands after signals
 76a38c3 mon/DataHealthService: preserve compat of data stats dump
-f0805cb (origin/wip-6122) test/librados/cmd.cc: tolerate thrashing on pg_command tests
+f0805cb test/librados/cmd.cc: tolerate thrashing on pg_command tests
 d571825 WBThrottle: use fdatasync instead of fsync
 3528100 FileStore: add config option to disable the wbthrottle
 ed712c1 fix nss lib name
@@ -10279,7 +10479,7 @@ d31ed95 mon/PaxosService: allow paxos service writes while paxos is updating
 7a2566c rgw: remove test placement info
 224130c rgw (test): remove some warnings
 1b162ce rgw: initialize user system flag
-7681c58 (origin/wip-rgw-geo-bucketinstance) rgw: log in the same shard for bucket entry point and instance
+7681c58 rgw: log in the same shard for bucket entry point and instance
 d4e39a7 rgw: unlink/link don't always update entry point
 5680fa1 doc/release-notes: v0.65
 6673b2d rgw: tie metadata put to bucket link/unlink
@@ -10382,7 +10582,7 @@ ab79ba4 cls_replica_log: integrate with RGWRados
 e4ef5c6 cls_replica_log: add the actual class
 22a02e9 cls_replica_log: add ops for new class
 d1c9594 cls_replica_log: add types for new class
-0deb6d4 (origin/wip-rgw-geo-enovance) rgw: lock related modifications
+0deb6d4 rgw: lock related modifications
 3b4c11b rgw: add max-entries, marker for log operations
 714f212 osdc: re-calculate truncate_size for strip objects
 ebb46c4 qa/workunits/misc/multiple_rsync.sh: wtf
@@ -10471,7 +10671,7 @@ f5f8314 rgw: object mtime the same for both object and bucket index
 92997a4 mon: fix 'osd dump <epoch>'
 8c6b24e ceph-disk: add some notes on wth we are up to
 94b3700 rgw: intra-region copy, preserve mtime
-29eb333 (origin/wip-log-rewrite-sam) test/osd/TestPGLog: %s/dirty()/is_dirty()
+29eb333 test/osd/TestPGLog: %s/dirty()/is_dirty()
 f164a32 PGLog: check for dirty_to != eversion_t() and dirty_from != eversion_t::max()
 c6dd60d PGLog: rename dirty() to is_dirty()
 2ad319b PGLog: only iterate over dirty portions of the log
@@ -11255,7 +11455,7 @@ f36ec02 doc: Updated architecture document.
 1c53991 fix typos and add hyperlink to peering
 b7d4012 typo s/come/some/
 dbddffe update op added to a waiting queue or discarded
-e9935f2 (origin/wip-rgw-bucketlog-3) ceph_json: fix bool decoding
+e9935f2 ceph_json: fix bool decoding
 67ecd75 rgw: json_encode json a bit differently
 afeb8f2 md/Sever.cc: fix straydn assert
 e69257e rgw/rgw_user.cc: fix possible NULL pointer dereference
@@ -13501,7 +13701,7 @@ e51299f mds: open mydir after replay
 7cd4e50 client: Wait for caps to flush when flushing metadata.
 907c709 mds: Send created ino in journaled_reply
 cf7c3f7 client: Don't use geteuid/gid for fuse ll_create
-0b66994 (origin/wip-3930) ceph.spec.in:        package rbd udev rule
+0b66994 ceph.spec.in:  package rbd udev rule
 a7d15af mon: smooth pg stat rates over last N pgmaps
 ecda120 doc: fix overly-big fixed-width text in Firefox
 3f6837e mon/PGMap: report IO rates
@@ -15393,7 +15593,7 @@ a1cfe74 client: Mods to fix #3184 for messenger shutdown
 eb27f9a Add howto for changing man pages
 d37ca79 mon: update 'auth' help/usage
 1d552a4 rados: fix man page
-8740ddf doc: fix rpm url (part deux)
+8740ddf9 doc: fix rpm url (part deux)
 6c5c939 librbd: fix includes for portability
 c9266d6 rgw: check that realloc succeeded
 4513397 ReplicatedPG: track incoming pushes with perf counters
@@ -19131,7 +19331,7 @@ cf279a8 workunits: print tests pjd runs
 798ef38 osd: delay pg list on a snapid until missing is empty
 e2a9450 obsync: add swift support to obsync
 d21f4ab msgr: turn up socket debug printouts
-891025e udev: drop device number from name
+891025e5 udev: drop device number from name
 a5606ca pybind: trivial fix of missing argument
 e4db129 crush: whitespace
 808763e osdmap: initialize cluster_snapshot_epoch
@@ -21028,7 +21228,7 @@ cbeedeb proflogger: Unlink our UNIX domain sockets on exit
 adafec4 test/proflogger.cc: read length of message first
 f8b4aa3 ProfLogger: write out length of message first
 325951d test/proflogger: Add TeardownSetup and SimpleTest
-134a680a Add test/proflogger.cc, fix ProfLogger::init()
+134a680 Add test/proflogger.cc, fix ProfLogger::init()
 5517b8f Rework ProfLogger
 6424149 osd: remove unused variables
 d07c480 mon: remove unused variables
@@ -22820,7 +23020,7 @@ cae43fc Makefile: drop libradosgw_a LDFLAGS
 32fce3c rados_create: correctly handle null id
 f06f4ee librados: always call keyring_init in connect
 586fc66 librados: don't call keyring_init in init_internal
-9e1828af objecter: make response_data bufferlist static
+9e1828a objecter: make response_data bufferlist static
 251fd50 rados_create_internal calls keyring_init
 c548976 rados_create: set id based on parameter
 b1c3321 librados: add rados_create_internal
@@ -25315,7 +25515,7 @@ b01cc38 rgw: set default log level to 20
 6bd40ac qa: consistent snaptest-%d.sh naming
 9127cd9 mds: fix uninitialized LeaseStat for null lease
 5c714bf osd: log when we get marked down but aren't
-7fbe1655 debug: no name symlink when explicit --log-file
+7fbe165 debug: no name symlink when explicit --log-file
 3de9c8d client: some whitespace cleanup
 8195899 qa: add localized version of Thomas Mueller's snaptest-2.sh
 2d35d24 rgw: exit after 5 seconds from SIGUSR1 anyway
@@ -26481,7 +26681,7 @@ ee127d2 src/README is required
 21b88da rados_bencher: Don't re-initialize passed-in pool, it breaks stuff
 99e48ee osd: Fix up OSDCaps::get_pool_cap to work/make more sense
 2860eea rados: add interface to change pool owners
-c2e7eed6 librados: add change_pool_auid functions
+c2e7eed librados: add change_pool_auid functions
 1a4899d objecter: add change_pool_auid function.
 a33e9e7 mds: allow rdlock on replica to request sync from auth
 8d9f4fa mon: Set MForward::client_caps explicitly; this fixes a bad connection deref.
@@ -26909,7 +27109,7 @@ ba515fe mkcephfs: generate cephx keys during mkfs
 329178d mount: set flags when getting -o sync
 6ea3030 mds: fix dumpcache
 6285b61 authtool: only create keyring if --create-keyring (or -c)
-f40957eb config: rename 'keys file' to 'keyring'
+f40957e config: rename 'keys file' to 'keyring'
 3ebf9a4 filestore: optionally checkpoint with snaps
 5bdb348 journal: make sure max_size is multiple of block_size
 54898b3 mds: print setattr'd values with MClientRequest
@@ -27154,7 +27354,7 @@ e439bd3 config: add kill arguments for mds import/export
 b709a72 mds: bracket mds journal events with {start,submit}_entry
 95ee211 todo
 adbd7d8 dropped old aleung mds branch code
-714a9af (origin/historic/aleung_mds_security) mon: fix allocation of low global_ids after mon restart
+714a9af mon: fix allocation of low global_ids after mon restart
 89603b6 test_ioctls: print preferred_osd value from GET_LAYOUT ioctl
 54b8537 hash: fix whitespace
 fd0195a mds: set mdr->in[n] in rdlock_path_xlock_dentry
@@ -27419,7 +27619,7 @@ e97c152 auth: fix verify_authorize_reply stupid
 08fbca8 auth: simplify challenge key encoding
 05e198b buffer: make [], hexdump const
 6133f02 auth: break client/server challenge calc into helper
-9ea4e4a5 auth: CEPH_AUTH_NONE auth and caps working
+9ea4e4a auth: CEPH_AUTH_NONE auth and caps working
 e98eb90 auth: return correct auth type
 8de5de0 auth: auth-none protocol stubs
 0717270 auth: redefine CEPH_AUTH_NONE
@@ -30099,7 +30299,7 @@ c46e1b3 (tag: v0.7) mkcephfs: btrfsctl -a between mkfs and mount
 f5a3d61 kclient: fix /sys/fs/ceph/mdsmap
 e2afd17 kclient: sysfs whitespace cleanup
 cbd43e3 kclient: fix patch series
-c057c834 osdmap: use generic crush_build_bucket
+c057c83 osdmap: use generic crush_build_bucket
 f05b1be kclient: fix osdmap decoding of straw buckets
 a098a3f kclient: sysfs, free path after build_path
 c90746a kclient: sysfs cleanup
@@ -35836,7 +36036,7 @@ eba9e7e *** empty log message ***
 ee63c70 *** empty log message ***
 90a1c02 *** empty log message ***
 bac0031 *** empty log message ***
-25764921 import is currently broken
+2576492 import is currently broken
 b247412 *** empty log message ***
 61a5130 *** empty log message ***
 9475610 *** empty log message ***
index 795c1264cc61d84039c98c364b3b0de099ee4469..f0bd3ad4f094991d9c08da4ea80ba618d046c866 100644 (file)
@@ -1,28 +1,33 @@
 %bcond_with ocf
 %bcond_without cephfs_java
 
-%if ! (0%{?fedora} > 12 || 0%{?rhel} > 5)
+%if (0%{?el5} || (0%{?rhel_version} >= 500 && 0%{?rhel_version} <= 600))
 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
 %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
 %endif
 
 %{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d}
 
-#################################################################################
-# common
-#################################################################################
+# LTTng-UST enabled on Fedora, RHEL 6, and SLES 12
+%if 0%{?fedora} || 0%{?rhel} == 6 || 0%{?suse_version} == 1315
+%global _with_lttng 1
+%endif
+
 Name:          ceph
-Version:       0.94.5
+Version:       0.94.6
 Release:       0%{?dist}
 Epoch:         1
 Summary:       User space components of the Ceph file system
-License:       GPL-2.0
+License:       LGPL-2.1 and CC-BY-SA-1.0 and GPL-2.0 and BSL-1.0 and GPL-2.0-with-autoconf-exception and BSD-3-Clause and MIT
 Group:         System Environment/Base
 URL:           http://ceph.com/
 Source0:       http://ceph.com/download/%{name}-%{version}.tar.bz2
-%if 0%{?fedora} || 0%{?centos} || 0%{?rhel}
+%if 0%{?fedora} || 0%{?rhel}
 Patch0:                init-ceph.in-fedora.patch
 %endif
+#################################################################################
+# dependencies that apply across all distro families
+#################################################################################
 Requires:      librbd1 = %{epoch}:%{version}-%{release}
 Requires:      librados2 = %{epoch}:%{version}-%{release}
 Requires:      libcephfs1 = %{epoch}:%{version}-%{release}
@@ -32,13 +37,17 @@ Requires:   python-rbd = %{epoch}:%{version}-%{release}
 Requires:      python-cephfs = %{epoch}:%{version}-%{release}
 Requires:      python
 Requires:      python-requests
-Requires:      python-flask
+Requires:      grep
 Requires:      xfsprogs
+Requires:      logrotate
 Requires:      parted
 Requires:      util-linux
 Requires:      hdparm
 Requires:      cryptsetup
 Requires(post):        binutils
+%if 0%{with cephfs_java}
+BuildRequires: sharutils
+%endif
 BuildRequires: gcc-c++
 BuildRequires: boost-devel
 %if 0%{defined suse_version}
@@ -49,6 +58,7 @@ BuildRequires:  bzip2-devel
 BuildRequires: cryptsetup
 BuildRequires: gdbm
 BuildRequires: hdparm
+BuildRequires: leveldb-devel > 1.2
 BuildRequires: libaio-devel
 BuildRequires: libcurl-devel
 BuildRequires: libedit-devel
@@ -57,10 +67,9 @@ BuildRequires:       libuuid-devel
 BuildRequires: libblkid-devel >= 2.17
 BuildRequires: libudev-devel
 BuildRequires: libtool
-BuildRequires: leveldb-devel > 1.2
 BuildRequires: make
-BuildRequires: perl
 BuildRequires: parted
+BuildRequires: perl
 BuildRequires: pkgconfig
 BuildRequires: python
 BuildRequires: python-nose
@@ -77,13 +86,12 @@ BuildRequires:      net-tools
 %endif
 
 #################################################################################
-# specific
+# distro-conditional dependencies
 #################################################################################
-%if ! 0%{?rhel} || 0%{?fedora}
-BuildRequires: sharutils
-%endif
-
 %if 0%{defined suse_version}
+Requires:      python-Flask
+BuildRequires: net-tools
+BuildRequires: libbz2-devel
 %if 0%{?suse_version} > 1210
 Requires:      gptfdisk
 BuildRequires: gperftools-devel
@@ -91,7 +99,6 @@ BuildRequires:        gperftools-devel
 Requires:      scsirastools
 BuildRequires: google-perftools-devel
 %endif
-Recommends:    logrotate
 BuildRequires: %insserv_prereq
 BuildRequires: mozilla-nss-devel
 BuildRequires: keyutils-devel
@@ -106,6 +113,18 @@ Requires(post):    chkconfig
 Requires(preun):chkconfig
 Requires(preun):initscripts
 BuildRequires: gperftools-devel
+Requires:      python-flask
+%endif
+# lttng and babeltrace for rbd-replay-prep
+%if 0%{?_with_lttng}
+%if 0%{?fedora} || 0%{?rhel}
+BuildRequires: lttng-ust-devel
+BuildRequires: libbabeltrace-devel
+%endif
+%if 0%{?suse_version}
+BuildRequires: lttng-ust-devel
+BuildRequires:  babeltrace-devel
+%endif
 %endif
 
 %description
@@ -126,9 +145,6 @@ Requires:   python-rados = %{epoch}:%{version}-%{release}
 Requires:      python-rbd = %{epoch}:%{version}-%{release}
 Requires:      python-cephfs = %{epoch}:%{version}-%{release}
 Requires:      python-requests
-%if 0%{?rhel} || 0%{?fedora}
-Requires:  redhat-lsb-core
-%endif
 # python-argparse is only needed in distros with Python 2.6 or lower
 %if (0%{?rhel} && 0%{?rhel} <= 6) || (0%{?suse_version} && 0%{?suse_version} <= 1110)
 Requires:      python-argparse
@@ -190,7 +206,7 @@ managers such as Pacemaker.
 Summary:       RADOS distributed object store client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 %endif
 %description -n librados2
@@ -223,7 +239,7 @@ object store.
 Summary:       RADOS striping interface
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-Requires:      librados2 = %{epoch}:%{version}
+Requires:      librados2 = %{epoch}:%{version}-%{release}
 %description -n libradosstriper1
 Striping interface built on top of the rados library, allowing
 to stripe bigger objects onto several standard rados objects using
@@ -245,7 +261,7 @@ Summary:    RADOS block device client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      librados2 = %{epoch}:%{version}-%{release}
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 %endif
 %description -n librbd1
@@ -280,7 +296,7 @@ block device.
 Summary:       Ceph distributed file system client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 Obsoletes:     ceph-libcephfs
 %endif
@@ -325,17 +341,13 @@ Summary:  Ceph benchmarks and test tools
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      ceph-common
-%if (0%{?fedora} >= 20 || 0%{?rhel} == 6)
-BuildRequires: lttng-ust-devel
-BuildRequires: libbabeltrace-devel
-%endif
 %description -n ceph-test
 This package contains Ceph benchmarks and test tools.
 
 %if 0%{with cephfs_java}
 
 %package -n libcephfs_jni1
-Summary:       Java Native Interface library for CephFS Java bindings.
+Summary:       Java Native Interface library for CephFS Java bindings
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -346,7 +358,7 @@ This package contains the Java Native Interface library for CephFS Java
 bindings.
 
 %package -n libcephfs_jni1-devel
-Summary:       Development files for CephFS Java Native Interface library.
+Summary:       Development files for CephFS Java Native Interface library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -357,7 +369,7 @@ This package contains the development files for CephFS Java Native Interface
 library.
 
 %package -n cephfs-java
-Summary:       Java libraries for the Ceph File System.
+Summary:       Java libraries for the Ceph File System
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -376,7 +388,7 @@ This package contains the Java libraries for the Ceph File System.
 %endif
 
 %package libs-compat
-Summary:       Meta package to include ceph libraries.
+Summary:       Meta package to include ceph libraries
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Obsoletes:     ceph-libs
@@ -436,7 +448,7 @@ python-cephfs instead.
 #################################################################################
 %prep
 %setup -q
-%if 0%{?fedora} || 0%{?rhel} || 0%{?centos}
+%if 0%{?fedora} || 0%{?rhel}
 %patch0 -p1 -b .init
 %endif
 
@@ -529,8 +541,10 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/tmp
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mon
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/osd
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mds
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/radosgw
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-osd
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-mds
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-rgw
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/radosgw
 
 %clean
@@ -613,6 +627,10 @@ fi
 %{_libdir}/rados-classes/libcls_version.so*
 %dir %{_libdir}/ceph/erasure-code
 %{_libdir}/ceph/erasure-code/libec_*.so*
+%if 0%{?_with_lttng}
+%{_libdir}/libos_tp.so*
+%{_libdir}/libosd_tp.so*
+%endif
 %{_udevrulesdir}/60-ceph-partuuid-workaround.rules
 %{_udevrulesdir}/95-ceph-osd.rules
 %config %{_sysconfdir}/bash_completion.d/ceph
@@ -646,6 +664,7 @@ fi
 %dir %{_localstatedir}/lib/ceph/bootstrap-osd
 %dir %{_localstatedir}/lib/ceph/bootstrap-mds
 %ghost %dir %{_localstatedir}/run/ceph/
+%dir %{_localstatedir}/lib/ceph/bootstrap-rgw
 
 #################################################################################
 %files -n ceph-common
@@ -659,6 +678,11 @@ fi
 %{_bindir}/ceph-crush-location
 %{_bindir}/rados
 %{_bindir}/rbd
+%{_bindir}/rbd-replay
+%{_bindir}/rbd-replay-many
+%if 0%{?_with_lttng}
+%{_bindir}/rbd-replay-prep
+%endif
 %{_bindir}/ceph-post-file
 %{_bindir}/ceph-brag
 %{_mandir}/man8/ceph-authtool.8*
@@ -670,11 +694,16 @@ fi
 %{_mandir}/man8/ceph.8*
 %{_mandir}/man8/rados.8*
 %{_mandir}/man8/rbd.8*
+%{_mandir}/man8/rbd-replay.8*
+%{_mandir}/man8/rbd-replay-many.8*
+%{_mandir}/man8/rbd-replay-prep.8*
 %{_datadir}/ceph/known_hosts_drop.ceph.com
 %{_datadir}/ceph/id_dsa_drop.ceph.com
 %{_datadir}/ceph/id_dsa_drop.ceph.com.pub
 %dir %{_sysconfdir}/ceph/
 %dir %{_localstatedir}/log/ceph/
+%dir %{_datarootdir}/ceph/
+%dir %{_libexecdir}/ceph/
 %config %{_sysconfdir}/bash_completion.d/rados
 %config %{_sysconfdir}/bash_completion.d/rbd
 %config(noreplace) %{_sysconfdir}/ceph/rbdmap
@@ -718,6 +747,7 @@ fi
 %config(noreplace) %{_sysconfdir}/logrotate.d/radosgw
 %config %{_sysconfdir}/bash_completion.d/radosgw-admin
 %dir %{_localstatedir}/log/radosgw/
+%dir %{_localstatedir}/lib/ceph/radosgw
 
 %post radosgw
 /sbin/ldconfig
@@ -756,6 +786,9 @@ fi
 %files -n librados2
 %defattr(-,root,root,-)
 %{_libdir}/librados.so.*
+%if 0%{?_with_lttng}
+%{_libdir}/librados_tp.so.*
+%endif
 
 %post -n librados2
 /sbin/ldconfig
@@ -776,6 +809,9 @@ fi
 %{_includedir}/rados/rados_types.hpp
 %{_includedir}/rados/memory.h
 %{_libdir}/librados.so
+%if 0%{?_with_lttng}
+%{_libdir}/librados_tp.so
+%endif
 
 #################################################################################
 %files -n python-rados
@@ -805,6 +841,9 @@ fi
 %files -n librbd1
 %defattr(-,root,root,-)
 %{_libdir}/librbd.so.*
+%if 0%{?_with_lttng}
+%{_libdir}/librbd_tp.so.*
+%endif
 
 %post -n librbd1
 /sbin/ldconfig
@@ -822,6 +861,9 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %{_includedir}/rbd/librbd.hpp
 %{_includedir}/rbd/features.h
 %{_libdir}/librbd.so
+%if 0%{?_with_lttng}
+%{_libdir}/librbd_tp.so
+%endif
 
 #################################################################################
 %files -n python-rbd
@@ -883,14 +925,6 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %{_bindir}/ceph-monstore-tool
 %{_bindir}/ceph-osdomap-tool
 %{_bindir}/ceph-kvstore-tool
-%{_mandir}/man8/rbd-replay.8*
-%{_mandir}/man8/rbd-replay-many.8*
-%{_mandir}/man8/rbd-replay-prep.8*
-%{_bindir}/rbd-replay
-%{_bindir}/rbd-replay-many
-%if (0%{?fedora} >= 20 || 0%{?rhel} == 6)
-%{_bindir}/rbd-replay-prep
-%endif
 
 #################################################################################
 %if 0%{with cephfs_java}
@@ -898,6 +932,12 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %defattr(-,root,root,-)
 %{_libdir}/libcephfs_jni.so.*
 
+%post -n libcephfs_jni1
+/sbin/ldconfig
+
+%postun -n libcephfs_jni1
+/sbin/ldconfig
+
 #################################################################################
 %files -n libcephfs_jni1-devel
 %defattr(-,root,root,-)
index 140e0e3141a8d7bc679de7109f026c869456efbc..3f9a126c4b63d66fe00e0918a352c72f82fe681e 100644 (file)
@@ -1,28 +1,33 @@
 %bcond_with ocf
 %bcond_without cephfs_java
 
-%if ! (0%{?fedora} > 12 || 0%{?rhel} > 5)
+%if (0%{?el5} || (0%{?rhel_version} >= 500 && 0%{?rhel_version} <= 600))
 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
 %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
 %endif
 
 %{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d}
 
-#################################################################################
-# common
-#################################################################################
+# LTTng-UST enabled on Fedora, RHEL 6, and SLES 12
+%if 0%{?fedora} || 0%{?rhel} == 6 || 0%{?suse_version} == 1315
+%global _with_lttng 1
+%endif
+
 Name:          ceph
 Version:       @VERSION@
 Release:       @RPM_RELEASE@%{?dist}
 Epoch:         1
 Summary:       User space components of the Ceph file system
-License:       GPL-2.0
+License:       LGPL-2.1 and CC-BY-SA-1.0 and GPL-2.0 and BSL-1.0 and GPL-2.0-with-autoconf-exception and BSD-3-Clause and MIT
 Group:         System Environment/Base
 URL:           http://ceph.com/
 Source0:       http://ceph.com/download/%{name}-%{version}.tar.bz2
-%if 0%{?fedora} || 0%{?centos} || 0%{?rhel}
+%if 0%{?fedora} || 0%{?rhel}
 Patch0:                init-ceph.in-fedora.patch
 %endif
+#################################################################################
+# dependencies that apply across all distro families
+#################################################################################
 Requires:      librbd1 = %{epoch}:%{version}-%{release}
 Requires:      librados2 = %{epoch}:%{version}-%{release}
 Requires:      libcephfs1 = %{epoch}:%{version}-%{release}
@@ -32,13 +37,17 @@ Requires:   python-rbd = %{epoch}:%{version}-%{release}
 Requires:      python-cephfs = %{epoch}:%{version}-%{release}
 Requires:      python
 Requires:      python-requests
-Requires:      python-flask
+Requires:      grep
 Requires:      xfsprogs
+Requires:      logrotate
 Requires:      parted
 Requires:      util-linux
 Requires:      hdparm
 Requires:      cryptsetup
 Requires(post):        binutils
+%if 0%{with cephfs_java}
+BuildRequires: sharutils
+%endif
 BuildRequires: gcc-c++
 BuildRequires: boost-devel
 %if 0%{defined suse_version}
@@ -49,6 +58,7 @@ BuildRequires:  bzip2-devel
 BuildRequires: cryptsetup
 BuildRequires: gdbm
 BuildRequires: hdparm
+BuildRequires: leveldb-devel > 1.2
 BuildRequires: libaio-devel
 BuildRequires: libcurl-devel
 BuildRequires: libedit-devel
@@ -57,10 +67,9 @@ BuildRequires:       libuuid-devel
 BuildRequires: libblkid-devel >= 2.17
 BuildRequires: libudev-devel
 BuildRequires: libtool
-BuildRequires: leveldb-devel > 1.2
 BuildRequires: make
-BuildRequires: perl
 BuildRequires: parted
+BuildRequires: perl
 BuildRequires: pkgconfig
 BuildRequires: python
 BuildRequires: python-nose
@@ -77,13 +86,12 @@ BuildRequires:      net-tools
 %endif
 
 #################################################################################
-# specific
+# distro-conditional dependencies
 #################################################################################
-%if ! 0%{?rhel} || 0%{?fedora}
-BuildRequires: sharutils
-%endif
-
 %if 0%{defined suse_version}
+Requires:      python-Flask
+BuildRequires: net-tools
+BuildRequires: libbz2-devel
 %if 0%{?suse_version} > 1210
 Requires:      gptfdisk
 BuildRequires: gperftools-devel
@@ -91,7 +99,6 @@ BuildRequires:        gperftools-devel
 Requires:      scsirastools
 BuildRequires: google-perftools-devel
 %endif
-Recommends:    logrotate
 BuildRequires: %insserv_prereq
 BuildRequires: mozilla-nss-devel
 BuildRequires: keyutils-devel
@@ -106,6 +113,18 @@ Requires(post):    chkconfig
 Requires(preun):chkconfig
 Requires(preun):initscripts
 BuildRequires: gperftools-devel
+Requires:      python-flask
+%endif
+# lttng and babeltrace for rbd-replay-prep
+%if 0%{?_with_lttng}
+%if 0%{?fedora} || 0%{?rhel}
+BuildRequires: lttng-ust-devel
+BuildRequires: libbabeltrace-devel
+%endif
+%if 0%{?suse_version}
+BuildRequires: lttng-ust-devel
+BuildRequires:  babeltrace-devel
+%endif
 %endif
 
 %description
@@ -126,9 +145,6 @@ Requires:   python-rados = %{epoch}:%{version}-%{release}
 Requires:      python-rbd = %{epoch}:%{version}-%{release}
 Requires:      python-cephfs = %{epoch}:%{version}-%{release}
 Requires:      python-requests
-%if 0%{?rhel} || 0%{?fedora}
-Requires:  redhat-lsb-core
-%endif
 # python-argparse is only needed in distros with Python 2.6 or lower
 %if (0%{?rhel} && 0%{?rhel} <= 6) || (0%{?suse_version} && 0%{?suse_version} <= 1110)
 Requires:      python-argparse
@@ -190,7 +206,7 @@ managers such as Pacemaker.
 Summary:       RADOS distributed object store client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 %endif
 %description -n librados2
@@ -223,7 +239,7 @@ object store.
 Summary:       RADOS striping interface
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-Requires:      librados2 = %{epoch}:%{version}
+Requires:      librados2 = %{epoch}:%{version}-%{release}
 %description -n libradosstriper1
 Striping interface built on top of the rados library, allowing
 to stripe bigger objects onto several standard rados objects using
@@ -245,7 +261,7 @@ Summary:    RADOS block device client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      librados2 = %{epoch}:%{version}-%{release}
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 %endif
 %description -n librbd1
@@ -280,7 +296,7 @@ block device.
 Summary:       Ceph distributed file system client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 Obsoletes:     ceph-libcephfs
 %endif
@@ -325,17 +341,13 @@ Summary:  Ceph benchmarks and test tools
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      ceph-common
-%if (0%{?fedora} >= 20 || 0%{?rhel} == 6)
-BuildRequires: lttng-ust-devel
-BuildRequires: libbabeltrace-devel
-%endif
 %description -n ceph-test
 This package contains Ceph benchmarks and test tools.
 
 %if 0%{with cephfs_java}
 
 %package -n libcephfs_jni1
-Summary:       Java Native Interface library for CephFS Java bindings.
+Summary:       Java Native Interface library for CephFS Java bindings
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -346,7 +358,7 @@ This package contains the Java Native Interface library for CephFS Java
 bindings.
 
 %package -n libcephfs_jni1-devel
-Summary:       Development files for CephFS Java Native Interface library.
+Summary:       Development files for CephFS Java Native Interface library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -357,7 +369,7 @@ This package contains the development files for CephFS Java Native Interface
 library.
 
 %package -n cephfs-java
-Summary:       Java libraries for the Ceph File System.
+Summary:       Java libraries for the Ceph File System
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -376,7 +388,7 @@ This package contains the Java libraries for the Ceph File System.
 %endif
 
 %package libs-compat
-Summary:       Meta package to include ceph libraries.
+Summary:       Meta package to include ceph libraries
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Obsoletes:     ceph-libs
@@ -436,7 +448,7 @@ python-cephfs instead.
 #################################################################################
 %prep
 %setup -q
-%if 0%{?fedora} || 0%{?rhel} || 0%{?centos}
+%if 0%{?fedora} || 0%{?rhel}
 %patch0 -p1 -b .init
 %endif
 
@@ -529,8 +541,10 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/tmp
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mon
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/osd
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mds
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/radosgw
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-osd
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-mds
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-rgw
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/radosgw
 
 %clean
@@ -613,6 +627,10 @@ fi
 %{_libdir}/rados-classes/libcls_version.so*
 %dir %{_libdir}/ceph/erasure-code
 %{_libdir}/ceph/erasure-code/libec_*.so*
+%if 0%{?_with_lttng}
+%{_libdir}/libos_tp.so*
+%{_libdir}/libosd_tp.so*
+%endif
 %{_udevrulesdir}/60-ceph-partuuid-workaround.rules
 %{_udevrulesdir}/95-ceph-osd.rules
 %config %{_sysconfdir}/bash_completion.d/ceph
@@ -646,6 +664,7 @@ fi
 %dir %{_localstatedir}/lib/ceph/bootstrap-osd
 %dir %{_localstatedir}/lib/ceph/bootstrap-mds
 %ghost %dir %{_localstatedir}/run/ceph/
+%dir %{_localstatedir}/lib/ceph/bootstrap-rgw
 
 #################################################################################
 %files -n ceph-common
@@ -659,6 +678,11 @@ fi
 %{_bindir}/ceph-crush-location
 %{_bindir}/rados
 %{_bindir}/rbd
+%{_bindir}/rbd-replay
+%{_bindir}/rbd-replay-many
+%if 0%{?_with_lttng}
+%{_bindir}/rbd-replay-prep
+%endif
 %{_bindir}/ceph-post-file
 %{_bindir}/ceph-brag
 %{_mandir}/man8/ceph-authtool.8*
@@ -670,11 +694,16 @@ fi
 %{_mandir}/man8/ceph.8*
 %{_mandir}/man8/rados.8*
 %{_mandir}/man8/rbd.8*
+%{_mandir}/man8/rbd-replay.8*
+%{_mandir}/man8/rbd-replay-many.8*
+%{_mandir}/man8/rbd-replay-prep.8*
 %{_datadir}/ceph/known_hosts_drop.ceph.com
 %{_datadir}/ceph/id_dsa_drop.ceph.com
 %{_datadir}/ceph/id_dsa_drop.ceph.com.pub
 %dir %{_sysconfdir}/ceph/
 %dir %{_localstatedir}/log/ceph/
+%dir %{_datarootdir}/ceph/
+%dir %{_libexecdir}/ceph/
 %config %{_sysconfdir}/bash_completion.d/rados
 %config %{_sysconfdir}/bash_completion.d/rbd
 %config(noreplace) %{_sysconfdir}/ceph/rbdmap
@@ -718,6 +747,7 @@ fi
 %config(noreplace) %{_sysconfdir}/logrotate.d/radosgw
 %config %{_sysconfdir}/bash_completion.d/radosgw-admin
 %dir %{_localstatedir}/log/radosgw/
+%dir %{_localstatedir}/lib/ceph/radosgw
 
 %post radosgw
 /sbin/ldconfig
@@ -756,6 +786,9 @@ fi
 %files -n librados2
 %defattr(-,root,root,-)
 %{_libdir}/librados.so.*
+%if 0%{?_with_lttng}
+%{_libdir}/librados_tp.so.*
+%endif
 
 %post -n librados2
 /sbin/ldconfig
@@ -776,6 +809,9 @@ fi
 %{_includedir}/rados/rados_types.hpp
 %{_includedir}/rados/memory.h
 %{_libdir}/librados.so
+%if 0%{?_with_lttng}
+%{_libdir}/librados_tp.so
+%endif
 
 #################################################################################
 %files -n python-rados
@@ -805,6 +841,9 @@ fi
 %files -n librbd1
 %defattr(-,root,root,-)
 %{_libdir}/librbd.so.*
+%if 0%{?_with_lttng}
+%{_libdir}/librbd_tp.so.*
+%endif
 
 %post -n librbd1
 /sbin/ldconfig
@@ -822,6 +861,9 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %{_includedir}/rbd/librbd.hpp
 %{_includedir}/rbd/features.h
 %{_libdir}/librbd.so
+%if 0%{?_with_lttng}
+%{_libdir}/librbd_tp.so
+%endif
 
 #################################################################################
 %files -n python-rbd
@@ -883,14 +925,6 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %{_bindir}/ceph-monstore-tool
 %{_bindir}/ceph-osdomap-tool
 %{_bindir}/ceph-kvstore-tool
-%{_mandir}/man8/rbd-replay.8*
-%{_mandir}/man8/rbd-replay-many.8*
-%{_mandir}/man8/rbd-replay-prep.8*
-%{_bindir}/rbd-replay
-%{_bindir}/rbd-replay-many
-%if (0%{?fedora} >= 20 || 0%{?rhel} == 6)
-%{_bindir}/rbd-replay-prep
-%endif
 
 #################################################################################
 %if 0%{with cephfs_java}
@@ -898,6 +932,12 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %defattr(-,root,root,-)
 %{_libdir}/libcephfs_jni.so.*
 
+%post -n libcephfs_jni1
+/sbin/ldconfig
+
+%postun -n libcephfs_jni1
+/sbin/ldconfig
+
 #################################################################################
 %files -n libcephfs_jni1-devel
 %defattr(-,root,root,-)
index ced8866d52f5e6f6a14c7ddf151013079a48b76a..c2278d73e35b6766cf810f7279dc2de8dddc3e79 100755 (executable)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ceph 0.94.5.
+# Generated by GNU Autoconf 2.69 for ceph 0.94.6.
 #
 # Report bugs to <ceph-devel@vger.kernel.org>.
 #
@@ -590,8 +590,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='ceph'
 PACKAGE_TARNAME='ceph'
-PACKAGE_VERSION='0.94.5'
-PACKAGE_STRING='ceph 0.94.5'
+PACKAGE_VERSION='0.94.6'
+PACKAGE_STRING='ceph 0.94.6'
 PACKAGE_BUGREPORT='ceph-devel@vger.kernel.org'
 PACKAGE_URL=''
 
@@ -1542,7 +1542,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures ceph 0.94.5 to adapt to many kinds of systems.
+\`configure' configures ceph 0.94.6 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1613,7 +1613,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ceph 0.94.5:";;
+     short | recursive ) echo "Configuration of ceph 0.94.6:";;
    esac
   cat <<\_ACEOF
 
@@ -1786,7 +1786,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-ceph configure 0.94.5
+ceph configure 0.94.6
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2862,7 +2862,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by ceph $as_me 0.94.5, which was
+It was created by ceph $as_me 0.94.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4979,7 +4979,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='ceph'
- VERSION='0.94.5'
+ VERSION='0.94.6'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -12883,7 +12883,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='ceph'
- VERSION='0.94.5'
+ VERSION='0.94.6'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -22902,7 +22902,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched.h" >&5
 $as_echo_n "checking for sched.h... " >&6; }
-+ac_ext=cpp
+ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
@@ -22944,7 +22944,7 @@ $as_echo "no" >&6; }
 
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-+ac_ext=c
+ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
@@ -23956,7 +23956,7 @@ $as_echo "$am_cv_python_pyexecdir" >&6; }
 
 ac_config_headers="$ac_config_headers src/acconfig.h"
 
-ac_config_files="$ac_config_files Makefile src/Makefile src/ocf/Makefile src/ocf/ceph src/ocf/rbd src/java/Makefile src/tracing/Makefile man/Makefile ceph.spec"
+ac_config_files="$ac_config_files Makefile src/Makefile src/ocf/Makefile src/ocf/ceph src/ocf/rbd src/java/Makefile man/Makefile ceph.spec"
 
 cat >confcache <<\_ACEOF
 # This file is a shell script that caches the results of configure
@@ -24700,7 +24700,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by ceph $as_me 0.94.5, which was
+This file was extended by ceph $as_me 0.94.6, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -24766,7 +24766,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-ceph config.status 0.94.5
+ceph config.status 0.94.6
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -25279,7 +25279,6 @@ do
     "src/ocf/ceph") CONFIG_FILES="$CONFIG_FILES src/ocf/ceph" ;;
     "src/ocf/rbd") CONFIG_FILES="$CONFIG_FILES src/ocf/rbd" ;;
     "src/java/Makefile") CONFIG_FILES="$CONFIG_FILES src/java/Makefile" ;;
-    "src/tracing/Makefile") CONFIG_FILES="$CONFIG_FILES src/tracing/Makefile" ;;
     "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;;
     "ceph.spec") CONFIG_FILES="$CONFIG_FILES ceph.spec" ;;
 
index 969baed8357dbca3dd25ba7577fe193eb653ec52..67ed08db5d221425fbd035c9512763e9c7f2f2ba 100644 (file)
@@ -8,7 +8,7 @@ AC_PREREQ(2.59)
 # VERSION define is not used by the code.  It gets a version string
 # from 'git describe'; see src/ceph_ver.[ch]
 
-AC_INIT([ceph], [0.94.5], [ceph-devel@vger.kernel.org])
+AC_INIT([ceph], [0.94.6], [ceph-devel@vger.kernel.org])
 
 # Create release string.  Used with VERSION for RPMs.
 RPM_RELEASE=0
@@ -988,7 +988,7 @@ AC_MSG_RESULT([no])
 ])
 
 AC_MSG_CHECKING([for sched.h])
-+AC_LANG_PUSH([C++])
+AC_LANG_PUSH([C++])
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #define _GNU_SOURCE
 #include <sched.h>
@@ -1005,7 +1005,7 @@ AC_DEFINE([HAVE_SCHED], 1, [Define to 1 if you have sched.h.])
 ], [
 AC_MSG_RESULT([no])
 ])
-+AC_LANG_POP([C++])
+AC_LANG_POP([C++])
 
 
 #
@@ -1191,7 +1191,6 @@ AC_CONFIG_FILES([Makefile
        src/ocf/ceph
        src/ocf/rbd
        src/java/Makefile
-       src/tracing/Makefile
        man/Makefile
        ceph.spec])
 AC_OUTPUT
index ec4c7b28e15efa451ff142536a7daf19a6200b57..8239e26edc2f78a58e8f85f4411088261ba3a2e3 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-AUTHTOOL" "8" "November 30, 2014" "dev" "Ceph"
+.TH "CEPH-AUTHTOOL" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-authtool \- ceph keyring manipulation tool
 .
@@ -287,7 +287,7 @@ mount \-t ceph serverhost:/ mountpoint \-o name=foo,secret=\(gaceph\-authtool \-
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-authtool\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please
+\fBceph\-authtool\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 684cb9ed0c8d73ed9e92353e29d1d03b6e44fbdc..29032d8717dd8a6f792fce4b5ccdb49ce7437682 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-CLSINFO" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-CLSINFO" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-clsinfo \- show class object information
 .
@@ -84,7 +84,7 @@ Shows the class architecture
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-clsinfo\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please
+\fBceph\-clsinfo\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index cbe59a02d7f617ad8d496dc5a293682d13e5d804..9fb84645d66a6655b8bbdb16546dbfbd3c91b95a 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-CONF" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-CONF" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-conf \- ceph conf file tool
 .
@@ -147,7 +147,7 @@ ceph\-conf \-c foo.conf \-L
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-conf\fP is part of Ceph, a massively scalable, open-source, distributed storage system.  Please refer
+\fBceph\-conf\fP is part of Ceph, a massively scalable, open\-source, distributed storage system.  Please refer
 to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index a634e7a172ffd53051cf5b43db10cffbfab011bd..75de8fd6694a841c47c4354d3b0e66c128bc3afd 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-CREATE-KEYS" "8" "June 02, 2015" "dev" "Ceph"
+.TH "CEPH-CREATE-KEYS" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-create-keys \- ceph keyring generate tool
 .
@@ -30,6 +30,33 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
 .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
 ..
+.
+.nr rst2man-indent-level 0
+.
+.de1 rstReportMargin
+\\$1 \\n[an-margin]
+level \\n[rst2man-indent-level]
+level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
+-
+\\n[rst2man-indent0]
+\\n[rst2man-indent1]
+\\n[rst2man-indent2]
+..
+.de1 INDENT
+.\" .rstReportMargin pre:
+. RS \\$1
+. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
+. nr rst2man-indent-level +1
+.\" .rstReportMargin post:
+..
+.de UNINDENT
+. RE
+.\" indent \\n[an-margin]
+.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.nr rst2man-indent-level -1
+.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
+.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
+..
 .SH SYNOPSIS
 .nf
 \fBceph\-create\-keys\fP [\-h] [\-v] [\-\-cluster \fIname\fP] \-\-id \fIid\fP
@@ -40,7 +67,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
 \fBceph\-create\-keys\fP is a utility to generate bootstrap keyrings using
 the given monitor when it is ready.
 .sp
-it creates following auth entities (or users)
+It creates following auth entities (or users)
 .sp
 \fBclient.admin\fP
 .INDENT 0.0
@@ -56,7 +83,7 @@ and their keys for bootstrapping corresponding services
 .UNINDENT
 .UNINDENT
 .sp
-To list all users in cluster:
+To list all users in the cluster:
 .INDENT 0.0
 .INDENT 3.5
 .sp
index e232ee658623efadf315e10bacedf3eaa538a696..311ab34d4675799f992deb3add1b61e89bae1cbb 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-DEBUGPACK" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-DEBUGPACK" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-debugpack \- ceph debug packer utility
 .
@@ -82,7 +82,7 @@ startup.
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-debugpack\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please
+\fBceph\-debugpack\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index caf626aa9507655896b0d080b0176e52ce7a5a38..6f899e4c97bd03cd21af10687e2fb4763a8d6bc8 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-DENCODER" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-DENCODER" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-dencoder \- ceph encoder/decoder utility
 .
@@ -100,6 +100,12 @@ Select the given type for future \fBencode\fP or \fBdecode\fP operations.
 .UNINDENT
 .INDENT 0.0
 .TP
+.B skip <bytes>
+Seek <bytes> into the imported file before reading data structure, use
+this with objects that have a preamble/header before the object of interest.
+.UNINDENT
+.INDENT 0.0
+.TP
 .B decode
 Decode the contents of the in\-memory buffer into an instance of the
 previously selected type.  If there is an error, report it.
@@ -143,7 +149,7 @@ versions of the software (for those types that support it).
 .UNINDENT
 .SH EXAMPLE
 .sp
-Say you want to examine an attribute on an object stored by \fBceph\-osd\fP\&.  You can do:
+Say you want to examine an attribute on an object stored by \fBceph\-osd\fP\&.  You can do this:
 .INDENT 0.0
 .INDENT 3.5
 .sp
@@ -179,9 +185,29 @@ $ ceph\-dencoder type object_info_t import /tmp/a decode dump_json
 .fi
 .UNINDENT
 .UNINDENT
+.sp
+Alternatively, perhaps you wish to dump an internal CephFS metadata object, you might
+do that like this:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+$ rados \-p metadata get mds_snaptable mds_snaptable.bin
+$ ceph\-dencoder type SnapServer skip 8 import mds_snaptable.bin decode dump_json
+{ "snapserver": { "last_snap": 1,
+   "pending_noop": [],
+   "snaps": [],
+   "need_to_purge": {},
+   "pending_create": [],
+   "pending_destroy": []}}
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-dencoder\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please
+\fBceph\-dencoder\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 3a9a1209bfe93565b69e3a3101b52cdf97fe68ff..1056136fe17e5c8e4cac4d9558b4a6a861742614 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-DEPLOY" "8" "December 20, 2014" "dev" "Ceph"
+.TH "CEPH-DEPLOY" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-deploy \- Ceph deployment tool
 .
@@ -827,7 +827,7 @@ The domain for the Calamari master server.
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-deploy\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBceph\-deploy\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the documentation at \fI\%http://ceph.com/ceph-deploy/docs\fP for more information.
 .SH SEE ALSO
 .sp
index 41a5139f6a0e81c8b9fcec4f4686307f6969df64..ac87bdb105971e819a22433b227b466517b3d96b 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-DISK" "8" "December 18, 2014" "dev" "Ceph"
+.TH "CEPH-DISK" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-disk \- Ceph disk preparation and activation utility for OSD
 .
@@ -388,7 +388,7 @@ Provide init system to manage the OSD directory.
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-disk\fP is a part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBceph\-disk\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index 60bc7d259c4d66540c323edac6c71233c52245ae..2eb8733868766263ce2da74aa0fd21efbdc31691 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-FUSE" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-FUSE" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-fuse \- FUSE-based client for ceph
 .
@@ -108,7 +108,7 @@ Use root_directory as the mounted root, rather than the full Ceph tree.
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-fuse\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBceph\-fuse\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index 3667a1b75c10f2dee377a1a20ed492d14bee0cbf..362ec553b0fda5b3191c60b0b54718273c9cf117 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-MDS" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-MDS" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-mds \- ceph metadata server daemon
 .
@@ -106,9 +106,19 @@ startup.
 Connect to specified monitor (instead of looking through
 \fBceph.conf\fP).
 .UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-journal\-check <rank>
+Attempt to replay the journal for MDS <rank>, then exit.
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-hot\-standby <rank>
+Start as a hot standby for MDS <rank>.
+.UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-mon\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to the Ceph documentation at
+\fBceph\-mds\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to the Ceph documentation at
 \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index 6474f767b9ab9a4a26daa56290c67a7389cf30c5..351778b33ce69307a1ee7c697d344be03a40bcf1 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-MON" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-MON" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-mon \- ceph monitor daemon
 .
@@ -123,7 +123,7 @@ Specify a keyring for use with \fB\-\-mkfs\fP\&.
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-mon\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer
+\fBceph\-mon\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer
 to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 4e953de4b394806f58d358bebfdd8d46b6ca341a..c5cca26fd0097aced199e8c592c8fb2e4aee25a5 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-OSD" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-OSD" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-osd \- ceph object storage daemon
 .
@@ -155,7 +155,7 @@ Connect to specified monitor (instead of looking through
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-osd\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBceph\-osd\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index b3ecb20558bd12d430242663cbe76bca9a7376cb..fa25858768e123eac3bdc048656101ca657a8f5c 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-POST-FILE" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-POST-FILE" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-post-file \- post files for ceph developers
 .
@@ -118,7 +118,7 @@ ceph\-post\-file \-d \(aqmon data directories\(aq /var/log/ceph/mon/*
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-post\-file\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBceph\-post\-file\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index d6f7fd4556f1a263b1bf0148364e440f0e3acb01..77d49b2793ef2678acc7783c4e294b28a652aa23 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-RBDNAMER" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-RBDNAMER" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-rbdnamer \- udev helper to name RBD devices
 .
@@ -79,7 +79,7 @@ KERNEL=="rbd[0\-9]*", PROGRAM="/usr/bin/ceph\-rbdnamer %n", SYMLINK+="rbd/%c{1}/
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-rbdnamer\fP is part of Ceph, a massively scalable, open-source, distributed storage system.  Please
+\fBceph\-rbdnamer\fP is part of Ceph, a massively scalable, open\-source, distributed storage system.  Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 41120c8412a658f359e17d3b9ccb5d251d9675b7..1a75ffc25aa5497841ef9a16018cdef436387c2f 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-REST-API" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-REST-API" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-rest-api \- ceph RESTlike administration server
 .
@@ -197,7 +197,7 @@ exception to be raised; see your WSGI server documentation for how to
 see those messages in case of problem.
 .SH AVAILABILITY
 .sp
-\fBceph\-rest\-api\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to the Ceph documentation at
+\fBceph\-rest\-api\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to the Ceph documentation at
 \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index dab4d125f0aa089eab97e3bdbbdfc5e7f1743492..2fe581df83d1d622cef1d1d0fe19558081ac5115 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-RUN" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-RUN" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-run \- restart daemon on core dump
 .
@@ -75,7 +75,7 @@ that means the \fB\-f\fP option.
 None
 .SH AVAILABILITY
 .sp
-\fBceph\-run\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBceph\-run\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index 92aeb5a63852dfeb1beae722de5ecc6f2bff3e05..98e3297d2cd0da40f99c6753ae8ac1cd4405f035 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH-SYN" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPH-SYN" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph-syn \- ceph synthetic workload generator
 .
@@ -136,7 +136,7 @@ Recursively walk the file system (like find).
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBceph\-syn\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBceph\-syn\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index 0ec9d53858338a5e46bf78d22501a1488c6152cd..3035dea83b875494d69d582029ac1b15a8cd78d9 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPH" "8" "March 22, 2015" "dev" "Ceph"
+.TH "CEPH" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 ceph \- ceph administration tool
 .
@@ -1395,6 +1395,20 @@ ceph osd crush show\-tunables
 .UNINDENT
 .UNINDENT
 .sp
+Subcommand \fBtree\fP shows the crush buckets and items in a tree view.
+.sp
+Usage:
+.INDENT 0.0
+.INDENT 3.5
+.sp
+.nf
+.ft C
+ceph osd crush tree
+.ft P
+.fi
+.UNINDENT
+.UNINDENT
+.sp
 Subcommand \fBtunables\fP sets crush tunables values to <profile>.
 .sp
 Usage:
index 767fd3851b0cf55a3cd1bdd6d47f4baf64112ff3..4b35e368599009510e18f20b602d9171b0190d4e 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CEPHFS" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CEPHFS" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 cephfs \- ceph file system options utility
 .
@@ -109,7 +109,7 @@ Set the pool (by numeric value, not name!) to use
 .INDENT 0.0
 .TP
 .B \-o \-\-osd
-Set the preferred OSD to use as the primary (deprecated and ignored)
+Set the preferred OSD to use as the primary
 .UNINDENT
 .SH LIMITATIONS
 .sp
@@ -132,7 +132,7 @@ preferred OSD for placement. This feature is unsupported and ignored
 in modern versions of the Ceph servers; do not use it.
 .SH AVAILABILITY
 .sp
-\fBcephfs\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer
+\fBcephfs\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer
 to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 1fad24fddd88542a0f2807edeb44052339ad9e9d..9237cc29eeaca06ad4141a9dfd43725d19048830 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "CRUSHTOOL" "8" "January 12, 2014" "dev" "Ceph"
+.TH "CRUSHTOOL" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 crushtool \- CRUSH map manipulation tool
 .
@@ -417,7 +417,7 @@ crushtool \-c map.txt \-o crushmap
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBcrushtool\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please
+\fBcrushtool\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 1e728c721fcd5b4103e0a914384c0d6a101f92b0..e48183e8565883842673b07b3b7a6401286fab22 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "LIBRADOS-CONFIG" "8" "January 12, 2014" "dev" "Ceph"
+.TH "LIBRADOS-CONFIG" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 librados-config \- display information about librados
 .
@@ -81,7 +81,7 @@ Display the \fBlibrados\fP version code
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBlibrados\-config\fP is part of Ceph, a massively scalable, open-source, distributed storage system.
+\fBlibrados\-config\fP is part of Ceph, a massively scalable, open\-source, distributed storage system.
 Please refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for
 more information.
 .SH SEE ALSO
index a8862e3f0c118c616591e3c4a3f0e65c697db90b..9e257bcfa151c550d54df2967196c158920c1fae 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "MONMAPTOOL" "8" "January 12, 2014" "dev" "Ceph"
+.TH "MONMAPTOOL" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 monmaptool \- ceph monitor cluster map manipulation tool
 .
@@ -175,7 +175,7 @@ monmaptool \-\-rm mon.a \-\-add mon.a 192.168.0.9:6789 \-\-clobber monmap
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBmonmaptool\fP is part of Ceph, a massively scalable, open-source, distributed storage system.  Please
+\fBmonmaptool\fP is part of Ceph, a massively scalable, open\-source, distributed storage system.  Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 1159d91668ce3688d5a2a11532f614986cd37e61..f4d453661a73a854e570f8396e0a61fc662c7549 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "MOUNT.CEPH" "8" "January 12, 2014" "dev" "Ceph"
+.TH "MOUNT.CEPH" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 mount.ceph \- mount a ceph file system
 .
@@ -244,7 +244,7 @@ mount \-t ceph monhost:/ /mnt/foo
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBmount.ceph\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please
+\fBmount.ceph\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 99b7bacef26a3014cfa71c073c604cca30aa5d9c..4fd109f651ba66fec77614874eb6daf6a0be2412 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "OSDMAPTOOL" "8" "January 12, 2014" "dev" "Ceph"
+.TH "OSDMAPTOOL" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 osdmaptool \- ceph osd cluster map manipulation tool
 .
@@ -126,7 +126,7 @@ osdmaptool \-\-print osdmap
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBosdmaptool\fP is part of Ceph, a massively scalable, open-source, distributed storage system.  Please
+\fBosdmaptool\fP is part of Ceph, a massively scalable, open\-source, distributed storage system.  Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 94b67c919ca9c0d9ae50c7bfd2122f9c38ae4cb5..d43dfbd65b7ea5d56d7a48551e6d740f0ea52386 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "RADOS" "8" "May 29, 2014" "dev" "Ceph"
+.TH "RADOS" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 rados \- rados object storage utility
 .
@@ -132,6 +132,9 @@ Write object name to the cluster with contents from infile.
 .B \fBrm\fP \fIname\fP
 Remove object name.
 .TP
+.B \fBlistwatchers\fP \fIname\fP
+List the watchers of object name.
+.TP
 .B \fBls\fP \fIoutfile\fP
 List objects in given pool and write to outfile.
 .TP
@@ -256,7 +259,7 @@ rados \-p foo \-s mysnap get myobject blah.txt.old
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBrados\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBrados\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index d465d8abd3eb190330fcf20d70ba7c7c4a00c862..7b830903191ea6e1d9e02907ee262ec0de089442 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "RADOSGW-ADMIN" "8" "January 12, 2014" "dev" "Ceph"
+.TH "RADOSGW-ADMIN" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 radosgw-admin \- rados REST gateway user administration utility
 .
@@ -131,6 +131,12 @@ Show the usage information (with optional user and date range)
 .TP
 .B \fBusage trim\fP
 Trim usage information (with optional user and date range)
+.TP
+.B \fBorphans find\fP
+Init and run search for leaked rados objects
+.TP
+.B \fBorphans finish\fP
+Clean up search for leaked rados objects
 .UNINDENT
 .SH OPTIONS
 .INDENT 0.0
@@ -210,6 +216,17 @@ Remove all objects before bucket removal
 .B \-\-lazy\-remove
 Defer removal of object tail
 .UNINDENT
+.SH ORPHANS SEARCH OPTIONS
+.INDENT 0.0
+.TP
+.B \-\-pool
+Data pool to scan for leaked rados objects
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-num\-shards
+Number of shards to use for keeping the temporary scan info
+.UNINDENT
 .SH EXAMPLES
 .sp
 Generate a new user:
@@ -277,7 +294,7 @@ Show the logs of a bucket from April 1st, 2012:
 .sp
 .nf
 .ft C
-$ radosgw\-admin log show \-\-bucket=foo \-\-date=2012=04\-01
+$ radosgw\-admin log show \-\-bucket=foo \-\-date=2012\-04\-01
 .ft P
 .fi
 .UNINDENT
@@ -321,7 +338,7 @@ $ radosgw\-admin usage trim \-\-uid=johnny \-\-end\-date=2012\-04\-01
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBradosgw\-admin\fP is part of Ceph, a massively scalable, open-source, distributed storage system.  Please
+\fBradosgw\-admin\fP is part of Ceph, a massively scalable, open\-source, distributed storage system.  Please
 refer to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 41e348b499a9682e7c5966727fea8b1c62c39a81..af0dbe75e4b76544476ca060d585742552de69f4 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "RADOSGW" "8" "January 12, 2014" "dev" "Ceph"
+.TH "RADOSGW" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 radosgw \- rados REST gateway
 .
@@ -83,9 +83,44 @@ Connect to specified monitor (instead of looking through
 .UNINDENT
 .INDENT 0.0
 .TP
+.B \-i ID, \-\-id ID
+Set the ID portion of name for radosgw
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-n TYPE.ID, \-\-name TYPE.ID
+Set the rados user name for the gateway (eg. client.radosgw.gateway)
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-cluster NAME
+Set the cluster name (default: ceph)
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-d
+Run in foreground, log to stderr
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-f
+Run in foreground, log to usual location
+.UNINDENT
+.INDENT 0.0
+.TP
 .B \-\-rgw\-socket\-path=path
 Specify a unix domain socket path.
 .UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-rgw\-region=region
+The region where radosgw runs
+.UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-rgw\-zone=zone
+The zone where radosgw runs
+.UNINDENT
 .SH CONFIGURATION
 .sp
 Currently it\(aqs the easiest to use the RADOS Gateway with Apache and mod_fastcgi:
@@ -229,7 +264,7 @@ threshold specify how many entries can be kept before resorting to
 synchronous flush.
 .SH AVAILABILITY
 .sp
-\fBradosgw\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer
+\fBradosgw\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer
 to the Ceph documentation at \fI\%http://ceph.com/docs\fP for more
 information.
 .SH SEE ALSO
index 8e23798d40ecc97921dcebc809acbc2756cad32c..388c31b7827f979addba8f2df25d3be6ef9a81f9 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "RBD-FUSE" "8" "January 12, 2014" "dev" "Ceph"
+.TH "RBD-FUSE" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 rbd-fuse \- expose rbd images as files
 .
@@ -98,7 +98,7 @@ Use \fIpool\fP as the pool to search for rbd images.  Default is \fBrbd\fP\&.
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBrbd\-fuse\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBrbd\-fuse\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index 1d6c0bf9ac6d22bf7df2fb338e72e024590fe902..d1ee389d716af9e640621d9821c332908daefb27 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "RBD-REPLAY-MANY" "8" "September 04, 2014" "dev" "Ceph"
+.TH "RBD-REPLAY-MANY" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 rbd-replay-many \- replay a rados block device (RBD) workload on several clients
 .
@@ -122,7 +122,7 @@ ssh host\-1 \(aqrbd\-replay\(aq \-\-map\-image \(aqimage=image\-1\(aq \-c ceph.c
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBrbd\-replay\-many\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBrbd\-replay\-many\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index 13ab33aaf62b1d3bf10ce2075d290fd7ba44394b..0c2f7fd1b7c4d9e1e06d69e51ac29c345cee39eb 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "RBD-REPLAY-PREP" "8" "August 21, 2014" "dev" "Ceph"
+.TH "RBD-REPLAY-PREP" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 rbd-replay-prep \- prepare captured rados block device (RBD) workloads for replay
 .
@@ -76,6 +76,11 @@ Requests further apart than \(aqseconds\(aq seconds are assumed to be independen
 .B \-\-anonymize
 Anonymizes image and snap names.
 .UNINDENT
+.INDENT 0.0
+.TP
+.B \-\-verbose
+Print all processed events to console
+.UNINDENT
 .SH EXAMPLES
 .sp
 To prepare workload1\-trace for replay:
@@ -91,7 +96,7 @@ rbd\-replay\-prep workload1\-trace/ust/uid/1000/64\-bit workload1
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBrbd\-replay\-prep\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBrbd\-replay\-prep\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index cefb925bf53b2de180573dbe27d5435be9dcd2a5..2bc0bf7caa42f0026b94a15b1238b0f2ac045956 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "RBD-REPLAY" "8" "September 10, 2014" "dev" "Ceph"
+.TH "RBD-REPLAY" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 rbd-replay \- replay rados block device (RBD) workloads
 .
@@ -129,7 +129,7 @@ rbd\-replay \-\-map\-image=prod_image=test_image workload1
 .UNINDENT
 .SH AVAILABILITY
 .sp
-\fBrbd\-replay\fP is part of Ceph, a massively scalable, open-source, distributed storage system. Please refer to
+\fBrbd\-replay\fP is part of Ceph, a massively scalable, open\-source, distributed storage system. Please refer to
 the Ceph documentation at \fI\%http://ceph.com/docs\fP for more information.
 .SH SEE ALSO
 .sp
index 4185dfc366af2b42babe8e512a0aac22edf39cb0..db6ae96b52851ef511a9213481c946e3027746ae 100644 (file)
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "RBD" "8" "March 12, 2015" "dev" "Ceph"
+.TH "RBD" "8" "February 04, 2016" "dev" "Ceph"
 .SH NAME
 rbd \- manage rados block device (RBD) images
 .
@@ -395,21 +395,28 @@ The striping is controlled by three parameters:
 .INDENT 0.0
 .TP
 .B order
-The size of objects we stripe over is a power of two, specifically 2^[\fIorder\fP] bytes.  The default
-is 22, or 4 MB.
+.TP
+.B The size of objects we stripe over is a power of two, specifically 2^[*order*] bytes.  The default
+.TP
+.B is 22, or 4 MB.
 .UNINDENT
 .INDENT 0.0
 .TP
 .B stripe_unit
-Each [\fIstripe_unit\fP] contiguous bytes are stored adjacently in the same object, before we move on
-to the next object.
+.TP
+.B Each [*stripe_unit*] contiguous bytes are stored adjacently in the same object, before we move on
+.TP
+.B to the next object.
 .UNINDENT
 .INDENT 0.0
 .TP
 .B stripe_count
-After we write [\fIstripe_unit\fP] bytes to [\fIstripe_count\fP] objects, we loop back to the initial object
-and write another stripe, until the object reaches its maximum size (as specified by [\fIorder\fP].  At that
-point, we move on to the next [\fIstripe_count\fP] objects.
+.TP
+.B After we write [*stripe_unit*] bytes to [*stripe_count*] objects, we loop back to the initial object
+.TP
+.B and write another stripe, until the object reaches its maximum size (as specified by [*order*].  At that
+.TP
+.B point, we move on to the next [*stripe_count*] objects.
 .UNINDENT
 .sp
 By default, [\fIstripe_unit\fP] is the same as the object size and [\fIstripe_count\fP] is 1.  Specifying a different
index 31baffc5acef3226ce5fda382b3cb861110341c7..20215e8e9ac7d311cb058c9c57fdfe97a20ac942 100644 (file)
@@ -1,2 +1,2 @@
-9764da52395923e0b32908d83a9f7304401fee43
-v0.94.5
+e832001feaf8c176593e0325c8298e3f16dfb403
+v0.94.6
index b9374ad50f3d32da0ab0588d79241f664891cebb..8a00954c0331d6134875a5b4c5dccd7718296c9e 100644 (file)
@@ -5,6 +5,7 @@ DIST_SUBDIRS =
 BUILT_SOURCES =
 EXTRA_DIST =
 CLEANFILES =
+dist_noinst_DATA =
 
 noinst_HEADERS =
 bin_PROGRAMS =
@@ -161,10 +162,6 @@ LIBRBD_TYPES = librbd_types.la
 LIBKRBD = libkrbd.la
 LIBCEPHFS = libcephfs.la
 LIBERASURE_CODE = liberasure_code.la
-LIBOSD_TP = tracing/libosd_tp.la
-LIBRADOS_TP = tracing/librados_tp.la
-LIBRBD_TP = tracing/librbd_tp.la
-LIBOS_TP = tracing/libos_tp.la
 
 if WITH_LIBAIO
 LIBOS += -laio
index b0f505a06d7890534660bcb1a1b82f8e41af7626..46aa2978053634f6ae7981b28c0392d0d68ca892 100644 (file)
@@ -1,7 +1,7 @@
 include Makefile-env.am
 
-SUBDIRS += ocf java tracing
-DIST_SUBDIRS += gmock ocf libs3 java tracing
+SUBDIRS += ocf java
+DIST_SUBDIRS += gmock ocf libs3 java
 
 
 # subdirs
@@ -35,6 +35,7 @@ include rbd_replay/Makefile.am
 include test/Makefile.am
 include tools/Makefile.am
 include Makefile-rocksdb.am
+include tracing/Makefile.am
 
 
 # shell scripts
index 3b605557fcf48d51296292ae3268958f1307e61f..ff34f7faefb162563a8d194809f5c667b2db9598 100644 (file)
@@ -114,11 +114,12 @@ DIST_COMMON = $(srcdir)/Makefile-env.am $(srcdir)/arch/Makefile.am \
        $(srcdir)/test/Makefile-server.am $(srcdir)/tools/Makefile.am \
        $(srcdir)/tools/Makefile-client.am \
        $(srcdir)/tools/Makefile-server.am \
-       $(srcdir)/Makefile-rocksdb.am $(srcdir)/Makefile-client.am \
-       $(srcdir)/Makefile-server.am $(srcdir)/Makefile.in \
-       $(srcdir)/Makefile.am $(srcdir)/acconfig.h.in \
-       $(dist_bin_SCRIPTS) $(top_srcdir)/depcomp \
-       $(am__python_PYTHON_DIST) $(top_srcdir)/py-compile \
+       $(srcdir)/Makefile-rocksdb.am $(srcdir)/tracing/Makefile.am \
+       $(srcdir)/Makefile-client.am $(srcdir)/Makefile-server.am \
+       $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+       $(srcdir)/acconfig.h.in $(dist_bin_SCRIPTS) \
+       $(top_srcdir)/depcomp $(am__python_PYTHON_DIST) \
+       $(top_srcdir)/py-compile $(dist_noinst_DATA) \
        $(am__noinst_HEADERS_DIST) $(top_srcdir)/test-driver README \
        TODO
 bin_PROGRAMS = $(am__EXEEXT_27) $(am__EXEEXT_28) $(am__EXEEXT_29) \
@@ -277,9 +278,8 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@am__append_28 = os/BtrfsFileStoreBackend.cc
 @ENABLE_SERVER_TRUE@@WITH_LIBXFS_TRUE@am__append_29 = os/XfsFileStoreBackend.cc
 @ENABLE_SERVER_TRUE@@WITH_LIBZFS_TRUE@am__append_30 = os/ZFSFileStoreBackend.cc
-@ENABLE_SERVER_TRUE@@WITH_LTTNG_TRUE@am__append_31 = $(LIBOS_TP)
-@ENABLE_SERVER_TRUE@am__append_32 = libos.la
-@ENABLE_SERVER_TRUE@am__append_33 = \
+@ENABLE_SERVER_TRUE@am__append_31 = libos.la
+@ENABLE_SERVER_TRUE@am__append_32 = \
 @ENABLE_SERVER_TRUE@   os/btrfs_ioctl.h \
 @ENABLE_SERVER_TRUE@   os/chain_xattr.h \
 @ENABLE_SERVER_TRUE@   os/BtrfsFileStoreBackend.h \
@@ -307,20 +307,19 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_SERVER_TRUE@   os/XfsFileStoreBackend.h \
 @ENABLE_SERVER_TRUE@   os/ZFSFileStoreBackend.h
 
-@ENABLE_SERVER_TRUE@@WITH_SLIBROCKSDB_TRUE@am__append_34 = libos_rocksdb.la
-@ENABLE_SERVER_TRUE@@WITH_SLIBROCKSDB_TRUE@am__append_35 = os/RocksDBStore.h
-@ENABLE_SERVER_TRUE@@WITH_DLIBROCKSDB_TRUE@am__append_36 = libos_rocksdb.la
-@ENABLE_SERVER_TRUE@@WITH_DLIBROCKSDB_TRUE@am__append_37 = os/RocksDBStore.h
-@ENABLE_SERVER_TRUE@@WITH_LIBZFS_TRUE@am__append_38 = libos_zfs.a
-@ENABLE_SERVER_TRUE@@WITH_LIBZFS_TRUE@am__append_39 = os/ZFS.h
-@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@am__append_40 = os/KineticStore.cc
-@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@am__append_41 = -std=gnu++11
-@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@am__append_42 = -lkinetic_client -lprotobuf -lglog -lgflags libcrypto.a
-@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@am__append_43 = os/KineticStore.h
-@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@@WITH_OSD_TRUE@am__append_44 = -std=gnu++11
-@ENABLE_SERVER_TRUE@@WITH_LTTNG_TRUE@@WITH_OSD_TRUE@am__append_45 = $(LIBOSD_TP)
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_46 = libosd.la
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_47 = \
+@ENABLE_SERVER_TRUE@@WITH_SLIBROCKSDB_TRUE@am__append_33 = libos_rocksdb.la
+@ENABLE_SERVER_TRUE@@WITH_SLIBROCKSDB_TRUE@am__append_34 = os/RocksDBStore.h
+@ENABLE_SERVER_TRUE@@WITH_DLIBROCKSDB_TRUE@am__append_35 = libos_rocksdb.la
+@ENABLE_SERVER_TRUE@@WITH_DLIBROCKSDB_TRUE@am__append_36 = os/RocksDBStore.h
+@ENABLE_SERVER_TRUE@@WITH_LIBZFS_TRUE@am__append_37 = libos_zfs.a
+@ENABLE_SERVER_TRUE@@WITH_LIBZFS_TRUE@am__append_38 = os/ZFS.h
+@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@am__append_39 = os/KineticStore.cc
+@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@am__append_40 = -std=gnu++11
+@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@am__append_41 = -lkinetic_client -lprotobuf -lglog -lgflags libcrypto.a
+@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@am__append_42 = os/KineticStore.h
+@ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@@WITH_OSD_TRUE@am__append_43 = -std=gnu++11
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_44 = libosd.la
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_45 = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    osd/Ager.h \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    osd/ClassHandler.h \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    osd/HitSet.h \
@@ -343,19 +342,19 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    osd/Watch.h \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    osd/osd_types.h
 
-@LINUX_TRUE@am__append_48 = -export-symbols-regex '.*__erasure_code_.*'
+@LINUX_TRUE@am__append_46 = -export-symbols-regex '.*__erasure_code_.*'
+@LINUX_TRUE@am__append_47 = -export-symbols-regex '.*__erasure_code_.*'
+@HAVE_NEON_TRUE@am__append_48 = libec_jerasure_neon.la
 @LINUX_TRUE@am__append_49 = -export-symbols-regex '.*__erasure_code_.*'
-@HAVE_NEON_TRUE@am__append_50 = libec_jerasure_neon.la
+@HAVE_SSSE3_TRUE@am__append_50 = libec_jerasure_sse3.la
 @LINUX_TRUE@am__append_51 = -export-symbols-regex '.*__erasure_code_.*'
-@HAVE_SSSE3_TRUE@am__append_52 = libec_jerasure_sse3.la
+@HAVE_SSE4_PCLMUL_TRUE@am__append_52 = libec_jerasure_sse4.la
 @LINUX_TRUE@am__append_53 = -export-symbols-regex '.*__erasure_code_.*'
-@HAVE_SSE4_PCLMUL_TRUE@am__append_54 = libec_jerasure_sse4.la
+@LINUX_TRUE@am__append_54 = -export-symbols-regex '.*__erasure_code_.*'
 @LINUX_TRUE@am__append_55 = -export-symbols-regex '.*__erasure_code_.*'
-@LINUX_TRUE@am__append_56 = -export-symbols-regex '.*__erasure_code_.*'
-@LINUX_TRUE@am__append_57 = -export-symbols-regex '.*__erasure_code_.*'
 
 # ISA
-@WITH_BETTER_YASM_ELF64_TRUE@am__append_58 = \
+@WITH_BETTER_YASM_ELF64_TRUE@am__append_56 = \
 @WITH_BETTER_YASM_ELF64_TRUE@  erasure-code/isa/ErasureCodeIsa.h \
 @WITH_BETTER_YASM_ELF64_TRUE@  erasure-code/isa/ErasureCodeIsaTableCache.h \
 @WITH_BETTER_YASM_ELF64_TRUE@  erasure-code/isa/xor_op.h \
@@ -366,10 +365,10 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @WITH_BETTER_YASM_ELF64_TRUE@  erasure-code/isa/isa-l/include/gf_vect_mul.h \
 @WITH_BETTER_YASM_ELF64_TRUE@  erasure-code/isa/isa-l/include/types.h
 
-@LINUX_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@am__append_59 = -export-symbols-regex '.*__erasure_code_.*'
-@WITH_BETTER_YASM_ELF64_TRUE@am__append_60 = libec_isa.la
-@ENABLE_CLIENT_TRUE@am__append_61 = libclient.la
-@ENABLE_CLIENT_TRUE@am__append_62 = \
+@LINUX_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@am__append_57 = -export-symbols-regex '.*__erasure_code_.*'
+@WITH_BETTER_YASM_ELF64_TRUE@am__append_58 = libec_isa.la
+@ENABLE_CLIENT_TRUE@am__append_59 = libclient.la
+@ENABLE_CLIENT_TRUE@am__append_60 = \
 @ENABLE_CLIENT_TRUE@   client/Client.h \
 @ENABLE_CLIENT_TRUE@   client/Dentry.h \
 @ENABLE_CLIENT_TRUE@   client/Dir.h \
@@ -383,37 +382,37 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_CLIENT_TRUE@   client/ioctl.h \
 @ENABLE_CLIENT_TRUE@   client/ObjecterWriteback.h
 
-@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@am__append_63 = libclient_fuse.la
-@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@am__append_64 = client/fuse_ll.h
-@ENABLE_CLIENT_TRUE@am__append_65 = ceph_test_ioctls
-@WITH_TCMALLOC_TRUE@am__append_66 = perfglue/heap_profiler.cc
-@WITH_TCMALLOC_TRUE@am__append_67 = -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
-@WITH_TCMALLOC_TRUE@am__append_68 = -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
-@WITH_TCMALLOC_FALSE@@WITH_TCMALLOC_MINIMAL_TRUE@am__append_69 = perfglue/heap_profiler.cc
-@WITH_TCMALLOC_FALSE@@WITH_TCMALLOC_MINIMAL_TRUE@am__append_70 = -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
-@WITH_TCMALLOC_FALSE@@WITH_TCMALLOC_MINIMAL_TRUE@am__append_71 = -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
-@WITH_TCMALLOC_FALSE@@WITH_TCMALLOC_MINIMAL_FALSE@am__append_72 = perfglue/disabled_heap_profiler.cc
-@WITH_PROFILER_TRUE@am__append_73 = perfglue/cpu_profiler.cc
-@WITH_PROFILER_FALSE@am__append_74 = perfglue/disabled_stubs.cc
-@WITH_RBD_TRUE@am__append_75 = \
+@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@am__append_61 = libclient_fuse.la
+@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@am__append_62 = client/fuse_ll.h
+@ENABLE_CLIENT_TRUE@am__append_63 = ceph_test_ioctls
+@WITH_TCMALLOC_TRUE@am__append_64 = perfglue/heap_profiler.cc
+@WITH_TCMALLOC_TRUE@am__append_65 = -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
+@WITH_TCMALLOC_TRUE@am__append_66 = -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
+@WITH_TCMALLOC_FALSE@@WITH_TCMALLOC_MINIMAL_TRUE@am__append_67 = perfglue/heap_profiler.cc
+@WITH_TCMALLOC_FALSE@@WITH_TCMALLOC_MINIMAL_TRUE@am__append_68 = -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
+@WITH_TCMALLOC_FALSE@@WITH_TCMALLOC_MINIMAL_TRUE@am__append_69 = -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free
+@WITH_TCMALLOC_FALSE@@WITH_TCMALLOC_MINIMAL_FALSE@am__append_70 = perfglue/disabled_heap_profiler.cc
+@WITH_PROFILER_TRUE@am__append_71 = perfglue/cpu_profiler.cc
+@WITH_PROFILER_FALSE@am__append_72 = perfglue/disabled_stubs.cc
+@WITH_RBD_TRUE@am__append_73 = \
 @WITH_RBD_TRUE@        common/blkdev.cc
 
-@ENABLE_XIO_TRUE@am__append_76 = \
+@ENABLE_XIO_TRUE@am__append_74 = \
 @ENABLE_XIO_TRUE@      common/address_helper.cc
 
-@WITH_GOOD_YASM_ELF64_TRUE@am__append_77 = common/crc32c_intel_fast_asm.S common/crc32c_intel_fast_zero_asm.S
-@LINUX_TRUE@am__append_78 = -lrt
-@ENABLE_XIO_TRUE@am__append_79 = \
+@WITH_GOOD_YASM_ELF64_TRUE@am__append_75 = common/crc32c_intel_fast_asm.S common/crc32c_intel_fast_zero_asm.S
+@LINUX_TRUE@am__append_76 = -lrt
+@ENABLE_XIO_TRUE@am__append_77 = \
 @ENABLE_XIO_TRUE@      common/address_helper.h
 
-@LINUX_TRUE@am__append_80 = libsecret.la
-@LINUX_TRUE@am__append_81 = msg/async/EventEpoll.cc
-@DARWIN_TRUE@am__append_82 = msg/async/EventKqueue.cc
-@FREEBSD_TRUE@am__append_83 = msg/async/EventKqueue.cc
-@LINUX_TRUE@am__append_84 = msg/async/EventEpoll.h
-@DARWIN_TRUE@am__append_85 = msg/async/EventKqueue.h
-@FREEBSD_TRUE@am__append_86 = msg/async/EventKqueue.h
-@ENABLE_XIO_TRUE@am__append_87 = \
+@LINUX_TRUE@am__append_78 = libsecret.la
+@LINUX_TRUE@am__append_79 = msg/async/EventEpoll.cc
+@DARWIN_TRUE@am__append_80 = msg/async/EventKqueue.cc
+@FREEBSD_TRUE@am__append_81 = msg/async/EventKqueue.cc
+@LINUX_TRUE@am__append_82 = msg/async/EventEpoll.h
+@DARWIN_TRUE@am__append_83 = msg/async/EventKqueue.h
+@FREEBSD_TRUE@am__append_84 = msg/async/EventKqueue.h
+@ENABLE_XIO_TRUE@am__append_85 = \
 @ENABLE_XIO_TRUE@      msg/xio/QueueStrategy.cc \
 @ENABLE_XIO_TRUE@      msg/xio/XioConnection.cc \
 @ENABLE_XIO_TRUE@      msg/xio/XioMessenger.cc \
@@ -421,7 +420,7 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_XIO_TRUE@      msg/xio/XioPortal.cc \
 @ENABLE_XIO_TRUE@      msg/xio/XioPool.cc
 
-@ENABLE_XIO_TRUE@am__append_88 = \
+@ENABLE_XIO_TRUE@am__append_86 = \
 @ENABLE_XIO_TRUE@      msg/xio/DispatchStrategy.h \
 @ENABLE_XIO_TRUE@      msg/xio/FastStrategy.h \
 @ENABLE_XIO_TRUE@      msg/xio/QueueStrategy.h \
@@ -433,18 +432,17 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_XIO_TRUE@      msg/xio/XioPortal.h \
 @ENABLE_XIO_TRUE@      msg/xio/XioSubmit.h
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_89 =  \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_87 =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  librados_internal.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  librados_api.la
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_90 = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_88 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  librados_internal.la libcls_lock_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBOSDC) $(LIBCOMMON_DEPS)
 
-@ENABLE_CLIENT_TRUE@@WITH_LTTNG_TRUE@@WITH_RADOS_TRUE@am__append_91 = $(LIBRADOS_TP)
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@am__append_92 = -fvisibility=hidden -fvisibility-inlines-hidden
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@am__append_93 = -Xcompiler -Xlinker -Xcompiler '--exclude-libs=ALL'
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_94 = librados.la
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_95 = \
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@am__append_89 = -fvisibility=hidden -fvisibility-inlines-hidden
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@am__append_90 = -Xcompiler -Xlinker -Xcompiler '--exclude-libs=ALL'
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_91 = librados.la
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_92 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  librados/snap_set_diff.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  librados/AioCompletionImpl.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  librados/IoCtxImpl.h \
@@ -453,18 +451,17 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  librados/RadosXattrIter.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  librados/ListObjectImpl.h
 
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_96 = -export-symbols-regex '^radosstriper_.*'
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_97 = libradosstriper.la
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_98 = \
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_93 = -export-symbols-regex '^radosstriper_.*'
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_94 = libradosstriper.la
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_95 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  libradosstriper/RadosStriperImpl.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  libradosstriper/MultiAioCompletionImpl.h
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_99 = librbd_internal.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_96 = librbd_internal.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_api.la
-@ENABLE_CLIENT_TRUE@@WITH_LTTNG_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_100 = $(LIBRBD_TP)
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_101 = -Xcompiler -Xlinker -Xcompiler '--exclude-libs=ALL'
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_102 = librbd.la
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_103 = \
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_97 = -Xcompiler -Xlinker -Xcompiler '--exclude-libs=ALL'
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_98 = librbd.la
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_99 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd/AioCompletion.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd/AioRequest.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd/AsyncFlattenRequest.h \
@@ -486,16 +483,16 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 
 
 # inject rgw stuff in the decoder testcase
-@ENABLE_CLIENT_TRUE@am__append_104 = \
+@ENABLE_CLIENT_TRUE@am__append_100 = \
 @ENABLE_CLIENT_TRUE@   rgw/rgw_dencoder.cc \
 @ENABLE_CLIENT_TRUE@   rgw/rgw_acl.cc \
 @ENABLE_CLIENT_TRUE@   rgw/rgw_common.cc \
 @ENABLE_CLIENT_TRUE@   rgw/rgw_env.cc \
 @ENABLE_CLIENT_TRUE@   rgw/rgw_json_enc.cc
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_105 = librgw.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_101 = librgw.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcivetweb.la
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_106 = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_102 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_rgw_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_log_client.a \
@@ -511,11 +508,11 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       -lfcgi \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       -ldl
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_107 = radosgw \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_103 = radosgw \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       radosgw-admin
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_108 = ceph_rgw_multiparser \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_104 = ceph_rgw_multiparser \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       ceph_rgw_jsonparser
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_109 = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_105 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       rgw/logrotate.conf \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       rgw/rgw_acl.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       rgw/rgw_acl_s3.h \
@@ -574,15 +571,15 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       civetweb/include/civetweb_conf.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       civetweb/src/md5.h
 
-@ENABLE_CLIENT_TRUE@am__append_110 = libcls_lock_client.la \
+@ENABLE_CLIENT_TRUE@am__append_106 = libcls_lock_client.la \
 @ENABLE_CLIENT_TRUE@   libcls_refcount_client.la \
 @ENABLE_CLIENT_TRUE@   libcls_rgw_client.la libcls_rbd_client.la
-@ENABLE_CLIENT_TRUE@am__append_111 = libcls_version_client.a \
+@ENABLE_CLIENT_TRUE@am__append_107 = libcls_version_client.a \
 @ENABLE_CLIENT_TRUE@   libcls_log_client.a \
 @ENABLE_CLIENT_TRUE@   libcls_statelog_client.a \
 @ENABLE_CLIENT_TRUE@   libcls_replica_log_client.a \
 @ENABLE_CLIENT_TRUE@   libcls_user_client.a
-@ENABLE_CLIENT_TRUE@am__append_112 = \
+@ENABLE_CLIENT_TRUE@am__append_108 = \
 @ENABLE_CLIENT_TRUE@   cls/lock/cls_lock_types.h \
 @ENABLE_CLIENT_TRUE@   cls/lock/cls_lock_ops.h \
 @ENABLE_CLIENT_TRUE@   cls/lock/cls_lock_client.h \
@@ -609,7 +606,7 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_CLIENT_TRUE@   cls/user/cls_user_ops.h \
 @ENABLE_CLIENT_TRUE@   cls/user/cls_user_types.h
 
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_113 = libcls_hello.la \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_109 = libcls_hello.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libcls_rbd.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libcls_lock.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libcls_refcount.la \
@@ -619,40 +616,41 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libcls_replica_log.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libcls_user.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libcls_rgw.la
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_114 = libcls_kvs.la
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_115 = \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_110 = libcls_kvs.la
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_111 = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    key_value_store/key_value_structure.h \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    key_value_store/kv_flat_btree_async.h \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    key_value_store/kvs_arg_types.h
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_116 = librbd_replay.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_ios.la
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_117 = rbd_replay/BoundedBuffer.hpp \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_112 = rbd_replay/ActionTypes.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/actions.hpp \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Deser.hpp \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/BoundedBuffer.hpp \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/BufferReader.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/ImageNameMap.hpp \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/ios.hpp \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/PendingIO.hpp \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/rbd_loc.hpp \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/rbd_replay_debug.hpp \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Replayer.hpp \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Ser.hpp
-
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_118 = rbd-replay
-@ENABLE_CLIENT_TRUE@@WITH_BABELTRACE_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_119 = rbd-replay-prep
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_120 = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Replayer.hpp
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_113 = librbd_replay_types.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_ios.la
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_114 = librbd_replay_types.la
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_115 = rbd-replay
+@ENABLE_CLIENT_TRUE@@WITH_BABELTRACE_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_116 = rbd-replay-prep
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_117 = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/test-erasure-code.sh
 
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_121 = test/erasure-code/ceph_erasure_code_benchmark.h \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_118 = test/erasure-code/ceph_erasure_code_benchmark.h \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/ceph_erasure_code_benchmark.h \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/ErasureCodeExample.h
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_122 = -ldl
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_123 = ceph_erasure_code_benchmark \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_119 = -ldl
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_120 = ceph_erasure_code_benchmark \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ceph_erasure_code
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_124 = -ldl
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_125 = ceph_erasure_code_non_regression
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_126 = -ldl
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_127 = libec_example.la \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_121 = -ldl
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_122 = ceph_erasure_code_non_regression
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_123 = -ldl
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_124 = libec_example.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libec_missing_entry_point.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libec_missing_version.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libec_hangs.la \
@@ -662,59 +660,59 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libec_test_jerasure_sse4.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libec_test_jerasure_sse3.la \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    libec_test_jerasure_generic.la
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_128 = -ldl
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_129 = unittest_erasure_code_plugin \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_125 = -ldl
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_126 = unittest_erasure_code_plugin \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_erasure_code \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_erasure_code_jerasure \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_erasure_code_plugin_jerasure
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_130 = -ldl
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_131 = -ldl
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@am__append_132 = -ldl
-@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@am__append_133 = unittest_erasure_code_isa \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_127 = -ldl
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_128 = -ldl
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@am__append_129 = -ldl
+@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@am__append_130 = unittest_erasure_code_isa \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       unittest_erasure_code_plugin_isa
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@am__append_134 = -ldl
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_135 = -ldl
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_136 =  \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@am__append_131 = -ldl
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_132 = -ldl
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_133 =  \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_erasure_code_lrc \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_erasure_code_plugin_lrc \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_erasure_code_shec \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_erasure_code_shec_all \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_erasure_code_shec_thread \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_erasure_code_example
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_134 = -ldl
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_135 = -ldl
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_136 = -ldl
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_137 = -ldl
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_138 = -ldl
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_139 = -ldl
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_140 = -ldl
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@am__append_141 = test/messenger/message_helper.h \
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@am__append_138 = test/messenger/message_helper.h \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  test/messenger/simple_dispatcher.h \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  test/messenger/xio_dispatcher.h
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@@LINUX_TRUE@am__append_142 = -ldl
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@@LINUX_TRUE@am__append_143 = -ldl
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@am__append_144 = simple_server \
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@@LINUX_TRUE@am__append_139 = -ldl
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@@LINUX_TRUE@am__append_140 = -ldl
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@am__append_141 = simple_server \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  simple_client xio_server \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  xio_client
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@@LINUX_TRUE@am__append_145 = -ldl
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@@LINUX_TRUE@am__append_146 = -ldl
-@COMPILER_HAS_VTA_TRUE@@ENABLE_CLIENT_TRUE@am__append_147 = -fno-var-tracking-assignments
-@COMPILER_HAS_VTA_TRUE@@ENABLE_CLIENT_TRUE@am__append_148 = -fno-var-tracking-assignments
-@ENABLE_CLIENT_TRUE@am__append_149 = ceph-dencoder
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_150 = libradostest.la \
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@@LINUX_TRUE@am__append_142 = -ldl
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@@LINUX_TRUE@am__append_143 = -ldl
+@COMPILER_HAS_VTA_TRUE@@ENABLE_CLIENT_TRUE@am__append_144 = -fno-var-tracking-assignments
+@COMPILER_HAS_VTA_TRUE@@ENABLE_CLIENT_TRUE@am__append_145 = -fno-var-tracking-assignments
+@ENABLE_CLIENT_TRUE@am__append_146 = ceph-dencoder
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_147 = libradostest.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  librados_test_stub.la
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_151 = ceph_test_rados \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_148 = ceph_test_rados \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_test_mutate
-@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOS_TRUE@am__append_152 = test_build_librados
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_153 =  \
+@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOS_TRUE@am__append_149 = test_build_librados
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_150 =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_smalliobench \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_omapbench
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@am__append_154 = ceph_kvstorebench \
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@am__append_151 = ceph_kvstorebench \
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@      ceph_test_rados_list_parallel \
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@      ceph_test_rados_open_pools_parallel \
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@      ceph_test_rados_delete_pools_parallel \
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@      ceph_test_rados_watch_notify
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_155 =  \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_152 =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  unittest_librados \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  unittest_librados_config
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_156 =  \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_153 =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_multi_stress_watch \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_test_cls_rbd \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_test_cls_refcount \
@@ -740,7 +738,7 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_test_rados_api_tier \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_test_rados_api_lock \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_test_stress_watch
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_157 = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_154 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  test/librados_test_stub/TestClassHandler.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  test/librados_test_stub/TestRadosClient.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  test/librados_test_stub/TestMemRadosClient.h \
@@ -748,43 +746,40 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  test/librados_test_stub/TestMemIoCtxImpl.h \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  test/librados_test_stub/TestIoCtxImpl.h
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_158 = ceph_smalliobenchrbd \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_155 = ceph_smalliobenchrbd \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   ceph_test_librbd \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   ceph_test_librbd_api
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_159 = unittest_rbd_replay \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_156 = unittest_rbd_replay \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   unittest_librbd
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_160 = librbd_test.la
-@ENABLE_CLIENT_TRUE@@WITH_LTTNG_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_161 = $(LIBRBD_TP)
-@ENABLE_CLIENT_TRUE@@WITH_LTTNG_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_162 = $(LIBRBD_TP)
-@ENABLE_CLIENT_TRUE@@WITH_LTTNG_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_163 = $(LIBRBD_TP)
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_164 = ceph_test_librbd_fsx
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_165 = libradosstripertest.la
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_166 = ceph_test_rados_striper_api_io \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_157 = librbd_test.la
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_158 = ceph_test_librbd_fsx
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_159 = libradosstripertest.la
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__append_160 = ceph_test_rados_striper_api_io \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  ceph_test_rados_striper_api_aio \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  ceph_test_rados_striper_api_striping
-@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_167 = test_build_libcephfs
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_168 = unittest_encoding \
+@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_161 = test_build_libcephfs
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_162 = unittest_encoding \
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        unittest_base64 \
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        unittest_run_cmd \
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        unittest_simple_spin \
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        unittest_libcephfs_config
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_169 = ceph_test_libcephfs \
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_163 = ceph_test_libcephfs \
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        ceph_test_c_headers
-@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_170 = test_build_librgw
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_171 = ceph_test_cors \
+@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_164 = test_build_librgw
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__append_165 = ceph_test_cors \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       ceph_test_rgw_manifest \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       ceph_test_cls_rgw_meta \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       ceph_test_cls_rgw_log \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       ceph_test_cls_rgw_opstate \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       ceph_test_cls_rgw
-@ENABLE_SERVER_TRUE@am__append_172 = ceph_test_async_driver \
+@ENABLE_SERVER_TRUE@am__append_166 = ceph_test_async_driver \
 @ENABLE_SERVER_TRUE@   ceph_test_msgr ceph_streamtest \
 @ENABLE_SERVER_TRUE@   ceph_test_trans ceph_test_mon_workloadgen \
 @ENABLE_SERVER_TRUE@   ceph_test_mon_msg ceph_perf_objectstore
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@am__append_173 =  \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@am__append_167 =  \
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@       ceph_test_objectstore \
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@       ceph_test_filestore
-@ENABLE_SERVER_TRUE@am__append_174 =  \
+@ENABLE_SERVER_TRUE@am__append_168 =  \
 @ENABLE_SERVER_TRUE@   ceph_test_objectstore_workloadgen \
 @ENABLE_SERVER_TRUE@   ceph_test_filestore_idempotent \
 @ENABLE_SERVER_TRUE@   ceph_test_filestore_idempotent_sequence \
@@ -792,48 +787,48 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @ENABLE_SERVER_TRUE@   ceph_test_object_map \
 @ENABLE_SERVER_TRUE@   ceph_test_keyvaluedb_atomicity \
 @ENABLE_SERVER_TRUE@   ceph_test_keyvaluedb_iterators
-@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@am__append_175 = ceph_smalliobenchfs \
+@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@am__append_169 = ceph_smalliobenchfs \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      ceph_smalliobenchdumb \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      ceph_tpbench
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am__append_176 = ceph_test_keys
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am__append_177 = get_command_descriptions
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am__append_178 =  \
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am__append_170 = ceph_test_keys
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am__append_171 = get_command_descriptions
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am__append_172 =  \
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    unittest_mon_moncap \
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    unittest_mon_pgmap
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_179 =  \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_173 =  \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_ecbackend \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_osdscrub \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_pglog \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_hitset \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    unittest_osd_osdcap
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_180 = -ldl
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_181 = -ldl
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_182 = ceph_test_snap_mapper
-@ENABLE_SERVER_TRUE@am__append_183 = unittest_chain_xattr \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_174 = -ldl
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_175 = -ldl
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_176 = ceph_test_snap_mapper
+@ENABLE_SERVER_TRUE@am__append_177 = unittest_chain_xattr \
 @ENABLE_SERVER_TRUE@   unittest_flatindex unittest_lfnindex
-@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@am__append_184 = unittest_mds_authcap
-@WITH_BUILD_TESTS_TRUE@am__append_185 = test_build_libcommon
-@LINUX_TRUE@am__append_186 = libsystest.la
-@ENABLE_ROOT_MAKE_CHECK_TRUE@am__append_187 = test/ceph-disk-root.sh
-@ENABLE_ROOT_MAKE_CHECK_FALSE@am__append_188 = test/ceph-disk.sh
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_189 =  \
+@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@am__append_178 = unittest_mds_authcap
+@WITH_BUILD_TESTS_TRUE@am__append_179 = test_build_libcommon
+@LINUX_TRUE@am__append_180 = libsystest.la
+@ENABLE_ROOT_MAKE_CHECK_TRUE@am__append_181 = test/ceph-disk-root.sh
+@ENABLE_ROOT_MAKE_CHECK_FALSE@am__append_182 = test/ceph-disk.sh
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_183 =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_scratchtool \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_scratchtoolpp \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ceph_radosacl
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_190 = rados
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_191 = ceph-client-debug
-@ENABLE_SERVER_TRUE@am__append_192 = ceph-osdomap-tool \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_184 = rados
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_185 = ceph-client-debug
+@ENABLE_SERVER_TRUE@am__append_186 = ceph-osdomap-tool \
 @ENABLE_SERVER_TRUE@   ceph-monstore-tool ceph-kvstore-tool
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_193 = -ldl
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_194 = ceph-objectstore-tool
-@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@am__append_195 = cephfs-journal-tool \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@am__append_187 = -ldl
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_188 = ceph-objectstore-tool
+@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@am__append_189 = cephfs-journal-tool \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       cephfs-table-tool
-@WITH_REST_BENCH_TRUE@am__append_196 = rest-bench
-@WITH_REST_BENCH_TRUE@@WITH_SYSTEM_LIBS3_TRUE@am__append_197 = -ls3
-@WITH_REST_BENCH_TRUE@@WITH_SYSTEM_LIBS3_FALSE@am__append_198 = libs3/build/lib/libs3.a -lcurl -lxml2
-@WITH_REST_BENCH_TRUE@@WITH_SYSTEM_LIBS3_FALSE@am__append_199 = libs3
-@WITH_SLIBROCKSDB_TRUE@am__append_200 = rocksdb
-@WITH_SLIBROCKSDB_FALSE@am__append_201 = \
+@WITH_REST_BENCH_TRUE@am__append_190 = rest-bench
+@WITH_REST_BENCH_TRUE@@WITH_SYSTEM_LIBS3_TRUE@am__append_191 = -ls3
+@WITH_REST_BENCH_TRUE@@WITH_SYSTEM_LIBS3_FALSE@am__append_192 = libs3/build/lib/libs3.a -lcurl -lxml2
+@WITH_REST_BENCH_TRUE@@WITH_SYSTEM_LIBS3_FALSE@am__append_193 = libs3
+@WITH_SLIBROCKSDB_TRUE@am__append_194 = rocksdb
+@WITH_SLIBROCKSDB_FALSE@am__append_195 = \
 @WITH_SLIBROCKSDB_FALSE@        rocksdb/.arcconfig \
 @WITH_SLIBROCKSDB_FALSE@        rocksdb/.clang-format \
 @WITH_SLIBROCKSDB_FALSE@        rocksdb/.gitignore \
@@ -1202,50 +1197,64 @@ check_PROGRAMS = $(am__EXEEXT_44) $(am__EXEEXT_45) $(am__EXEEXT_46) \
 @WITH_SLIBROCKSDB_FALSE@        rocksdb/utilities/ttl/db_ttl_impl.h \
 @WITH_SLIBROCKSDB_FALSE@        rocksdb/utilities/ttl/ttl_test.cc
 
-@ENABLE_CLIENT_TRUE@am__append_202 = pybind/ceph_argparse.py
-@ENABLE_CLIENT_TRUE@am__append_203 = ceph-syn
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_204 = \
+@WITH_LTTNG_TRUE@am__append_196 = \
+@WITH_LTTNG_TRUE@      libosd_tp.la \
+@WITH_LTTNG_TRUE@      libos_tp.la \
+@WITH_LTTNG_TRUE@      librados_tp.la \
+@WITH_LTTNG_TRUE@      librbd_tp.la
+
+@WITH_LTTNG_TRUE@am__append_197 = \
+@WITH_LTTNG_TRUE@      tracing/librados.h \
+@WITH_LTTNG_TRUE@      tracing/librbd.h \
+@WITH_LTTNG_TRUE@      tracing/objectstore.h \
+@WITH_LTTNG_TRUE@      tracing/oprequest.h \
+@WITH_LTTNG_TRUE@      tracing/osd.h \
+@WITH_LTTNG_TRUE@      tracing/pg.h
+
+@ENABLE_CLIENT_TRUE@am__append_198 = pybind/ceph_argparse.py
+@ENABLE_CLIENT_TRUE@am__append_199 = ceph-syn
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_200 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(srcdir)/bash_completion/rados \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(srcdir)/bash_completion/radosgw-admin
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_205 = pybind/rados.py
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_206 = librados-config
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_207 = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_201 = pybind/rados.py
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am__append_202 = librados-config
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_203 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(srcdir)/bash_completion/rbd
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_208 = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_204 = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   ceph-rbdnamer \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd-replay-many
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_209 = pybind/rbd.py
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_210 = libkrbd.la
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_211 = rbd
-@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@am__append_212 = ceph-fuse \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_205 = pybind/rbd.py
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_206 = libkrbd.la
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am__append_207 = rbd
+@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@am__append_208 = ceph-fuse \
 @ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@  rbd-fuse
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_213 = cephfs
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_214 = pybind/cephfs.py
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_215 = libcephfs.la
-@ENABLE_CEPHFS_JAVA_TRUE@@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_216 = libcephfs_jni.la
-@ENABLE_SERVER_TRUE@am__append_217 = ceph-run ceph-rest-api \
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_209 = cephfs
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_210 = pybind/cephfs.py
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_211 = libcephfs.la
+@ENABLE_CEPHFS_JAVA_TRUE@@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am__append_212 = libcephfs_jni.la
+@ENABLE_SERVER_TRUE@am__append_213 = ceph-run ceph-rest-api \
 @ENABLE_SERVER_TRUE@   ceph-debugpack ceph-crush-location \
 @ENABLE_SERVER_TRUE@   ceph-coverage
-@ENABLE_SERVER_TRUE@am__append_218 = pybind/ceph_rest_api.py
-@ENABLE_SERVER_TRUE@am__append_219 = ceph-coverage init-ceph
-@ENABLE_SERVER_TRUE@am__append_220 = init-ceph
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@am__append_221 = mount.ceph
-@ENABLE_SERVER_TRUE@am__append_222 = mount.fuse.ceph
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am__append_223 = ceph-mon
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_224 = \
+@ENABLE_SERVER_TRUE@am__append_214 = pybind/ceph_rest_api.py
+@ENABLE_SERVER_TRUE@am__append_215 = ceph-coverage init-ceph
+@ENABLE_SERVER_TRUE@am__append_216 = init-ceph
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@am__append_217 = mount.ceph
+@ENABLE_SERVER_TRUE@am__append_218 = mount.fuse.ceph
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am__append_219 = ceph-mon
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_220 = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ceph-disk \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ceph-disk-prepare \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ceph-disk-activate \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ceph-disk-udev
 
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_225 = \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_221 = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ceph-clsinfo
 
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_226 = ceph-osd
-@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@am__append_227 = ceph-mds
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am__append_222 = ceph-osd
+@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@am__append_223 = ceph-mds
 subdir = src
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_classpath.m4 \
@@ -1687,11 +1696,11 @@ am__libcommon_internal_la_SOURCES_DIST = ceph_ver.c \
        common/ceph_frag.cc common/addr_parsing.c common/hobject.cc \
        common/bloom_filter.cc common/linux_version.c common/module.c \
        common/Readahead.cc common/Cycles.cc \
-       common/ContextCompletion.cc common/blkdev.cc \
-       common/address_helper.cc mon/MonCap.cc mon/MonClient.cc \
-       mon/MonMap.cc osd/OSDMap.cc osd/osd_types.cc osd/ECMsgTypes.cc \
-       osd/HitSet.cc mds/MDSMap.cc mds/inode_backtrace.cc \
-       mds/mdstypes.cc mds/flock.cc
+       common/ContextCompletion.cc common/TracepointProvider.cc \
+       common/blkdev.cc common/address_helper.cc mon/MonCap.cc \
+       mon/MonClient.cc mon/MonMap.cc osd/OSDMap.cc osd/osd_types.cc \
+       osd/ECMsgTypes.cc osd/HitSet.cc mds/MDSMap.cc \
+       mds/inode_backtrace.cc mds/mdstypes.cc mds/flock.cc
 @WITH_RBD_TRUE@am__objects_2 = common/blkdev.lo
 @ENABLE_XIO_TRUE@am__objects_3 = common/address_helper.lo
 am_libcommon_internal_la_OBJECTS = ceph_ver.lo common/DecayCounter.lo \
@@ -1721,9 +1730,10 @@ am_libcommon_internal_la_OBJECTS = ceph_ver.lo common/DecayCounter.lo \
        common/addr_parsing.lo common/hobject.lo \
        common/bloom_filter.lo common/linux_version.lo \
        common/module.lo common/Readahead.lo common/Cycles.lo \
-       common/ContextCompletion.lo $(am__objects_2) $(am__objects_3) \
-       mon/MonCap.lo mon/MonClient.lo mon/MonMap.lo osd/OSDMap.lo \
-       osd/osd_types.lo osd/ECMsgTypes.lo osd/HitSet.lo mds/MDSMap.lo \
+       common/ContextCompletion.lo common/TracepointProvider.lo \
+       $(am__objects_2) $(am__objects_3) mon/MonCap.lo \
+       mon/MonClient.lo mon/MonMap.lo osd/OSDMap.lo osd/osd_types.lo \
+       osd/ECMsgTypes.lo osd/HitSet.lo mds/MDSMap.lo \
        mds/inode_backtrace.lo mds/mdstypes.lo mds/flock.lo
 libcommon_internal_la_OBJECTS = $(am_libcommon_internal_la_OBJECTS)
 libcrush_la_LIBADD =
@@ -2224,7 +2234,7 @@ libmsg_la_OBJECTS = $(am_libmsg_la_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@am__DEPENDENCIES_6 =  \
 @ENABLE_SERVER_TRUE@@WITH_KINETIC_TRUE@        libcrypto.a
 @ENABLE_SERVER_TRUE@libos_la_DEPENDENCIES = $(LIBOS_TYPES) \
-@ENABLE_SERVER_TRUE@   $(am__append_31) $(am__DEPENDENCIES_6)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_6)
 am__libos_la_SOURCES_DIST = os/chain_xattr.cc os/DBObjectMap.cc \
        os/GenericObjectMap.cc os/FileJournal.cc os/FileStore.cc \
        os/FlatIndex.cc os/GenericFileStoreBackend.cc os/HashIndex.cc \
@@ -2275,6 +2285,17 @@ libos_rocksdb_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(LDFLAGS) -o $@
 @ENABLE_SERVER_TRUE@@WITH_DLIBROCKSDB_TRUE@am_libos_rocksdb_la_rpath =
 @ENABLE_SERVER_TRUE@@WITH_SLIBROCKSDB_TRUE@am_libos_rocksdb_la_rpath =
+libos_tp_la_DEPENDENCIES =
+am__libos_tp_la_SOURCES_DIST = tracing/objectstore.c
+@WITH_LTTNG_TRUE@am_libos_tp_la_OBJECTS =  \
+@WITH_LTTNG_TRUE@      tracing/libos_tp_la-objectstore.lo
+nodist_libos_tp_la_OBJECTS =
+libos_tp_la_OBJECTS = $(am_libos_tp_la_OBJECTS) \
+       $(nodist_libos_tp_la_OBJECTS)
+libos_tp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libos_tp_la_CFLAGS) \
+       $(CFLAGS) $(libos_tp_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_LTTNG_TRUE@am_libos_tp_la_rpath = -rpath $(libdir)
 libos_types_la_LIBADD =
 am_libos_types_la_OBJECTS = os/libos_types_la-Transaction.lo
 libos_types_la_OBJECTS = $(am_libos_types_la_OBJECTS)
@@ -2286,8 +2307,7 @@ libos_types_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSDC) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_5) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD_TYPES) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOS_TYPES) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_45)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOS_TYPES)
 am__libosd_la_SOURCES_DIST = osd/PG.cc osd/ReplicatedPG.cc \
        osd/ReplicatedBackend.cc osd/ECBackend.cc osd/ECMsgTypes.cc \
        osd/ECTransaction.cc osd/PGBackend.cc osd/Ager.cc \
@@ -2317,6 +2337,20 @@ libosd_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(libosd_la_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am_libosd_la_rpath =
+libosd_tp_la_DEPENDENCIES =
+am__libosd_tp_la_SOURCES_DIST = tracing/oprequest.c tracing/osd.c \
+       tracing/pg.c
+@WITH_LTTNG_TRUE@am_libosd_tp_la_OBJECTS =  \
+@WITH_LTTNG_TRUE@      tracing/libosd_tp_la-oprequest.lo \
+@WITH_LTTNG_TRUE@      tracing/libosd_tp_la-osd.lo \
+@WITH_LTTNG_TRUE@      tracing/libosd_tp_la-pg.lo
+nodist_libosd_tp_la_OBJECTS =
+libosd_tp_la_OBJECTS = $(am_libosd_tp_la_OBJECTS) \
+       $(nodist_libosd_tp_la_OBJECTS)
+libosd_tp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libosd_tp_la_CFLAGS) \
+       $(CFLAGS) $(libosd_tp_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_LTTNG_TRUE@am_libosd_tp_la_rpath = -rpath $(libdir)
 libosd_types_la_LIBADD =
 am_libosd_types_la_OBJECTS = osd/libosd_types_la-PGLog.lo \
        osd/libosd_types_la-osd_types.lo osd/libosd_types_la-ECUtil.lo
@@ -2346,7 +2380,7 @@ libperfglue_la_OBJECTS = $(am_libperfglue_la_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_lock_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBOSDC) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_3)
-am__DEPENDENCIES_8 = $(am__DEPENDENCIES_7) $(am__append_91)
+am__DEPENDENCIES_8 = $(am__DEPENDENCIES_7)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@librados_la_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_8) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_1) \
@@ -2398,8 +2432,20 @@ am__librados_test_stub_la_SOURCES_DIST =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  test/librados_test_stub/TestWatchNotify.lo
 librados_test_stub_la_OBJECTS = $(am_librados_test_stub_la_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am_librados_test_stub_la_rpath =
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@am__DEPENDENCIES_9 = $(am__DEPENDENCIES_8)
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@libradosstriper_la_DEPENDENCIES = $(am__DEPENDENCIES_9)
+librados_tp_la_DEPENDENCIES =
+am__librados_tp_la_SOURCES_DIST = tracing/librados.c
+@WITH_LTTNG_TRUE@am_librados_tp_la_OBJECTS =  \
+@WITH_LTTNG_TRUE@      tracing/librados_tp_la-librados.lo
+nodist_librados_tp_la_OBJECTS =
+librados_tp_la_OBJECTS = $(am_librados_tp_la_OBJECTS) \
+       $(nodist_librados_tp_la_OBJECTS)
+librados_tp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+       $(librados_tp_la_CFLAGS) $(CFLAGS) $(librados_tp_la_LDFLAGS) \
+       $(LDFLAGS) -o $@
+@WITH_LTTNG_TRUE@am_librados_tp_la_rpath = -rpath $(libdir)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@libradosstriper_la_DEPENDENCIES = $(LIBRADOSSTRIPER_DEPS) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS)
 am__libradosstriper_la_SOURCES_DIST =  \
        libradosstriper/libradosstriper.cc \
        libradosstriper/RadosStriperImpl.cc \
@@ -2444,8 +2490,7 @@ libradostest_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_rbd_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_lock_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_1) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_2) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_100)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_2)
 am__librbd_la_SOURCES_DIST = librbd/librbd.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_librbd_la_OBJECTS = librbd/librbd_la-librbd.lo
 librbd_la_OBJECTS = $(am_librbd_la_OBJECTS)
@@ -2484,34 +2529,38 @@ am__librbd_internal_la_SOURCES_DIST = librbd/AioCompletion.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd/ObjectMap.lo
 librbd_internal_la_OBJECTS = $(am_librbd_internal_la_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_librbd_internal_la_rpath =
-am__DEPENDENCIES_10 = $(LIBGLOBAL) $(LIBCOMMON) $(am__DEPENDENCIES_1) \
+am__DEPENDENCIES_9 = $(LIBGLOBAL) $(LIBCOMMON) $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_replay_la_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_9)
 am__librbd_replay_la_SOURCES_DIST = rbd_replay/actions.cc \
-       rbd_replay/Deser.cc rbd_replay/ImageNameMap.cc \
+       rbd_replay/BufferReader.cc rbd_replay/ImageNameMap.cc \
        rbd_replay/PendingIO.cc rbd_replay/rbd_loc.cc \
-       rbd_replay/Replayer.cc rbd_replay/Ser.cc
+       rbd_replay/Replayer.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_librbd_replay_la_OBJECTS = rbd_replay/actions.lo \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Deser.lo \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/BufferReader.lo \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/ImageNameMap.lo \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/PendingIO.lo \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/rbd_loc.lo \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Replayer.lo \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Ser.lo
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Replayer.lo
 librbd_replay_la_OBJECTS = $(am_librbd_replay_la_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_librbd_replay_la_rpath =
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_replay_ios_la_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay.la
 am__librbd_replay_ios_la_SOURCES_DIST = rbd_replay/ios.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_librbd_replay_ios_la_OBJECTS = rbd_replay/ios.lo
 librbd_replay_ios_la_OBJECTS = $(am_librbd_replay_ios_la_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_librbd_replay_ios_la_rpath =
+librbd_replay_types_la_LIBADD =
+am__librbd_replay_types_la_SOURCES_DIST = rbd_replay/ActionTypes.cc
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_librbd_replay_types_la_OBJECTS = rbd_replay/ActionTypes.lo
+librbd_replay_types_la_OBJECTS = $(am_librbd_replay_types_la_OBJECTS)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_librbd_replay_types_la_rpath =
 librbd_test_la_LIBADD =
 am__librbd_test_la_SOURCES_DIST = test/librbd/test_fixture.cc \
        test/librbd/test_support.cc test/librbd/test_librbd.cc \
@@ -2529,6 +2578,17 @@ librbd_test_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(librbd_test_la_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_librbd_test_la_rpath =
+librbd_tp_la_DEPENDENCIES =
+am__librbd_tp_la_SOURCES_DIST = tracing/librbd.c
+@WITH_LTTNG_TRUE@am_librbd_tp_la_OBJECTS =  \
+@WITH_LTTNG_TRUE@      tracing/librbd_tp_la-librbd.lo
+nodist_librbd_tp_la_OBJECTS =
+librbd_tp_la_OBJECTS = $(am_librbd_tp_la_OBJECTS) \
+       $(nodist_librbd_tp_la_OBJECTS)
+librbd_tp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(librbd_tp_la_CFLAGS) \
+       $(CFLAGS) $(librbd_tp_la_LDFLAGS) $(LDFLAGS) -o $@
+@WITH_LTTNG_TRUE@am_librbd_tp_la_rpath = -rpath $(libdir)
 librbd_types_la_LIBADD =
 am_librbd_types_la_OBJECTS = librbd/WatchNotifyTypes.lo
 librbd_types_la_OBJECTS = $(am_librbd_types_la_OBJECTS)
@@ -2588,7 +2648,7 @@ libsecret_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
 am_libsecret_la_OBJECTS = common/secret.lo
 libsecret_la_OBJECTS = $(am_libsecret_la_OBJECTS)
 @LINUX_TRUE@am_libsecret_la_rpath =
-@LINUX_TRUE@libsystest_la_DEPENDENCIES = $(am__DEPENDENCIES_10)
+@LINUX_TRUE@libsystest_la_DEPENDENCIES = $(am__DEPENDENCIES_9)
 am__libsystest_la_SOURCES_DIST = test/system/cross_process_sem.cc \
        test/system/systest_runnable.cc \
        test/system/systest_settings.cc
@@ -2766,16 +2826,16 @@ PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS) \
        $(su_sbin_PROGRAMS)
 am_ceph_authtool_OBJECTS = tools/ceph_authtool.$(OBJEXT)
 ceph_authtool_OBJECTS = $(am_ceph_authtool_OBJECTS)
-ceph_authtool_DEPENDENCIES = $(am__DEPENDENCIES_10) $(LIBCOMMON)
+ceph_authtool_DEPENDENCIES = $(am__DEPENDENCIES_9) $(LIBCOMMON)
 am__ceph_client_debug_SOURCES_DIST = tools/ceph-client-debug.cc
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am_ceph_client_debug_OBJECTS = tools/ceph-client-debug.$(OBJEXT)
 ceph_client_debug_OBJECTS = $(am_ceph_client_debug_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@ceph_client_debug_DEPENDENCIES = $(LIBCEPHFS) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(LIBCOMMON)
 am_ceph_conf_OBJECTS = tools/ceph_conf.$(OBJEXT)
 ceph_conf_OBJECTS = $(am_ceph_conf_OBJECTS)
-ceph_conf_DEPENDENCIES = $(am__DEPENDENCIES_10) $(LIBCOMMON)
+ceph_conf_DEPENDENCIES = $(am__DEPENDENCIES_9) $(LIBCOMMON)
 am__ceph_dencoder_SOURCES_DIST = test/encoding/ceph_dencoder.cc \
        mds/Capability.cc mds/MDS.cc mds/Beacon.cc mds/locks.c \
        mds/journal.cc mds/Server.cc mds/Mutation.cc mds/MDCache.cc \
@@ -2835,7 +2895,7 @@ ceph_dencoder_OBJECTS = $(am_ceph_dencoder_OBJECTS)
 @ENABLE_CLIENT_TRUE@ceph_dencoder_DEPENDENCIES = $(LIBRBD_TYPES) \
 @ENABLE_CLIENT_TRUE@   $(LIBOSD_TYPES) $(LIBOS_TYPES) \
 @ENABLE_CLIENT_TRUE@   $(LIBMON_TYPES) $(DENCODER_DEPS) \
-@ENABLE_CLIENT_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@   $(am__DEPENDENCIES_9)
 ceph_dencoder_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_dencoder_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -2844,13 +2904,13 @@ am__ceph_fuse_SOURCES_DIST = ceph_fuse.cc
 @ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@am_ceph_fuse_OBJECTS = ceph_fuse.$(OBJEXT)
 ceph_fuse_OBJECTS = $(am_ceph_fuse_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@ceph_fuse_DEPENDENCIES = $(LIBCLIENT_FUSE) \
-@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__ceph_kvstore_tool_SOURCES_DIST = tools/ceph_kvstore_tool.cc
 @ENABLE_SERVER_TRUE@am_ceph_kvstore_tool_OBJECTS = tools/ceph_kvstore_tool-ceph_kvstore_tool.$(OBJEXT)
 ceph_kvstore_tool_OBJECTS = $(am_ceph_kvstore_tool_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_kvstore_tool_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 ceph_kvstore_tool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_kvstore_tool_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -2859,25 +2919,25 @@ am__ceph_mds_SOURCES_DIST = ceph_mds.cc
 @ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@am_ceph_mds_OBJECTS =  \
 @ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    ceph_mds.$(OBJEXT)
 ceph_mds_OBJECTS = $(am_ceph_mds_OBJECTS)
-am__DEPENDENCIES_11 = libperfglue.la $(am__DEPENDENCIES_1) \
+am__DEPENDENCIES_10 = libperfglue.la $(am__DEPENDENCIES_1) \
        $(am__DEPENDENCIES_1)
-am__DEPENDENCIES_12 = libmds.la $(am__DEPENDENCIES_1) \
-       $(am__DEPENDENCIES_11)
+am__DEPENDENCIES_11 = libmds.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_10)
 @ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@ceph_mds_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_12) \
+@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_11) \
 @ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(LIBOSDC) \
-@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(LIBCOMMON)
 am__ceph_mon_SOURCES_DIST = ceph_mon.cc
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am_ceph_mon_OBJECTS =  \
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    ceph_mon.$(OBJEXT)
 ceph_mon_OBJECTS = $(am_ceph_mon_OBJECTS)
-am__DEPENDENCIES_13 = libmon.la $(am__DEPENDENCIES_1) \
-       $(am__DEPENDENCIES_11)
+am__DEPENDENCIES_12 = libmon.la $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_10)
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@ceph_mon_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_13) \
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_12) \
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(LIBCOMMON)
 am__ceph_monstore_tool_SOURCES_DIST = tools/ceph_monstore_tool.cc
 @ENABLE_SERVER_TRUE@am_ceph_monstore_tool_OBJECTS =  \
@@ -2885,18 +2945,18 @@ am__ceph_monstore_tool_SOURCES_DIST = tools/ceph_monstore_tool.cc
 ceph_monstore_tool_OBJECTS = $(am_ceph_monstore_tool_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_monstore_tool_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_1)
 am__ceph_objectstore_tool_SOURCES_DIST =  \
        tools/ceph_objectstore_tool.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am_ceph_objectstore_tool_OBJECTS = tools/ceph_objectstore_tool.$(OBJEXT)
 ceph_objectstore_tool_OBJECTS = $(am_ceph_objectstore_tool_OBJECTS)
-am__DEPENDENCIES_14 = libosd.la $(am__DEPENDENCIES_1) $(LIBOSDC) \
-       $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_11)
+am__DEPENDENCIES_13 = libosd.la $(am__DEPENDENCIES_1) $(LIBOSDC) \
+       $(am__DEPENDENCIES_5) $(am__DEPENDENCIES_10)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@ceph_objectstore_tool_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBRADOS) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
@@ -2905,8 +2965,8 @@ am__ceph_osd_SOURCES_DIST = ceph_osd.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ceph_osd.$(OBJEXT)
 ceph_osd_OBJECTS = $(am_ceph_osd_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@ceph_osd_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON)
 am__ceph_osdomap_tool_SOURCES_DIST = tools/ceph_osdomap_tool.cc
 @ENABLE_SERVER_TRUE@am_ceph_osdomap_tool_OBJECTS =  \
@@ -2914,26 +2974,26 @@ am__ceph_osdomap_tool_SOURCES_DIST = tools/ceph_osdomap_tool.cc
 ceph_osdomap_tool_OBJECTS = $(am_ceph_osdomap_tool_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_osdomap_tool_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_1)
 am__ceph_syn_SOURCES_DIST = ceph_syn.cc client/SyntheticClient.cc
 @ENABLE_CLIENT_TRUE@am_ceph_syn_OBJECTS = ceph_syn.$(OBJEXT) \
 @ENABLE_CLIENT_TRUE@   client/SyntheticClient.$(OBJEXT)
 ceph_syn_OBJECTS = $(am_ceph_syn_OBJECTS)
 @ENABLE_CLIENT_TRUE@ceph_syn_DEPENDENCIES = $(LIBCLIENT) \
-@ENABLE_CLIENT_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@   $(am__DEPENDENCIES_9)
 am_ceph_bench_log_OBJECTS = test/bench_log.$(OBJEXT)
 ceph_bench_log_OBJECTS = $(am_ceph_bench_log_OBJECTS)
-ceph_bench_log_DEPENDENCIES = $(am__DEPENDENCIES_10)
+ceph_bench_log_DEPENDENCIES = $(am__DEPENDENCIES_9)
 am__ceph_erasure_code_SOURCES_DIST =  \
        test/erasure-code/ceph_erasure_code.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am_ceph_erasure_code_OBJECTS = test/erasure-code/ceph_erasure_code.$(OBJEXT)
 ceph_erasure_code_OBJECTS = $(am_ceph_erasure_code_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@ceph_erasure_code_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 am__ceph_erasure_code_benchmark_SOURCES_DIST =  \
        erasure-code/ErasureCode.cc \
@@ -2943,10 +3003,10 @@ am__ceph_erasure_code_benchmark_SOURCES_DIST =  \
 ceph_erasure_code_benchmark_OBJECTS =  \
        $(am_ceph_erasure_code_benchmark_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@ceph_erasure_code_benchmark_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 am__ceph_erasure_code_non_regression_SOURCES_DIST =  \
        test/erasure-code/ceph_erasure_code_non_regression.cc
@@ -2954,10 +3014,10 @@ am__ceph_erasure_code_non_regression_SOURCES_DIST =  \
 ceph_erasure_code_non_regression_OBJECTS =  \
        $(am_ceph_erasure_code_non_regression_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@ceph_erasure_code_non_regression_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 am__ceph_kvstorebench_SOURCES_DIST = test/kv_store_bench.cc \
        key_value_store/kv_flat_btree_async.cc
@@ -2966,47 +3026,47 @@ am__ceph_kvstorebench_SOURCES_DIST = test/kv_store_bench.cc \
 ceph_kvstorebench_OBJECTS = $(am_ceph_kvstorebench_OBJECTS)
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@ceph_kvstorebench_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@      $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_9)
 am__ceph_multi_stress_watch_SOURCES_DIST = test/multi_stress_watch.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am_ceph_multi_stress_watch_OBJECTS = test/multi_stress_watch.$(OBJEXT)
 ceph_multi_stress_watch_OBJECTS =  \
        $(am_ceph_multi_stress_watch_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_multi_stress_watch_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 am__ceph_omapbench_SOURCES_DIST = test/omap_bench.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am_ceph_omapbench_OBJECTS = test/omap_bench.$(OBJEXT)
 ceph_omapbench_OBJECTS = $(am_ceph_omapbench_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_omapbench_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__ceph_perf_objectstore_SOURCES_DIST =  \
        test/objectstore/ObjectStoreTransactionBenchmark.cc
 @ENABLE_SERVER_TRUE@am_ceph_perf_objectstore_OBJECTS = test/objectstore/ceph_perf_objectstore-ObjectStoreTransactionBenchmark.$(OBJEXT)
 ceph_perf_objectstore_OBJECTS = $(am_ceph_perf_objectstore_OBJECTS)
-am__DEPENDENCIES_15 = $(top_builddir)/src/gmock/lib/libgmock_main.la \
+am__DEPENDENCIES_14 = $(top_builddir)/src/gmock/lib/libgmock_main.la \
        $(top_builddir)/src/gmock/lib/libgmock.la \
        $(top_builddir)/src/gmock/gtest/lib/libgtest.la \
        $(am__DEPENDENCIES_1)
 @ENABLE_SERVER_TRUE@ceph_perf_objectstore_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 ceph_perf_objectstore_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_perf_objectstore_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_ceph_psim_OBJECTS = tools/psim.$(OBJEXT)
 ceph_psim_OBJECTS = $(am_ceph_psim_OBJECTS)
-ceph_psim_DEPENDENCIES = $(am__DEPENDENCIES_10)
+ceph_psim_DEPENDENCIES = $(am__DEPENDENCIES_9)
 am__ceph_radosacl_SOURCES_DIST = tools/radosacl.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am_ceph_radosacl_OBJECTS =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  tools/radosacl.$(OBJEXT)
 ceph_radosacl_OBJECTS = $(am_ceph_radosacl_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_radosacl_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__ceph_rgw_jsonparser_SOURCES_DIST = rgw/rgw_jsonparser.cc \
        rgw/rgw_common.cc rgw/rgw_env.cc rgw/rgw_json_enc.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am_ceph_rgw_jsonparser_OBJECTS = rgw/rgw_jsonparser.$(OBJEXT) \
@@ -3014,8 +3074,8 @@ am__ceph_rgw_jsonparser_SOURCES_DIST = rgw/rgw_jsonparser.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       rgw/rgw_env.$(OBJEXT) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       rgw/rgw_json_enc.$(OBJEXT)
 ceph_rgw_jsonparser_OBJECTS = $(am_ceph_rgw_jsonparser_OBJECTS)
-am__DEPENDENCIES_16 = librgw.la $(am__DEPENDENCIES_1)
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__DEPENDENCIES_17 = $(LIBRADOS) \
+am__DEPENDENCIES_15 = librgw.la $(am__DEPENDENCIES_1)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am__DEPENDENCIES_16 = $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_rgw_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_log_client.a \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_statelog_client.a \
@@ -3024,28 +3084,28 @@ am__DEPENDENCIES_16 = librgw.la $(am__DEPENDENCIES_1)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_lock_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_refcount_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_version_client.a
-am__DEPENDENCIES_18 = $(am__DEPENDENCIES_17)
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@ceph_rgw_jsonparser_DEPENDENCIES = $(am__DEPENDENCIES_16) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_18) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10)
+am__DEPENDENCIES_17 = $(am__DEPENDENCIES_16)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@ceph_rgw_jsonparser_DEPENDENCIES = $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_17) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9)
 am__ceph_rgw_multiparser_SOURCES_DIST = rgw/rgw_multiparser.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am_ceph_rgw_multiparser_OBJECTS = rgw/rgw_multiparser.$(OBJEXT)
 ceph_rgw_multiparser_OBJECTS = $(am_ceph_rgw_multiparser_OBJECTS)
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@ceph_rgw_multiparser_DEPENDENCIES = $(am__DEPENDENCIES_16) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_18) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@ceph_rgw_multiparser_DEPENDENCIES = $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_17) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9)
 am__ceph_scratchtool_SOURCES_DIST = tools/scratchtool.c
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am_ceph_scratchtool_OBJECTS = tools/scratchtool.$(OBJEXT)
 ceph_scratchtool_OBJECTS = $(am_ceph_scratchtool_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_scratchtool_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__ceph_scratchtoolpp_SOURCES_DIST = tools/scratchtoolpp.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am_ceph_scratchtoolpp_OBJECTS = tools/scratchtoolpp.$(OBJEXT)
 ceph_scratchtoolpp_OBJECTS = $(am_ceph_scratchtoolpp_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_scratchtoolpp_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__ceph_smalliobench_SOURCES_DIST = test/bench/small_io_bench.cc \
        test/bench/rados_backend.cc \
        test/bench/detailed_stat_collector.cc test/bench/bencher.cc
@@ -3057,7 +3117,7 @@ ceph_smalliobench_OBJECTS = $(am_ceph_smalliobench_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_smalliobench_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_1) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__ceph_smalliobenchdumb_SOURCES_DIST =  \
        test/bench/small_io_bench_dumb.cc test/bench/dumb_backend.cc \
        test/bench/detailed_stat_collector.cc test/bench/bencher.cc
@@ -3069,7 +3129,7 @@ ceph_smalliobenchdumb_OBJECTS = $(am_ceph_smalliobenchdumb_OBJECTS)
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@ceph_smalliobenchdumb_DEPENDENCIES = $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_1) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_5) \
-@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_9)
 am__ceph_smalliobenchfs_SOURCES_DIST =  \
        test/bench/small_io_bench_fs.cc \
        test/bench/testfilestore_backend.cc \
@@ -3082,7 +3142,7 @@ ceph_smalliobenchfs_OBJECTS = $(am_ceph_smalliobenchfs_OBJECTS)
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@ceph_smalliobenchfs_DEPENDENCIES = $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_1) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_5) \
-@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_9)
 am__ceph_smalliobenchrbd_SOURCES_DIST =  \
        test/bench/small_io_bench_rbd.cc test/bench/rbd_backend.cc \
        test/bench/detailed_stat_collector.cc test/bench/bencher.cc
@@ -3095,22 +3155,22 @@ ceph_smalliobenchrbd_OBJECTS = $(am_ceph_smalliobenchrbd_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_1) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_9)
 am__ceph_streamtest_SOURCES_DIST = test/streamtest.cc
 @ENABLE_SERVER_TRUE@am_ceph_streamtest_OBJECTS =  \
 @ENABLE_SERVER_TRUE@   test/streamtest.$(OBJEXT)
 ceph_streamtest_OBJECTS = $(am_ceph_streamtest_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_streamtest_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 am__ceph_test_async_driver_SOURCES_DIST =  \
        test/msgr/test_async_driver.cc
 @ENABLE_SERVER_TRUE@am_ceph_test_async_driver_OBJECTS = test/msgr/ceph_test_async_driver-test_async_driver.$(OBJEXT)
 ceph_test_async_driver_OBJECTS = $(am_ceph_test_async_driver_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_async_driver_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 ceph_test_async_driver_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_async_driver_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3136,8 +3196,8 @@ ceph_test_cls_hello_OBJECTS = $(am_ceph_test_cls_hello_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_cls_hello_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_1) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_cls_hello_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3150,7 +3210,7 @@ ceph_test_cls_lock_OBJECTS = $(am_ceph_test_cls_lock_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_lock_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBCOMMON) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_cls_lock_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3162,8 +3222,8 @@ ceph_test_cls_log_OBJECTS = $(am_ceph_test_cls_log_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_cls_log_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_log_client.a \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_cls_log_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3177,7 +3237,7 @@ ceph_test_cls_rbd_OBJECTS = $(am_ceph_test_cls_rbd_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_rbd_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_lock_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBCOMMON) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_cls_rbd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3190,7 +3250,7 @@ ceph_test_cls_refcount_OBJECTS = $(am_ceph_test_cls_refcount_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_cls_refcount_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_refcount_client.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_cls_refcount_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3204,8 +3264,8 @@ ceph_test_cls_replica_log_OBJECTS =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_cls_replica_log_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_replica_log_client.a \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_cls_replica_log_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3218,8 +3278,8 @@ ceph_test_cls_rgw_OBJECTS = $(am_ceph_test_cls_rgw_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_1) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_rgw_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(LIBCOMMON) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(RADOS_TEST_LDADD)
 ceph_test_cls_rgw_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3229,9 +3289,9 @@ am__ceph_test_cls_rgw_log_SOURCES_DIST = test/test_rgw_admin_log.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am_ceph_test_cls_rgw_log_OBJECTS = test/ceph_test_cls_rgw_log-test_rgw_admin_log.$(OBJEXT)
 ceph_test_cls_rgw_log_OBJECTS = $(am_ceph_test_cls_rgw_log_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@ceph_test_cls_rgw_log_DEPENDENCIES = $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_16) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_1) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_version_client.a \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_log_client.a \
@@ -3248,9 +3308,9 @@ am__ceph_test_cls_rgw_meta_SOURCES_DIST = test/test_rgw_admin_meta.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am_ceph_test_cls_rgw_meta_OBJECTS = test/ceph_test_cls_rgw_meta-test_rgw_admin_meta.$(OBJEXT)
 ceph_test_cls_rgw_meta_OBJECTS = $(am_ceph_test_cls_rgw_meta_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@ceph_test_cls_rgw_meta_DEPENDENCIES = $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_16) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_1) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_version_client.a \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_log_client.a \
@@ -3269,9 +3329,9 @@ am__ceph_test_cls_rgw_opstate_SOURCES_DIST =  \
 ceph_test_cls_rgw_opstate_OBJECTS =  \
        $(am_ceph_test_cls_rgw_opstate_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@ceph_test_cls_rgw_opstate_DEPENDENCIES = $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_16) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_1) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_version_client.a \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       libcls_log_client.a \
@@ -3291,8 +3351,8 @@ ceph_test_cls_statelog_OBJECTS = $(am_ceph_test_cls_statelog_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_cls_statelog_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_statelog_client.a \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_cls_statelog_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3305,7 +3365,7 @@ ceph_test_cls_version_OBJECTS = $(am_ceph_test_cls_version_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_cls_version_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_version_client.a \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_cls_version_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3315,23 +3375,23 @@ am__ceph_test_cors_SOURCES_DIST = test/test_cors.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am_ceph_test_cors_OBJECTS = test/ceph_test_cors-test_cors.$(OBJEXT)
 ceph_test_cors_OBJECTS = $(am_ceph_test_cors_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@ceph_test_cors_DEPENDENCIES = $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_16) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_14)
 ceph_test_cors_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_cors_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_ceph_test_crypto_OBJECTS = test/testcrypto.$(OBJEXT)
 ceph_test_crypto_OBJECTS = $(am_ceph_test_crypto_OBJECTS)
-ceph_test_crypto_DEPENDENCIES = $(am__DEPENDENCIES_10)
+ceph_test_crypto_DEPENDENCIES = $(am__DEPENDENCIES_9)
 am__ceph_test_filejournal_SOURCES_DIST = test/test_filejournal.cc
 @ENABLE_SERVER_TRUE@am_ceph_test_filejournal_OBJECTS = test/ceph_test_filejournal-test_filejournal.$(OBJEXT)
 ceph_test_filejournal_OBJECTS = $(am_ceph_test_filejournal_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_filejournal_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 ceph_test_filejournal_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_filejournal_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3342,8 +3402,8 @@ am__ceph_test_filestore_SOURCES_DIST =  \
 ceph_test_filestore_OBJECTS = $(am_ceph_test_filestore_OBJECTS)
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@ceph_test_filestore_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_9)
 ceph_test_filestore_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_filestore_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3359,7 +3419,7 @@ ceph_test_filestore_idempotent_OBJECTS =  \
        $(am_ceph_test_filestore_idempotent_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_filestore_idempotent_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 am__ceph_test_filestore_idempotent_sequence_SOURCES_DIST =  \
        test/objectstore/test_idempotent_sequence.cc \
        test/objectstore/DeterministicOpSequence.cc \
@@ -3373,7 +3433,7 @@ ceph_test_filestore_idempotent_sequence_OBJECTS =  \
        $(am_ceph_test_filestore_idempotent_sequence_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_filestore_idempotent_sequence_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 am_ceph_test_get_blkdev_size_OBJECTS =  \
        test/test_get_blkdev_size.$(OBJEXT)
 ceph_test_get_blkdev_size_OBJECTS =  \
@@ -3389,8 +3449,8 @@ am__ceph_test_keys_SOURCES_DIST = test/testkeys.cc
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    test/testkeys.$(OBJEXT)
 ceph_test_keys_OBJECTS = $(am_ceph_test_keys_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@ceph_test_keys_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_13) \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_12) \
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_9)
 am__ceph_test_keyvaluedb_atomicity_SOURCES_DIST =  \
        test/ObjectMap/test_keyvaluedb_atomicity.cc
 @ENABLE_SERVER_TRUE@am_ceph_test_keyvaluedb_atomicity_OBJECTS = test/ObjectMap/ceph_test_keyvaluedb_atomicity-test_keyvaluedb_atomicity.$(OBJEXT)
@@ -3398,8 +3458,8 @@ ceph_test_keyvaluedb_atomicity_OBJECTS =  \
        $(am_ceph_test_keyvaluedb_atomicity_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_keyvaluedb_atomicity_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 ceph_test_keyvaluedb_atomicity_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_keyvaluedb_atomicity_CXXFLAGS) $(CXXFLAGS) \
@@ -3413,8 +3473,8 @@ ceph_test_keyvaluedb_iterators_OBJECTS =  \
        $(am_ceph_test_keyvaluedb_iterators_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_keyvaluedb_iterators_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 ceph_test_keyvaluedb_iterators_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_keyvaluedb_iterators_CXXFLAGS) $(CXXFLAGS) \
@@ -3428,7 +3488,7 @@ am__ceph_test_libcephfs_SOURCES_DIST = test/libcephfs/test.cc \
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        test/libcephfs/ceph_test_libcephfs-multiclient.$(OBJEXT)
 ceph_test_libcephfs_OBJECTS = $(am_ceph_test_libcephfs_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@ceph_test_libcephfs_DEPENDENCIES = $(LIBCEPHFS) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_14)
 ceph_test_libcephfs_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_libcephfs_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3444,10 +3504,9 @@ ceph_test_librbd_OBJECTS = $(am_ceph_test_librbd_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_lock_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librados_api.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_8) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(RADOS_TEST_LDADD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_162)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(RADOS_TEST_LDADD)
 ceph_test_librbd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_librbd_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3462,9 +3521,8 @@ ceph_test_librbd_api_OBJECTS = $(am_ceph_test_librbd_api_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBCOMMON) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(RADOS_TEST_LDADD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_163)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(RADOS_TEST_LDADD)
 ceph_test_librbd_api_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_librbd_api_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3486,8 +3544,8 @@ am__ceph_test_mon_msg_SOURCES_DIST = test/mon/test-mon-msg.cc
 ceph_test_mon_msg_OBJECTS = $(am_ceph_test_mon_msg_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_mon_msg_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) $(LIBOSDC) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14)
 ceph_test_mon_msg_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_mon_msg_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3500,14 +3558,14 @@ ceph_test_mon_workloadgen_OBJECTS =  \
        $(am_ceph_test_mon_workloadgen_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_mon_workloadgen_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) $(LIBOSDC) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 am__ceph_test_msgr_SOURCES_DIST = test/msgr/test_msgr.cc
 @ENABLE_SERVER_TRUE@am_ceph_test_msgr_OBJECTS = test/msgr/ceph_test_msgr-test_msgr.$(OBJEXT)
 ceph_test_msgr_OBJECTS = $(am_ceph_test_msgr_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_msgr_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 ceph_test_msgr_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_msgr_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3517,7 +3575,7 @@ am__ceph_test_mutate_SOURCES_DIST = test/test_mutate.cc
 ceph_test_mutate_OBJECTS = $(am_ceph_test_mutate_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_mutate_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__ceph_test_object_map_SOURCES_DIST =  \
        test/ObjectMap/test_object_map.cc \
        test/ObjectMap/KeyValueDBMemory.cc
@@ -3526,8 +3584,8 @@ am__ceph_test_object_map_SOURCES_DIST =  \
 ceph_test_object_map_OBJECTS = $(am_ceph_test_object_map_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_object_map_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 ceph_test_object_map_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_object_map_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3538,15 +3596,15 @@ am_ceph_test_objectcacher_stress_OBJECTS =  \
 ceph_test_objectcacher_stress_OBJECTS =  \
        $(am_ceph_test_objectcacher_stress_OBJECTS)
 ceph_test_objectcacher_stress_DEPENDENCIES = $(LIBOSDC) \
-       $(am__DEPENDENCIES_10)
+       $(am__DEPENDENCIES_9)
 am__ceph_test_objectstore_SOURCES_DIST =  \
        test/objectstore/store_test.cc
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@am_ceph_test_objectstore_OBJECTS = test/objectstore/ceph_test_objectstore-store_test.$(OBJEXT)
 ceph_test_objectstore_OBJECTS = $(am_ceph_test_objectstore_OBJECTS)
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@ceph_test_objectstore_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@LINUX_TRUE@       $(am__DEPENDENCIES_9)
 ceph_test_objectstore_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_objectstore_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3560,7 +3618,7 @@ ceph_test_objectstore_workloadgen_OBJECTS =  \
        $(am_ceph_test_objectstore_workloadgen_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_objectstore_workloadgen_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 am__ceph_test_rados_SOURCES_DIST = test/osd/TestRados.cc \
        test/osd/TestOpStat.cc test/osd/Object.cc \
        test/osd/RadosModel.cc
@@ -3571,14 +3629,14 @@ am__ceph_test_rados_SOURCES_DIST = test/osd/TestRados.cc \
 ceph_test_rados_OBJECTS = $(am_ceph_test_rados_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__ceph_test_rados_api_aio_SOURCES_DIST = test/librados/aio.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am_ceph_test_rados_api_aio_OBJECTS = test/librados/ceph_test_rados_api_aio-aio.$(OBJEXT)
 ceph_test_rados_api_aio_OBJECTS =  \
        $(am_ceph_test_rados_api_aio_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_aio_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) $(LIBCOMMON) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_aio_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3591,7 +3649,7 @@ ceph_test_rados_api_c_read_operations_OBJECTS =  \
        $(am_ceph_test_rados_api_c_read_operations_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_c_read_operations_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_c_read_operations_LINK = $(LIBTOOL) $(AM_V_lt) \
        --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -3604,7 +3662,7 @@ ceph_test_rados_api_c_write_operations_OBJECTS =  \
        $(am_ceph_test_rados_api_c_write_operations_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_c_write_operations_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_c_write_operations_LINK = $(LIBTOOL) $(AM_V_lt) \
        --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -3616,7 +3674,7 @@ ceph_test_rados_api_cls_OBJECTS =  \
        $(am_ceph_test_rados_api_cls_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_cls_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_cls_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3629,7 +3687,7 @@ ceph_test_rados_api_cmd_OBJECTS =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_cmd_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBCOMMON) $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_1) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_cmd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3640,7 +3698,7 @@ am__ceph_test_rados_api_io_SOURCES_DIST = test/librados/io.cc
 ceph_test_rados_api_io_OBJECTS = $(am_ceph_test_rados_api_io_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_io_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_io_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3652,7 +3710,7 @@ ceph_test_rados_api_list_OBJECTS =  \
        $(am_ceph_test_rados_api_list_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_list_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_list_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3664,7 +3722,7 @@ ceph_test_rados_api_lock_OBJECTS =  \
        $(am_ceph_test_rados_api_lock_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_lock_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_lock_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3676,8 +3734,8 @@ ceph_test_rados_api_misc_OBJECTS =  \
        $(am_ceph_test_rados_api_misc_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_misc_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_misc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3689,7 +3747,7 @@ ceph_test_rados_api_nlist_OBJECTS =  \
        $(am_ceph_test_rados_api_nlist_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_nlist_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_nlist_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3701,7 +3759,7 @@ ceph_test_rados_api_pool_OBJECTS =  \
        $(am_ceph_test_rados_api_pool_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_pool_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_pool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3714,7 +3772,7 @@ ceph_test_rados_api_snapshots_OBJECTS =  \
        $(am_ceph_test_rados_api_snapshots_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_snapshots_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_snapshots_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3726,7 +3784,7 @@ ceph_test_rados_api_stat_OBJECTS =  \
        $(am_ceph_test_rados_api_stat_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_stat_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_stat_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3740,8 +3798,8 @@ ceph_test_rados_api_tier_OBJECTS =  \
        $(am_ceph_test_rados_api_tier_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_tier_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_tier_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3754,7 +3812,7 @@ ceph_test_rados_api_watch_notify_OBJECTS =  \
        $(am_ceph_test_rados_api_watch_notify_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_api_watch_notify_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_rados_api_watch_notify_LINK = $(LIBTOOL) $(AM_V_lt) \
        --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -3806,7 +3864,7 @@ ceph_test_rados_striper_api_aio_OBJECTS =  \
        $(am_ceph_test_rados_striper_api_aio_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_striper_api_aio_DEPENDENCIES = $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOSSTRIPER) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(RADOS_STRIPER_TEST_LDADD)
 ceph_test_rados_striper_api_aio_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3820,7 +3878,7 @@ ceph_test_rados_striper_api_io_OBJECTS =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_striper_api_io_DEPENDENCIES = $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOSSTRIPER) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(LIBCOMMON) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(RADOS_STRIPER_TEST_LDADD)
 ceph_test_rados_striper_api_io_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3833,7 +3891,7 @@ ceph_test_rados_striper_api_striping_OBJECTS =  \
        $(am_ceph_test_rados_striper_api_striping_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@ceph_test_rados_striper_api_striping_DEPENDENCIES = $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOSSTRIPER) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(RADOS_STRIPER_TEST_LDADD)
 ceph_test_rados_striper_api_striping_LINK = $(LIBTOOL) $(AM_V_lt) \
        --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -3869,10 +3927,10 @@ am__ceph_test_rgw_manifest_SOURCES_DIST =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am_ceph_test_rgw_manifest_OBJECTS = test/rgw/ceph_test_rgw_manifest-test_rgw_manifest.$(OBJEXT)
 ceph_test_rgw_manifest_OBJECTS = $(am_ceph_test_rgw_manifest_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@ceph_test_rgw_manifest_DEPENDENCIES = $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_16) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_18) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_17) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_1)
 ceph_test_rgw_manifest_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3882,14 +3940,14 @@ am_ceph_test_signal_handlers_OBJECTS =  \
        test/TestSignalHandlers.$(OBJEXT)
 ceph_test_signal_handlers_OBJECTS =  \
        $(am_ceph_test_signal_handlers_OBJECTS)
-ceph_test_signal_handlers_DEPENDENCIES = $(am__DEPENDENCIES_10)
+ceph_test_signal_handlers_DEPENDENCIES = $(am__DEPENDENCIES_9)
 am__ceph_test_snap_mapper_SOURCES_DIST = test/test_snap_mapper.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am_ceph_test_snap_mapper_OBJECTS = test/ceph_test_snap_mapper-test_snap_mapper.$(OBJEXT)
 ceph_test_snap_mapper_OBJECTS = $(am_ceph_test_snap_mapper_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@ceph_test_snap_mapper_DEPENDENCIES =  \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9)
 ceph_test_snap_mapper_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_test_snap_mapper_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3899,7 +3957,7 @@ am__ceph_test_stress_watch_SOURCES_DIST = test/test_stress_watch.cc
 ceph_test_stress_watch_OBJECTS = $(am_ceph_test_stress_watch_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@ceph_test_stress_watch_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) $(LIBCOMMON) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(RADOS_TEST_LDADD)
 ceph_test_stress_watch_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -3907,14 +3965,14 @@ ceph_test_stress_watch_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(LDFLAGS) -o $@
 am_ceph_test_timers_OBJECTS = test/TestTimers.$(OBJEXT)
 ceph_test_timers_OBJECTS = $(am_ceph_test_timers_OBJECTS)
-ceph_test_timers_DEPENDENCIES = $(am__DEPENDENCIES_10)
+ceph_test_timers_DEPENDENCIES = $(am__DEPENDENCIES_9)
 am__ceph_test_trans_SOURCES_DIST = test/test_trans.cc
 @ENABLE_SERVER_TRUE@am_ceph_test_trans_OBJECTS =  \
 @ENABLE_SERVER_TRUE@   test/test_trans.$(OBJEXT)
 ceph_test_trans_OBJECTS = $(am_ceph_test_trans_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_test_trans_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 am__ceph_tpbench_SOURCES_DIST = test/bench/tp_bench.cc \
        test/bench/detailed_stat_collector.cc
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@am_ceph_tpbench_OBJECTS = test/bench/tp_bench.$(OBJEXT) \
@@ -3923,14 +3981,14 @@ ceph_tpbench_OBJECTS = $(am_ceph_tpbench_OBJECTS)
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@ceph_tpbench_DEPENDENCIES = $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_1) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_5) \
-@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_RADOS_TRUE@      $(am__DEPENDENCIES_9)
 am__ceph_xattr_bench_SOURCES_DIST = test/xattr_bench.cc
 @ENABLE_SERVER_TRUE@am_ceph_xattr_bench_OBJECTS = test/ceph_xattr_bench-xattr_bench.$(OBJEXT)
 ceph_xattr_bench_OBJECTS = $(am_ceph_xattr_bench_OBJECTS)
 @ENABLE_SERVER_TRUE@ceph_xattr_bench_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 ceph_xattr_bench_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(ceph_xattr_bench_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -3954,9 +4012,9 @@ am__cephfs_journal_tool_SOURCES_DIST =  \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       tools/cephfs/Resetter.$(OBJEXT) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       tools/cephfs/MDSUtility.$(OBJEXT)
 cephfs_journal_tool_OBJECTS = $(am_cephfs_journal_tool_OBJECTS)
-@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@cephfs_journal_tool_DEPENDENCIES = $(am__DEPENDENCIES_12) \
+@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@cephfs_journal_tool_DEPENDENCIES = $(am__DEPENDENCIES_11) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9)
 am__cephfs_table_tool_SOURCES_DIST =  \
        tools/cephfs/cephfs-table-tool.cc tools/cephfs/TableTool.cc \
        tools/cephfs/MDSUtility.cc
@@ -3964,30 +4022,30 @@ am__cephfs_table_tool_SOURCES_DIST =  \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       tools/cephfs/TableTool.$(OBJEXT) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       tools/cephfs/MDSUtility.$(OBJEXT)
 cephfs_table_tool_OBJECTS = $(am_cephfs_table_tool_OBJECTS)
-@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@cephfs_table_tool_DEPENDENCIES = $(am__DEPENDENCIES_12) \
+@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@cephfs_table_tool_DEPENDENCIES = $(am__DEPENDENCIES_11) \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9)
 am_crushtool_OBJECTS = tools/crushtool.$(OBJEXT)
 crushtool_OBJECTS = $(am_crushtool_OBJECTS)
-crushtool_DEPENDENCIES = $(am__DEPENDENCIES_10)
+crushtool_DEPENDENCIES = $(am__DEPENDENCIES_9)
 am__get_command_descriptions_SOURCES_DIST =  \
        test/common/get_command_descriptions.cc
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am_get_command_descriptions_OBJECTS = test/common/get_command_descriptions.$(OBJEXT)
 get_command_descriptions_OBJECTS =  \
        $(am_get_command_descriptions_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@get_command_descriptions_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_13) \
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_12) \
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_9)
 am__librados_config_SOURCES_DIST = librados-config.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@am_librados_config_OBJECTS = librados-config.$(OBJEXT)
 librados_config_OBJECTS = $(am_librados_config_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@librados_config_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am_monmaptool_OBJECTS = tools/monmaptool.$(OBJEXT)
 monmaptool_OBJECTS = $(am_monmaptool_OBJECTS)
-monmaptool_DEPENDENCIES = $(am__DEPENDENCIES_10) $(LIBCOMMON)
+monmaptool_DEPENDENCIES = $(am__DEPENDENCIES_9) $(LIBCOMMON)
 am__mount_ceph_SOURCES_DIST = mount/mount.ceph.c
 @ENABLE_SERVER_TRUE@am_mount_ceph_OBJECTS =  \
 @ENABLE_SERVER_TRUE@   mount/mount.ceph.$(OBJEXT)
@@ -3996,7 +4054,7 @@ mount_ceph_OBJECTS = $(am_mount_ceph_OBJECTS)
 @ENABLE_SERVER_TRUE@   $(LIBCOMMON)
 am_osdmaptool_OBJECTS = tools/osdmaptool.$(OBJEXT)
 osdmaptool_OBJECTS = $(am_osdmaptool_OBJECTS)
-osdmaptool_DEPENDENCIES = $(am__DEPENDENCIES_10)
+osdmaptool_DEPENDENCIES = $(am__DEPENDENCIES_9)
 am__rados_SOURCES_DIST = tools/rados/rados.cc \
        tools/rados/rados_import.cc tools/rados/rados_export.cc \
        tools/rados/rados_sync.cc common/obj_bencher.cc
@@ -4009,7 +4067,7 @@ rados_OBJECTS = $(am_rados_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@rados_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  libcls_lock_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__radosgw_SOURCES_DIST = rgw/rgw_resolve.cc rgw/rgw_rest.cc \
        rgw/rgw_rest_swift.cc rgw/rgw_rest_s3.cc rgw/rgw_rest_usage.cc \
        rgw/rgw_rest_user.cc rgw/rgw_rest_bucket.cc \
@@ -4037,59 +4095,60 @@ am__radosgw_SOURCES_DIST = rgw/rgw_resolve.cc rgw/rgw_rest.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       rgw/rgw_loadgen.$(OBJEXT) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       rgw/rgw_main.$(OBJEXT)
 radosgw_OBJECTS = $(am_radosgw_OBJECTS)
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@radosgw_DEPENDENCIES = $(am__DEPENDENCIES_16) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@radosgw_DEPENDENCIES = $(am__DEPENDENCIES_15) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(LIBCIVETWEB) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_18) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_17) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_1) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9)
 am__radosgw_admin_SOURCES_DIST = rgw/rgw_admin.cc rgw/rgw_orphan.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am_radosgw_admin_OBJECTS = rgw/rgw_admin.$(OBJEXT) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       rgw/rgw_orphan.$(OBJEXT)
 radosgw_admin_OBJECTS = $(am_radosgw_admin_OBJECTS)
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@radosgw_admin_DEPENDENCIES = $(am__DEPENDENCIES_16) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_18) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@radosgw_admin_DEPENDENCIES = $(am__DEPENDENCIES_15) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_17) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       $(am__DEPENDENCIES_9)
 am__rbd_SOURCES_DIST = rbd.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_rbd_OBJECTS = rbd.$(OBJEXT)
 rbd_OBJECTS = $(am_rbd_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_DEPENDENCIES = $(LIBKRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_9)
 am__rbd_fuse_SOURCES_DIST = rbd_fuse/rbd-fuse.cc
 @ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@am_rbd_fuse_OBJECTS = rbd_fuse/rbd-fuse.$(OBJEXT)
 rbd_fuse_OBJECTS = $(am_rbd_fuse_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@rbd_fuse_DEPENDENCIES = $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_FUSE_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9)
 am__rbd_replay_SOURCES_DIST = rbd_replay/rbd-replay.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_rbd_replay_OBJECTS = rbd_replay/rbd-replay.$(OBJEXT)
 rbd_replay_OBJECTS = $(am_rbd_replay_OBJECTS)
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_DEPENDENCIES =  \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_DEPENDENCIES = librbd_replay.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_types.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay.la
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBCOMMON)
 am__rbd_replay_prep_SOURCES_DIST = rbd_replay/rbd-replay-prep.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@am_rbd_replay_prep_OBJECTS = rbd_replay/rbd-replay-prep.$(OBJEXT)
 rbd_replay_prep_OBJECTS = $(am_rbd_replay_prep_OBJECTS)
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_prep_DEPENDENCIES =  \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_prep_DEPENDENCIES = librbd_replay.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_ios.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_types.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_ios.la
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBCOMMON)
 am__rest_bench_SOURCES_DIST = tools/rest_bench.cc \
        common/obj_bencher.cc
 @WITH_REST_BENCH_TRUE@am_rest_bench_OBJECTS =  \
 @WITH_REST_BENCH_TRUE@ tools/rest_bench-rest_bench.$(OBJEXT) \
 @WITH_REST_BENCH_TRUE@ common/rest_bench-obj_bencher.$(OBJEXT)
 rest_bench_OBJECTS = $(am_rest_bench_OBJECTS)
-@WITH_REST_BENCH_TRUE@@WITH_SYSTEM_LIBS3_FALSE@am__DEPENDENCIES_19 = libs3/build/lib/libs3.a
-@WITH_REST_BENCH_TRUE@rest_bench_DEPENDENCIES =  \
-@WITH_REST_BENCH_TRUE@ $(am__DEPENDENCIES_10) \
+@WITH_REST_BENCH_TRUE@@WITH_SYSTEM_LIBS3_FALSE@am__DEPENDENCIES_18 = libs3/build/lib/libs3.a
+@WITH_REST_BENCH_TRUE@rest_bench_DEPENDENCIES = $(am__DEPENDENCIES_9) \
 @WITH_REST_BENCH_TRUE@ $(am__DEPENDENCIES_1) \
-@WITH_REST_BENCH_TRUE@ $(am__DEPENDENCIES_19)
+@WITH_REST_BENCH_TRUE@ $(am__DEPENDENCIES_18)
 rest_bench_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(rest_bench_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -4101,7 +4160,7 @@ simple_client_OBJECTS = $(am_simple_client_OBJECTS)
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@simple_client_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_5) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_1) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_2) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_1)
@@ -4117,7 +4176,7 @@ simple_server_OBJECTS = $(am_simple_server_OBJECTS)
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@simple_server_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_5) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_1) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_2) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_1)
@@ -4222,19 +4281,19 @@ am__test_build_librgw_SOURCES_DIST = test/buildtest_skeleton.cc \
 @ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@am_test_build_librgw_OBJECTS = test/test_build_librgw-buildtest_skeleton.$(OBJEXT) \
 @ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@        $(am__objects_31)
 test_build_librgw_OBJECTS = $(am_test_build_librgw_OBJECTS)
-@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@test_build_librgw_DEPENDENCIES = $(am__DEPENDENCIES_18) \
+@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@test_build_librgw_DEPENDENCIES = $(am__DEPENDENCIES_17) \
 @ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_1) \
 @ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_1) \
 @ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_2) \
-@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_10)
+@ENABLE_CLIENT_TRUE@@WITH_BUILD_TESTS_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_9)
 test_build_librgw_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(test_build_librgw_CXXFLAGS) $(CXXFLAGS) \
        $(test_build_librgw_LDFLAGS) $(LDFLAGS) -o $@
 am_unittest_addrs_OBJECTS = test/unittest_addrs-test_addrs.$(OBJEXT)
 unittest_addrs_OBJECTS = $(am_unittest_addrs_OBJECTS)
-unittest_addrs_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_addrs_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_addrs_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_addrs_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4242,16 +4301,16 @@ unittest_addrs_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_admin_socket_OBJECTS =  \
        test/unittest_admin_socket-admin_socket.$(OBJEXT)
 unittest_admin_socket_OBJECTS = $(am_unittest_admin_socket_OBJECTS)
-unittest_admin_socket_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_admin_socket_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_admin_socket_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_admin_socket_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_unittest_arch_OBJECTS = test/unittest_arch-test_arch.$(OBJEXT)
 unittest_arch_OBJECTS = $(am_unittest_arch_OBJECTS)
-unittest_arch_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_arch_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_arch_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_arch_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -4260,8 +4319,8 @@ am__unittest_base64_SOURCES_DIST = test/base64.cc
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am_unittest_base64_OBJECTS = test/unittest_base64-base64.$(OBJEXT)
 unittest_base64_OBJECTS = $(am_unittest_base64_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@unittest_base64_DEPENDENCIES = $(LIBCEPHFS) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_14)
 unittest_base64_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_base64_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4269,8 +4328,8 @@ unittest_base64_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_bit_vector_OBJECTS =  \
        test/common/unittest_bit_vector-test_bit_vector.$(OBJEXT)
 unittest_bit_vector_OBJECTS = $(am_unittest_bit_vector_OBJECTS)
-unittest_bit_vector_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_bit_vector_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_bit_vector_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_bit_vector_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4278,8 +4337,8 @@ unittest_bit_vector_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_blkdev_OBJECTS =  \
        test/common/unittest_blkdev-test_blkdev.$(OBJEXT)
 unittest_blkdev_OBJECTS = $(am_unittest_blkdev_OBJECTS)
-unittest_blkdev_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_blkdev_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_blkdev_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_blkdev_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4287,8 +4346,8 @@ unittest_blkdev_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_bloom_filter_OBJECTS =  \
        test/common/unittest_bloom_filter-test_bloom_filter.$(OBJEXT)
 unittest_bloom_filter_OBJECTS = $(am_unittest_bloom_filter_OBJECTS)
-unittest_bloom_filter_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_bloom_filter_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_bloom_filter_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_bloom_filter_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4296,8 +4355,8 @@ unittest_bloom_filter_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_bufferlist_OBJECTS =  \
        test/unittest_bufferlist-bufferlist.$(OBJEXT)
 unittest_bufferlist_OBJECTS = $(am_unittest_bufferlist_OBJECTS)
-unittest_bufferlist_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_bufferlist_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_bufferlist_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_bufferlist_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4305,8 +4364,8 @@ unittest_bufferlist_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_ceph_argparse_OBJECTS =  \
        test/unittest_ceph_argparse-ceph_argparse.$(OBJEXT)
 unittest_ceph_argparse_OBJECTS = $(am_unittest_ceph_argparse_OBJECTS)
-unittest_ceph_argparse_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_ceph_argparse_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_ceph_argparse_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_ceph_argparse_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4315,8 +4374,8 @@ am_unittest_ceph_compatset_OBJECTS =  \
        test/unittest_ceph_compatset-ceph_compatset.$(OBJEXT)
 unittest_ceph_compatset_OBJECTS =  \
        $(am_unittest_ceph_compatset_OBJECTS)
-unittest_ceph_compatset_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_ceph_compatset_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_ceph_compatset_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_ceph_compatset_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4324,8 +4383,8 @@ unittest_ceph_compatset_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_ceph_crypto_OBJECTS =  \
        test/unittest_ceph_crypto-ceph_crypto.$(OBJEXT)
 unittest_ceph_crypto_OBJECTS = $(am_unittest_ceph_crypto_OBJECTS)
-unittest_ceph_crypto_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_ceph_crypto_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_ceph_crypto_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_ceph_crypto_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4336,8 +4395,8 @@ am__unittest_chain_xattr_SOURCES_DIST =  \
 unittest_chain_xattr_OBJECTS = $(am_unittest_chain_xattr_OBJECTS)
 @ENABLE_SERVER_TRUE@unittest_chain_xattr_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 unittest_chain_xattr_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_chain_xattr_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4345,8 +4404,8 @@ unittest_chain_xattr_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_config_OBJECTS =  \
        test/common/unittest_config-test_config.$(OBJEXT)
 unittest_config_OBJECTS = $(am_unittest_config_OBJECTS)
-unittest_config_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_config_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_config_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_config_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4354,8 +4413,8 @@ unittest_config_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_confutils_OBJECTS =  \
        test/unittest_confutils-confutils.$(OBJEXT)
 unittest_confutils_OBJECTS = $(am_unittest_confutils_OBJECTS)
-unittest_confutils_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_confutils_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_confutils_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_confutils_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4363,8 +4422,8 @@ unittest_confutils_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_context_OBJECTS =  \
        test/common/unittest_context-test_context.$(OBJEXT)
 unittest_context_OBJECTS = $(am_unittest_context_OBJECTS)
-unittest_context_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_context_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_context_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_context_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4372,16 +4431,16 @@ unittest_context_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_crc32c_OBJECTS =  \
        test/common/unittest_crc32c-test_crc32c.$(OBJEXT)
 unittest_crc32c_OBJECTS = $(am_unittest_crc32c_OBJECTS)
-unittest_crc32c_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_crc32c_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_crc32c_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_crc32c_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_unittest_crush_OBJECTS = test/crush/unittest_crush-crush.$(OBJEXT)
 unittest_crush_OBJECTS = $(am_unittest_crush_OBJECTS)
-unittest_crush_DEPENDENCIES = $(LIBCOMMON) $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_10)
+unittest_crush_DEPENDENCIES = $(LIBCOMMON) $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_9)
 unittest_crush_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_crush_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4389,16 +4448,16 @@ unittest_crush_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_crush_wrapper_OBJECTS =  \
        test/crush/unittest_crush_wrapper-CrushWrapper.$(OBJEXT)
 unittest_crush_wrapper_OBJECTS = $(am_unittest_crush_wrapper_OBJECTS)
-unittest_crush_wrapper_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10) $(LIBCRUSH)
+unittest_crush_wrapper_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9) $(LIBCRUSH)
 unittest_crush_wrapper_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_crush_wrapper_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_unittest_crypto_OBJECTS = test/unittest_crypto-crypto.$(OBJEXT)
 unittest_crypto_OBJECTS = $(am_unittest_crypto_OBJECTS)
-unittest_crypto_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_crypto_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_crypto_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_crypto_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4406,8 +4465,8 @@ unittest_crypto_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_crypto_init_OBJECTS =  \
        test/unittest_crypto_init-crypto_init.$(OBJEXT)
 unittest_crypto_init_OBJECTS = $(am_unittest_crypto_init_OBJECTS)
-unittest_crypto_init_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_crypto_init_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_crypto_init_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_crypto_init_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4415,8 +4474,8 @@ unittest_crypto_init_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_daemon_config_OBJECTS =  \
        test/unittest_daemon_config-daemon_config.$(OBJEXT)
 unittest_daemon_config_OBJECTS = $(am_unittest_daemon_config_OBJECTS)
-unittest_daemon_config_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_daemon_config_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_daemon_config_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_daemon_config_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4425,9 +4484,9 @@ am__unittest_ecbackend_SOURCES_DIST = test/osd/TestECBackend.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am_unittest_ecbackend_OBJECTS = test/osd/unittest_ecbackend-TestECBackend.$(OBJEXT)
 unittest_ecbackend_OBJECTS = $(am_unittest_ecbackend_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_ecbackend_DEPENDENCIES =  \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9)
 unittest_ecbackend_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_ecbackend_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4437,8 +4496,8 @@ am__unittest_encoding_SOURCES_DIST = test/encoding.cc
 unittest_encoding_OBJECTS = $(am_unittest_encoding_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@unittest_encoding_DEPENDENCIES = $(LIBCEPHFS) \
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_14)
 unittest_encoding_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_encoding_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4449,10 +4508,10 @@ am__unittest_erasure_code_SOURCES_DIST = erasure-code/ErasureCode.cc \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/unittest_erasure_code-TestErasureCode.$(OBJEXT)
 unittest_erasure_code_OBJECTS = $(am_unittest_erasure_code_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9)
 unittest_erasure_code_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_erasure_code_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4465,10 +4524,10 @@ am__unittest_erasure_code_example_SOURCES_DIST =  \
 unittest_erasure_code_example_OBJECTS =  \
        $(am_unittest_erasure_code_example_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_example_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9)
 unittest_erasure_code_example_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_erasure_code_example_CXXFLAGS) $(CXXFLAGS) \
@@ -4480,10 +4539,10 @@ am__unittest_erasure_code_isa_SOURCES_DIST =  \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       test/erasure-code/unittest_erasure_code_isa-TestErasureCodeIsa.$(OBJEXT)
 unittest_erasure_code_isa_OBJECTS =  \
        $(am_unittest_erasure_code_isa_OBJECTS)
-@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_isa_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_isa_DEPENDENCIES = $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       .libs/libec_isa.la \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(LIBERASURE_CODE) \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_1)
@@ -4536,10 +4595,10 @@ am__objects_32 = erasure-code/unittest_erasure_code_jerasure-ErasureCode.$(OBJEX
 unittest_erasure_code_jerasure_OBJECTS =  \
        $(am_unittest_erasure_code_jerasure_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_jerasure_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_erasure_code_jerasure_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -4559,10 +4618,10 @@ am__objects_33 =  \
 unittest_erasure_code_lrc_OBJECTS =  \
        $(am_unittest_erasure_code_lrc_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_lrc_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_erasure_code_lrc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -4576,10 +4635,10 @@ am__unittest_erasure_code_plugin_SOURCES_DIST =  \
 unittest_erasure_code_plugin_OBJECTS =  \
        $(am_unittest_erasure_code_plugin_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_plugin_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_erasure_code_plugin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -4592,10 +4651,10 @@ am__unittest_erasure_code_plugin_isa_SOURCES_DIST =  \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       test/erasure-code/unittest_erasure_code_plugin_isa-TestErasureCodePluginIsa.$(OBJEXT)
 unittest_erasure_code_plugin_isa_OBJECTS =  \
        $(am_unittest_erasure_code_plugin_isa_OBJECTS)
-@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_plugin_isa_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_plugin_isa_DEPENDENCIES = $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       .libs/libec_isa.la \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(LIBERASURE_CODE) \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__DEPENDENCIES_1)
@@ -4609,10 +4668,10 @@ am__unittest_erasure_code_plugin_jerasure_SOURCES_DIST =  \
 unittest_erasure_code_plugin_jerasure_OBJECTS =  \
        $(am_unittest_erasure_code_plugin_jerasure_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_plugin_jerasure_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_erasure_code_plugin_jerasure_LINK = $(LIBTOOL) $(AM_V_lt) \
        --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -4624,10 +4683,10 @@ am__unittest_erasure_code_plugin_lrc_SOURCES_DIST =  \
 unittest_erasure_code_plugin_lrc_OBJECTS =  \
        $(am_unittest_erasure_code_plugin_lrc_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_plugin_lrc_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_erasure_code_plugin_lrc_LINK = $(LIBTOOL) $(AM_V_lt) \
        --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -4684,10 +4743,10 @@ am__objects_34 =  \
 unittest_erasure_code_shec_OBJECTS =  \
        $(am_unittest_erasure_code_shec_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_shec_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_erasure_code_shec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -4743,10 +4802,10 @@ am__objects_35 = erasure-code/unittest_erasure_code_shec_all-ErasureCode.$(OBJEX
 unittest_erasure_code_shec_all_OBJECTS =  \
        $(am_unittest_erasure_code_shec_all_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_shec_all_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_erasure_code_shec_all_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -4802,10 +4861,10 @@ am__objects_36 = erasure-code/unittest_erasure_code_shec_thread-ErasureCode.$(OB
 unittest_erasure_code_shec_thread_OBJECTS =  \
        $(am_unittest_erasure_code_shec_thread_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_shec_thread_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBCOMMON) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_erasure_code_shec_thread_LINK = $(LIBTOOL) $(AM_V_lt) \
        --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link \
@@ -4813,8 +4872,8 @@ unittest_erasure_code_shec_thread_LINK = $(LIBTOOL) $(AM_V_lt) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am_unittest_escape_OBJECTS = test/unittest_escape-escape.$(OBJEXT)
 unittest_escape_OBJECTS = $(am_unittest_escape_OBJECTS)
-unittest_escape_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_escape_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_escape_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_escape_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4824,8 +4883,8 @@ am__unittest_flatindex_SOURCES_DIST = test/os/TestFlatIndex.cc
 unittest_flatindex_OBJECTS = $(am_unittest_flatindex_OBJECTS)
 @ENABLE_SERVER_TRUE@unittest_flatindex_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 unittest_flatindex_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_flatindex_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4834,16 +4893,16 @@ am_unittest_formatter_OBJECTS =  \
        test/unittest_formatter-formatter.$(OBJEXT) \
        rgw/unittest_formatter-rgw_formats.$(OBJEXT)
 unittest_formatter_OBJECTS = $(am_unittest_formatter_OBJECTS)
-unittest_formatter_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_formatter_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_formatter_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_formatter_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_unittest_gather_OBJECTS = test/unittest_gather-gather.$(OBJEXT)
 unittest_gather_OBJECTS = $(am_unittest_gather_OBJECTS)
-unittest_gather_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_gather_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_gather_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_gather_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4852,7 +4911,7 @@ am_unittest_heartbeatmap_OBJECTS =  \
        test/unittest_heartbeatmap-heartbeat_map.$(OBJEXT)
 unittest_heartbeatmap_OBJECTS = $(am_unittest_heartbeatmap_OBJECTS)
 unittest_heartbeatmap_DEPENDENCIES = $(LIBCOMMON) \
-       $(am__DEPENDENCIES_15) $(am__DEPENDENCIES_10)
+       $(am__DEPENDENCIES_14) $(am__DEPENDENCIES_9)
 unittest_heartbeatmap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_heartbeatmap_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4860,8 +4919,8 @@ unittest_heartbeatmap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_histogram_OBJECTS =  \
        test/common/unittest_histogram-histogram.$(OBJEXT)
 unittest_histogram_OBJECTS = $(am_unittest_histogram_OBJECTS)
-unittest_histogram_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_histogram_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_histogram_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_histogram_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4870,9 +4929,9 @@ am__unittest_hitset_SOURCES_DIST = test/osd/hitset.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am_unittest_hitset_OBJECTS = test/osd/unittest_hitset-hitset.$(OBJEXT)
 unittest_hitset_OBJECTS = $(am_unittest_hitset_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_hitset_DEPENDENCIES =  \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9)
 unittest_hitset_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_hitset_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4880,8 +4939,8 @@ unittest_hitset_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_io_priority_OBJECTS =  \
        test/common/unittest_io_priority-test_io_priority.$(OBJEXT)
 unittest_io_priority_OBJECTS = $(am_unittest_io_priority_OBJECTS)
-unittest_io_priority_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_io_priority_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_io_priority_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_io_priority_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4889,8 +4948,8 @@ unittest_io_priority_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_ipaddr_OBJECTS =  \
        test/unittest_ipaddr-test_ipaddr.$(OBJEXT)
 unittest_ipaddr_OBJECTS = $(am_unittest_ipaddr_OBJECTS)
-unittest_ipaddr_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_ipaddr_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_ipaddr_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_ipaddr_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4900,8 +4959,8 @@ am__unittest_lfnindex_SOURCES_DIST = test/os/TestLFNIndex.cc
 unittest_lfnindex_OBJECTS = $(am_unittest_lfnindex_OBJECTS)
 @ENABLE_SERVER_TRUE@unittest_lfnindex_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@   $(am__DEPENDENCIES_9)
 unittest_lfnindex_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_lfnindex_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4911,8 +4970,8 @@ am__unittest_libcephfs_config_SOURCES_DIST = test/libcephfs_config.cc
 unittest_libcephfs_config_OBJECTS =  \
        $(am_unittest_libcephfs_config_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@unittest_libcephfs_config_DEPENDENCIES = $(LIBCEPHFS) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_14)
 unittest_libcephfs_config_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_libcephfs_config_CXXFLAGS) $(CXXFLAGS) \
@@ -4922,8 +4981,8 @@ am__unittest_librados_SOURCES_DIST = test/librados/librados.cc
 unittest_librados_OBJECTS = $(am_unittest_librados_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@unittest_librados_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14)
 unittest_librados_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_librados_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4935,8 +4994,8 @@ unittest_librados_config_OBJECTS =  \
        $(am_unittest_librados_config_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@unittest_librados_config_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__DEPENDENCIES_14)
 unittest_librados_config_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_librados_config_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4953,24 +5012,23 @@ unittest_librbd_OBJECTS = $(am_unittest_librbd_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librados_test_stub.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librados_internal.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBOSDC) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_15) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(RADOS_TEST_LDADD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_161)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_14) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(RADOS_TEST_LDADD)
 unittest_librbd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_librbd_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_unittest_log_OBJECTS = log/unittest_log-test.$(OBJEXT)
 unittest_log_OBJECTS = $(am_unittest_log_OBJECTS)
-unittest_log_DEPENDENCIES = $(LIBCOMMON) $(am__DEPENDENCIES_15)
+unittest_log_DEPENDENCIES = $(LIBCOMMON) $(am__DEPENDENCIES_14)
 unittest_log_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(unittest_log_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am_unittest_lru_OBJECTS = test/common/unittest_lru-test_lru.$(OBJEXT)
 unittest_lru_OBJECTS = $(am_unittest_lru_OBJECTS)
-unittest_lru_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_lru_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_lru_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(unittest_lru_CXXFLAGS) \
        $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -4978,9 +5036,9 @@ am__unittest_mds_authcap_SOURCES_DIST = test/mds/TestMDSAuthCaps.cc
 @ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@am_unittest_mds_authcap_OBJECTS = test/mds/unittest_mds_authcap-TestMDSAuthCaps.$(OBJEXT)
 unittest_mds_authcap_OBJECTS = $(am_unittest_mds_authcap_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@unittest_mds_authcap_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_12) \
-@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_11) \
+@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@    $(am__DEPENDENCIES_9)
 unittest_mds_authcap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_mds_authcap_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -4988,16 +5046,16 @@ unittest_mds_authcap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_mds_types_OBJECTS =  \
        test/fs/unittest_mds_types-mds_types.$(OBJEXT)
 unittest_mds_types_OBJECTS = $(am_unittest_mds_types_OBJECTS)
-unittest_mds_types_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_mds_types_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_mds_types_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_mds_types_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_unittest_mime_OBJECTS = test/unittest_mime-mime.$(OBJEXT)
 unittest_mime_OBJECTS = $(am_unittest_mime_OBJECTS)
-unittest_mime_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_mime_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_mime_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_mime_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -5006,9 +5064,9 @@ am__unittest_mon_moncap_SOURCES_DIST = test/mon/moncap.cc
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am_unittest_mon_moncap_OBJECTS = test/mon/unittest_mon_moncap-moncap.$(OBJEXT)
 unittest_mon_moncap_OBJECTS = $(am_unittest_mon_moncap_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@unittest_mon_moncap_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_13) \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_12) \
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_9)
 unittest_mon_moncap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_mon_moncap_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5017,9 +5075,9 @@ am__unittest_mon_pgmap_SOURCES_DIST = test/mon/PGMap.cc
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@am_unittest_mon_pgmap_OBJECTS = test/mon/unittest_mon_pgmap-PGMap.$(OBJEXT)
 unittest_mon_pgmap_OBJECTS = $(am_unittest_mon_pgmap_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@unittest_mon_pgmap_DEPENDENCIES =  \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_13) \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_12) \
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_14) \
+@ENABLE_SERVER_TRUE@@WITH_MON_TRUE@    $(am__DEPENDENCIES_9)
 unittest_mon_pgmap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_mon_pgmap_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5031,9 +5089,9 @@ am__unittest_osd_osdcap_SOURCES_DIST = test/osd/osdcap.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am_unittest_osd_osdcap_OBJECTS = test/osd/unittest_osd_osdcap-osdcap.$(OBJEXT)
 unittest_osd_osdcap_OBJECTS = $(am_unittest_osd_osdcap_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_osd_osdcap_DEPENDENCIES =  \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9)
 unittest_osd_osdcap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_osd_osdcap_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5041,8 +5099,8 @@ unittest_osd_osdcap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_osd_types_OBJECTS =  \
        test/osd/unittest_osd_types-types.$(OBJEXT)
 unittest_osd_types_OBJECTS = $(am_unittest_osd_types_OBJECTS)
-unittest_osd_types_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_osd_types_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_osd_types_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_osd_types_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5050,8 +5108,8 @@ unittest_osd_types_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_osdmap_OBJECTS =  \
        test/osd/unittest_osdmap-TestOSDMap.$(OBJEXT)
 unittest_osdmap_OBJECTS = $(am_unittest_osdmap_OBJECTS)
-unittest_osdmap_DEPENDENCIES = $(am__DEPENDENCIES_15) $(LIBCOMMON) \
-       $(am__DEPENDENCIES_10)
+unittest_osdmap_DEPENDENCIES = $(am__DEPENDENCIES_14) $(LIBCOMMON) \
+       $(am__DEPENDENCIES_9)
 unittest_osdmap_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_osdmap_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5060,9 +5118,9 @@ am__unittest_osdscrub_SOURCES_DIST = test/osd/TestOSDScrub.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am_unittest_osdscrub_OBJECTS = test/osd/unittest_osdscrub-TestOSDScrub.$(OBJEXT)
 unittest_osdscrub_OBJECTS = $(am_unittest_osdscrub_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_osdscrub_DEPENDENCIES =  \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_osdscrub_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -5071,8 +5129,8 @@ unittest_osdscrub_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_perf_counters_OBJECTS =  \
        test/unittest_perf_counters-perf_counters.$(OBJEXT)
 unittest_perf_counters_OBJECTS = $(am_unittest_perf_counters_OBJECTS)
-unittest_perf_counters_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_perf_counters_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_perf_counters_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_perf_counters_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5081,9 +5139,9 @@ am__unittest_pglog_SOURCES_DIST = test/osd/TestPGLog.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@am_unittest_pglog_OBJECTS = test/osd/unittest_pglog-TestPGLog.$(OBJEXT)
 unittest_pglog_OBJECTS = $(am_unittest_pglog_OBJECTS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_pglog_DEPENDENCIES =  \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_13) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_14) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_15) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__DEPENDENCIES_1)
 unittest_pglog_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -5093,7 +5151,7 @@ am_unittest_prebufferedstreambuf_OBJECTS = test/unittest_prebufferedstreambuf-te
 unittest_prebufferedstreambuf_OBJECTS =  \
        $(am_unittest_prebufferedstreambuf_OBJECTS)
 unittest_prebufferedstreambuf_DEPENDENCIES = $(LIBCOMMON) \
-       $(am__DEPENDENCIES_15) $(am__DEPENDENCIES_2)
+       $(am__DEPENDENCIES_14) $(am__DEPENDENCIES_2)
 unittest_prebufferedstreambuf_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_prebufferedstreambuf_CXXFLAGS) $(CXXFLAGS) \
@@ -5104,10 +5162,10 @@ unittest_rbd_replay_OBJECTS = $(am_unittest_rbd_replay_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@unittest_rbd_replay_DEPENDENCIES =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_10) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_9) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_ios.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__DEPENDENCIES_14)
 unittest_rbd_replay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_rbd_replay_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5115,8 +5173,8 @@ unittest_rbd_replay_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_readahead_OBJECTS =  \
        test/common/unittest_readahead-Readahead.$(OBJEXT)
 unittest_readahead_OBJECTS = $(am_unittest_readahead_OBJECTS)
-unittest_readahead_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_readahead_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_readahead_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_readahead_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5125,8 +5183,8 @@ am__unittest_run_cmd_SOURCES_DIST = test/run_cmd.cc
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am_unittest_run_cmd_OBJECTS = test/unittest_run_cmd-run_cmd.$(OBJEXT)
 unittest_run_cmd_OBJECTS = $(am_unittest_run_cmd_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@unittest_run_cmd_DEPENDENCIES = $(LIBCEPHFS) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_14)
 unittest_run_cmd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_run_cmd_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5134,8 +5192,8 @@ unittest_run_cmd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_safe_io_OBJECTS =  \
        test/common/unittest_safe_io-test_safe_io.$(OBJEXT)
 unittest_safe_io_OBJECTS = $(am_unittest_safe_io_OBJECTS)
-unittest_safe_io_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_safe_io_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_safe_io_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_safe_io_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5143,8 +5201,8 @@ unittest_safe_io_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_shared_cache_OBJECTS =  \
        test/common/unittest_shared_cache-test_shared_cache.$(OBJEXT)
 unittest_shared_cache_OBJECTS = $(am_unittest_shared_cache_OBJECTS)
-unittest_shared_cache_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_shared_cache_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_shared_cache_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_shared_cache_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5152,16 +5210,16 @@ unittest_shared_cache_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_sharedptr_registry_OBJECTS = test/common/unittest_sharedptr_registry-test_sharedptr_registry.$(OBJEXT)
 unittest_sharedptr_registry_OBJECTS =  \
        $(am_unittest_sharedptr_registry_OBJECTS)
-unittest_sharedptr_registry_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_sharedptr_registry_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_sharedptr_registry_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_sharedptr_registry_CXXFLAGS) $(CXXFLAGS) \
        $(AM_LDFLAGS) $(LDFLAGS) -o $@
 am_unittest_signals_OBJECTS = test/unittest_signals-signals.$(OBJEXT)
 unittest_signals_OBJECTS = $(am_unittest_signals_OBJECTS)
-unittest_signals_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_signals_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_signals_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_signals_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5170,8 +5228,8 @@ am__unittest_simple_spin_SOURCES_DIST = test/simple_spin.cc
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@am_unittest_simple_spin_OBJECTS = test/unittest_simple_spin-simple_spin.$(OBJEXT)
 unittest_simple_spin_OBJECTS = $(am_unittest_simple_spin_OBJECTS)
 @ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@unittest_simple_spin_DEPENDENCIES = $(LIBCEPHFS) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_10) \
-@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_15)
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_9) \
+@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@        $(am__DEPENDENCIES_14)
 unittest_simple_spin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_simple_spin_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5179,8 +5237,8 @@ unittest_simple_spin_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_sloppy_crc_map_OBJECTS = test/common/unittest_sloppy_crc_map-test_sloppy_crc_map.$(OBJEXT)
 unittest_sloppy_crc_map_OBJECTS =  \
        $(am_unittest_sloppy_crc_map_OBJECTS)
-unittest_sloppy_crc_map_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_sloppy_crc_map_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_sloppy_crc_map_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_sloppy_crc_map_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5188,8 +5246,8 @@ unittest_sloppy_crc_map_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_str_list_OBJECTS =  \
        test/unittest_str_list-test_str_list.$(OBJEXT)
 unittest_str_list_OBJECTS = $(am_unittest_str_list_OBJECTS)
-unittest_str_list_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_str_list_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_str_list_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_str_list_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5197,8 +5255,8 @@ unittest_str_list_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_str_map_OBJECTS =  \
        test/common/unittest_str_map-test_str_map.$(OBJEXT)
 unittest_str_map_OBJECTS = $(am_unittest_str_map_OBJECTS)
-unittest_str_map_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_str_map_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_str_map_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_str_map_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5206,16 +5264,16 @@ unittest_str_map_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_striper_OBJECTS =  \
        test/unittest_striper-test_striper.$(OBJEXT)
 unittest_striper_OBJECTS = $(am_unittest_striper_OBJECTS)
-unittest_striper_DEPENDENCIES = $(LIBOSDC) $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_striper_DEPENDENCIES = $(LIBOSDC) $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_striper_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_striper_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_unittest_strtol_OBJECTS = test/unittest_strtol-strtol.$(OBJEXT)
 unittest_strtol_OBJECTS = $(am_unittest_strtol_OBJECTS)
-unittest_strtol_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_strtol_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_strtol_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_strtol_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5223,8 +5281,8 @@ unittest_strtol_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_tableformatter_OBJECTS = test/common/unittest_tableformatter-test_tableformatter.$(OBJEXT)
 unittest_tableformatter_OBJECTS =  \
        $(am_unittest_tableformatter_OBJECTS)
-unittest_tableformatter_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_tableformatter_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_tableformatter_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_tableformatter_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5232,7 +5290,7 @@ unittest_tableformatter_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_texttable_OBJECTS =  \
        test/unittest_texttable-test_texttable.$(OBJEXT)
 unittest_texttable_OBJECTS = $(am_unittest_texttable_OBJECTS)
-unittest_texttable_DEPENDENCIES = $(LIBCOMMON) $(am__DEPENDENCIES_15)
+unittest_texttable_DEPENDENCIES = $(LIBCOMMON) $(am__DEPENDENCIES_14)
 unittest_texttable_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_texttable_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5240,16 +5298,16 @@ unittest_texttable_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_throttle_OBJECTS =  \
        test/common/unittest_throttle-Throttle.$(OBJEXT)
 unittest_throttle_OBJECTS = $(am_unittest_throttle_OBJECTS)
-unittest_throttle_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_throttle_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_throttle_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_throttle_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
        $(LDFLAGS) -o $@
 am_unittest_utf8_OBJECTS = test/unittest_utf8-utf8.$(OBJEXT)
 unittest_utf8_OBJECTS = $(am_unittest_utf8_OBJECTS)
-unittest_utf8_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_utf8_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_utf8_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_utf8_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
@@ -5257,7 +5315,7 @@ unittest_utf8_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_util_OBJECTS =  \
        test/common/unittest_util-test_util.$(OBJEXT)
 unittest_util_OBJECTS = $(am_unittest_util_OBJECTS)
-unittest_util_DEPENDENCIES = $(LIBCOMMON) $(am__DEPENDENCIES_15) \
+unittest_util_DEPENDENCIES = $(LIBCOMMON) $(am__DEPENDENCIES_14) \
        $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2)
 unittest_util_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
@@ -5266,8 +5324,8 @@ unittest_util_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
 am_unittest_workqueue_OBJECTS =  \
        test/unittest_workqueue-test_workqueue.$(OBJEXT)
 unittest_workqueue_OBJECTS = $(am_unittest_workqueue_OBJECTS)
-unittest_workqueue_DEPENDENCIES = $(am__DEPENDENCIES_15) \
-       $(am__DEPENDENCIES_10)
+unittest_workqueue_DEPENDENCIES = $(am__DEPENDENCIES_14) \
+       $(am__DEPENDENCIES_9)
 unittest_workqueue_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \
        $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \
        $(unittest_workqueue_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \
@@ -5279,7 +5337,7 @@ am__xio_client_SOURCES_DIST = test/messenger/xio_client.cc \
 xio_client_OBJECTS = $(am_xio_client_OBJECTS)
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@xio_client_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_1) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_2) \
@@ -5294,7 +5352,7 @@ am__xio_server_SOURCES_DIST = test/messenger/xio_server.cc \
 xio_server_OBJECTS = $(am_xio_server_OBJECTS)
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@xio_server_DEPENDENCIES =  \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_5) \
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_10) \
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_9) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_1) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__DEPENDENCIES_2) \
@@ -5413,15 +5471,20 @@ SOURCES = $(libcls_log_client_a_SOURCES) \
        $(liblog_la_SOURCES) $(libmds_la_SOURCES) $(libmon_la_SOURCES) \
        $(libmon_types_la_SOURCES) $(libmsg_la_SOURCES) \
        $(libos_la_SOURCES) $(libos_rocksdb_la_SOURCES) \
+       $(libos_tp_la_SOURCES) $(nodist_libos_tp_la_SOURCES) \
        $(libos_types_la_SOURCES) $(libosd_la_SOURCES) \
+       $(libosd_tp_la_SOURCES) $(nodist_libosd_tp_la_SOURCES) \
        $(libosd_types_la_SOURCES) $(libosdc_la_SOURCES) \
        $(libperfglue_la_SOURCES) $(librados_la_SOURCES) \
        $(librados_api_la_SOURCES) $(librados_internal_la_SOURCES) \
-       $(librados_test_stub_la_SOURCES) $(libradosstriper_la_SOURCES) \
+       $(librados_test_stub_la_SOURCES) $(librados_tp_la_SOURCES) \
+       $(nodist_librados_tp_la_SOURCES) $(libradosstriper_la_SOURCES) \
        $(libradosstripertest_la_SOURCES) $(libradostest_la_SOURCES) \
        $(librbd_la_SOURCES) $(librbd_api_la_SOURCES) \
        $(librbd_internal_la_SOURCES) $(librbd_replay_la_SOURCES) \
-       $(librbd_replay_ios_la_SOURCES) $(librbd_test_la_SOURCES) \
+       $(librbd_replay_ios_la_SOURCES) \
+       $(librbd_replay_types_la_SOURCES) $(librbd_test_la_SOURCES) \
+       $(librbd_tp_la_SOURCES) $(nodist_librbd_tp_la_SOURCES) \
        $(librbd_types_la_SOURCES) $(librgw_la_SOURCES) \
        $(libsecret_la_SOURCES) $(libsystest_la_SOURCES) \
        $(ceph_authtool_SOURCES) $(ceph_client_debug_SOURCES) \
@@ -5615,13 +5678,16 @@ DIST_SOURCES = $(am__libcls_log_client_a_SOURCES_DIST) \
        $(liblog_la_SOURCES) $(am__libmds_la_SOURCES_DIST) \
        $(am__libmon_la_SOURCES_DIST) $(libmon_types_la_SOURCES) \
        $(am__libmsg_la_SOURCES_DIST) $(am__libos_la_SOURCES_DIST) \
-       $(am__libos_rocksdb_la_SOURCES_DIST) $(libos_types_la_SOURCES) \
-       $(am__libosd_la_SOURCES_DIST) $(libosd_types_la_SOURCES) \
-       $(libosdc_la_SOURCES) $(am__libperfglue_la_SOURCES_DIST) \
+       $(am__libos_rocksdb_la_SOURCES_DIST) \
+       $(am__libos_tp_la_SOURCES_DIST) $(libos_types_la_SOURCES) \
+       $(am__libosd_la_SOURCES_DIST) $(am__libosd_tp_la_SOURCES_DIST) \
+       $(libosd_types_la_SOURCES) $(libosdc_la_SOURCES) \
+       $(am__libperfglue_la_SOURCES_DIST) \
        $(am__librados_la_SOURCES_DIST) \
        $(am__librados_api_la_SOURCES_DIST) \
        $(am__librados_internal_la_SOURCES_DIST) \
        $(am__librados_test_stub_la_SOURCES_DIST) \
+       $(am__librados_tp_la_SOURCES_DIST) \
        $(am__libradosstriper_la_SOURCES_DIST) \
        $(am__libradosstripertest_la_SOURCES_DIST) \
        $(am__libradostest_la_SOURCES_DIST) \
@@ -5630,7 +5696,9 @@ DIST_SOURCES = $(am__libcls_log_client_a_SOURCES_DIST) \
        $(am__librbd_internal_la_SOURCES_DIST) \
        $(am__librbd_replay_la_SOURCES_DIST) \
        $(am__librbd_replay_ios_la_SOURCES_DIST) \
-       $(am__librbd_test_la_SOURCES_DIST) $(librbd_types_la_SOURCES) \
+       $(am__librbd_replay_types_la_SOURCES_DIST) \
+       $(am__librbd_test_la_SOURCES_DIST) \
+       $(am__librbd_tp_la_SOURCES_DIST) $(librbd_types_la_SOURCES) \
        $(am__librgw_la_SOURCES_DIST) $(libsecret_la_SOURCES) \
        $(am__libsystest_la_SOURCES_DIST) $(ceph_authtool_SOURCES) \
        $(am__ceph_client_debug_SOURCES_DIST) $(ceph_conf_SOURCES) \
@@ -5831,9 +5899,9 @@ am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile)
 am__pep3147_tweak = \
   sed -e 's|\.py$$||' -e 's|[^/]*$$|__pycache__/&.*.py|'
 py_compile = $(top_srcdir)/py-compile
-DATA = $(bash_completion_DATA) $(doc_DATA) $(libcephfs_include_DATA) \
-       $(librbd_include_DATA) $(rados_include_DATA) \
-       $(radosstriper_include_DATA)
+DATA = $(bash_completion_DATA) $(dist_noinst_DATA) $(doc_DATA) \
+       $(libcephfs_include_DATA) $(librbd_include_DATA) \
+       $(rados_include_DATA) $(radosstriper_include_DATA)
 am__noinst_HEADERS_DIST = arch/intel.h arch/arm.h arch/probe.h \
        auth/cephx/CephxAuthorizeHandler.h auth/cephx/CephxKeyServer.h \
        auth/cephx/CephxProtocol.h auth/cephx/CephxClientHandler.h \
@@ -5982,9 +6050,10 @@ am__noinst_HEADERS_DIST = arch/intel.h arch/arm.h arch/probe.h \
        common/linux_version.h common/module.h common/Continuation.h \
        common/Readahead.h common/Cycles.h common/Initialize.h \
        common/ContextCompletion.h common/bit_vector.hpp \
-       common/valgrind.h common/address_helper.h common/secret.h \
-       msg/Connection.h msg/Dispatcher.h msg/Message.h \
-       msg/Messenger.h msg/SimplePolicyMessenger.h msg/msg_types.h \
+       common/valgrind.h common/TracepointProvider.h \
+       common/address_helper.h common/secret.h msg/Connection.h \
+       msg/Dispatcher.h msg/Message.h msg/Messenger.h \
+       msg/SimplePolicyMessenger.h msg/msg_types.h \
        msg/simple/Accepter.h msg/simple/DispatchQueue.h \
        msg/simple/Pipe.h msg/simple/PipeConnection.h \
        msg/simple/SimpleMessenger.h msg/async/AsyncConnection.h \
@@ -6130,12 +6199,12 @@ am__noinst_HEADERS_DIST = arch/intel.h arch/arm.h arch/probe.h \
        cls/user/cls_user_ops.h cls/user/cls_user_types.h \
        key_value_store/key_value_structure.h \
        key_value_store/kv_flat_btree_async.h \
-       key_value_store/kvs_arg_types.h rbd_replay/BoundedBuffer.hpp \
-       rbd_replay/actions.hpp rbd_replay/Deser.hpp \
-       rbd_replay/ImageNameMap.hpp rbd_replay/ios.hpp \
-       rbd_replay/PendingIO.hpp rbd_replay/rbd_loc.hpp \
-       rbd_replay/rbd_replay_debug.hpp rbd_replay/Replayer.hpp \
-       rbd_replay/Ser.hpp \
+       key_value_store/kvs_arg_types.h rbd_replay/ActionTypes.h \
+       rbd_replay/actions.hpp rbd_replay/BoundedBuffer.hpp \
+       rbd_replay/BufferReader.h rbd_replay/ImageNameMap.hpp \
+       rbd_replay/ios.hpp rbd_replay/PendingIO.hpp \
+       rbd_replay/rbd_loc.hpp rbd_replay/rbd_replay_debug.hpp \
+       rbd_replay/Replayer.hpp \
        test/erasure-code/ceph_erasure_code_benchmark.h \
        test/erasure-code/ErasureCodeExample.h \
        test/messenger/message_helper.h \
@@ -6413,7 +6482,7 @@ ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
 AM_CXXFLAGS = @AM_CXXFLAGS@ $(AM_COMMON_CFLAGS) -ftemplate-depth-1024 \
        -Wnon-virtual-dtor -Wno-invalid-offsetof $(am__append_3) \
-       $(am__append_6) $(am__append_68) $(am__append_71)
+       $(am__append_6) $(am__append_66) $(am__append_69)
 AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
 AR = @AR@
 ARM_FLAGS = @ARM_FLAGS@
@@ -6602,9 +6671,9 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = gnu subdir-objects
-SUBDIRS = ocf java tracing $(am__append_199) $(am__append_200)
-DIST_SUBDIRS = gmock ocf libs3 java tracing
-BUILT_SOURCES = $(am__append_220)
+SUBDIRS = ocf java $(am__append_193) $(am__append_194)
+DIST_SUBDIRS = gmock ocf libs3 java
+BUILT_SOURCES = $(am__append_197) $(am__append_216)
 
 # extra bits
 EXTRA_DIST = $(am__append_21) \
@@ -6628,7 +6697,8 @@ EXTRA_DIST = $(am__append_21) \
        $(srcdir)/test/coverage.sh $(patsubst \
        %,$(srcdir)/%,$(check_SCRIPTS)) \
        $(srcdir)/test/container-make-check-ubuntu-14.04.sh \
-       $(am__append_201) $(srcdir)/$(shell_scripts:%=%.in) \
+       $(am__append_195) tracing/tracing-common.h \
+       $(srcdir)/$(shell_scripts:%=%.in) \
        $(srcdir)/verify-mds-journal.sh $(srcdir)/vstart.sh \
        $(srcdir)/stop.sh ceph-run $(srcdir)/ceph-osd-prestart.sh \
        $(srcdir)/ceph_common.sh $(srcdir)/init-radosgw \
@@ -6659,7 +6729,11 @@ EXTRA_DIST = $(am__append_21) \
        libs3/LICENSE libs3/README libs3/TODO libs3/archlinux \
        libs3/debian libs3/doxyfile libs3/inc libs3/libs3.spec \
        libs3/mswin libs3/src libs3/test unittest_bufferlist.sh
-CLEANFILES = $(shell_scripts) ceph_ver.h sample.fetch_config
+CLEANFILES = $(BUILT_SOURCES) $(shell_scripts) ceph_ver.h \
+       sample.fetch_config
+dist_noinst_DATA = tracing/librados.tp tracing/librbd.tp \
+       tracing/oprequest.tp tracing/osd.tp tracing/pg.tp \
+       tracing/objectstore.tp
 
 # jerasure plugin
 
@@ -6690,8 +6764,8 @@ noinst_HEADERS = arch/intel.h arch/arm.h arch/probe.h \
        crush/crush.h crush/grammar.h crush/hash.h \
        crush/crush_ln_table.h crush/mapper.h crush/sample.txt \
        crush/types.h $(am__append_23) $(am__append_27) \
-       $(am__append_33) $(am__append_35) $(am__append_37) \
-       $(am__append_39) $(am__append_43) $(am__append_47) \
+       $(am__append_32) $(am__append_34) $(am__append_36) \
+       $(am__append_38) $(am__append_42) $(am__append_45) \
        erasure-code/jerasure/gf-complete/include/gf_complete.h \
        erasure-code/jerasure/gf-complete/include/gf_general.h \
        erasure-code/jerasure/gf-complete/include/gf_int.h \
@@ -6722,11 +6796,11 @@ noinst_HEADERS = arch/intel.h arch/arm.h arch/probe.h \
        erasure-code/jerasure/gf-complete/include/gf_rand.h \
        erasure-code/jerasure/gf-complete/include/gf_method.h \
        erasure-code/jerasure/gf-complete/include/gf_general.h \
-       $(am__append_58) erasure-code/ErasureCode.h \
+       $(am__append_56) erasure-code/ErasureCode.h \
        erasure-code/ErasureCodeInterface.h \
        erasure-code/ErasureCodePlugin.h osdc/Filer.h osdc/Journaler.h \
        osdc/ObjectCacher.h osdc/Objecter.h osdc/Striper.h \
-       osdc/WritebackHandler.h $(am__append_62) $(am__append_64) \
+       osdc/WritebackHandler.h $(am__append_60) $(am__append_62) \
        global/pidfile.h global/global_init.h global/global_context.h \
        global/signal_handler.h json_spirit/json_spirit.h \
        json_spirit/json_spirit_error_position.h \
@@ -6774,47 +6848,48 @@ noinst_HEADERS = arch/intel.h arch/arm.h arch/probe.h \
        common/linux_version.h common/module.h common/Continuation.h \
        common/Readahead.h common/Cycles.h common/Initialize.h \
        common/ContextCompletion.h common/bit_vector.hpp \
-       common/valgrind.h $(am__append_79) common/secret.h \
-       msg/Connection.h msg/Dispatcher.h msg/Message.h \
-       msg/Messenger.h msg/SimplePolicyMessenger.h msg/msg_types.h \
-       msg/simple/Accepter.h msg/simple/DispatchQueue.h \
-       msg/simple/Pipe.h msg/simple/PipeConnection.h \
-       msg/simple/SimpleMessenger.h msg/async/AsyncConnection.h \
-       msg/async/AsyncMessenger.h msg/async/Event.h \
-       msg/async/EventEpoll.h msg/async/EventSelect.h \
-       msg/async/net_handler.h $(am__append_88) messages/MAuth.h \
-       messages/MAuthReply.h messages/MCacheExpire.h \
-       messages/MClientCaps.h messages/MClientCapRelease.h \
-       messages/MClientLease.h messages/MClientReconnect.h \
-       messages/MClientReply.h messages/MClientRequest.h \
-       messages/MClientRequestForward.h messages/MClientSession.h \
-       messages/MClientSnap.h messages/MClientQuota.h \
-       messages/MCommand.h messages/MCommandReply.h \
-       messages/MDentryLink.h messages/MDentryUnlink.h \
-       messages/MDirUpdate.h messages/MDiscover.h \
-       messages/MDiscoverReply.h messages/MExportCaps.h \
-       messages/MExportCapsAck.h messages/MGatherCaps.h \
-       messages/MExportDir.h messages/MExportDirAck.h \
-       messages/MExportDirCancel.h messages/MExportDirDiscover.h \
-       messages/MExportDirDiscoverAck.h messages/MExportDirFinish.h \
-       messages/MExportDirNotify.h messages/MExportDirNotifyAck.h \
-       messages/MExportDirPrep.h messages/MExportDirPrepAck.h \
-       messages/MGenericMessage.h messages/MGetPoolStats.h \
-       messages/MGetPoolStatsReply.h messages/MHeartbeat.h \
-       messages/MInodeFileCaps.h messages/MLock.h messages/MLog.h \
-       messages/MLogAck.h messages/MMDSBeacon.h \
-       messages/MMDSCacheRejoin.h messages/MMDSLoadTargets.h \
-       messages/MMDSFindIno.h messages/MMDSFindInoReply.h \
-       messages/MMDSFragmentNotify.h messages/MMDSMap.h \
-       messages/MMDSOpenIno.h messages/MMDSOpenInoReply.h \
-       messages/MMDSResolve.h messages/MMDSResolveAck.h \
-       messages/MMDSSlaveRequest.h messages/MMDSTableRequest.h \
-       messages/MMonCommand.h messages/MMonCommandAck.h \
-       messages/MMonElection.h messages/MMonGetMap.h \
-       messages/MMonGetOSDMap.h messages/MMonGetVersion.h \
-       messages/MMonGetVersionReply.h messages/MMonGlobalID.h \
-       messages/MMonHealth.h messages/MMonJoin.h messages/MMonMap.h \
-       messages/MMonPaxos.h messages/MMonProbe.h messages/MMonScrub.h \
+       common/valgrind.h common/TracepointProvider.h $(am__append_77) \
+       common/secret.h msg/Connection.h msg/Dispatcher.h \
+       msg/Message.h msg/Messenger.h msg/SimplePolicyMessenger.h \
+       msg/msg_types.h msg/simple/Accepter.h \
+       msg/simple/DispatchQueue.h msg/simple/Pipe.h \
+       msg/simple/PipeConnection.h msg/simple/SimpleMessenger.h \
+       msg/async/AsyncConnection.h msg/async/AsyncMessenger.h \
+       msg/async/Event.h msg/async/EventEpoll.h \
+       msg/async/EventSelect.h msg/async/net_handler.h \
+       $(am__append_86) messages/MAuth.h messages/MAuthReply.h \
+       messages/MCacheExpire.h messages/MClientCaps.h \
+       messages/MClientCapRelease.h messages/MClientLease.h \
+       messages/MClientReconnect.h messages/MClientReply.h \
+       messages/MClientRequest.h messages/MClientRequestForward.h \
+       messages/MClientSession.h messages/MClientSnap.h \
+       messages/MClientQuota.h messages/MCommand.h \
+       messages/MCommandReply.h messages/MDentryLink.h \
+       messages/MDentryUnlink.h messages/MDirUpdate.h \
+       messages/MDiscover.h messages/MDiscoverReply.h \
+       messages/MExportCaps.h messages/MExportCapsAck.h \
+       messages/MGatherCaps.h messages/MExportDir.h \
+       messages/MExportDirAck.h messages/MExportDirCancel.h \
+       messages/MExportDirDiscover.h messages/MExportDirDiscoverAck.h \
+       messages/MExportDirFinish.h messages/MExportDirNotify.h \
+       messages/MExportDirNotifyAck.h messages/MExportDirPrep.h \
+       messages/MExportDirPrepAck.h messages/MGenericMessage.h \
+       messages/MGetPoolStats.h messages/MGetPoolStatsReply.h \
+       messages/MHeartbeat.h messages/MInodeFileCaps.h \
+       messages/MLock.h messages/MLog.h messages/MLogAck.h \
+       messages/MMDSBeacon.h messages/MMDSCacheRejoin.h \
+       messages/MMDSLoadTargets.h messages/MMDSFindIno.h \
+       messages/MMDSFindInoReply.h messages/MMDSFragmentNotify.h \
+       messages/MMDSMap.h messages/MMDSOpenIno.h \
+       messages/MMDSOpenInoReply.h messages/MMDSResolve.h \
+       messages/MMDSResolveAck.h messages/MMDSSlaveRequest.h \
+       messages/MMDSTableRequest.h messages/MMonCommand.h \
+       messages/MMonCommandAck.h messages/MMonElection.h \
+       messages/MMonGetMap.h messages/MMonGetOSDMap.h \
+       messages/MMonGetVersion.h messages/MMonGetVersionReply.h \
+       messages/MMonGlobalID.h messages/MMonHealth.h \
+       messages/MMonJoin.h messages/MMonMap.h messages/MMonPaxos.h \
+       messages/MMonProbe.h messages/MMonScrub.h \
        messages/MMonSubscribe.h messages/MMonSubscribeAck.h \
        messages/MMonSync.h messages/MOSDAlive.h messages/MOSDBoot.h \
        messages/MOSDFailure.h messages/MOSDMarkMeDown.h \
@@ -6866,10 +6941,10 @@ noinst_HEADERS = arch/intel.h arch/arm.h arch/probe.h \
        include/util.h include/stat.h include/on_exit.h \
        include/memory.h include/rados/memory.h \
        include/hash_namespace.h include/unordered_set.h \
-       include/unordered_map.h $(am__append_95) $(am__append_98) \
-       $(am__append_103) $(am__append_109) $(am__append_112) \
-       $(am__append_115) $(am__append_117) $(am__append_121) \
-       $(am__append_141) $(am__append_157) test/bench/backend.h \
+       include/unordered_map.h $(am__append_92) $(am__append_95) \
+       $(am__append_99) $(am__append_105) $(am__append_108) \
+       $(am__append_111) $(am__append_112) $(am__append_118) \
+       $(am__append_138) $(am__append_154) test/bench/backend.h \
        test/bench/bencher.h test/bench/detailed_stat_collector.h \
        test/bench/distribution.h test/bench/dumb_backend.h \
        test/bench/rados_backend.h test/bench/rbd_backend.h \
@@ -6901,41 +6976,41 @@ noinst_HEADERS = arch/intel.h arch/arm.h arch/probe.h \
        bash_completion/ceph bash_completion/rados bash_completion/rbd \
        bash_completion/radosgw-admin mount/canonicalize.c \
        mount/mtab.c objclass/objclass.h
-bin_SCRIPTS = $(am__append_20) $(am__append_208) $(am__append_217) \
-       $(am__append_225)
+bin_SCRIPTS = $(am__append_20) $(am__append_204) $(am__append_213) \
+       $(am__append_221)
 sbin_SCRIPTS = 
-su_sbin_SCRIPTS = $(am__append_222)
+su_sbin_SCRIPTS = $(am__append_218)
 dist_bin_SCRIPTS = 
-lib_LTLIBRARIES = $(am__append_94) $(am__append_97) $(am__append_102) \
-       $(am__append_215) $(am__append_216)
+lib_LTLIBRARIES = $(am__append_91) $(am__append_94) $(am__append_98) \
+       $(am__append_196) $(am__append_211) $(am__append_212)
 noinst_LTLIBRARIES = libarch.la libauth.la libcrush.la libmon_types.la \
        $(am__append_22) $(am__append_26) libos_types.la \
-       $(am__append_32) $(am__append_34) $(am__append_36) \
-       libosd_types.la $(am__append_46) liberasure_code.la libosdc.la \
-       $(am__append_61) $(am__append_63) libglobal.la \
+       $(am__append_31) $(am__append_33) $(am__append_35) \
+       libosd_types.la $(am__append_44) liberasure_code.la libosdc.la \
+       $(am__append_59) $(am__append_61) libglobal.la \
        libjson_spirit.la liblog.la libperfglue.la \
        libcommon_internal.la libcommon_api.la libcommon_crc.la \
-       libcommon.la $(am__append_80) libmsg.la $(am__append_89) \
-       librbd_types.la $(am__append_99) $(am__append_105) \
-       $(am__append_110) $(am__append_116) $(am__append_150) \
-       $(am__append_160) $(am__append_165) $(am__append_186) \
-       $(am__append_210)
-noinst_LIBRARIES = $(am__append_38) $(am__append_111)
-radoslib_LTLIBRARIES = $(am__append_113) $(am__append_114)
+       libcommon.la $(am__append_78) libmsg.la $(am__append_87) \
+       librbd_types.la $(am__append_96) $(am__append_101) \
+       $(am__append_106) $(am__append_113) $(am__append_147) \
+       $(am__append_157) $(am__append_159) $(am__append_180) \
+       $(am__append_206)
+noinst_LIBRARIES = $(am__append_37) $(am__append_107)
+radoslib_LTLIBRARIES = $(am__append_109) $(am__append_110)
 
 # like bin_PROGRAMS, but these targets are only built for debug builds
-bin_DEBUGPROGRAMS = $(am__append_65) $(am__append_108) \
-       $(am__append_123) $(am__append_151) $(am__append_152) \
-       $(am__append_153) $(am__append_154) $(am__append_156) \
-       $(am__append_158) $(am__append_164) $(am__append_166) \
-       $(am__append_167) $(am__append_169) $(am__append_170) \
-       $(am__append_171) $(am__append_172) $(am__append_173) \
-       $(am__append_174) $(am__append_175) $(am__append_176) \
-       $(am__append_182) ceph_test_timers ceph_test_signal_handlers \
-       ceph_test_rewrite_latency ceph_test_crypto $(am__append_185) \
+bin_DEBUGPROGRAMS = $(am__append_63) $(am__append_104) \
+       $(am__append_120) $(am__append_148) $(am__append_149) \
+       $(am__append_150) $(am__append_151) $(am__append_153) \
+       $(am__append_155) $(am__append_158) $(am__append_160) \
+       $(am__append_161) $(am__append_163) $(am__append_164) \
+       $(am__append_165) $(am__append_166) $(am__append_167) \
+       $(am__append_168) $(am__append_169) $(am__append_170) \
+       $(am__append_176) ceph_test_timers ceph_test_signal_handlers \
+       ceph_test_rewrite_latency ceph_test_crypto $(am__append_179) \
        ceph_bench_log ceph_test_objectcacher_stress \
        ceph_test_cfuse_cache_invalidate ceph_test_get_blkdev_size \
-       $(am__append_189) $(am__append_191) $(am__append_192) \
+       $(am__append_183) $(am__append_185) $(am__append_186) \
        ceph_psim
 
 # like sbin_SCRIPTS but can be used to install to e.g. /usr/sbin
@@ -6945,7 +7020,7 @@ ceph_sbindir = $(sbindir)
 su_sbindir = /sbin
 
 # tests scripts will be appended to this
-check_SCRIPTS = $(am__append_120) test/ceph_objectstore_tool.py \
+check_SCRIPTS = $(am__append_117) test/ceph_objectstore_tool.py \
        test/test-ceph-helpers.sh test/cephtool-test-osd.sh \
        test/cephtool-test-mon.sh test/cephtool-test-mds.sh \
        unittest_bufferlist.sh test/encoding/check-generated.sh \
@@ -6954,7 +7029,7 @@ check_SCRIPTS = $(am__append_120) test/ceph_objectstore_tool.py \
        test/mon/mkfs.sh test/osd/osd-scrub-repair.sh \
        test/osd/osd-config.sh test/osd/osd-bench.sh \
        test/osd/osd-copy-from.sh test/mon/mon-handle-forward.sh \
-       $(am__append_187) $(am__append_188) \
+       $(am__append_181) $(am__append_182) \
        test/pybind/test_ceph_argparse.py
 
 ##################################
@@ -6979,8 +7054,8 @@ AM_COMMON_CFLAGS = \
        -fno-strict-aliasing \
        -fsigned-char
 
-AM_CFLAGS = $(AM_COMMON_CFLAGS) $(am__append_5) $(am__append_67) \
-       $(am__append_70)
+AM_CFLAGS = $(AM_COMMON_CFLAGS) $(am__append_5) $(am__append_65) \
+       $(am__append_68)
 AM_CPPFLAGS = $(AM_COMMON_CPPFLAGS)
 
 # note: this is position dependant, it affects the -l options that
@@ -7033,10 +7108,6 @@ LIBRBD_TYPES = librbd_types.la
 LIBKRBD = libkrbd.la
 LIBCEPHFS = libcephfs.la
 LIBERASURE_CODE = liberasure_code.la
-LIBOSD_TP = tracing/libosd_tp.la
-LIBRADOS_TP = tracing/librados_tp.la
-LIBRBD_TP = tracing/librbd_tp.la
-LIBOS_TP = tracing/libos_tp.la
 
 # Use this for binaries requiring libglobal
 CEPH_GLOBAL = $(LIBGLOBAL) $(LIBCOMMON) $(PTHREAD_LIBS) -lm $(CRYPTO_LIBS) $(EXTRALIBS)
@@ -7046,16 +7117,16 @@ CEPH_GLOBAL = $(LIBGLOBAL) $(LIBCOMMON) $(PTHREAD_LIBS) -lm $(CRYPTO_LIBS) $(EXT
 # important; libmsg before libauth!
 LIBCOMMON_DEPS = libcommon_internal.la libcommon_crc.la \
        $(LIBERASURE_CODE) $(LIBMSG) $(LIBAUTH) $(LIBCRUSH) \
-       $(LIBJSON_SPIRIT) $(LIBLOG) $(LIBARCH) $(am__append_78)
-LIBRADOS_DEPS = $(am__append_90) $(am__append_91)
-LIBRGW_DEPS = $(am__append_106)
+       $(LIBJSON_SPIRIT) $(LIBLOG) $(LIBARCH) $(am__append_76)
+LIBRADOS_DEPS = $(am__append_88)
+LIBRGW_DEPS = $(am__append_102)
 
 # This is used by the dencoder test
 
 # Do not use TCMALLOC with dencoder
 DENCODER_SOURCES = $(am__append_24) perfglue/disabled_heap_profiler.cc \
-       perfglue/disabled_stubs.cc $(am__append_104)
-DENCODER_DEPS = $(am__append_25)
+       perfglue/disabled_stubs.cc $(am__append_100)
+DENCODER_DEPS = $(am__append_25) $(am__append_114)
 radoslibdir = $(libdir)/rados-classes
 libarch_la_SOURCES = \
        arch/intel.c \
@@ -7160,11 +7231,10 @@ libos_types_la_CXXFLAGS = ${AM_CXXFLAGS}
 @ENABLE_SERVER_TRUE@   os/WBThrottle.cc os/KeyValueDB.cc \
 @ENABLE_SERVER_TRUE@   common/TrackedOp.cc $(am__append_28) \
 @ENABLE_SERVER_TRUE@   $(am__append_29) $(am__append_30) \
-@ENABLE_SERVER_TRUE@   $(am__append_40)
+@ENABLE_SERVER_TRUE@   $(am__append_39)
 @ENABLE_SERVER_TRUE@libos_la_CXXFLAGS = ${AM_CXXFLAGS} \
-@ENABLE_SERVER_TRUE@   $(am__append_41)
-@ENABLE_SERVER_TRUE@libos_la_LIBADD = $(LIBOS_TYPES) $(am__append_31) \
-@ENABLE_SERVER_TRUE@   $(am__append_42)
+@ENABLE_SERVER_TRUE@   $(am__append_40)
+@ENABLE_SERVER_TRUE@libos_la_LIBADD = $(LIBOS_TYPES) $(am__append_41)
 @ENABLE_SERVER_TRUE@@WITH_DLIBROCKSDB_TRUE@libos_rocksdb_la_SOURCES = os/RocksDBStore.cc
 @ENABLE_SERVER_TRUE@@WITH_SLIBROCKSDB_TRUE@libos_rocksdb_la_SOURCES = os/RocksDBStore.cc
 @ENABLE_SERVER_TRUE@@WITH_DLIBROCKSDB_TRUE@libos_rocksdb_la_CXXFLAGS = ${AM_CXXFLAGS} ${LIBROCKSDB_CFLAGS} -std=gnu++11
@@ -7200,16 +7270,13 @@ libosd_types_la_CXXFLAGS = ${AM_CXXFLAGS}
 
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@libosd_la_CXXFLAGS =  \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ${AM_CXXFLAGS} \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_44)
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@libosd_la_LIBADD = $(LIBOSDC) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOS) $(LIBOSD_TYPES) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOS_TYPES) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_45)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_43)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@libosd_la_LIBADD = $(LIBOSDC) $(LIBOS) $(LIBOSD_TYPES) $(LIBOS_TYPES)
 erasure_codelibdir = $(pkglibdir)/erasure-code
 erasure_codelib_LTLIBRARIES = libec_jerasure_generic.la \
-       $(am__append_50) $(am__append_52) $(am__append_54) \
-       libec_jerasure.la libec_lrc.la libec_shec.la $(am__append_60) \
-       $(am__append_127)
+       $(am__append_48) $(am__append_50) $(am__append_52) \
+       libec_jerasure.la libec_lrc.la libec_shec.la $(am__append_58) \
+       $(am__append_124)
 jerasure_sources = \
   erasure-code/ErasureCode.cc \
   erasure-code/jerasure/jerasure/src/cauchy.c \
@@ -7242,7 +7309,7 @@ libec_jerasure_generic_la_CXXFLAGS = ${AM_CXXFLAGS} \
 
 libec_jerasure_generic_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
 libec_jerasure_generic_la_LDFLAGS = ${AM_LDFLAGS} -version-info 2:0:0 \
-       $(am__append_48)
+       $(am__append_46)
 libec_jerasure_neon_la_SOURCES = ${jerasure_sources}                                       \
                                   erasure-code/jerasure/gf-complete/src/neon/gf_w4_neon.c  \
                                   erasure-code/jerasure/gf-complete/src/neon/gf_w8_neon.c  \
@@ -7262,7 +7329,7 @@ libec_jerasure_neon_la_CXXFLAGS = ${AM_CXXFLAGS} \
 
 libec_jerasure_neon_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
 libec_jerasure_neon_la_LDFLAGS = ${AM_LDFLAGS} -version-info 2:0:0 \
-       $(am__append_49)
+       $(am__append_47)
 libec_jerasure_sse3_la_SOURCES = ${jerasure_sources}
 libec_jerasure_sse3_la_CFLAGS = ${AM_CFLAGS}  \
        ${INTEL_SSE_FLAGS} \
@@ -7282,7 +7349,7 @@ libec_jerasure_sse3_la_CXXFLAGS = ${AM_CXXFLAGS} \
 
 libec_jerasure_sse3_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
 libec_jerasure_sse3_la_LDFLAGS = ${AM_LDFLAGS} -version-info 2:0:0 \
-       $(am__append_51)
+       $(am__append_49)
 libec_jerasure_sse4_la_SOURCES = ${jerasure_sources}
 libec_jerasure_sse4_la_CFLAGS = ${AM_CFLAGS}  \
        ${INTEL_SSE_FLAGS} \
@@ -7306,7 +7373,7 @@ libec_jerasure_sse4_la_CXXFLAGS = ${AM_CXXFLAGS} \
 
 libec_jerasure_sse4_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
 libec_jerasure_sse4_la_LDFLAGS = ${AM_LDFLAGS} -version-info 2:0:0 \
-       $(am__append_53)
+       $(am__append_51)
 libec_jerasure_la_SOURCES = \
        erasure-code/jerasure/ErasureCodePluginSelectJerasure.cc
 
@@ -7314,7 +7381,7 @@ libec_jerasure_la_CFLAGS = ${AM_CFLAGS}
 libec_jerasure_la_CXXFLAGS = ${AM_CXXFLAGS}
 libec_jerasure_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
 libec_jerasure_la_LDFLAGS = ${AM_LDFLAGS} -version-info 2:0:0 \
-       $(am__append_55)
+       $(am__append_53)
 lrc_sources = \
   erasure-code/ErasureCode.cc \
   erasure-code/lrc/ErasureCodePluginLrc.cc \
@@ -7325,7 +7392,7 @@ libec_lrc_la_CFLAGS = ${AM_CFLAGS}
 libec_lrc_la_CXXFLAGS = ${AM_CXXFLAGS}
 libec_lrc_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(LIBJSON_SPIRIT)
 libec_lrc_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 \
-       $(am__append_56)
+       $(am__append_54)
 libec_shec_la_SOURCES = \
        erasure-code/ErasureCode.cc \
        erasure-code/shec/ErasureCodePluginShec.cc \
@@ -7366,7 +7433,7 @@ libec_shec_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
 #libec_shec_la_LIBADD = $(PTHREAD_LIBS) $(EXTRALIBS)
 #libec_shec_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 -export-symbols-regex '.*__erasure_code_.*'
 libec_shec_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 \
-       $(am__append_57)
+       $(am__append_55)
 @WITH_BETTER_YASM_ELF64_TRUE@isa_sources = \
 @WITH_BETTER_YASM_ELF64_TRUE@  erasure-code/ErasureCode.cc \
 @WITH_BETTER_YASM_ELF64_TRUE@  erasure-code/isa/isa-l/erasure_code/ec_base.c \
@@ -7404,7 +7471,7 @@ libec_shec_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 \
 @WITH_BETTER_YASM_ELF64_TRUE@libec_isa_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
 @WITH_BETTER_YASM_ELF64_TRUE@libec_isa_la_LDFLAGS = ${AM_LDFLAGS} \
 @WITH_BETTER_YASM_ELF64_TRUE@  -version-info 2:10:0 \
-@WITH_BETTER_YASM_ELF64_TRUE@  $(am__append_59)
+@WITH_BETTER_YASM_ELF64_TRUE@  $(am__append_57)
 @WITH_BETTER_YASM_ELF64_TRUE@libec_isa_la_LIBTOOLFLAGS = --tag=CC
 liberasure_code_la_SOURCES = \
        erasure-code/ErasureCodePlugin.cc
@@ -7447,8 +7514,8 @@ liblog_la_SOURCES = \
        log/Log.cc \
        log/SubsystemMap.cc
 
-libperfglue_la_SOURCES = $(am__append_66) $(am__append_69) \
-       $(am__append_72) $(am__append_73) $(am__append_74)
+libperfglue_la_SOURCES = $(am__append_64) $(am__append_67) \
+       $(am__append_70) $(am__append_71) $(am__append_72)
 @WITH_TCMALLOC_FALSE@@WITH_TCMALLOC_MINIMAL_TRUE@libperfglue_la_LIBADD = -ltcmalloc_minimal
 @WITH_TCMALLOC_TRUE@libperfglue_la_LIBADD = -ltcmalloc
 
@@ -7479,9 +7546,10 @@ libcommon_internal_la_SOURCES = ceph_ver.c common/DecayCounter.cc \
        common/ceph_frag.cc common/addr_parsing.c common/hobject.cc \
        common/bloom_filter.cc common/linux_version.c common/module.c \
        common/Readahead.cc common/Cycles.cc \
-       common/ContextCompletion.cc $(am__append_75) $(am__append_76) \
-       mon/MonCap.cc mon/MonClient.cc mon/MonMap.cc osd/OSDMap.cc \
-       osd/osd_types.cc osd/ECMsgTypes.cc osd/HitSet.cc mds/MDSMap.cc \
+       common/ContextCompletion.cc common/TracepointProvider.cc \
+       $(am__append_73) $(am__append_74) mon/MonCap.cc \
+       mon/MonClient.cc mon/MonMap.cc osd/OSDMap.cc osd/osd_types.cc \
+       osd/ECMsgTypes.cc osd/HitSet.cc mds/MDSMap.cc \
        mds/inode_backtrace.cc mds/mdstypes.cc mds/flock.cc
 libcommon_api_la_SOURCES = \
        common/buffer.cc
@@ -7491,7 +7559,7 @@ libcommon_api_la_SOURCES = \
 # inject crc in common
 libcommon_crc_la_SOURCES = common/sctp_crc32.c common/crc32c.cc \
        common/crc32c_intel_baseline.c common/crc32c_intel_fast.c \
-       $(am__append_77)
+       $(am__append_75)
 @WITH_GOOD_YASM_ELF64_TRUE@libcommon_crc_la_LIBTOOLFLAGS = --tag=CC
 libcommon_la_SOURCES = 
 libcommon_la_LIBADD = $(LIBCOMMON_DEPS) libcommon_api.la
@@ -7503,9 +7571,9 @@ libmsg_la_SOURCES = msg/Message.cc msg/Messenger.cc msg/msg_types.cc \
        msg/simple/SimpleMessenger.cc msg/async/AsyncConnection.cc \
        msg/async/AsyncMessenger.cc msg/async/Event.cc \
        msg/async/net_handler.cc msg/async/EventSelect.cc \
-       $(am__append_81) $(am__append_82) $(am__append_83) \
-       $(am__append_84) $(am__append_85) $(am__append_86) \
-       $(am__append_87)
+       $(am__append_79) $(am__append_80) $(am__append_81) \
+       $(am__append_82) $(am__append_83) $(am__append_84) \
+       $(am__append_85)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@rados_includedir = $(includedir)/rados
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@rados_include_DATA = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(srcdir)/include/rados/librados.h \
@@ -7548,12 +7616,12 @@ libmsg_la_SOURCES = msg/Message.cc msg/Messenger.cc msg/msg_types.cc \
 # We need this to avoid basename conflicts with the librados build tests in test/Makefile.am
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@librados_la_CXXFLAGS =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ${AM_CXXFLAGS} \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__append_92)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__append_89)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@librados_la_LIBADD = $(LIBRADOS_DEPS) $(PTHREAD_LIBS) $(CRYPTO_LIBS) $(EXTRALIBS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@librados_la_LDFLAGS =  \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  ${AM_LDFLAGS} \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  -version-info 2:0:0 \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__append_93)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  $(am__append_90)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@libradosstriper_la_SOURCES = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  libradosstriper/libradosstriper.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  libradosstriper/RadosStriperImpl.cc \
@@ -7562,12 +7630,12 @@ libmsg_la_SOURCES = msg/Message.cc msg/Messenger.cc msg/msg_types.cc \
 
 # We need this to avoid basename conflicts with the libradosstriper build tests in test/Makefile.am
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@libradosstriper_la_CXXFLAGS = ${AM_CXXFLAGS}
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@LIBRADOSSTRIPER_DEPS = $(LIBRADOS_DEPS)
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@libradosstriper_la_LIBADD = $(LIBRADOSSTRIPER_DEPS)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@LIBRADOSSTRIPER_DEPS = librados_internal.la libcls_lock_client.la $(LIBOSDC) $(LIBCOMMON)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@libradosstriper_la_LIBADD = $(LIBRADOSSTRIPER_DEPS) $(LIBRADOS)
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@libradosstriper_la_LDFLAGS = ${AM_LDFLAGS} \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  -version-info \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  1:0:0 \
-@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(am__append_96)
+@ENABLE_CLIENT_TRUE@@WITH_RADOSSTRIPER_TRUE@@WITH_RADOS_TRUE@  $(am__append_93)
 librbd_types_la_SOURCES = \
        librbd/WatchNotifyTypes.cc
 
@@ -7593,21 +7661,18 @@ librbd_types_la_SOURCES = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_la_SOURCES = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd/librbd.cc
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_la_LIBADD = librbd_internal.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD_TYPES) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBCOMMON) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBOSDC) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_la_LIBADD = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_internal.la $(LIBRBD_TYPES) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) $(LIBCOMMON) $(LIBOSDC) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librados_internal.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_rbd_client.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_lock_client.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(PTHREAD_LIBS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(EXTRALIBS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_100)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(PTHREAD_LIBS) $(EXTRALIBS)
+
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_la_LDFLAGS = ${AM_LDFLAGS} \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   -version-info \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   1:0:0 \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_101)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_97)
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_la_CXXFLAGS = -fvisibility=hidden -fvisibility-inlines-hidden
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@librgw_la_SOURCES = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOSGW_TRUE@@WITH_RADOS_TRUE@       rgw/librgw.cc \
@@ -7759,25 +7824,34 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@libcls_kvs_la_SOURCES = key_value_store/cls_kvs.cc
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@libcls_kvs_la_LIBADD = $(PTHREAD_LIBS) $(EXTRALIBS)
 @ENABLE_SERVER_TRUE@@LINUX_TRUE@@WITH_OSD_TRUE@libcls_kvs_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared -export-symbols-regex '.*__cls_.*'
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_replay_types_la_SOURCES = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/ActionTypes.cc
+
 
 # librbd_replay_la exists only to help with unit tests
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_replay_la_SOURCES = rbd_replay/actions.cc \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Deser.cc \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_replay_la_SOURCES = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/actions.cc \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/BufferReader.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/ImageNameMap.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/PendingIO.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/rbd_loc.cc \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Replayer.cc \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Ser.cc
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/Replayer.cc
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_replay_la_LIBADD = $(LIBRBD) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_replay_la_LIBADD = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(CEPH_GLOBAL)
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_SOURCES = rbd_replay/rbd-replay.cc
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_LDADD = $(LIBRBD) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_SOURCES = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/rbd-replay.cc
+
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_LDADD = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_types.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(CEPH_GLOBAL) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay.la
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBCOMMON)
 
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_replay_ios_la_SOURCES = rbd_replay/ios.cc
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@librbd_replay_ios_la_LIBADD = $(LIBRBD) \
@@ -7785,12 +7859,17 @@ librbd_types_la_SOURCES = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(CEPH_GLOBAL) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay.la
 
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_prep_SOURCES = rbd_replay/rbd-replay-prep.cc
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_prep_LDADD = $(LIBRBD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(CEPH_GLOBAL) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_prep_SOURCES = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   rbd_replay/rbd-replay-prep.cc
+
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@rbd_replay_prep_LDADD = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay.la \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_ios.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_replay_types.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(CEPH_GLOBAL) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBCOMMON) \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   -lbabeltrace \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   -lbabeltrace-ctf \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   -lboost_date_time
@@ -7803,7 +7882,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(BOOST_PROGRAM_OPTIONS_LIBS) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_122)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_119)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@ceph_erasure_code_non_regression_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/ceph_erasure_code_non_regression.cc
 
@@ -7811,7 +7890,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(BOOST_PROGRAM_OPTIONS_LIBS) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_124)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_121)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@ceph_erasure_code_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/ceph_erasure_code.cc
 
@@ -7819,7 +7898,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(BOOST_PROGRAM_OPTIONS_LIBS) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_126)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_123)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@libec_example_la_SOURCES = test/erasure-code/ErasureCodePluginExample.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@libec_example_la_CFLAGS = ${AM_CFLAGS}
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@libec_example_la_CXXFLAGS = ${AM_CXXFLAGS}
@@ -7879,7 +7958,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_128)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_125)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    erasure-code/ErasureCode.cc \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/TestErasureCode.cc
@@ -7902,7 +7981,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_130)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_127)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_plugin_jerasure_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/TestErasureCodePluginJerasure.cc
 
@@ -7911,7 +7990,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_131)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_128)
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_isa_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       erasure-code/ErasureCode.cc \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       test/erasure-code/TestErasureCodeIsa.cc
@@ -7923,7 +8002,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(CEPH_GLOBAL) \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       .libs/libec_isa.la \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(LIBERASURE_CODE) \
-@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__append_132)
+@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__append_129)
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_plugin_isa_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       erasure-code/ErasureCode.cc \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       test/erasure-code/TestErasureCodePluginIsa.cc
@@ -7935,7 +8014,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(CEPH_GLOBAL) \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       .libs/libec_isa.la \
 @ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(LIBERASURE_CODE) \
-@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__append_134)
+@ENABLE_SERVER_TRUE@@WITH_BETTER_YASM_ELF64_TRUE@@WITH_OSD_TRUE@       $(am__append_131)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_lrc_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/TestErasureCodeLrc.cc \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ${lrc_sources}
@@ -7945,7 +8024,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_135)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_132)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_plugin_lrc_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/TestErasureCodePluginLrc.cc
 
@@ -7954,7 +8033,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_137)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_134)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_shec_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/TestErasureCodeShec.cc \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ${libec_shec_la_SOURCES}
@@ -7965,7 +8044,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_138)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_135)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_shec_all_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/TestErasureCodeShec_all.cc \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ${libec_shec_la_SOURCES}
@@ -7976,7 +8055,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_139)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_136)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_shec_thread_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/TestErasureCodeShec_thread.cc \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    ${libec_shec_la_SOURCES}
@@ -7987,7 +8066,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_140)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_137)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_erasure_code_example_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    erasure-code/ErasureCode.cc \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    test/erasure-code/TestErasureCodeExample.cc
@@ -8005,7 +8084,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(CEPH_GLOBAL) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(PTHREAD_LIBS) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(EXTRALIBS) \
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__append_142)
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__append_139)
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@simple_client_SOURCES = \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  test/messenger/simple_client.cc \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  test/messenger/simple_dispatcher.cc
@@ -8017,7 +8096,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(CEPH_GLOBAL) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(PTHREAD_LIBS) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(EXTRALIBS) \
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__append_143)
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__append_140)
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@xio_server_SOURCES = \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  test/messenger/xio_server.cc \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  test/messenger/xio_dispatcher.cc
@@ -8029,7 +8108,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(PTHREAD_LIBS) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(EXTRALIBS) \
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__append_145)
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__append_142)
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@xio_client_SOURCES = \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  test/messenger/xio_client.cc \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  test/messenger/xio_dispatcher.cc
@@ -8041,7 +8120,7 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(LIBCOMMON) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(PTHREAD_LIBS) \
 @ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(EXTRALIBS) \
-@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__append_146)
+@ENABLE_SERVER_TRUE@@ENABLE_XIO_TRUE@  $(am__append_143)
 
 # This should use LIBMDS_TYPES once it exists
 @ENABLE_CLIENT_TRUE@ceph_dencoder_SOURCES = \
@@ -8059,9 +8138,9 @@ librbd_types_la_SOURCES = \
 
 # These should always use explicit _CFLAGS/_CXXFLAGS so avoid basename conflicts
 @ENABLE_CLIENT_TRUE@ceph_dencoder_CFLAGS = ${AM_CFLAGS} \
-@ENABLE_CLIENT_TRUE@   $(am__append_147)
+@ENABLE_CLIENT_TRUE@   $(am__append_144)
 @ENABLE_CLIENT_TRUE@ceph_dencoder_CXXFLAGS = ${AM_CXXFLAGS} \
-@ENABLE_CLIENT_TRUE@   $(am__append_148)
+@ENABLE_CLIENT_TRUE@   $(am__append_145)
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@libradostest_la_SOURCES = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  test/librados/test.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@  test/librados/TestCase.cc
@@ -8273,48 +8352,32 @@ librbd_types_la_SOURCES = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@        test/librbd/test_main.cc
 
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@unittest_librbd_CXXFLAGS = $(UNITTEST_CXXFLAGS) -DTEST_LIBRBD_INTERNALS
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@unittest_librbd_LDADD = librbd_test.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_api.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_internal.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD_TYPES) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_rbd_client.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_lock_client.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librados_test_stub.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librados_internal.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBOSDC) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(UNITTEST_LDADD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(CEPH_GLOBAL) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(RADOS_TEST_LDADD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_161)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@unittest_librbd_LDADD = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_test.la librbd_api.la librbd_internal.la $(LIBRBD_TYPES) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_rbd_client.la libcls_lock_client.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librados_test_stub.la librados_internal.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBOSDC) $(UNITTEST_LDADD) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(CEPH_GLOBAL) $(RADOS_TEST_LDADD)
+
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_SOURCES = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@        test/librbd/test_main.cc
 
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_CXXFLAGS = $(UNITTEST_CXXFLAGS) -DTEST_LIBRBD_INTERNALS
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_LDADD = librbd_test.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_api.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_internal.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD_TYPES) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_rbd_client.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_lock_client.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librados_api.la \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS_DEPS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(UNITTEST_LDADD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(CEPH_GLOBAL) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(RADOS_TEST_LDADD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_162)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_LDADD = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librbd_test.la librbd_api.la librbd_internal.la $(LIBRBD_TYPES) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   libcls_rbd_client.la libcls_lock_client.la \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   librados_api.la $(LIBRADOS_DEPS) $(UNITTEST_LDADD) \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(CEPH_GLOBAL) $(RADOS_TEST_LDADD)
+
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_api_SOURCES = \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   test/librbd/test_support.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   test/librbd/test_librbd.cc \
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   test/librbd/test_main.cc
 
 @ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_api_CXXFLAGS = $(UNITTEST_CXXFLAGS)
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_api_LDADD =  \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRADOS) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBCOMMON) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(UNITTEST_LDADD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(RADOS_TEST_LDADD) \
-@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(am__append_163)
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_api_LDADD = \
+@ENABLE_CLIENT_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@   $(LIBRBD) $(LIBRADOS) $(LIBCOMMON) $(UNITTEST_LDADD) $(RADOS_TEST_LDADD)
+
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_fsx_SOURCES = test/librbd/fsx.cc
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@ceph_test_librbd_fsx_LDADD = \
 @ENABLE_CLIENT_TRUE@@LINUX_TRUE@@WITH_RADOS_TRUE@@WITH_RBD_TRUE@       $(LIBKRBD) $(LIBRBD) $(LIBRADOS) \
@@ -8569,13 +8632,13 @@ librbd_types_la_SOURCES = \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_osdscrub_LDADD =  \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBOSD) $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_180)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_174)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_pglog_SOURCES = test/osd/TestPGLog.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_pglog_CXXFLAGS = $(UNITTEST_CXXFLAGS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_pglog_LDADD = $(LIBOSD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(UNITTEST_LDADD) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_181)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_175)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_hitset_SOURCES = test/osd/hitset.cc
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_hitset_CXXFLAGS = $(UNITTEST_CXXFLAGS)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@unittest_hitset_LDADD = $(LIBOSD) $(UNITTEST_LDADD) $(CEPH_GLOBAL)
@@ -8834,7 +8897,7 @@ ceph_test_get_blkdev_size_LDADD = $(LIBCOMMON)
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(CEPH_GLOBAL) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(BOOST_PROGRAM_OPTIONS_LIBS) \
 @ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(LIBRADOS) \
-@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_193)
+@ENABLE_SERVER_TRUE@@WITH_OSD_TRUE@    $(am__append_187)
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@cephfs_journal_tool_SOURCES = \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       tools/cephfs/cephfs-journal-tool.cc \
 @ENABLE_CLIENT_TRUE@@ENABLE_SERVER_TRUE@@WITH_MDS_TRUE@@WITH_RADOS_TRUE@       tools/cephfs/JournalTool.cc \
@@ -8864,12 +8927,52 @@ ceph_psim_LDADD = $(CEPH_GLOBAL)
 @WITH_REST_BENCH_TRUE@ common/obj_bencher.cc # needs cleanup so \
 @WITH_REST_BENCH_TRUE@ it can go in libcommon.la
 @WITH_REST_BENCH_TRUE@rest_bench_LDADD = $(CEPH_GLOBAL) \
-@WITH_REST_BENCH_TRUE@ $(am__append_197) $(am__append_198)
+@WITH_REST_BENCH_TRUE@ $(am__append_191) $(am__append_192)
 @WITH_REST_BENCH_TRUE@@WITH_SYSTEM_LIBS3_FALSE@rest_bench_CXXFLAGS = ${AM_CXXFLAGS} -I$(top_srcdir)/src/libs3/inc
 ceph_conf_SOURCES = tools/ceph_conf.cc
 ceph_conf_LDADD = $(CEPH_GLOBAL) $(LIBCOMMON)
 ceph_authtool_SOURCES = tools/ceph_authtool.cc
 ceph_authtool_LDADD = $(CEPH_GLOBAL) $(LIBCOMMON)
+@WITH_LTTNG_TRUE@libosd_tp_la_SOURCES = \
+@WITH_LTTNG_TRUE@      tracing/oprequest.c \
+@WITH_LTTNG_TRUE@      tracing/osd.c \
+@WITH_LTTNG_TRUE@      tracing/pg.c
+
+@WITH_LTTNG_TRUE@nodist_libosd_tp_la_SOURCES = \
+@WITH_LTTNG_TRUE@      tracing/oprequest.h \
+@WITH_LTTNG_TRUE@      tracing/osd.h \
+@WITH_LTTNG_TRUE@      tracing/pg.h
+
+libosd_tp_la_LIBADD = -llttng-ust -ldl
+libosd_tp_la_CFLAGS = -I$(top_srcdir)/src/tracing -I$(top_srcdir)/src $(AM_CFLAGS) -fpic
+libosd_tp_la_LDFLAGS = -version-info 1:0:0
+@WITH_LTTNG_TRUE@librados_tp_la_SOURCES = \
+@WITH_LTTNG_TRUE@      tracing/librados.c
+
+@WITH_LTTNG_TRUE@nodist_librados_tp_la_SOURCES = \
+@WITH_LTTNG_TRUE@      tracing/librados.h
+
+librados_tp_la_LIBADD = -llttng-ust -ldl
+librados_tp_la_CFLAGS = -I$(top_srcdir)/src/tracing -I$(top_srcdir)/src $(AM_CFLAGS) -fpic
+librados_tp_la_LDFLAGS = -version-info 2:0:0
+@WITH_LTTNG_TRUE@librbd_tp_la_SOURCES = \
+@WITH_LTTNG_TRUE@      tracing/librbd.c
+
+@WITH_LTTNG_TRUE@nodist_librbd_tp_la_SOURCES = \
+@WITH_LTTNG_TRUE@      tracing/librbd.h
+
+librbd_tp_la_LIBADD = -llttng-ust -ldl
+librbd_tp_la_CFLAGS = -I$(top_srcdir)/src/tracing -I$(top_srcdir)/src $(AM_CFLAGS) -fpic
+librbd_tp_la_LDFLAGS = -version-info 1:0:0
+@WITH_LTTNG_TRUE@libos_tp_la_SOURCES = \
+@WITH_LTTNG_TRUE@      tracing/objectstore.c
+
+@WITH_LTTNG_TRUE@nodist_libos_tp_la_SOURCES = \
+@WITH_LTTNG_TRUE@      tracing/objectstore.h
+
+libos_tp_la_LIBADD = -llttng-ust -ldl
+libos_tp_la_CFLAGS = -I$(top_srcdir)/src/tracing -I$(top_srcdir)/src $(AM_CFLAGS) -fpic
+libos_tp_la_LDFLAGS = -version-info 1:0:0
 
 # subdirs
 
@@ -8884,7 +8987,7 @@ editpaths = sed \
        -e 's|@@GCOV_PREFIX_STRIP[@][@]|$(GCOV_PREFIX_STRIP)|g'
 
 shell_scripts = ceph-debugpack ceph-post-file ceph-crush-location \
-       $(am__append_219)
+       $(am__append_215)
 doc_DATA = $(srcdir)/sample.ceph.conf sample.fetch_config
 
 # various scripts
@@ -8907,12 +9010,12 @@ TESTS = \
 @WITH_LTTNG_TRUE@TESTS_ENVIRONMENT = LD_PRELOAD=liblttng-ust-fork.so; export LD_PRELOAD; echo "LD_PRELOAD=$${LD_PRELOAD}";
 
 # pybind
-python_PYTHON = $(am__append_202) $(am__append_205) $(am__append_209) \
-       $(am__append_214) $(am__append_218)
+python_PYTHON = $(am__append_198) $(am__append_201) $(am__append_205) \
+       $(am__append_210) $(am__append_214)
 @ENABLE_CLIENT_TRUE@bash_completiondir = $(sysconfdir)/bash_completion.d
 @ENABLE_CLIENT_TRUE@bash_completion_DATA =  \
 @ENABLE_CLIENT_TRUE@   $(srcdir)/bash_completion/ceph \
-@ENABLE_CLIENT_TRUE@   $(am__append_204) $(am__append_207)
+@ENABLE_CLIENT_TRUE@   $(am__append_200) $(am__append_203)
 @ENABLE_CLIENT_TRUE@ceph_syn_SOURCES = ceph_syn.cc \
 @ENABLE_CLIENT_TRUE@   client/SyntheticClient.cc # uses g_conf.. \
 @ENABLE_CLIENT_TRUE@   needs cleanup
@@ -8948,7 +9051,7 @@ python_PYTHON = $(am__append_202) $(am__append_205) $(am__append_209) \
 @ENABLE_CEPHFS_JAVA_TRUE@@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@libcephfs_jni_la_CPPFLAGS = $(JDK_CPPFLAGS) $(AM_CPPFLAGS)
 @ENABLE_CEPHFS_JAVA_TRUE@@ENABLE_CLIENT_TRUE@@WITH_CEPHFS_TRUE@@WITH_RADOS_TRUE@libcephfs_jni_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0
 @ENABLE_SERVER_TRUE@ceph_sbin_SCRIPTS = ceph-create-keys \
-@ENABLE_SERVER_TRUE@   $(am__append_224)
+@ENABLE_SERVER_TRUE@   $(am__append_220)
 @ENABLE_SERVER_TRUE@mount_ceph_SOURCES = mount/mount.ceph.c
 @ENABLE_SERVER_TRUE@mount_ceph_LDADD = $(LIBSECRET) $(LIBCOMMON)
 @ENABLE_SERVER_TRUE@@WITH_MON_TRUE@ceph_mon_SOURCES = ceph_mon.cc
@@ -8965,7 +9068,7 @@ all: $(BUILT_SOURCES) acconfig.h
 
 .SUFFIXES:
 .SUFFIXES: .S .c .cc .cpp .lo .log .o .obj .s .test .test$(EXEEXT) .trs
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/Makefile-env.am $(srcdir)/arch/Makefile.am $(srcdir)/auth/Makefile.am $(srcdir)/brag/Makefile.am $(srcdir)/crush/Makefile.am $(srcdir)/mon/Makefile.am $(srcdir)/mds/Makefile.am $(srcdir)/mds/Makefile-client.am $(srcdir)/mds/Makefile-server.am $(srcdir)/os/Makefile.am $(srcdir)/osd/Makefile.am $(srcdir)/erasure-code/Makefile.am $(srcdir)/erasure-code/jerasure/Makefile.am $(srcdir)/erasure-code/lrc/Makefile.am $(srcdir)/erasure-code/shec/Makefile.am $(srcdir)/erasure-code/isa/Makefile.am $(srcdir)/osdc/Makefile.am $(srcdir)/client/Makefile.am $(srcdir)/global/Makefile.am $(srcdir)/json_spirit/Makefile.am $(srcdir)/log/Makefile.am $(srcdir)/perfglue/Makefile.am $(srcdir)/common/Makefile.am $(srcdir)/msg/Makefile.am $(srcdir)/messages/Makefile.am $(srcdir)/include/Makefile.am $(srcdir)/librados/Makefile.am $(srcdir)/libradosstriper/Makefile.am $(srcdir)/librbd/Makefile.am $(srcdir)/rgw/Makefile.am $(srcdir)/cls/Makefile.am $(srcdir)/cls/Makefile-client.am $(srcdir)/cls/Makefile-server.am $(srcdir)/key_value_store/Makefile.am $(srcdir)/rbd_replay/Makefile.am $(srcdir)/test/Makefile.am $(srcdir)/test/erasure-code/Makefile.am $(srcdir)/test/messenger/Makefile.am $(srcdir)/test/Makefile-client.am $(srcdir)/test/Makefile-server.am $(srcdir)/tools/Makefile.am $(srcdir)/tools/Makefile-client.am $(srcdir)/tools/Makefile-server.am $(srcdir)/Makefile-rocksdb.am $(srcdir)/Makefile-client.am $(srcdir)/Makefile-server.am $(am__configure_deps)
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(srcdir)/Makefile-env.am $(srcdir)/arch/Makefile.am $(srcdir)/auth/Makefile.am $(srcdir)/brag/Makefile.am $(srcdir)/crush/Makefile.am $(srcdir)/mon/Makefile.am $(srcdir)/mds/Makefile.am $(srcdir)/mds/Makefile-client.am $(srcdir)/mds/Makefile-server.am $(srcdir)/os/Makefile.am $(srcdir)/osd/Makefile.am $(srcdir)/erasure-code/Makefile.am $(srcdir)/erasure-code/jerasure/Makefile.am $(srcdir)/erasure-code/lrc/Makefile.am $(srcdir)/erasure-code/shec/Makefile.am $(srcdir)/erasure-code/isa/Makefile.am $(srcdir)/osdc/Makefile.am $(srcdir)/client/Makefile.am $(srcdir)/global/Makefile.am $(srcdir)/json_spirit/Makefile.am $(srcdir)/log/Makefile.am $(srcdir)/perfglue/Makefile.am $(srcdir)/common/Makefile.am $(srcdir)/msg/Makefile.am $(srcdir)/messages/Makefile.am $(srcdir)/include/Makefile.am $(srcdir)/librados/Makefile.am $(srcdir)/libradosstriper/Makefile.am $(srcdir)/librbd/Makefile.am $(srcdir)/rgw/Makefile.am $(srcdir)/cls/Makefile.am $(srcdir)/cls/Makefile-client.am $(srcdir)/cls/Makefile-server.am $(srcdir)/key_value_store/Makefile.am $(srcdir)/rbd_replay/Makefile.am $(srcdir)/test/Makefile.am $(srcdir)/test/erasure-code/Makefile.am $(srcdir)/test/messenger/Makefile.am $(srcdir)/test/Makefile-client.am $(srcdir)/test/Makefile-server.am $(srcdir)/tools/Makefile.am $(srcdir)/tools/Makefile-client.am $(srcdir)/tools/Makefile-server.am $(srcdir)/Makefile-rocksdb.am $(srcdir)/tracing/Makefile.am $(srcdir)/Makefile-client.am $(srcdir)/Makefile-server.am $(am__configure_deps)
        @for dep in $?; do \
          case '$(am__configure_deps)' in \
            *$$dep*) \
@@ -8986,7 +9089,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
            echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
            cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
        esac;
-$(srcdir)/Makefile-env.am $(srcdir)/arch/Makefile.am $(srcdir)/auth/Makefile.am $(srcdir)/brag/Makefile.am $(srcdir)/crush/Makefile.am $(srcdir)/mon/Makefile.am $(srcdir)/mds/Makefile.am $(srcdir)/mds/Makefile-client.am $(srcdir)/mds/Makefile-server.am $(srcdir)/os/Makefile.am $(srcdir)/osd/Makefile.am $(srcdir)/erasure-code/Makefile.am $(srcdir)/erasure-code/jerasure/Makefile.am $(srcdir)/erasure-code/lrc/Makefile.am $(srcdir)/erasure-code/shec/Makefile.am $(srcdir)/erasure-code/isa/Makefile.am $(srcdir)/osdc/Makefile.am $(srcdir)/client/Makefile.am $(srcdir)/global/Makefile.am $(srcdir)/json_spirit/Makefile.am $(srcdir)/log/Makefile.am $(srcdir)/perfglue/Makefile.am $(srcdir)/common/Makefile.am $(srcdir)/msg/Makefile.am $(srcdir)/messages/Makefile.am $(srcdir)/include/Makefile.am $(srcdir)/librados/Makefile.am $(srcdir)/libradosstriper/Makefile.am $(srcdir)/librbd/Makefile.am $(srcdir)/rgw/Makefile.am $(srcdir)/cls/Makefile.am $(srcdir)/cls/Makefile-client.am $(srcdir)/cls/Makefile-server.am $(srcdir)/key_value_store/Makefile.am $(srcdir)/rbd_replay/Makefile.am $(srcdir)/test/Makefile.am $(srcdir)/test/erasure-code/Makefile.am $(srcdir)/test/messenger/Makefile.am $(srcdir)/test/Makefile-client.am $(srcdir)/test/Makefile-server.am $(srcdir)/tools/Makefile.am $(srcdir)/tools/Makefile-client.am $(srcdir)/tools/Makefile-server.am $(srcdir)/Makefile-rocksdb.am $(srcdir)/Makefile-client.am $(srcdir)/Makefile-server.am:
+$(srcdir)/Makefile-env.am $(srcdir)/arch/Makefile.am $(srcdir)/auth/Makefile.am $(srcdir)/brag/Makefile.am $(srcdir)/crush/Makefile.am $(srcdir)/mon/Makefile.am $(srcdir)/mds/Makefile.am $(srcdir)/mds/Makefile-client.am $(srcdir)/mds/Makefile-server.am $(srcdir)/os/Makefile.am $(srcdir)/osd/Makefile.am $(srcdir)/erasure-code/Makefile.am $(srcdir)/erasure-code/jerasure/Makefile.am $(srcdir)/erasure-code/lrc/Makefile.am $(srcdir)/erasure-code/shec/Makefile.am $(srcdir)/erasure-code/isa/Makefile.am $(srcdir)/osdc/Makefile.am $(srcdir)/client/Makefile.am $(srcdir)/global/Makefile.am $(srcdir)/json_spirit/Makefile.am $(srcdir)/log/Makefile.am $(srcdir)/perfglue/Makefile.am $(srcdir)/common/Makefile.am $(srcdir)/msg/Makefile.am $(srcdir)/messages/Makefile.am $(srcdir)/include/Makefile.am $(srcdir)/librados/Makefile.am $(srcdir)/libradosstriper/Makefile.am $(srcdir)/librbd/Makefile.am $(srcdir)/rgw/Makefile.am $(srcdir)/cls/Makefile.am $(srcdir)/cls/Makefile-client.am $(srcdir)/cls/Makefile-server.am $(srcdir)/key_value_store/Makefile.am $(srcdir)/rbd_replay/Makefile.am $(srcdir)/test/Makefile.am $(srcdir)/test/erasure-code/Makefile.am $(srcdir)/test/messenger/Makefile.am $(srcdir)/test/Makefile-client.am $(srcdir)/test/Makefile-server.am $(srcdir)/tools/Makefile.am $(srcdir)/tools/Makefile-client.am $(srcdir)/tools/Makefile-server.am $(srcdir)/Makefile-rocksdb.am $(srcdir)/tracing/Makefile.am $(srcdir)/Makefile-client.am $(srcdir)/Makefile-server.am:
 
 $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
        cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
@@ -9655,6 +9758,8 @@ common/Cycles.lo: common/$(am__dirstamp) \
        common/$(DEPDIR)/$(am__dirstamp)
 common/ContextCompletion.lo: common/$(am__dirstamp) \
        common/$(DEPDIR)/$(am__dirstamp)
+common/TracepointProvider.lo: common/$(am__dirstamp) \
+       common/$(DEPDIR)/$(am__dirstamp)
 common/blkdev.lo: common/$(am__dirstamp) \
        common/$(DEPDIR)/$(am__dirstamp)
 common/address_helper.lo: common/$(am__dirstamp) \
@@ -10492,6 +10597,17 @@ os/libos_rocksdb_la-RocksDBStore.lo: os/$(am__dirstamp) \
 
 libos_rocksdb.la: $(libos_rocksdb_la_OBJECTS) $(libos_rocksdb_la_DEPENDENCIES) $(EXTRA_libos_rocksdb_la_DEPENDENCIES) 
        $(AM_V_CXXLD)$(libos_rocksdb_la_LINK) $(am_libos_rocksdb_la_rpath) $(libos_rocksdb_la_OBJECTS) $(libos_rocksdb_la_LIBADD) $(LIBS)
+tracing/$(am__dirstamp):
+       @$(MKDIR_P) tracing
+       @: > tracing/$(am__dirstamp)
+tracing/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) tracing/$(DEPDIR)
+       @: > tracing/$(DEPDIR)/$(am__dirstamp)
+tracing/libos_tp_la-objectstore.lo: tracing/$(am__dirstamp) \
+       tracing/$(DEPDIR)/$(am__dirstamp)
+
+libos_tp.la: $(libos_tp_la_OBJECTS) $(libos_tp_la_DEPENDENCIES) $(EXTRA_libos_tp_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(libos_tp_la_LINK) $(am_libos_tp_la_rpath) $(libos_tp_la_OBJECTS) $(libos_tp_la_LIBADD) $(LIBS)
 os/libos_types_la-Transaction.lo: os/$(am__dirstamp) \
        os/$(DEPDIR)/$(am__dirstamp)
 
@@ -10539,6 +10655,15 @@ objclass/libosd_la-class_api.lo: objclass/$(am__dirstamp) \
 
 libosd.la: $(libosd_la_OBJECTS) $(libosd_la_DEPENDENCIES) $(EXTRA_libosd_la_DEPENDENCIES) 
        $(AM_V_CXXLD)$(libosd_la_LINK) $(am_libosd_la_rpath) $(libosd_la_OBJECTS) $(libosd_la_LIBADD) $(LIBS)
+tracing/libosd_tp_la-oprequest.lo: tracing/$(am__dirstamp) \
+       tracing/$(DEPDIR)/$(am__dirstamp)
+tracing/libosd_tp_la-osd.lo: tracing/$(am__dirstamp) \
+       tracing/$(DEPDIR)/$(am__dirstamp)
+tracing/libosd_tp_la-pg.lo: tracing/$(am__dirstamp) \
+       tracing/$(DEPDIR)/$(am__dirstamp)
+
+libosd_tp.la: $(libosd_tp_la_OBJECTS) $(libosd_tp_la_DEPENDENCIES) $(EXTRA_libosd_tp_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(libosd_tp_la_LINK) $(am_libosd_tp_la_rpath) $(libosd_tp_la_OBJECTS) $(libosd_tp_la_LIBADD) $(LIBS)
 osd/libosd_types_la-PGLog.lo: osd/$(am__dirstamp) \
        osd/$(DEPDIR)/$(am__dirstamp)
 osd/libosd_types_la-osd_types.lo: osd/$(am__dirstamp) \
@@ -10641,6 +10766,11 @@ test/librados_test_stub/TestWatchNotify.lo:  \
 
 librados_test_stub.la: $(librados_test_stub_la_OBJECTS) $(librados_test_stub_la_DEPENDENCIES) $(EXTRA_librados_test_stub_la_DEPENDENCIES) 
        $(AM_V_CXXLD)$(CXXLINK) $(am_librados_test_stub_la_rpath) $(librados_test_stub_la_OBJECTS) $(librados_test_stub_la_LIBADD) $(LIBS)
+tracing/librados_tp_la-librados.lo: tracing/$(am__dirstamp) \
+       tracing/$(DEPDIR)/$(am__dirstamp)
+
+librados_tp.la: $(librados_tp_la_OBJECTS) $(librados_tp_la_DEPENDENCIES) $(EXTRA_librados_tp_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(librados_tp_la_LINK) $(am_librados_tp_la_rpath) $(librados_tp_la_OBJECTS) $(librados_tp_la_LIBADD) $(LIBS)
 libradosstriper/$(am__dirstamp):
        @$(MKDIR_P) libradosstriper
        @: > libradosstriper/$(am__dirstamp)
@@ -10740,7 +10870,7 @@ rbd_replay/$(DEPDIR)/$(am__dirstamp):
        @: > rbd_replay/$(DEPDIR)/$(am__dirstamp)
 rbd_replay/actions.lo: rbd_replay/$(am__dirstamp) \
        rbd_replay/$(DEPDIR)/$(am__dirstamp)
-rbd_replay/Deser.lo: rbd_replay/$(am__dirstamp) \
+rbd_replay/BufferReader.lo: rbd_replay/$(am__dirstamp) \
        rbd_replay/$(DEPDIR)/$(am__dirstamp)
 rbd_replay/ImageNameMap.lo: rbd_replay/$(am__dirstamp) \
        rbd_replay/$(DEPDIR)/$(am__dirstamp)
@@ -10750,8 +10880,6 @@ rbd_replay/rbd_loc.lo: rbd_replay/$(am__dirstamp) \
        rbd_replay/$(DEPDIR)/$(am__dirstamp)
 rbd_replay/Replayer.lo: rbd_replay/$(am__dirstamp) \
        rbd_replay/$(DEPDIR)/$(am__dirstamp)
-rbd_replay/Ser.lo: rbd_replay/$(am__dirstamp) \
-       rbd_replay/$(DEPDIR)/$(am__dirstamp)
 
 librbd_replay.la: $(librbd_replay_la_OBJECTS) $(librbd_replay_la_DEPENDENCIES) $(EXTRA_librbd_replay_la_DEPENDENCIES) 
        $(AM_V_CXXLD)$(CXXLINK) $(am_librbd_replay_la_rpath) $(librbd_replay_la_OBJECTS) $(librbd_replay_la_LIBADD) $(LIBS)
@@ -10760,6 +10888,11 @@ rbd_replay/ios.lo: rbd_replay/$(am__dirstamp) \
 
 librbd_replay_ios.la: $(librbd_replay_ios_la_OBJECTS) $(librbd_replay_ios_la_DEPENDENCIES) $(EXTRA_librbd_replay_ios_la_DEPENDENCIES) 
        $(AM_V_CXXLD)$(CXXLINK) $(am_librbd_replay_ios_la_rpath) $(librbd_replay_ios_la_OBJECTS) $(librbd_replay_ios_la_LIBADD) $(LIBS)
+rbd_replay/ActionTypes.lo: rbd_replay/$(am__dirstamp) \
+       rbd_replay/$(DEPDIR)/$(am__dirstamp)
+
+librbd_replay_types.la: $(librbd_replay_types_la_OBJECTS) $(librbd_replay_types_la_DEPENDENCIES) $(EXTRA_librbd_replay_types_la_DEPENDENCIES) 
+       $(AM_V_CXXLD)$(CXXLINK) $(am_librbd_replay_types_la_rpath) $(librbd_replay_types_la_OBJECTS) $(librbd_replay_types_la_LIBADD) $(LIBS)
 test/librbd/$(am__dirstamp):
        @$(MKDIR_P) test/librbd
        @: > test/librbd/$(am__dirstamp)
@@ -10787,6 +10920,11 @@ test/librbd/librbd_test_la-test_ObjectMap.lo:  \
 
 librbd_test.la: $(librbd_test_la_OBJECTS) $(librbd_test_la_DEPENDENCIES) $(EXTRA_librbd_test_la_DEPENDENCIES) 
        $(AM_V_CXXLD)$(librbd_test_la_LINK) $(am_librbd_test_la_rpath) $(librbd_test_la_OBJECTS) $(librbd_test_la_LIBADD) $(LIBS)
+tracing/librbd_tp_la-librbd.lo: tracing/$(am__dirstamp) \
+       tracing/$(DEPDIR)/$(am__dirstamp)
+
+librbd_tp.la: $(librbd_tp_la_OBJECTS) $(librbd_tp_la_DEPENDENCIES) $(EXTRA_librbd_tp_la_DEPENDENCIES) 
+       $(AM_V_CCLD)$(librbd_tp_la_LINK) $(am_librbd_tp_la_rpath) $(librbd_tp_la_OBJECTS) $(librbd_tp_la_LIBADD) $(LIBS)
 librbd/WatchNotifyTypes.lo: librbd/$(am__dirstamp) \
        librbd/$(DEPDIR)/$(am__dirstamp)
 
@@ -13560,6 +13698,8 @@ mostlyclean-compile:
        -rm -f tools/*.$(OBJEXT)
        -rm -f tools/cephfs/*.$(OBJEXT)
        -rm -f tools/rados/*.$(OBJEXT)
+       -rm -f tracing/*.$(OBJEXT)
+       -rm -f tracing/*.lo
 
 distclean-compile:
        -rm -f *.tab.c
@@ -13656,6 +13796,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/Thread.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/Throttle.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/Timer.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/TracepointProvider.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/TrackedOp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/WorkQueue.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@common/$(DEPDIR)/addr_parsing.Plo@am__quote@
@@ -14149,11 +14290,11 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@perfglue/$(DEPDIR)/disabled_stubs.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@perfglue/$(DEPDIR)/heap_profiler.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@rbd_fuse/$(DEPDIR)/rbd-fuse.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/Deser.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/ActionTypes.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/BufferReader.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/ImageNameMap.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/PendingIO.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/Replayer.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/Ser.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/actions.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/ios.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@rbd_replay/$(DEPDIR)/rbd-replay-prep.Po@am__quote@
@@ -14524,6 +14665,12 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@tools/rados/$(DEPDIR)/rados_export.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@tools/rados/$(DEPDIR)/rados_import.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@tools/rados/$(DEPDIR)/rados_sync.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tracing/$(DEPDIR)/libos_tp_la-objectstore.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tracing/$(DEPDIR)/libosd_tp_la-oprequest.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tracing/$(DEPDIR)/libosd_tp_la-osd.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tracing/$(DEPDIR)/libosd_tp_la-pg.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tracing/$(DEPDIR)/librados_tp_la-librados.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@tracing/$(DEPDIR)/librbd_tp_la-librbd.Plo@am__quote@
 
 .S.o:
 @am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
@@ -15231,6 +15378,48 @@ erasure-code/jerasure/gf-complete/src/libec_shec_la-gf_w8.lo: erasure-code/jeras
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libec_shec_la_CFLAGS) $(CFLAGS) -c -o erasure-code/jerasure/gf-complete/src/libec_shec_la-gf_w8.lo `test -f 'erasure-code/jerasure/gf-complete/src/gf_w8.c' || echo '$(srcdir)/'`erasure-code/jerasure/gf-complete/src/gf_w8.c
 
+tracing/libos_tp_la-objectstore.lo: tracing/objectstore.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libos_tp_la_CFLAGS) $(CFLAGS) -MT tracing/libos_tp_la-objectstore.lo -MD -MP -MF tracing/$(DEPDIR)/libos_tp_la-objectstore.Tpo -c -o tracing/libos_tp_la-objectstore.lo `test -f 'tracing/objectstore.c' || echo '$(srcdir)/'`tracing/objectstore.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tracing/$(DEPDIR)/libos_tp_la-objectstore.Tpo tracing/$(DEPDIR)/libos_tp_la-objectstore.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tracing/objectstore.c' object='tracing/libos_tp_la-objectstore.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libos_tp_la_CFLAGS) $(CFLAGS) -c -o tracing/libos_tp_la-objectstore.lo `test -f 'tracing/objectstore.c' || echo '$(srcdir)/'`tracing/objectstore.c
+
+tracing/libosd_tp_la-oprequest.lo: tracing/oprequest.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libosd_tp_la_CFLAGS) $(CFLAGS) -MT tracing/libosd_tp_la-oprequest.lo -MD -MP -MF tracing/$(DEPDIR)/libosd_tp_la-oprequest.Tpo -c -o tracing/libosd_tp_la-oprequest.lo `test -f 'tracing/oprequest.c' || echo '$(srcdir)/'`tracing/oprequest.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tracing/$(DEPDIR)/libosd_tp_la-oprequest.Tpo tracing/$(DEPDIR)/libosd_tp_la-oprequest.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tracing/oprequest.c' object='tracing/libosd_tp_la-oprequest.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libosd_tp_la_CFLAGS) $(CFLAGS) -c -o tracing/libosd_tp_la-oprequest.lo `test -f 'tracing/oprequest.c' || echo '$(srcdir)/'`tracing/oprequest.c
+
+tracing/libosd_tp_la-osd.lo: tracing/osd.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libosd_tp_la_CFLAGS) $(CFLAGS) -MT tracing/libosd_tp_la-osd.lo -MD -MP -MF tracing/$(DEPDIR)/libosd_tp_la-osd.Tpo -c -o tracing/libosd_tp_la-osd.lo `test -f 'tracing/osd.c' || echo '$(srcdir)/'`tracing/osd.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tracing/$(DEPDIR)/libosd_tp_la-osd.Tpo tracing/$(DEPDIR)/libosd_tp_la-osd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tracing/osd.c' object='tracing/libosd_tp_la-osd.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libosd_tp_la_CFLAGS) $(CFLAGS) -c -o tracing/libosd_tp_la-osd.lo `test -f 'tracing/osd.c' || echo '$(srcdir)/'`tracing/osd.c
+
+tracing/libosd_tp_la-pg.lo: tracing/pg.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libosd_tp_la_CFLAGS) $(CFLAGS) -MT tracing/libosd_tp_la-pg.lo -MD -MP -MF tracing/$(DEPDIR)/libosd_tp_la-pg.Tpo -c -o tracing/libosd_tp_la-pg.lo `test -f 'tracing/pg.c' || echo '$(srcdir)/'`tracing/pg.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tracing/$(DEPDIR)/libosd_tp_la-pg.Tpo tracing/$(DEPDIR)/libosd_tp_la-pg.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tracing/pg.c' object='tracing/libosd_tp_la-pg.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libosd_tp_la_CFLAGS) $(CFLAGS) -c -o tracing/libosd_tp_la-pg.lo `test -f 'tracing/pg.c' || echo '$(srcdir)/'`tracing/pg.c
+
+tracing/librados_tp_la-librados.lo: tracing/librados.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librados_tp_la_CFLAGS) $(CFLAGS) -MT tracing/librados_tp_la-librados.lo -MD -MP -MF tracing/$(DEPDIR)/librados_tp_la-librados.Tpo -c -o tracing/librados_tp_la-librados.lo `test -f 'tracing/librados.c' || echo '$(srcdir)/'`tracing/librados.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tracing/$(DEPDIR)/librados_tp_la-librados.Tpo tracing/$(DEPDIR)/librados_tp_la-librados.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tracing/librados.c' object='tracing/librados_tp_la-librados.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librados_tp_la_CFLAGS) $(CFLAGS) -c -o tracing/librados_tp_la-librados.lo `test -f 'tracing/librados.c' || echo '$(srcdir)/'`tracing/librados.c
+
+tracing/librbd_tp_la-librbd.lo: tracing/librbd.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librbd_tp_la_CFLAGS) $(CFLAGS) -MT tracing/librbd_tp_la-librbd.lo -MD -MP -MF tracing/$(DEPDIR)/librbd_tp_la-librbd.Tpo -c -o tracing/librbd_tp_la-librbd.lo `test -f 'tracing/librbd.c' || echo '$(srcdir)/'`tracing/librbd.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) tracing/$(DEPDIR)/librbd_tp_la-librbd.Tpo tracing/$(DEPDIR)/librbd_tp_la-librbd.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='tracing/librbd.c' object='tracing/librbd_tp_la-librbd.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librbd_tp_la_CFLAGS) $(CFLAGS) -c -o tracing/librbd_tp_la-librbd.lo `test -f 'tracing/librbd.c' || echo '$(srcdir)/'`tracing/librbd.c
+
 mds/ceph_dencoder-locks.o: mds/locks.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ceph_dencoder_CFLAGS) $(CFLAGS) -MT mds/ceph_dencoder-locks.o -MD -MP -MF mds/$(DEPDIR)/ceph_dencoder-locks.Tpo -c -o mds/ceph_dencoder-locks.o `test -f 'mds/locks.c' || echo '$(srcdir)/'`mds/locks.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) mds/$(DEPDIR)/ceph_dencoder-locks.Tpo mds/$(DEPDIR)/ceph_dencoder-locks.Po
@@ -20955,6 +21144,7 @@ clean-libtool:
        -rm -rf test/libradosstriper/.libs test/libradosstriper/_libs
        -rm -rf test/librbd/.libs test/librbd/_libs
        -rm -rf test/system/.libs test/system/_libs
+       -rm -rf tracing/.libs tracing/_libs
 install-pythonPYTHON: $(python_PYTHON)
        @$(NORMAL_INSTALL)
        @list='$(python_PYTHON)'; dlist=; list2=; test -n "$(pythondir)" || list=; \
@@ -22390,6 +22580,8 @@ distclean-generic:
        -rm -f tools/cephfs/$(am__dirstamp)
        -rm -f tools/rados/$(DEPDIR)/$(am__dirstamp)
        -rm -f tools/rados/$(am__dirstamp)
+       -rm -f tracing/$(DEPDIR)/$(am__dirstamp)
+       -rm -f tracing/$(am__dirstamp)
 
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
@@ -22405,7 +22597,7 @@ clean-am: clean-binPROGRAMS clean-checkPROGRAMS \
        clean-sbinPROGRAMS clean-su_sbinPROGRAMS mostlyclean-am
 
 distclean: distclean-recursive
-       -rm -rf ./$(DEPDIR) arch/$(DEPDIR) auth/$(DEPDIR) auth/cephx/$(DEPDIR) auth/none/$(DEPDIR) auth/unknown/$(DEPDIR) civetweb/src/$(DEPDIR) client/$(DEPDIR) cls/hello/$(DEPDIR) cls/lock/$(DEPDIR) cls/log/$(DEPDIR) cls/rbd/$(DEPDIR) cls/refcount/$(DEPDIR) cls/replica_log/$(DEPDIR) cls/rgw/$(DEPDIR) cls/statelog/$(DEPDIR) cls/user/$(DEPDIR) cls/version/$(DEPDIR) common/$(DEPDIR) crush/$(DEPDIR) erasure-code/$(DEPDIR) erasure-code/isa/$(DEPDIR) erasure-code/isa/isa-l/erasure_code/$(DEPDIR) erasure-code/jerasure/$(DEPDIR) erasure-code/jerasure/gf-complete/src/$(DEPDIR) erasure-code/jerasure/gf-complete/src/neon/$(DEPDIR) erasure-code/jerasure/jerasure/src/$(DEPDIR) erasure-code/lrc/$(DEPDIR) erasure-code/shec/$(DEPDIR) global/$(DEPDIR) java/native/$(DEPDIR) json_spirit/$(DEPDIR) key_value_store/$(DEPDIR) librados/$(DEPDIR) libradosstriper/$(DEPDIR) librbd/$(DEPDIR) log/$(DEPDIR) mds/$(DEPDIR) mon/$(DEPDIR) mount/$(DEPDIR) msg/$(DEPDIR) msg/async/$(DEPDIR) msg/simple/$(DEPDIR) msg/xio/$(DEPDIR) objclass/$(DEPDIR) os/$(DEPDIR) osd/$(DEPDIR) osdc/$(DEPDIR) perfglue/$(DEPDIR) rbd_fuse/$(DEPDIR) rbd_replay/$(DEPDIR) rgw/$(DEPDIR) test/$(DEPDIR) test/ObjectMap/$(DEPDIR) test/bench/$(DEPDIR) test/cls_hello/$(DEPDIR) test/cls_lock/$(DEPDIR) test/cls_log/$(DEPDIR) test/cls_rbd/$(DEPDIR) test/cls_refcount/$(DEPDIR) test/cls_replica_log/$(DEPDIR) test/cls_rgw/$(DEPDIR) test/cls_statelog/$(DEPDIR) test/cls_version/$(DEPDIR) test/common/$(DEPDIR) test/crush/$(DEPDIR) test/encoding/$(DEPDIR) test/erasure-code/$(DEPDIR) test/filestore/$(DEPDIR) test/fs/$(DEPDIR) test/libcephfs/$(DEPDIR) test/librados/$(DEPDIR) test/librados_test_stub/$(DEPDIR) test/libradosstriper/$(DEPDIR) test/librbd/$(DEPDIR) test/mds/$(DEPDIR) test/messenger/$(DEPDIR) test/mon/$(DEPDIR) test/msgr/$(DEPDIR) test/objectstore/$(DEPDIR) test/os/$(DEPDIR) test/osd/$(DEPDIR) test/osdc/$(DEPDIR) test/rgw/$(DEPDIR) test/system/$(DEPDIR) tools/$(DEPDIR) tools/cephfs/$(DEPDIR) tools/rados/$(DEPDIR)
+       -rm -rf ./$(DEPDIR) arch/$(DEPDIR) auth/$(DEPDIR) auth/cephx/$(DEPDIR) auth/none/$(DEPDIR) auth/unknown/$(DEPDIR) civetweb/src/$(DEPDIR) client/$(DEPDIR) cls/hello/$(DEPDIR) cls/lock/$(DEPDIR) cls/log/$(DEPDIR) cls/rbd/$(DEPDIR) cls/refcount/$(DEPDIR) cls/replica_log/$(DEPDIR) cls/rgw/$(DEPDIR) cls/statelog/$(DEPDIR) cls/user/$(DEPDIR) cls/version/$(DEPDIR) common/$(DEPDIR) crush/$(DEPDIR) erasure-code/$(DEPDIR) erasure-code/isa/$(DEPDIR) erasure-code/isa/isa-l/erasure_code/$(DEPDIR) erasure-code/jerasure/$(DEPDIR) erasure-code/jerasure/gf-complete/src/$(DEPDIR) erasure-code/jerasure/gf-complete/src/neon/$(DEPDIR) erasure-code/jerasure/jerasure/src/$(DEPDIR) erasure-code/lrc/$(DEPDIR) erasure-code/shec/$(DEPDIR) global/$(DEPDIR) java/native/$(DEPDIR) json_spirit/$(DEPDIR) key_value_store/$(DEPDIR) librados/$(DEPDIR) libradosstriper/$(DEPDIR) librbd/$(DEPDIR) log/$(DEPDIR) mds/$(DEPDIR) mon/$(DEPDIR) mount/$(DEPDIR) msg/$(DEPDIR) msg/async/$(DEPDIR) msg/simple/$(DEPDIR) msg/xio/$(DEPDIR) objclass/$(DEPDIR) os/$(DEPDIR) osd/$(DEPDIR) osdc/$(DEPDIR) perfglue/$(DEPDIR) rbd_fuse/$(DEPDIR) rbd_replay/$(DEPDIR) rgw/$(DEPDIR) test/$(DEPDIR) test/ObjectMap/$(DEPDIR) test/bench/$(DEPDIR) test/cls_hello/$(DEPDIR) test/cls_lock/$(DEPDIR) test/cls_log/$(DEPDIR) test/cls_rbd/$(DEPDIR) test/cls_refcount/$(DEPDIR) test/cls_replica_log/$(DEPDIR) test/cls_rgw/$(DEPDIR) test/cls_statelog/$(DEPDIR) test/cls_version/$(DEPDIR) test/common/$(DEPDIR) test/crush/$(DEPDIR) test/encoding/$(DEPDIR) test/erasure-code/$(DEPDIR) test/filestore/$(DEPDIR) test/fs/$(DEPDIR) test/libcephfs/$(DEPDIR) test/librados/$(DEPDIR) test/librados_test_stub/$(DEPDIR) test/libradosstriper/$(DEPDIR) test/librbd/$(DEPDIR) test/mds/$(DEPDIR) test/messenger/$(DEPDIR) test/mon/$(DEPDIR) test/msgr/$(DEPDIR) test/objectstore/$(DEPDIR) test/os/$(DEPDIR) test/osd/$(DEPDIR) test/osdc/$(DEPDIR) test/rgw/$(DEPDIR) test/system/$(DEPDIR) tools/$(DEPDIR) tools/cephfs/$(DEPDIR) tools/rados/$(DEPDIR) tracing/$(DEPDIR)
        -rm -f Makefile
 distclean-am: clean-am distclean-compile distclean-generic \
        distclean-hdr distclean-tags
@@ -22461,7 +22653,7 @@ install-ps-am:
 installcheck-am:
 
 maintainer-clean: maintainer-clean-recursive
-       -rm -rf ./$(DEPDIR) arch/$(DEPDIR) auth/$(DEPDIR) auth/cephx/$(DEPDIR) auth/none/$(DEPDIR) auth/unknown/$(DEPDIR) civetweb/src/$(DEPDIR) client/$(DEPDIR) cls/hello/$(DEPDIR) cls/lock/$(DEPDIR) cls/log/$(DEPDIR) cls/rbd/$(DEPDIR) cls/refcount/$(DEPDIR) cls/replica_log/$(DEPDIR) cls/rgw/$(DEPDIR) cls/statelog/$(DEPDIR) cls/user/$(DEPDIR) cls/version/$(DEPDIR) common/$(DEPDIR) crush/$(DEPDIR) erasure-code/$(DEPDIR) erasure-code/isa/$(DEPDIR) erasure-code/isa/isa-l/erasure_code/$(DEPDIR) erasure-code/jerasure/$(DEPDIR) erasure-code/jerasure/gf-complete/src/$(DEPDIR) erasure-code/jerasure/gf-complete/src/neon/$(DEPDIR) erasure-code/jerasure/jerasure/src/$(DEPDIR) erasure-code/lrc/$(DEPDIR) erasure-code/shec/$(DEPDIR) global/$(DEPDIR) java/native/$(DEPDIR) json_spirit/$(DEPDIR) key_value_store/$(DEPDIR) librados/$(DEPDIR) libradosstriper/$(DEPDIR) librbd/$(DEPDIR) log/$(DEPDIR) mds/$(DEPDIR) mon/$(DEPDIR) mount/$(DEPDIR) msg/$(DEPDIR) msg/async/$(DEPDIR) msg/simple/$(DEPDIR) msg/xio/$(DEPDIR) objclass/$(DEPDIR) os/$(DEPDIR) osd/$(DEPDIR) osdc/$(DEPDIR) perfglue/$(DEPDIR) rbd_fuse/$(DEPDIR) rbd_replay/$(DEPDIR) rgw/$(DEPDIR) test/$(DEPDIR) test/ObjectMap/$(DEPDIR) test/bench/$(DEPDIR) test/cls_hello/$(DEPDIR) test/cls_lock/$(DEPDIR) test/cls_log/$(DEPDIR) test/cls_rbd/$(DEPDIR) test/cls_refcount/$(DEPDIR) test/cls_replica_log/$(DEPDIR) test/cls_rgw/$(DEPDIR) test/cls_statelog/$(DEPDIR) test/cls_version/$(DEPDIR) test/common/$(DEPDIR) test/crush/$(DEPDIR) test/encoding/$(DEPDIR) test/erasure-code/$(DEPDIR) test/filestore/$(DEPDIR) test/fs/$(DEPDIR) test/libcephfs/$(DEPDIR) test/librados/$(DEPDIR) test/librados_test_stub/$(DEPDIR) test/libradosstriper/$(DEPDIR) test/librbd/$(DEPDIR) test/mds/$(DEPDIR) test/messenger/$(DEPDIR) test/mon/$(DEPDIR) test/msgr/$(DEPDIR) test/objectstore/$(DEPDIR) test/os/$(DEPDIR) test/osd/$(DEPDIR) test/osdc/$(DEPDIR) test/rgw/$(DEPDIR) test/system/$(DEPDIR) tools/$(DEPDIR) tools/cephfs/$(DEPDIR) tools/rados/$(DEPDIR)
+       -rm -rf ./$(DEPDIR) arch/$(DEPDIR) auth/$(DEPDIR) auth/cephx/$(DEPDIR) auth/none/$(DEPDIR) auth/unknown/$(DEPDIR) civetweb/src/$(DEPDIR) client/$(DEPDIR) cls/hello/$(DEPDIR) cls/lock/$(DEPDIR) cls/log/$(DEPDIR) cls/rbd/$(DEPDIR) cls/refcount/$(DEPDIR) cls/replica_log/$(DEPDIR) cls/rgw/$(DEPDIR) cls/statelog/$(DEPDIR) cls/user/$(DEPDIR) cls/version/$(DEPDIR) common/$(DEPDIR) crush/$(DEPDIR) erasure-code/$(DEPDIR) erasure-code/isa/$(DEPDIR) erasure-code/isa/isa-l/erasure_code/$(DEPDIR) erasure-code/jerasure/$(DEPDIR) erasure-code/jerasure/gf-complete/src/$(DEPDIR) erasure-code/jerasure/gf-complete/src/neon/$(DEPDIR) erasure-code/jerasure/jerasure/src/$(DEPDIR) erasure-code/lrc/$(DEPDIR) erasure-code/shec/$(DEPDIR) global/$(DEPDIR) java/native/$(DEPDIR) json_spirit/$(DEPDIR) key_value_store/$(DEPDIR) librados/$(DEPDIR) libradosstriper/$(DEPDIR) librbd/$(DEPDIR) log/$(DEPDIR) mds/$(DEPDIR) mon/$(DEPDIR) mount/$(DEPDIR) msg/$(DEPDIR) msg/async/$(DEPDIR) msg/simple/$(DEPDIR) msg/xio/$(DEPDIR) objclass/$(DEPDIR) os/$(DEPDIR) osd/$(DEPDIR) osdc/$(DEPDIR) perfglue/$(DEPDIR) rbd_fuse/$(DEPDIR) rbd_replay/$(DEPDIR) rgw/$(DEPDIR) test/$(DEPDIR) test/ObjectMap/$(DEPDIR) test/bench/$(DEPDIR) test/cls_hello/$(DEPDIR) test/cls_lock/$(DEPDIR) test/cls_log/$(DEPDIR) test/cls_rbd/$(DEPDIR) test/cls_refcount/$(DEPDIR) test/cls_replica_log/$(DEPDIR) test/cls_rgw/$(DEPDIR) test/cls_statelog/$(DEPDIR) test/cls_version/$(DEPDIR) test/common/$(DEPDIR) test/crush/$(DEPDIR) test/encoding/$(DEPDIR) test/erasure-code/$(DEPDIR) test/filestore/$(DEPDIR) test/fs/$(DEPDIR) test/libcephfs/$(DEPDIR) test/librados/$(DEPDIR) test/librados_test_stub/$(DEPDIR) test/libradosstriper/$(DEPDIR) test/librbd/$(DEPDIR) test/mds/$(DEPDIR) test/messenger/$(DEPDIR) test/mon/$(DEPDIR) test/msgr/$(DEPDIR) test/objectstore/$(DEPDIR) test/os/$(DEPDIR) test/osd/$(DEPDIR) test/osdc/$(DEPDIR) test/rgw/$(DEPDIR) test/system/$(DEPDIR) tools/$(DEPDIR) tools/cephfs/$(DEPDIR) tools/rados/$(DEPDIR) tracing/$(DEPDIR)
        -rm -f Makefile
 maintainer-clean-am: distclean-am maintainer-clean-generic
 
@@ -22577,6 +22769,9 @@ docker-check:
 
 # target to build but not run the unit tests
 unittests:: $(check_PROGRAMS)
+
+@WITH_LTTNG_TRUE@tracing/%.h: tracing/%.tp
+@WITH_LTTNG_TRUE@      $(LTTNG_GEN_TP_PROG) $< -o tracing/$*.h
 $(shell_scripts): Makefile
 $(shell_scripts): %: %.in
        rm -f $@ $@.tmp
index c5d91d98bcac067ea759af0414d31c259d49b106..59416b6416f38cc96fc7767fa79c04734571c933 100644 (file)
@@ -97,7 +97,7 @@ int CephxServiceHandler::handle_request(bufferlist::iterator& indata, bufferlist
       bool should_enc_ticket = false;
 
       EntityAuth eauth;
-      if (key_server->get_auth(entity_name, eauth) < 0) {
+      if (! key_server->get_auth(entity_name, eauth)) {
        ret = -EPERM;
        break;
       }
@@ -183,8 +183,10 @@ int CephxServiceHandler::handle_request(bufferlist::iterator& indata, bufferlist
     {
       ldout(cct, 10) << "handle_request getting rotating secret for " << entity_name << dendl;
       build_cephx_response_header(cephx_header.request_type, 0, result_bl);
-      key_server->get_rotating_encrypted(entity_name, result_bl);
-      ret = 0;
+      if (!key_server->get_rotating_encrypted(entity_name, result_bl)) {
+        ret = -EPERM;
+        break;
+      }
     }
     break;
 
index 4a485201a4fe59c65b7e9da9210b2b0bcf3387e1..a32200cd3076bc84ede40d95f1a0803a2ae1b122 100755 (executable)
@@ -996,9 +996,9 @@ def get_free_partition_index(dev):
         'BYT;' not in lines):
         raise Error('parted output expected to contain one of ' +
                     'CHH; CYL; or BYT; : ' + lines)
-    if dev not in lines:
+    if os.path.realpath(dev) not in lines:
         raise Error('parted output expected to contain ' + dev + ': ' + lines)
-    _, partitions = lines.split(dev)
+    _, partitions = lines.split(os.path.realpath(dev))
     partition_numbers = extract_parted_partition_numbers(partitions)
     if partition_numbers:
         return max(partition_numbers) + 1
index 76168503d594c71b8ec4debeae32b18d69e48fc2..4d46639be86b098718c2603720d04634c6c3f5c6 100644 (file)
@@ -163,9 +163,7 @@ int main(int argc, const char **argv, const char *envp[]) {
       goto out_mc_start_failed;
 
     // start up network
-    messenger = Messenger::create(g_ceph_context, g_conf->ms_type,
-                                 entity_name_t::CLIENT(), "client",
-                                 getpid());
+    messenger = Messenger::create_client_messenger(g_ceph_context, "client");
     messenger->set_default_policy(Messenger::Policy::lossy_client(0, 0));
     messenger->set_policy(entity_name_t::TYPE_MDS,
                          Messenger::Policy::lossless_client(0, 0));
index 884b7edcf444eb04236f6a1f4245016f329e8624..18bc46c8689210118a6bf371c41f576bef4e7df1 100644 (file)
@@ -34,6 +34,7 @@ using namespace std;
 #include "msg/Messenger.h"
 
 #include "common/Timer.h"
+#include "common/TracepointProvider.h"
 #include "common/ceph_argparse.h"
 
 #include "global/global_init.h"
@@ -51,6 +52,15 @@ using namespace std;
 
 #define dout_subsys ceph_subsys_osd
 
+namespace {
+
+TracepointProvider::Traits osd_tracepoint_traits("libosd_tp.so",
+                                                 "osd_tracing");
+TracepointProvider::Traits os_tracepoint_traits("libos_tp.so",
+                                                "osd_objectstore_tracing");
+
+} // anonymous namespace
+
 OSD *osd = NULL;
 
 void handle_osd_signal(int signum)
@@ -412,11 +422,17 @@ int main(int argc, const char **argv)
     CEPH_FEATURE_MSG_AUTH |
     CEPH_FEATURE_OSD_ERASURE_CODES;
 
+  // All feature bits 0 - 34 should be present from dumpling v0.67 forward
   uint64_t osd_required =
     CEPH_FEATURE_UID |
     CEPH_FEATURE_PGID64 |
     CEPH_FEATURE_OSDENC |
-    CEPH_FEATURE_OSD_SNAPMAPPER;
+    CEPH_FEATURE_OSD_SNAPMAPPER |
+    CEPH_FEATURE_INDEP_PG_MAP |
+    CEPH_FEATURE_OSD_PACKED_RECOVERY |
+    CEPH_FEATURE_RECOVERY_RESERVATION |
+    CEPH_FEATURE_BACKFILL_RESERVATION |
+    CEPH_FEATURE_CHUNKY_SCRUB;
 
   ms_public->set_default_policy(Messenger::Policy::stateless_server(supported, 0));
   ms_public->set_policy_throttlers(entity_name_t::TYPE_CLIENT,
@@ -484,6 +500,9 @@ int main(int argc, const char **argv)
   global_init_daemonize(g_ceph_context, 0);
   common_init_finish(g_ceph_context);
 
+  TracepointProvider::initialize<osd_tracepoint_traits>(g_ceph_context);
+  TracepointProvider::initialize<os_tracepoint_traits>(g_ceph_context);
+
   MonClient mc(g_ceph_context);
   if (mc.build_initial_monmap() < 0)
     return -1;
index 71db206d785f7483d95f068116da2d391b7049c0..1d10fa2e62c9e8020f0123c794535bd3c4adf73f 100644 (file)
@@ -65,10 +65,8 @@ int main(int argc, const char **argv, char *envp[])
 
   cout << "ceph-syn: starting " << g_conf->num_client << " syn client(s)" << std::endl;
   for (int i=0; i<g_conf->num_client; i++) {
-      messengers[i] = Messenger::create(
-       g_ceph_context, g_conf->ms_type,
-       entity_name_t(entity_name_t::TYPE_CLIENT,-1), "synclient",
-       i * 1000000 + getpid());
+    messengers[i] = Messenger::create_client_messenger(g_ceph_context,
+                                                      "synclient");
     messengers[i]->bind(g_conf->public_addr);
     mclients[i] = new MonClient(g_ceph_context);
     mclients[i]->build_initial_monmap();
index db488e40fb62c7fc800f2260d196eea5263d9af2..980884a9f099b678785f39e0f23e4af3b91eba00 100644 (file)
@@ -423,54 +423,65 @@ int rgw_bucket_list(cls_method_context_t hctx, bufferlist *in, bufferlist *out)
   bufferlist bl;
 
   map<string, bufferlist> keys;
+  std::map<string, bufferlist>::iterator kiter;
   string start_key;
   encode_list_index_key(hctx, op.start_obj, &start_key);
-  rc = get_obj_vals(hctx, start_key, op.filter_prefix, op.num_entries + 1, &keys);
-  if (rc < 0)
-    return rc;
+  bool done = false;
+  uint32_t left_to_read = op.num_entries + 1;
 
-  std::map<string, struct rgw_bucket_dir_entry>& m = new_dir.m;
-  std::map<string, bufferlist>::iterator kiter = keys.begin();
-  uint32_t i;
+  do {
+    rc = get_obj_vals(hctx, start_key, op.filter_prefix, left_to_read, &keys);
+    if (rc < 0)
+      return rc;
 
-  bool done = false;
+    std::map<string, struct rgw_bucket_dir_entry>& m = new_dir.m;
 
-  for (i = 0; i < op.num_entries && kiter != keys.end(); ++i, ++kiter) {
-    struct rgw_bucket_dir_entry entry;
+    done = keys.empty();
 
-    if (!bi_is_objs_index(kiter->first)) {
-      done = true;
-      break;
-    }
+    for (kiter = keys.begin(); kiter != keys.end(); ++kiter) {
+      struct rgw_bucket_dir_entry entry;
 
-    bufferlist& entrybl = kiter->second;
-    bufferlist::iterator eiter = entrybl.begin();
-    try {
-      ::decode(entry, eiter);
-    } catch (buffer::error& err) {
-      CLS_LOG(1, "ERROR: rgw_bucket_list(): failed to decode entry, key=%s\n", kiter->first.c_str());
-      return -EINVAL;
-    }
+      if (!bi_is_objs_index(kiter->first)) {
+        done = true;
+        break;
+      }
 
-    cls_rgw_obj_key key;
-    uint64_t ver;
-    decode_list_index_key(kiter->first, &key, &ver);
+      bufferlist& entrybl = kiter->second;
+      bufferlist::iterator eiter = entrybl.begin();
+      try {
+        ::decode(entry, eiter);
+      } catch (buffer::error& err) {
+        CLS_LOG(1, "ERROR: rgw_bucket_list(): failed to decode entry, key=%s\n", kiter->first.c_str());
+        return -EINVAL;
+      }
 
-    if (!entry.is_valid()) {
-      CLS_LOG(20, "entry %s[%s] is not valid\n", key.name.c_str(), key.instance.c_str());
-      continue;
-    }
+      cls_rgw_obj_key key;
+      uint64_t ver;
+      decode_list_index_key(kiter->first, &key, &ver);
 
-    if (!op.list_versions && !entry.is_visible()) {
-      CLS_LOG(20, "entry %s[%s] is not visible\n", key.name.c_str(), key.instance.c_str());
-      continue;
-    }
-    m[kiter->first] = entry;
+      start_key = kiter->first;
+      CLS_LOG(20, "start_key=%s len=%d", start_key.c_str(), start_key.size());
 
-    CLS_LOG(20, "got entry %s[%s] m.size()=%d\n", key.name.c_str(), key.instance.c_str(), (int)m.size());
-  }
+      if (!entry.is_valid()) {
+        CLS_LOG(20, "entry %s[%s] is not valid\n", key.name.c_str(), key.instance.c_str());
+        continue;
+      }
+
+      if (!op.list_versions && !entry.is_visible()) {
+        CLS_LOG(20, "entry %s[%s] is not visible\n", key.name.c_str(), key.instance.c_str());
+        continue;
+      }
+      if (m.size() < op.num_entries) {
+        m[kiter->first] = entry;
+      }
+      left_to_read--;
+
+      CLS_LOG(20, "got entry %s[%s] m.size()=%d\n", key.name.c_str(), key.instance.c_str(), (int)m.size());
+    }
+  } while (left_to_read > 0 && !done);
 
-  ret.is_truncated = (kiter != keys.end() && !done);
+  ret.is_truncated = (left_to_read == 0) && /* we found more entries than we were requested, meaning response is truncated */
+                     !done;
 
   ::encode(ret, *out);
   return 0;
index 620e550003591eee840ee79d0e69dfe0b936efae..8fa29899c10f9debc8755950e6dce4c3b71a13da 100644 (file)
@@ -73,7 +73,8 @@ libcommon_internal_la_SOURCES = \
        common/module.c \
        common/Readahead.cc \
        common/Cycles.cc \
-       common/ContextCompletion.cc
+       common/ContextCompletion.cc \
+       common/TracepointProvider.cc
 
 if WITH_RBD
 libcommon_internal_la_SOURCES += \
@@ -234,7 +235,8 @@ noinst_HEADERS += \
        common/Initialize.h \
        common/ContextCompletion.h \
        common/bit_vector.hpp \
-       common/valgrind.h
+       common/valgrind.h \
+       common/TracepointProvider.h
 
 if ENABLE_XIO
 noinst_HEADERS += \
index 584e97bbd824772157b060b662d364fe0d53a03a..5f64da6afcc4d3e6ae041fc3bad459c1cc4242b8 100644 (file)
@@ -87,11 +87,11 @@ int Thread::kill(int signal)
 int Thread::try_create(size_t stacksize)
 {
   pthread_attr_t *thread_attr = NULL;
+  pthread_attr_t thread_attr_loc;
+  
   stacksize &= CEPH_PAGE_MASK;  // must be multiple of page
   if (stacksize) {
-    thread_attr = (pthread_attr_t*) malloc(sizeof(pthread_attr_t));
-    if (!thread_attr)
-      return -ENOMEM;
+    thread_attr = &thread_attr_loc;
     pthread_attr_init(thread_attr);
     pthread_attr_setstacksize(thread_attr, stacksize);
   }
@@ -113,8 +113,10 @@ int Thread::try_create(size_t stacksize)
   r = pthread_create(&thread_id, thread_attr, _entry_func, (void*)this);
   restore_sigset(&old_sigset);
 
-  if (thread_attr)
-    free(thread_attr);
+  if (thread_attr) {
+    pthread_attr_destroy(thread_attr); 
+  }
+
   return r;
 }
 
diff --git a/ceph/src/common/TracepointProvider.cc b/ceph/src/common/TracepointProvider.cc
new file mode 100644 (file)
index 0000000..7c3d453
--- /dev/null
@@ -0,0 +1,44 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "common/TracepointProvider.h"
+#include "common/config.h"
+
+TracepointProvider::TracepointProvider(CephContext *cct, const char *library,
+                                       const char *config_key)
+  : m_cct(cct), m_library(library), m_config_keys{config_key, NULL},
+    m_lock("TracepointProvider::m_lock"), m_enabled(false) {
+  m_cct->_conf->add_observer(this);
+  verify_config(m_cct->_conf);
+}
+
+TracepointProvider::~TracepointProvider() {
+  m_cct->_conf->remove_observer(this);
+}
+
+void TracepointProvider::handle_conf_change(
+    const struct md_config_t *conf, const std::set<std::string> &changed) {
+  if (changed.count(m_config_keys[0])) {
+    verify_config(conf);
+  }
+}
+
+void TracepointProvider::verify_config(const struct md_config_t *conf) {
+  Mutex::Locker locker(m_lock);
+  if (m_enabled) {
+    return;
+  }
+
+  char buf[10];
+  char *pbuf = buf;
+  if (conf->get_val(m_config_keys[0], &pbuf, sizeof(buf)) != 0 ||
+      strncmp(buf, "true", 5) != 0) {
+    return;
+  }
+
+  void *handle = dlopen(m_library.c_str(), RTLD_NOW);
+  if (handle != NULL) {
+    m_enabled = true;
+  }
+}
+
diff --git a/ceph/src/common/TracepointProvider.h b/ceph/src/common/TracepointProvider.h
new file mode 100644 (file)
index 0000000..e54a037
--- /dev/null
@@ -0,0 +1,83 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#ifndef CEPH_TRACEPOINT_PROVIDER_H
+#define CEPH_TRACEPOINT_PROVIDER_H
+
+#include "include/int_types.h"
+#include "common/ceph_context.h"
+#include "common/config_obs.h"
+#include "common/Mutex.h"
+#include <dlfcn.h>
+#include <set>
+#include <string>
+#include <boost/noncopyable.hpp>
+
+struct md_config_t;
+
+class TracepointProvider : public md_config_obs_t, boost::noncopyable {
+public:
+  struct Traits {
+    const char *library;
+    const char *config_key;
+
+    Traits(const char *library, const char *config_key)
+      : library(library), config_key(config_key) {
+    }
+  };
+
+  class Singleton {
+  public:
+    Singleton(CephContext *cct, const char *library, const char *config_key)
+      : tracepoint_provider(new TracepointProvider(cct, library, config_key)) {
+    }
+    ~Singleton() {
+      delete tracepoint_provider;
+    }
+
+    inline bool is_enabled() const {
+      return tracepoint_provider->m_enabled;
+    }
+  private:
+    TracepointProvider *tracepoint_provider;
+  };
+
+  template <const Traits &traits>
+  class TypedSingleton : public Singleton {
+  public:
+    TypedSingleton(CephContext *cct)
+      : Singleton(cct, traits.library, traits.config_key) {
+    }
+  };
+
+  TracepointProvider(CephContext *cct, const char *library,
+                     const char *config_key);
+  virtual ~TracepointProvider();
+
+  template <const Traits &traits>
+  static void initialize(CephContext *cct) {
+#if WITH_LTTNG
+    TypedSingleton<traits> *singleton;
+    cct->lookup_or_create_singleton_object(singleton, traits.library);
+#endif
+  }
+
+protected:
+  virtual const char** get_tracked_conf_keys() const {
+    return m_config_keys;
+  }
+  virtual void handle_conf_change(const struct md_config_t *conf,
+                                  const std::set <std::string> &changed);
+
+private:
+  CephContext *m_cct;
+  std::string m_library;
+  mutable const char* m_config_keys[2];
+
+  Mutex m_lock;
+  bool m_enabled;
+
+  void verify_config(const struct md_config_t *conf);
+};
+
+#endif // CEPH_TRACEPOINT_PROVIDER_H
index 300ae7d7d71800a66a95e5938e0dad9b5e35a1e9..7d453e6e25c35f56eef3cbdc48c07ef508cd45b9 100644 (file)
@@ -18,6 +18,7 @@
 #include "Mutex.h"
 #include "Cond.h"
 #include "Thread.h"
+#include "include/unordered_map.h"
 #include "common/config_obs.h"
 #include "common/HeartbeatMap.h"
 
@@ -305,6 +306,66 @@ public:
 
   };
 
+  template<typename T>
+  class PointerWQ : public WorkQueue_ {
+  public:
+    PointerWQ(string n, time_t ti, time_t sti, ThreadPool* p)
+      : WorkQueue_(n, ti, sti), m_pool(p) {
+      m_pool->add_work_queue(this);
+    }
+    ~PointerWQ() {
+      m_pool->remove_work_queue(this);
+    }
+    void drain() {
+      m_pool->drain(this);
+    }
+    void queue(T *item) {
+      Mutex::Locker l(m_pool->_lock);
+      m_items.push_back(item);
+      m_pool->_cond.SignalOne();
+    }
+  protected:
+    virtual void _clear() {
+      assert(m_pool->_lock.is_locked());
+      m_items.clear();
+    }
+    virtual bool _empty() {
+      assert(m_pool->_lock.is_locked());
+      return m_items.empty();
+    }
+    virtual void *_void_dequeue() {
+      assert(m_pool->_lock.is_locked());
+      if (m_items.empty()) {
+        return NULL;
+      }
+
+      T *item = m_items.front();
+      m_items.pop_front();
+      return item;
+    }
+    virtual void _void_process(void *item, ThreadPool::TPHandle &handle) {
+      process(reinterpret_cast<T *>(item));
+    }
+    virtual void _void_process_finish(void *item) {
+    }
+
+    virtual void process(T *item) = 0;
+
+    T *front() {
+      assert(m_pool->_lock.is_locked());
+      if (m_items.empty()) {
+        return NULL;
+      }
+      return m_items.front();
+    }
+    void signal() {
+      Mutex::Locker pool_locker(m_pool->_lock);
+      m_pool->_cond.SignalOne();
+    }
+  private:
+    ThreadPool *m_pool;
+    std::list<T *> m_items;
+  };
 private:
   vector<WorkQueue_*> work_queues;
   int last_work_queue;
@@ -340,10 +401,12 @@ public:
   
   /// assign a work queue to this thread pool
   void add_work_queue(WorkQueue_* wq) {
+    Mutex::Locker l(_lock);
     work_queues.push_back(wq);
   }
   /// remove a work queue from this thread pool
   void remove_work_queue(WorkQueue_* wq) {
+    Mutex::Locker l(_lock);
     unsigned i = 0;
     while (work_queues[i] != wq)
       i++;
@@ -433,36 +496,46 @@ public:
   }
 };
 
-class ContextWQ : public ThreadPool::WorkQueueVal<std::pair<Context *, int> > {
+/// Work queue that asynchronously completes contexts (executes callbacks).
+/// @see Finisher
+class ContextWQ : public ThreadPool::PointerWQ<Context> {
 public:
   ContextWQ(const string &name, time_t ti, ThreadPool *tp)
-    : ThreadPool::WorkQueueVal<std::pair<Context *, int> >(name, ti, 0, tp) {}
+    : ThreadPool::PointerWQ<Context>(name, ti, 0, tp),
+      m_lock("ContextWQ::m_lock") {
+  }
 
   void queue(Context *ctx, int result = 0) {
-    ThreadPool::WorkQueueVal<std::pair<Context *, int> >::queue(
-      std::make_pair(ctx, result));
+    if (result != 0) {
+      Mutex::Locker locker(m_lock);
+      m_context_results[ctx] = result;
+    }
+    ThreadPool::PointerWQ<Context>::queue(ctx);
   }
-
 protected:
-  virtual void _enqueue(std::pair<Context *, int> item) {
-    _queue.push_back(item);
-  }
-  virtual void _enqueue_front(std::pair<Context *, int> item) {
-    _queue.push_front(item);
-  }
-  virtual bool _empty() {
-    return _queue.empty();
-  }
-  virtual std::pair<Context *, int> _dequeue() {
-    std::pair<Context *, int> item = _queue.front();
-    _queue.pop_front();
-    return item;
+  virtual void _clear() {
+    ThreadPool::PointerWQ<Context>::_clear();
+
+    Mutex::Locker locker(m_lock);
+    m_context_results.clear();
   }
-  virtual void _process(std::pair<Context *, int> item) {
-    item.first->complete(item.second);
+
+  virtual void process(Context *ctx) {
+    int result = 0;
+    {
+      Mutex::Locker locker(m_lock);
+      ceph::unordered_map<Context *, int>::iterator it =
+        m_context_results.find(ctx);
+      if (it != m_context_results.end()) {
+        result = it->second;
+        m_context_results.erase(it);
+      }
+    }
+    ctx->complete(result);
   }
 private:
-  list<std::pair<Context *, int> > _queue;
+  Mutex m_lock;
+  ceph::unordered_map<Context*, int> m_context_results;
 };
 
 class ShardedThreadPool {
index 502163bee5bd88c1e55e687cf588d25430efef69..1633196224f47175dc1ac080c9354f4f92373d8c 100644 (file)
@@ -1867,6 +1867,15 @@ __u32 buffer::list::crc32c(__u32 crc) const
   return crc;
 }
 
+void buffer::list::invalidate_crc()
+{
+  for (std::list<ptr>::const_iterator p = _buffers.begin(); p != _buffers.end(); ++p) {
+    raw *r = p->get_raw();
+    if (r) {
+      r->invalidate_crc();
+    }
+  }
+}
 
 /**
  * Binary write all contents to a C++ stream
index 50346edf2ace6a227b6f32fbf241a517db4d814c..dd1f488181285c814e37a03d2245fcb31e715472 100644 (file)
@@ -456,7 +456,7 @@ CephContext::~CephContext()
 {
   join_service_thread();
 
-  for (map<string, AssociatedSingletonObject*>::iterator it = _associated_objs.begin();
+  for (map<string, SingletonWrapper*>::iterator it = _associated_objs.begin();
        it != _associated_objs.end(); ++it)
     delete it->second;
 
index a9ffde04eb35b6eaf3481dc5e4624cbb37a0432d..1fc26687c3c857f1361f78cb5de044b8992bc9a6 100644 (file)
 #include <string>
 #include <set>
 
+#include "include/assert.h"
 #include "include/buffer.h"
 #include "include/atomic.h"
 #include "common/cmdparse.h"
 #include "include/Spinlock.h"
+#include <boost/noncopyable.hpp>
 
 class AdminSocket;
 class CephContextServiceThread;
@@ -61,10 +63,6 @@ private:
   ~CephContext();
   atomic_t nref;
 public:
-  class AssociatedSingletonObject {
-   public:
-    virtual ~AssociatedSingletonObject() {}
-  };
   CephContext *get() {
     nref.inc();
     return this;
@@ -117,9 +115,12 @@ public:
     ceph_spin_lock(&_associated_objs_lock);
     if (!_associated_objs.count(name)) {
       p = new T(this);
-      _associated_objs[name] = reinterpret_cast<AssociatedSingletonObject*>(p);
+      _associated_objs[name] = new TypedSingletonWrapper<T>(p);
     } else {
-      p = reinterpret_cast<T*>(_associated_objs[name]);
+      TypedSingletonWrapper<T> *wrapper =
+        dynamic_cast<TypedSingletonWrapper<T> *>(_associated_objs[name]);
+      assert(wrapper != NULL);
+      p = wrapper->singleton;
     }
     ceph_spin_unlock(&_associated_objs_lock);
   }
@@ -134,6 +135,21 @@ public:
                                          std::ostream *message);
 
 private:
+  struct SingletonWrapper : boost::noncopyable {
+    virtual ~SingletonWrapper() {}
+  };
+
+  template <typename T>
+  struct TypedSingletonWrapper : public SingletonWrapper {
+    TypedSingletonWrapper(T *p) : singleton(p) {
+    }
+    virtual ~TypedSingletonWrapper() {
+      delete singleton;
+    }
+
+    T *singleton;
+  };
+
   CephContext(const CephContext &rhs);
   CephContext &operator=(const CephContext &rhs);
 
@@ -167,7 +183,7 @@ private:
   ceph::HeartbeatMap *_heartbeat_map;
 
   ceph_spinlock_t _associated_objs_lock;
-  std::map<std::string, AssociatedSingletonObject*> _associated_objs;
+  std::map<std::string, SingletonWrapper*> _associated_objs;
 
   // crypto
   CryptoNone *_crypto_none;
index 95d3a4bbc18d20037b669f8227130b4ad5f92100..fd53899abbb277b2c166102a1c6ef0df284c427d 100644 (file)
@@ -578,7 +578,7 @@ OPTION(osd_snap_trim_thread_timeout, OPT_INT, 60*60*1)
 OPTION(osd_snap_trim_thread_suicide_timeout, OPT_INT, 60*60*10)
 OPTION(osd_snap_trim_sleep, OPT_FLOAT, 0)
 OPTION(osd_scrub_thread_timeout, OPT_INT, 60)
-OPTION(osd_scrub_thread_suicide_timeout, OPT_INT, 60)
+OPTION(osd_scrub_thread_suicide_timeout, OPT_INT, 300)
 OPTION(osd_scrub_finalize_thread_timeout, OPT_INT, 60*10)
 OPTION(osd_scrub_invalid_stats, OPT_BOOL, true)
 OPTION(osd_remove_thread_timeout, OPT_INT, 60*60)
@@ -623,6 +623,7 @@ OPTION(osd_scrub_end_hour, OPT_INT, 24)
 OPTION(osd_scrub_load_threshold, OPT_FLOAT, 0.5)
 OPTION(osd_scrub_min_interval, OPT_FLOAT, 60*60*24)    // if load is low
 OPTION(osd_scrub_max_interval, OPT_FLOAT, 7*60*60*24)  // regardless of load
+OPTION(osd_scrub_interval_randomize_ratio, OPT_FLOAT, 0.5) // randomize the scheduled scrub in the span of [min,min*(1+randomize_radio))
 OPTION(osd_scrub_chunk_min, OPT_INT, 5)
 OPTION(osd_scrub_chunk_max, OPT_INT, 25)
 OPTION(osd_scrub_sleep, OPT_FLOAT, 0)   // sleep between [deep]scrub ops
@@ -671,6 +672,7 @@ OPTION(osd_failsafe_full_ratio, OPT_FLOAT, .97) // what % full makes an OSD "ful
 OPTION(osd_failsafe_nearfull_ratio, OPT_FLOAT, .90) // what % full makes an OSD near full (failsafe)
 
 OPTION(osd_pg_object_context_cache_count, OPT_INT, 64)
+OPTION(osd_tracing, OPT_BOOL, false) // true if LTTng-UST tracepoints should be enabled
 
 // determines whether PGLog::check() compares written out log to stored log
 OPTION(osd_debug_pg_log_writeout, OPT_BOOL, false)
@@ -742,6 +744,7 @@ OPTION(osd_max_attr_name_len, OPT_U32, 100)    // max rados attr name len; canno
 OPTION(osd_max_attr_size, OPT_U64, 0)
 
 OPTION(osd_objectstore, OPT_STR, "filestore")  // ObjectStore backend type
+OPTION(osd_objectstore_tracing, OPT_BOOL, false) // true if LTTng-UST tracepoints should be enabled
 // Override maintaining compatibility with older OSDs
 // Set to true for testing.  Users should NOT set this.
 OPTION(osd_debug_override_acting_compat, OPT_BOOL, false)
@@ -814,7 +817,10 @@ OPTION(filestore_fadvise, OPT_BOOL, true)
 // data corruption in xfs prior to kernel 3.5.  filestore will
 // implicity disable this if it cannot confirm the kernel is newer
 // than that.
-OPTION(filestore_xfs_extsize, OPT_BOOL, true)
+// NOTE: This option involves a tradeoff: When disabled, fragmentation is
+// worse, but large sequential writes are faster. When enabled, large
+// sequential writes are slower, but fragmentation is reduced.
+OPTION(filestore_xfs_extsize, OPT_BOOL, false)
 
 OPTION(filestore_journal_parallel, OPT_BOOL, false)
 OPTION(filestore_journal_writeahead, OPT_BOOL, false)
@@ -870,6 +876,7 @@ OPTION(journal_discard, OPT_BOOL, false) //using ssd disk as journal, whether su
 
 OPTION(rados_mon_op_timeout, OPT_DOUBLE, 0) // how many seconds to wait for a response from the monitor before returning an error from a rados operation. 0 means on limit.
 OPTION(rados_osd_op_timeout, OPT_DOUBLE, 0) // how many seconds to wait for a response from osds before returning an error from a rados operation. 0 means no limit.
+OPTION(rados_tracing, OPT_BOOL, false) // true if LTTng-UST tracepoints should be enabled
 
 OPTION(rbd_op_threads, OPT_INT, 1)
 OPTION(rbd_op_thread_timeout, OPT_INT, 60)
@@ -894,6 +901,8 @@ OPTION(rbd_clone_copy_on_read, OPT_BOOL, false)
 OPTION(rbd_blacklist_on_break_lock, OPT_BOOL, true) // whether to blacklist clients whose lock was broken
 OPTION(rbd_blacklist_expire_seconds, OPT_INT, 0) // number of seconds to blacklist - set to 0 for OSD default
 OPTION(rbd_request_timed_out_seconds, OPT_INT, 30) // number of seconds before maint request times out
+OPTION(rbd_tracing, OPT_BOOL, false) // true if LTTng-UST tracepoints should be enabled
+OPTION(rbd_validate_pool, OPT_BOOL, true) // true if empty pools should be validated for RBD compatibility
 
 /*
  * The following options change the behavior for librbd's image creation methods that
@@ -923,6 +932,7 @@ OPTION(nss_db_path, OPT_STR, "") // path to nss db
 
 
 OPTION(rgw_max_chunk_size, OPT_INT, 512 * 1024)
+OPTION(rgw_max_put_size, OPT_U64, 5ULL*1024*1024*1024)
 
 /**
  * override max bucket index shards in zone configuration (if not zero)
index 81abe091417d204928bb8e21159020dead903beb..db4fd8f8c73a86ea23817e3faa770d76a7c23805 100644 (file)
@@ -154,7 +154,7 @@ void *ObjBencher::status_printer(void *_bencher) {
 int ObjBencher::aio_bench(
   int operation, int secondsToRun,
   int maxObjectsToCreate,
-  int concurrentios, int op_size, bool cleanup, const char* run_name) {
+  int concurrentios, int op_size, bool cleanup, const char* run_name, bool no_verify) {
 
   if (concurrentios <= 0) 
     return -EINVAL;
@@ -203,11 +203,11 @@ int ObjBencher::aio_bench(
     if (r != 0) goto out;
   }
   else if (OP_SEQ_READ == operation) {
-    r = seq_read_bench(secondsToRun, num_objects, concurrentios, prevPid);
+    r = seq_read_bench(secondsToRun, num_objects, concurrentios, prevPid, no_verify);
     if (r != 0) goto out;
   }
   else if (OP_RAND_READ == operation) {
-    r = rand_read_bench(secondsToRun, num_objects, concurrentios, prevPid);
+    r = rand_read_bench(secondsToRun, num_objects, concurrentios, prevPid, no_verify);
     if (r != 0) goto out;
   }
 
@@ -379,10 +379,12 @@ int ObjBencher::write_bench(int secondsToRun, int maxObjectsToCreate,
     }
     lock.Unlock();
     //create new contents and name on the heap, and fill them
-    newContents = new bufferlist();
     newName = generate_object_name(data.started);
-    snprintf(data.object_contents, data.object_size, "I'm the %16dth object!", data.started);
-    newContents->append(data.object_contents, data.object_size);
+    newContents = contents[slot];
+    snprintf(newContents->c_str(), data.object_size, "I'm the %16dth object!", data.started);
+    // we wrote to buffer, going around internal crc cache, so invalidate it now.
+    newContents->invalidate_crc();
+
     completion_wait(slot);
     lock.Lock();
     r = completion_ret(slot);
@@ -402,8 +404,7 @@ int ObjBencher::write_bench(int secondsToRun, int maxObjectsToCreate,
     release_completion(slot);
     timePassed = ceph_clock_now(cct) - data.start_time;
 
-    //write new stuff to backend, then delete old stuff
-    //and save locations of new stuff for later deletion
+    //write new stuff to backend
     start_times[slot] = ceph_clock_now(cct);
     r = create_completion(slot, _aio_cb, &lc);
     if (r < 0)
@@ -412,10 +413,7 @@ int ObjBencher::write_bench(int secondsToRun, int maxObjectsToCreate,
     if (r < 0) {//naughty; doesn't clean up heap space.
       goto ERR;
     }
-    delete contents[slot];
     name[slot] = newName;
-    contents[slot] = newContents;
-    newContents = 0;
     lock.Lock();
     ++data.started;
     ++data.in_flight;
@@ -442,6 +440,7 @@ int ObjBencher::write_bench(int secondsToRun, int maxObjectsToCreate,
     lock.Unlock();
     release_completion(slot);
     delete contents[slot];
+    contents[slot] = 0;
   }
 
   timePassed = ceph_clock_now(cct) - data.start_time;
@@ -478,6 +477,9 @@ int ObjBencher::write_bench(int secondsToRun, int maxObjectsToCreate,
   sync_write(run_name_meta, b_write, sizeof(int)*3);
 
   completions_done();
+  for (int i = 0; i < concurrentios; i++)
+      if (contents[i])
+          delete contents[i];
 
   return 0;
 
@@ -486,11 +488,13 @@ int ObjBencher::write_bench(int secondsToRun, int maxObjectsToCreate,
   data.done = 1;
   lock.Unlock();
   pthread_join(print_thread, NULL);
-  delete newContents;
-  return -5;
+  for (int i = 0; i < concurrentios; i++)
+      if (contents[i])
+          delete contents[i];
+  return r;
 }
 
-int ObjBencher::seq_read_bench(int seconds_to_run, int num_objects, int concurrentios, int pid) {
+int ObjBencher::seq_read_bench(int seconds_to_run, int num_objects, int concurrentios, int pid, bool no_verify) {
   lock_cond lc(&lock);
 
   if (concurrentios <= 0) 
@@ -572,32 +576,46 @@ int ObjBencher::seq_read_bench(int seconds_to_run, int num_objects, int concurre
       }
       lc.cond.Wait(lock);
     }
-    lock.Unlock();
-    newName = generate_object_name(data.started, pid);
+
+    // calculate latency here, so memcmp doesn't inflate it
+    data.cur_latency = ceph_clock_now(cct) - start_times[slot];
+
+    cur_contents = contents[slot];
     int current_index = index[slot];
+    
+    // invalidate internal crc cache
+    cur_contents->invalidate_crc();
+  
+    if (!no_verify) {
+      snprintf(data.object_contents, data.object_size, "I'm the %16dth object!", current_index);
+      if (memcmp(data.object_contents, cur_contents->c_str(), data.object_size) != 0) {
+        cerr << name[slot] << " is not correct!" << std::endl;
+        ++errors;
+      }
+    }
+
+    newName = generate_object_name(data.started, pid);
     index[slot] = data.started;
+    lock.Unlock();
     completion_wait(slot);
-    lock.Lock();
     r = completion_ret(slot);
     if (r < 0) {
       cerr << "read got " << r << std::endl;
       lock.Unlock();
       goto ERR;
     }
-    data.cur_latency = ceph_clock_now(cct) - start_times[slot];
+    lock.Lock();
     total_latency += data.cur_latency;
-    ifdata.cur_latency > data.max_latency) data.max_latency = data.cur_latency;
+    if (data.cur_latency > data.max_latency) data.max_latency = data.cur_latency;
     if (data.cur_latency < data.min_latency) data.min_latency = data.cur_latency;
     ++data.finished;
     data.avg_latency = total_latency / data.finished;
     --data.in_flight;
     lock.Unlock();
     release_completion(slot);
-    cur_contents = contents[slot];
 
     //start new read and check data if requested
     start_times[slot] = ceph_clock_now(cct);
-    contents[slot] = new bufferlist();
     create_completion(slot, _aio_cb, (void *)&lc);
     r = aio_read(newName, slot, contents[slot], data.object_size);
     if (r < 0) {
@@ -606,14 +624,15 @@ int ObjBencher::seq_read_bench(int seconds_to_run, int num_objects, int concurre
     lock.Lock();
     ++data.started;
     ++data.in_flight;
-    snprintf(data.object_contents, data.object_size, "I'm the %16dth object!", current_index);
-    lock.Unlock();
+      lock.Unlock();
     if (memcmp(data.object_contents, cur_contents->c_str(), data.object_size) != 0) {
       cerr << name[slot] << " is not correct!" << std::endl;
       ++errors;
+    } else {
+      lock.Unlock();
     }
+
     name[slot] = newName;
-    delete cur_contents;
   }
 
   //wait for final reads to complete
@@ -635,11 +654,15 @@ int ObjBencher::seq_read_bench(int seconds_to_run, int num_objects, int concurre
     data.avg_latency = total_latency / data.finished;
     --data.in_flight;
     release_completion(slot);
-    snprintf(data.object_contents, data.object_size, "I'm the %16dth object!", index[slot]);
-    lock.Unlock();
-    if (memcmp(data.object_contents, contents[slot]->c_str(), data.object_size) != 0) {
-      cerr << name[slot] << " is not correct!" << std::endl;
-      ++errors;
+    if (!no_verify) {
+      snprintf(data.object_contents, data.object_size, "I'm the %16dth object!", index[slot]);
+      lock.Unlock();
+      if (memcmp(data.object_contents, contents[slot]->c_str(), data.object_size) != 0) {
+        cerr << name[slot] << " is not correct!" << std::endl;
+        ++errors;
+      }
+    } else {
+      lock.Unlock();
     }
     delete contents[slot];
   }
@@ -677,7 +700,7 @@ int ObjBencher::seq_read_bench(int seconds_to_run, int num_objects, int concurre
   return -5;
 }
 
-int ObjBencher::rand_read_bench(int seconds_to_run, int num_objects, int concurrentios, int pid)
+int ObjBencher::rand_read_bench(int seconds_to_run, int num_objects, int concurrentios, int pid, bool no_verify)
 {
   lock_cond lc(&lock);
 
@@ -762,11 +785,14 @@ int ObjBencher::rand_read_bench(int seconds_to_run, int num_objects, int concurr
       }
       lc.cond.Wait(lock);
     }
+
+    // calculate latency here, so memcmp doesn't inflate it
+    data.cur_latency = ceph_clock_now(cct) - start_times[slot];
+
     lock.Unlock();
-    rand_id = rand() % num_objects;
-    newName = generate_object_name(rand_id, pid);
+
     int current_index = index[slot];
-    index[slot] = rand_id;
+    cur_contents = contents[slot];
     completion_wait(slot);
     lock.Lock();
     r = completion_ret(slot);
@@ -775,20 +801,33 @@ int ObjBencher::rand_read_bench(int seconds_to_run, int num_objects, int concurr
       lock.Unlock();
       goto ERR;
     }
-    data.cur_latency = ceph_clock_now(g_ceph_context) - start_times[slot];
+
     total_latency += data.cur_latency;
-    ifdata.cur_latency > data.max_latency) data.max_latency = data.cur_latency;
+    if (data.cur_latency > data.max_latency) data.max_latency = data.cur_latency;
     if (data.cur_latency < data.min_latency) data.min_latency = data.cur_latency;
     ++data.finished;
     data.avg_latency = total_latency / data.finished;
     --data.in_flight;
     lock.Unlock();
+    
+    if (!no_verify) {
+      snprintf(data.object_contents, data.object_size, "I'm the %16dth object!", current_index);
+      if (memcmp(data.object_contents, cur_contents->c_str(), data.object_size) != 0) {
+        cerr << name[slot] << " is not correct!" << std::endl;
+        ++errors;
+      }
+    } 
+
+    rand_id = rand() % num_objects;
+    newName = generate_object_name(rand_id, pid);
+    index[slot] = rand_id;
     release_completion(slot);
-    cur_contents = contents[slot];
+
+    // invalidate internal crc cache
+    cur_contents->invalidate_crc();
 
     //start new read and check data if requested
     start_times[slot] = ceph_clock_now(g_ceph_context);
-    contents[slot] = new bufferlist();
     create_completion(slot, _aio_cb, (void *)&lc);
     r = aio_read(newName, slot, contents[slot], data.object_size);
     if (r < 0) {
@@ -797,16 +836,11 @@ int ObjBencher::rand_read_bench(int seconds_to_run, int num_objects, int concurr
     lock.Lock();
     ++data.started;
     ++data.in_flight;
-    snprintf(data.object_contents, data.object_size, "I'm the %16dth object!", current_index);
     lock.Unlock();
-    if (memcmp(data.object_contents, cur_contents->c_str(), data.object_size) != 0) {
-      cerr << name[slot] << " is not correct!" << std::endl;
-      ++errors;
-    }
     name[slot] = newName;
-    delete cur_contents;
   }
 
+
   //wait for final reads to complete
   while (data.finished < data.started) {
     slot = data.finished % concurrentios;
@@ -826,12 +860,18 @@ int ObjBencher::rand_read_bench(int seconds_to_run, int num_objects, int concurr
     data.avg_latency = total_latency / data.finished;
     --data.in_flight;
     release_completion(slot);
-    snprintf(data.object_contents, data.object_size, "I'm the %16dth object!", index[slot]);
-    lock.Unlock();
-    if (memcmp(data.object_contents, contents[slot]->c_str(), data.object_size) != 0) {
-      cerr << name[slot] << " is not correct!" << std::endl;
-      ++errors;
+
+    if (!no_verify) {
+      snprintf(data.object_contents, data.object_size, "I'm the %16dth object!", index[slot]);
+      lock.Unlock();
+      if (memcmp(data.object_contents, contents[slot]->c_str(), data.object_size) != 0) {
+        cerr << name[slot] << " is not correct!" << std::endl;
+        ++errors;
+      }
+    } else {
+      lock.Unlock();
     }
+
     delete contents[slot];
   }
 
index 4d89f41255e6503f5180563c2960cab3409b1956..52b31571ff0c646d15e81da8d508572cfb4d4379 100644 (file)
@@ -65,8 +65,8 @@ protected:
   int fetch_bench_metadata(const std::string& metadata_file, int* object_size, int* num_objects, int* prevPid);
 
   int write_bench(int secondsToRun, int maxObjects, int concurrentios, const string& run_name_meta);
-  int seq_read_bench(int secondsToRun, int num_objects, int concurrentios, int writePid);
-  int rand_read_bench(int secondsToRun, int num_objects, int concurrentios, int writePid);
+  int seq_read_bench(int secondsToRun, int num_objects, int concurrentios, int writePid, bool no_verify);
+  int rand_read_bench(int secondsToRun, int num_objects, int concurrentios, int writePid, bool no_verify);
 
   int clean_up(int num_objects, int prevPid, int concurrentios);
   int clean_up_slow(const std::string& prefix, int concurrentios);
@@ -98,7 +98,7 @@ public:
   virtual ~ObjBencher() {}
   int aio_bench(
     int operation, int secondsToRun, int maxObjectsToCreate,
-    int concurrentios, int op_size, bool cleanup, const char* run_name);
+    int concurrentios, int op_size, bool cleanup, const char* run_name, bool no_verify=false);
   int clean_up(const char* prefix, int concurrentios, const char* run_name);
 
   void set_show_time(bool dt) {
index 5f5cc3cca32355701481fbfba72e006dad3d49fc..81e41712b9b38b5a713c3ad345a9bd65a08ed8c5 100644 (file)
@@ -47,6 +47,9 @@ std::string run_cmd(const char *cmd, ...)
   }
   else if (fret == 0) {
     // execvp doesn't modify its arguments, so the const-cast here is safe.
+    close(STDIN_FILENO);
+    close(STDOUT_FILENO);
+    close(STDERR_FILENO);
     execvp(cmd, (char * const*)&arr[0]);
     _exit(127);
   }
index b7eaea71e0ed5e8b9a5a4bfe2c415391eff3d6fa..8f45d04b3f6bad2fe4700e645317cfa5a627f721 100644 (file)
@@ -34,22 +34,25 @@ inline int sync_filesystem(int fd)
 #ifdef HAVE_SYS_SYNCFS
   if (syncfs(fd) == 0)
     return 0;
-  else
-    return -errno;
 #elif defined(SYS_syncfs)
   if (syscall(SYS_syncfs, fd) == 0)
     return 0;
-  else
-    return -errno;
 #elif defined(__NR_syncfs)
   if (syscall(__NR_syncfs, fd) == 0)
     return 0;
-  else
-    return -errno;
 #endif
 
+#if defined(HAVE_SYS_SYNCFS) || defined(SYS_syncfs) || defined(__NR_syncfs)
+  else if (errno == ENOSYS) {
+    sync();
+    return 0;
+  } else {
+    return -errno;
+  }
+#else
   sync();
   return 0;
+#endif
 }
 
 #endif
index 916790d74672d83af0d8fb701ff327506ed11ae6..22ee5b93dcab98c1816ac205d9a24286bea9759d 100644 (file)
@@ -841,7 +841,8 @@ int crush_do_rule(const struct crush_map *map,
                case CRUSH_RULE_TAKE:
                        if ((curstep->arg1 >= 0 &&
                             curstep->arg1 < map->max_devices) ||
-                           (-1-curstep->arg1 < map->max_buckets &&
+                           (-1-curstep->arg1 >= 0 &&
+                            -1-curstep->arg1 < map->max_buckets &&
                             map->buckets[-1-curstep->arg1])) {
                                w[0] = curstep->arg1;
                                wsize = 1;
@@ -894,6 +895,7 @@ int crush_do_rule(const struct crush_map *map,
                        osize = 0;
 
                        for (i = 0; i < wsize; i++) {
+                               int bno;
                                /*
                                 * see CRUSH_N, CRUSH_N_MINUS macros.
                                 * basically, numrep <= 0 means relative to
@@ -906,6 +908,13 @@ int crush_do_rule(const struct crush_map *map,
                                                continue;
                                }
                                j = 0;
+                               /* make sure bucket id is valid */
+                               bno = -1 - w[i];
+                               if (bno < 0 || bno >= map->max_buckets) {
+                                       // w[i] is probably CRUSH_ITEM_NONE
+                                       dprintk("  bad w[i] %d\n", w[i]);
+                                       continue;
+                               }
                                if (firstn) {
                                        int recurse_tries;
                                        if (choose_leaf_tries)
@@ -917,7 +926,7 @@ int crush_do_rule(const struct crush_map *map,
                                                recurse_tries = choose_tries;
                                        osize += crush_choose_firstn(
                                                map,
-                                               map->buckets[-1-w[i]],
+                                               map->buckets[bno],
                                                weight, weight_max,
                                                x, numrep,
                                                curstep->arg2,
@@ -936,7 +945,7 @@ int crush_do_rule(const struct crush_map *map,
                                                     numrep : (result_max-osize));
                                        crush_choose_indep(
                                                map,
-                                               map->buckets[-1-w[i]],
+                                               map->buckets[bno],
                                                weight, weight_max,
                                                x, out_size, numrep,
                                                curstep->arg2,
index d243d6e0535dd60b6e11123aef6b4fbf3913cd45..460896886bd19890b00177a0d4f674a8093a6ae8 100644 (file)
@@ -501,6 +501,7 @@ public:
     int write_fd(int fd) const;
     int write_fd_zero_copy(int fd) const;
     uint32_t crc32c(uint32_t crc) const;
+       void invalidate_crc();
   };
 
   /*
index d243d6e0535dd60b6e11123aef6b4fbf3913cd45..460896886bd19890b00177a0d4f674a8093a6ae8 100644 (file)
@@ -501,6 +501,7 @@ public:
     int write_fd(int fd) const;
     int write_fd_zero_copy(int fd) const;
     uint32_t crc32c(uint32_t crc) const;
+       void invalidate_crc();
   };
 
   /*
index 2ff98c7c21af3a6f55b9cb368f4f807362f57c51..f7acccaf39466e817ca04a04f52e278a95493f96 100644 (file)
@@ -117,6 +117,9 @@ dofsumount=0
 verbose=0
 use_default_conf=1
 
+## set variables like cluster or conf
+[ -e /etc/sysconfig/ceph ] && . /etc/sysconfig/ceph
+[ -e /etc/default/ceph ] && . /etc/default/ceph
 
 while echo $1 | grep -q '^-'; do     # FIXME: why not '^-'?
 case $1 in
@@ -303,10 +306,13 @@ for name in $what; do
            [ -n "$wrap" ] && runmode="-f &" && runarg="-f"
            [ -n "$max_open_files" ] && files="ulimit -n $max_open_files;"
 
+           [ -n "$TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES" ] && tcmalloc="TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES=$TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES"
+
            if [ -n "$SYSTEMD_RUN" ]; then
-               cmd="$SYSTEMD_RUN -r bash -c '$files $cmd --cluster $cluster -f'"
+                time=`date +%s.%N` 
+               cmd="$SYSTEMD_RUN --unit=ceph-$name.$time -r bash -c '$files $tcmalloc $cmd --cluster $cluster -f'"
            else
-               cmd="$files $wrap $cmd --cluster $cluster $runmode"
+               cmd="$files $tcmalloc $wrap $cmd --cluster $cluster $runmode"
            fi
 
            if [ $dofsmount -eq 1 ] && [ -n "$fs_devs" ]; then
index b7569a0aecc38f960e6f65d4c2a20896f9cb647f..d320231d9362d45793d0b4e42c55ca4d172ed4f9 100644 (file)
@@ -114,7 +114,7 @@ case "$1" in
        if [ $DEBIAN -eq 1 ]; then
             start-stop-daemon --stop --signal HUP -x $RADOSGW --oknodo
        else
-            killproc $RADOSGW -SIGHUP
+            killproc $RADOSGW -HUP
        fi
        ;;
     restart|force-reload)
index a9d682681f4360da0c275da7f06063bc2373465b..8650ed4cd3a5f71c5c019fec0cdef337842ec1a6 100755 (executable)
 # Description:       Ceph RBD Mapping
 ### END INIT INFO
 
-DESC="RBD Mapping:"
 RBDMAPFILE="/etc/ceph/rbdmap"
 
-. /lib/lsb/init-functions
+if [ -e /lib/lsb/init-functions ]; then
+    . /lib/lsb/init-functions
+fi
 
 do_map() {
        if [ ! -f "$RBDMAPFILE" ]; then
-               log_warning_msg "$DESC : No $RBDMAPFILE found."
+               logger -p "daemon.warning" -t init-rbdmap "No $RBDMAPFILE found."
                exit 0
        fi
 
@@ -42,37 +43,40 @@ do_map() {
                        DEV=rbd/$DEV
                        ;;
                esac
-               log_action_begin_msg "${DESC} '${DEV}'"
+               logger -p "daemon.debug" -t init-rbdmap "Mapping '${DEV}'"
                newrbd=""
                MAP_RV=""
-               RET_OP=0
                OIFS=$IFS
                IFS=','
+               CMDPARAMS=""
                for PARAM in ${PARAMS[@]}; do
                        CMDPARAMS="$CMDPARAMS --$(echo $PARAM | tr '=' ' ')"
                done
                IFS=$OIFS
-               if [ ! -b /dev/rbd/$DEV ]; then
-                       MAP_RV=$(rbd map $DEV $CMDPARAMS 2>&1)
+               if [ -b /dev/rbd/$DEV ]; then
+                       MAP_RV="$(readlink -f /dev/rbd/$DEV)"
+               else
+                       MAP_RV="$(rbd map $DEV $CMDPARAMS 2>&1)"
                        if [ $? -eq 0 ]; then
                            newrbd="yes"
                        else
                            RET=$((${RET}+$?))
-                           RET_OP=1
+                           logger -p "daemon.warning" -t init-rbdmap "Failed to map '${DEV}"
+                           continue
                        fi
                fi
-               log_action_end_msg ${RET_OP} "${MAP_RV}"
+               logger -p "daemon.debug" -t init-rbdmap "Mapped '${DEV}' to '${MAP_RV}'"
 
                if [ "$newrbd" ]; then
                        ## Mount new rbd
                        MNT_RV=""
                        mount --fake /dev/rbd/$DEV >>/dev/null 2>&1 \
                        && MNT_RV=$(mount -vn /dev/rbd/$DEV 2>&1)
-                       [ -n "${MNT_RV}" ] && log_action_msg "mount: ${MNT_RV}"
+                       [ -n "${MNT_RV}" ] && logger -p "daemon.debug" -t init-rbdmap "Mounted '${MAP_RV}' to '${MNT_RV}'"
 
                        ## post-mapping
                        if [ -x "/etc/ceph/rbd.d/${DEV}" ]; then
-                           log_action_msg "RBD Running post-map hook '/etc/ceph/rbd.d/${DEV}'"
+                           logger -p "daemon.debug" -t init-rbdmap "Running post-map hook '/etc/ceph/rbd.d/${DEV}'"
                            /etc/ceph/rbd.d/${DEV} map "/dev/rbd/${DEV}"
                        fi
                fi
@@ -91,35 +95,32 @@ do_unmap() {
                            LL="${L##/dev/rbd/}"
                            if [ "$(readlink -f $L)" = "${DEV}" ] \
                            && [ -x "/etc/ceph/rbd.d/${LL}" ]; then
-                               log_action_msg "RBD pre-unmap:  '${DEV}' hook '/etc/ceph/rbd.d/${LL}'"
+                               logger -p "daemon.debug" -t init-rbdmap "Running pre-unmap hook for '${DEV}': '/etc/ceph/rbd.d/${LL}'"
                                /etc/ceph/rbd.d/${LL} unmap "$L"
                                break
                            fi
                        done
 
-                       log_action_begin_msg "RBD un-mapping: '${DEV}'"
-                       UMNT_RV=""
-                       UMAP_RV=""
-                       RET_OP=0
+                       logger -p "daemon.debug" -t init-rbdmap "Unmapping '${DEV}'"
                        MNT=$(findmnt --mtab --source ${DEV} --noheadings | awk '{print $1'})
                        if [ -n "${MNT}" ]; then
-                           log_action_cont_msg "un-mounting '${MNT}'"
-                           UMNT_RV=$(umount "${MNT}" 2>&1)
+                           logger -p "daemon.debug" -t init-rbdmap "Unmounting '${MNT}'"
+                           umount "${MNT}" >>/dev/null 2>&1
                        fi
                        if mountpoint -q "${MNT}"; then
                            ## Un-mounting failed.
-                           RET_OP=1
+                           logger -p "daemon.warning" -t init-rbdmap "Failed to unmount '${MNT}'"
                            RET=$((${RET}+1))
-                       else
-                           ## Un-mapping.
-                           UMAP_RV=$(rbd unmap $DEV 2>&1)
-                           if [ $? -ne 0 ]; then
-                               RET=$((${RET}+$?))
-                               RET_OP=1
-                           fi
+                           continue
+                       fi
+                       ## Un-mapping.
+                       rbd unmap $DEV >>/dev/null 2>&1
+                       if [ $? -ne 0 ]; then
+                           logger -p "daemon.warning" -t init-rbdmap "Failed to unmap '${MNT}'"
+                           RET=$((${RET}+$?))
+                           continue
                        fi
-                       log_action_end_msg ${RET_OP} "${UMAP_RV}"
-                       [ -n "${UMNT_RV}" ] && log_action_msg "${UMNT_RV}"
+                       logger -p "daemon.debug" -t init-rbdmap "Unmapped '${DEV}'"
                done
        fi
        exit ${RET}
@@ -149,7 +150,7 @@ case "$1" in
        ;;
 
   *)
-       log_success_msg "Usage: rbdmap {start|stop|restart|force-reload|reload|status}"
+       echo "Usage: rbdmap {start|stop|restart|force-reload|reload|status}"
        exit 1
        ;;
 esac
index 3fb64fd67e631c629402a32993b550293b0d96d5..90f2f1dd316a72a6853e90e8f776fe5bfd22dfa3 100644 (file)
@@ -435,8 +435,7 @@ static int do_unmap(struct udev *udev, dev_t devno, const string& id)
          * libudev does not provide the "wait until the queue is empty"
          * API or the sufficient amount of primitives to build it from.
          */
-        string err = run_cmd("udevadm", "settle", "--timeout", "10", "--quiet",
-                             NULL);
+        string err = run_cmd("udevadm", "settle", "--timeout", "10", NULL);
         if (!err.empty())
           cerr << "rbd: " << err << std::endl;
       }
index e3281de27348422948caa28350c69d3c30b2c5b6..395b376cb4af3fc5fbaa48ceae78c6f46f5c41de 100644 (file)
@@ -34,9 +34,8 @@
 struct ceph_mount_info
 {
 public:
-  ceph_mount_info(uint64_t msgr_nonce_, CephContext *cct_)
-    : msgr_nonce(msgr_nonce_),
-      mounted(false),
+  ceph_mount_info(CephContext *cct_)
+    : mounted(false),
       inited(false),
       client(NULL),
       monclient(NULL),
@@ -77,7 +76,7 @@ public:
       goto fail;
 
     //network connection
-    messenger = Messenger::create(cct, cct->_conf->ms_type, entity_name_t::CLIENT(), "client", msgr_nonce);
+    messenger = Messenger::create_client_messenger(cct, "client");
 
     //at last the client
     ret = -CEPHFS_ERROR_NEW_CLIENT; //defined in libcephfs.h;
@@ -233,7 +232,6 @@ public:
   }
 
 private:
-  uint64_t msgr_nonce;
   bool mounted;
   bool inited;
   Client *client;
@@ -288,14 +286,7 @@ extern "C" const char *ceph_version(int *pmajor, int *pminor, int *ppatch)
 
 extern "C" int ceph_create_with_context(struct ceph_mount_info **cmount, CephContext *cct)
 {
-  uint64_t nonce = 0;
-
-  // 6 bytes of random and 2 bytes of pid
-  get_random_bytes((char*)&nonce, sizeof(nonce));
-  nonce &= ~0xffff;
-  nonce |= (uint64_t)getpid();
-
-  *cmount = new struct ceph_mount_info(nonce, cct);
+  *cmount = new struct ceph_mount_info(cct);
   return 0;
 }
 
index 103ffd8aad85b5254992655c79668491d7849bce..bf2c6da6906afb22b90c8a9f6e4d6d858082d0c0 100644 (file)
@@ -23,9 +23,6 @@ librados_la_CXXFLAGS = ${AM_CXXFLAGS}
 LIBRADOS_DEPS += \
        librados_internal.la libcls_lock_client.la \
        $(LIBOSDC) $(LIBCOMMON_DEPS)
-if WITH_LTTNG
-LIBRADOS_DEPS += $(LIBRADOS_TP)
-endif
 
 librados_la_LIBADD = $(LIBRADOS_DEPS) $(PTHREAD_LIBS) $(CRYPTO_LIBS) $(EXTRALIBS)
 librados_la_LDFLAGS = ${AM_LDFLAGS} -version-info 2:0:0
index 3886b1ebe01423b2c6480f9f99702fe0192a4dc5..a01ae7d45813603789c97fd38dec202d0c2c75f5 100644 (file)
@@ -52,8 +52,6 @@
 #undef dout_prefix
 #define dout_prefix *_dout << "librados: "
 
-static atomic_t rados_instance;
-
 bool librados::RadosClient::ms_get_authorizer(int dest_type,
                                              AuthAuthorizer **authorizer,
                                              bool force_new) {
@@ -191,7 +189,6 @@ int librados::RadosClient::connect()
   common_init_finish(cct);
 
   int err;
-  uint64_t nonce;
 
   // already connected?
   if (state == CONNECTING)
@@ -206,9 +203,7 @@ int librados::RadosClient::connect()
     goto out;
 
   err = -ENOMEM;
-  nonce = getpid() + (1000000 * (uint64_t)rados_instance.inc());
-  messenger = Messenger::create(cct, cct->_conf->ms_type, entity_name_t::CLIENT(-1),
-                               "radosclient", nonce);
+  messenger = Messenger::create_client_messenger(cct, "radosclient");
   if (!messenger)
     goto out;
 
index cbefe0b35d86afe36631e1643dcc62faa5cfa234..39598013e45c55235f0e5ef8751a211642d35c35 100644 (file)
@@ -18,6 +18,7 @@
 #include "common/errno.h"
 #include "common/ceph_argparse.h"
 #include "common/common_init.h"
+#include "common/TracepointProvider.h"
 #include "include/rados/librados.h"
 #include "include/rados/librados.hpp"
 #include "include/types.h"
 #include <stdexcept>
 
 #ifdef WITH_LTTNG
+#define TRACEPOINT_DEFINE
+#define TRACEPOINT_PROBE_DYNAMIC_LINKAGE
 #include "tracing/librados.h"
+#undef TRACEPOINT_PROBE_DYNAMIC_LINKAGE
+#undef TRACEPOINT_DEFINE
 #else
 #define tracepoint(...)
 #endif
@@ -57,6 +62,12 @@ using std::runtime_error;
 
 #define RADOS_LIST_MAX_ENTRIES 1024
 
+namespace {
+
+TracepointProvider::Traits tracepoint_traits("librados_tp.so", "rados_tracing");
+
+} // anonymous namespace
+
 /*
  * Structure of this file
  *
@@ -2167,10 +2178,9 @@ librados::ObjectOperation::~ObjectOperation()
 }
 
 ///////////////////////////// C API //////////////////////////////
-static
-int rados_create_common(rados_t *pcluster,
-                       const char * const clustername,
-                       CephInitParameters *iparams)
+
+static CephContext *rados_create_cct(const char * const clustername,
+                                     CephInitParameters *iparams)
 {
   // missing things compared to global_init:
   // g_ceph_context, g_conf, g_lockdep, signal handlers
@@ -2180,26 +2190,27 @@ int rados_create_common(rados_t *pcluster,
   cct->_conf->parse_env(); // environment variables override
   cct->_conf->apply_changes(NULL);
 
-  librados::RadosClient *radosp = new librados::RadosClient(cct);
-  *pcluster = (void *)radosp;
-
-  cct->put();
-  return 0;
+  TracepointProvider::initialize<tracepoint_traits>(cct);
+  return cct;
 }
 
 extern "C" int rados_create(rados_t *pcluster, const char * const id)
 {
-  tracepoint(librados, rados_create_enter, id);
   CephInitParameters iparams(CEPH_ENTITY_TYPE_CLIENT);
   if (id) {
     iparams.name.set(CEPH_ENTITY_TYPE_CLIENT, id);
   }
-  int retval = rados_create_common(pcluster, "ceph", &iparams);
-  tracepoint(librados, rados_create_exit, retval, *pcluster);
-  return retval;
+  CephContext *cct = rados_create_cct("ceph", &iparams);
+
+  tracepoint(librados, rados_create_enter, id);
+  *pcluster = reinterpret_cast<rados_t>(new librados::RadosClient(cct));
+  tracepoint(librados, rados_create_exit, 0, *pcluster);
+
+  cct->put();
+  return 0;
 }
 
-// as above, but 
+// as above, but
 // 1) don't assume 'client.'; name is a full type.id namestr
 // 2) allow setting clustername
 // 3) flags is for future expansion (maybe some of the global_init()
@@ -2208,16 +2219,21 @@ extern "C" int rados_create(rados_t *pcluster, const char * const id)
 extern "C" int rados_create2(rados_t *pcluster, const char *const clustername,
                             const char * const name, uint64_t flags)
 {
-  tracepoint(librados, rados_create2_enter, clustername, name, flags);
   // client is assumed, but from_str will override
+  int retval = 0;
   CephInitParameters iparams(CEPH_ENTITY_TYPE_CLIENT);
   if (!name || !iparams.name.from_str(name)) {
-    tracepoint(librados, rados_create2_exit, -EINVAL, *pcluster);
-    return -EINVAL;
+    retval = -EINVAL;
   }
 
-  int retval = rados_create_common(pcluster, clustername, &iparams);
+  CephContext *cct = rados_create_cct(clustername, &iparams);
+  tracepoint(librados, rados_create2_enter, clustername, name, flags);
+  if (retval == 0) {
+    *pcluster = reinterpret_cast<rados_t>(new librados::RadosClient(cct));
+  }
   tracepoint(librados, rados_create2_exit, retval, *pcluster);
+
+  cct->put();
   return retval;
 }
 
@@ -2227,8 +2243,10 @@ extern "C" int rados_create2(rados_t *pcluster, const char *const clustername,
  */
 extern "C" int rados_create_with_context(rados_t *pcluster, rados_config_t cct_)
 {
-  tracepoint(librados, rados_create_with_context_enter, cct_);
   CephContext *cct = (CephContext *)cct_;
+  TracepointProvider::initialize<tracepoint_traits>(cct);
+
+  tracepoint(librados, rados_create_with_context_enter, cct_);
   librados::RadosClient *radosp = new librados::RadosClient(cct);
   *pcluster = (void *)radosp;
   tracepoint(librados, rados_create_with_context_exit, 0, *pcluster);
index bd4c1d159550555d9af3ac3c8a84bd163033a85c..b98fa4a15f68944028ca51beea19e87b290f0681 100644 (file)
@@ -10,8 +10,8 @@ libradosstriper_la_SOURCES = \
 # We need this to avoid basename conflicts with the libradosstriper build tests in test/Makefile.am
 libradosstriper_la_CXXFLAGS = ${AM_CXXFLAGS}
 
-LIBRADOSSTRIPER_DEPS = $(LIBRADOS_DEPS)
-libradosstriper_la_LIBADD = $(LIBRADOSSTRIPER_DEPS)
+LIBRADOSSTRIPER_DEPS = librados_internal.la libcls_lock_client.la $(LIBOSDC) $(LIBCOMMON)
+libradosstriper_la_LIBADD = $(LIBRADOSSTRIPER_DEPS) $(LIBRADOS)
 libradosstriper_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0
 if LINUX
 libradosstriper_la_LDFLAGS += -export-symbols-regex '^radosstriper_.*'
index 8ddf96726a9171fed3dd15cd91f795b43d8e6020..ad4fd1a73fa9c986733c8ed5b5dfb15a0288d092 100644 (file)
@@ -245,11 +245,11 @@ void AsyncResizeRequest::send_update_header() {
 
   librados::ObjectWriteOperation op;
   if (m_image_ctx.old_format) {
-    // rewrite header
+    // rewrite only the size field of the header
+    // NOTE: format 1 image headers are not stored in fixed endian format
     bufferlist bl;
-    m_image_ctx.header.image_size = m_new_size;
-    bl.append((const char *)&m_image_ctx.header, sizeof(m_image_ctx.header));
-    op.write(0, bl);
+    bl.append(reinterpret_cast<const char*>(&m_new_size), sizeof(m_new_size));
+    op.write(offsetof(rbd_obj_header_ondisk, image_size), bl);
   } else {
     if (m_image_ctx.image_watcher->is_lock_supported()) {
       m_image_ctx.image_watcher->assert_header_locked(&op);
index 0f5d46a56f468132a25e5f80dae9ccc9f22298c1..1574c56896fbfd404e4761a556f2ef71f1a75f89 100644 (file)
@@ -807,7 +807,7 @@ public:
   void ImageCtx::flush_async_operations(Context *on_finish) {
     Mutex::Locker l(async_ops_lock);
     if (async_ops.empty()) {
-      op_work_queue->queue(on_finish, 0);
+      on_finish->complete(0);
       return;
     }
 
index 71b4c863d0b2f2a9411134a99f5875491dcdf497..790a03665a7559255e3ca925aff0033b33d0b91e 100644 (file)
@@ -11,6 +11,7 @@
 #include "include/encoding.h"
 #include "include/stringify.h"
 #include "common/errno.h"
+#include "common/WorkQueue.h"
 #include <sstream>
 #include <boost/bind.hpp>
 #include <boost/function.hpp>
@@ -741,24 +742,25 @@ int ImageWatcher::notify_async_request(const AsyncRequestId &async_request_id,
   return ctx.wait();
 }
 
-void ImageWatcher::handle_payload(const HeaderUpdatePayload &payload,
-                                 bufferlist *out) {
+bool ImageWatcher::handle_payload(const HeaderUpdatePayload &payload,
+                                 C_NotifyAck *ack_ctx) {
   ldout(m_image_ctx.cct, 10) << this << " image header updated" << dendl;
 
   Mutex::Locker lictx(m_image_ctx.refresh_lock);
   ++m_image_ctx.refresh_seq;
   m_image_ctx.perfcounter->inc(l_librbd_notify);
+  return true;
 }
 
-void ImageWatcher::handle_payload(const AcquiredLockPayload &payload,
-                                  bufferlist *out) {
+bool ImageWatcher::handle_payload(const AcquiredLockPayload &payload,
+                                  C_NotifyAck *ack_ctx) {
   ldout(m_image_ctx.cct, 10) << this << " image exclusively locked announcement"
                              << dendl;
   if (payload.client_id.is_valid()) {
     Mutex::Locker l(m_owner_client_id_lock);
     if (payload.client_id == m_owner_client_id) {
       // we already know that the remote client is the owner
-      return;
+      return true;
     }
     set_owner_client_id(payload.client_id);
   }
@@ -768,10 +770,11 @@ void ImageWatcher::handle_payload(const AcquiredLockPayload &payload,
     schedule_cancel_async_requests();
     schedule_retry_aio_requests(false);
   }
+  return true;
 }
 
-void ImageWatcher::handle_payload(const ReleasedLockPayload &payload,
-                                  bufferlist *out) {
+bool ImageWatcher::handle_payload(const ReleasedLockPayload &payload,
+                                  C_NotifyAck *ack_ctx) {
   ldout(m_image_ctx.cct, 10) << this << " exclusive lock released" << dendl;
   if (payload.client_id.is_valid()) {
     Mutex::Locker l(m_owner_client_id_lock);
@@ -779,7 +782,7 @@ void ImageWatcher::handle_payload(const ReleasedLockPayload &payload,
       ldout(m_image_ctx.cct, 10) << this << " unexpected owner: "
                                  << payload.client_id << " != "
                                  << m_owner_client_id << dendl;
-      return;
+      return true;
     }
     set_owner_client_id(ClientId());
   }
@@ -789,24 +792,25 @@ void ImageWatcher::handle_payload(const ReleasedLockPayload &payload,
     schedule_cancel_async_requests();
     schedule_retry_aio_requests(false);
   }
+  return true;
 }
 
-void ImageWatcher::handle_payload(const RequestLockPayload &payload,
-                                  bufferlist *out) {
+bool ImageWatcher::handle_payload(const RequestLockPayload &payload,
+                                  C_NotifyAck *ack_ctx) {
   ldout(m_image_ctx.cct, 10) << this << " exclusive lock requested" << dendl;
   if (payload.client_id == get_client_id()) {
-    return;
+    return true;
   }
 
   RWLock::RLocker l(m_image_ctx.owner_lock);
   if (m_lock_owner_state == LOCK_OWNER_STATE_LOCKED) {
     // need to send something back so the client can detect a missing leader
-    ::encode(ResponseMessage(0), *out);
+    ::encode(ResponseMessage(0), ack_ctx->out);
 
     {
       Mutex::Locker l(m_owner_client_id_lock);
       if (!m_owner_client_id.is_valid()) {
-       return;
+       return true;
       }
     }
 
@@ -816,10 +820,11 @@ void ImageWatcher::handle_payload(const RequestLockPayload &payload,
       boost::bind(&ImageWatcher::notify_release_lock, this));
     m_task_finisher->queue(TASK_CODE_RELEASING_LOCK, ctx);
   }
+  return true;
 }
 
-void ImageWatcher::handle_payload(const AsyncProgressPayload &payload,
-                                  bufferlist *out) {
+bool ImageWatcher::handle_payload(const AsyncProgressPayload &payload,
+                                  C_NotifyAck *ack_ctx) {
   RWLock::RLocker l(m_async_request_lock);
   std::map<AsyncRequestId, AsyncRequest>::iterator req_it =
     m_async_requests.find(payload.async_request_id);
@@ -831,10 +836,11 @@ void ImageWatcher::handle_payload(const AsyncProgressPayload &payload,
     schedule_async_request_timed_out(payload.async_request_id);
     req_it->second.second->update_progress(payload.offset, payload.total);
   }
+  return true;
 }
 
-void ImageWatcher::handle_payload(const AsyncCompletePayload &payload,
-                                  bufferlist *out) {
+bool ImageWatcher::handle_payload(const AsyncCompletePayload &payload,
+                                  C_NotifyAck *ack_ctx) {
   RWLock::RLocker l(m_async_request_lock);
   std::map<AsyncRequestId, AsyncRequest>::iterator req_it =
     m_async_requests.find(payload.async_request_id);
@@ -844,10 +850,11 @@ void ImageWatcher::handle_payload(const AsyncCompletePayload &payload,
                               << payload.result << dendl;
     req_it->second.first->complete(payload.result);
   }
+  return true;
 }
 
-void ImageWatcher::handle_payload(const FlattenPayload &payload,
-                                 bufferlist *out) {
+bool ImageWatcher::handle_payload(const FlattenPayload &payload,
+                                 C_NotifyAck *ack_ctx) {
 
   RWLock::RLocker l(m_image_ctx.owner_lock);
   if (m_lock_owner_state == LOCK_OWNER_STATE_LOCKED) {
@@ -882,12 +889,13 @@ void ImageWatcher::handle_payload(const FlattenPayload &payload,
       }
     }
 
-    ::encode(ResponseMessage(r), *out);
+    ::encode(ResponseMessage(r), ack_ctx->out);
   }
+  return true;
 }
 
-void ImageWatcher::handle_payload(const ResizePayload &payload,
-                                 bufferlist *out) {
+bool ImageWatcher::handle_payload(const ResizePayload &payload,
+                                 C_NotifyAck *ack_ctx) {
   RWLock::RLocker l(m_image_ctx.owner_lock);
   if (m_lock_owner_state == LOCK_OWNER_STATE_LOCKED) {
     int r = 0;
@@ -922,29 +930,33 @@ void ImageWatcher::handle_payload(const ResizePayload &payload,
       }
     }
 
-    ::encode(ResponseMessage(r), *out);
+    ::encode(ResponseMessage(r), ack_ctx->out);
   }
+  return true;
 }
 
-void ImageWatcher::handle_payload(const SnapCreatePayload &payload,
-                                 bufferlist *out) {
+bool ImageWatcher::handle_payload(const SnapCreatePayload &payload,
+                                 C_NotifyAck *ack_ctx) {
   RWLock::RLocker l(m_image_ctx.owner_lock);
   if (m_lock_owner_state == LOCK_OWNER_STATE_LOCKED) {
     ldout(m_image_ctx.cct, 10) << this << " remote snap_create request: "
                               << payload.snap_name << dendl;
-    int r = librbd::snap_create_helper(&m_image_ctx, NULL,
-                                       payload.snap_name.c_str());
 
-    ::encode(ResponseMessage(r), *out);
+    // execute outside of librados AIO thread
+    m_image_ctx.op_work_queue->queue(new C_SnapCreateResponseMessage(
+      this, ack_ctx, payload.snap_name), 0);
+    return false;
   }
+  return true;
 }
 
-void ImageWatcher::handle_payload(const UnknownPayload &payload,
-                                 bufferlist *out) {
+bool ImageWatcher::handle_payload(const UnknownPayload &payload,
+                                 C_NotifyAck *ack_ctx) {
   RWLock::RLocker l(m_image_ctx.owner_lock);
   if (is_lock_owner()) {
-    ::encode(ResponseMessage(-EOPNOTSUPP), *out);
+    ::encode(ResponseMessage(-EOPNOTSUPP), ack_ctx->out);
   }
+  return true;
 }
 
 void ImageWatcher::handle_notify(uint64_t notify_id, uint64_t handle,
@@ -1060,4 +1072,34 @@ void ImageWatcher::RemoteContext::finish(int r) {
   m_image_watcher.schedule_async_complete(m_async_request_id, r);
 }
 
+ImageWatcher::C_NotifyAck::C_NotifyAck(ImageWatcher *image_watcher,
+                                       uint64_t notify_id, uint64_t handle)
+  : image_watcher(image_watcher), notify_id(notify_id), handle(handle) {
+  CephContext *cct = image_watcher->m_image_ctx.cct;
+  ldout(cct, 10) << this << " C_NotifyAck start: id=" << notify_id << ", "
+                 << "handle=" << handle << dendl;
+}
+
+void ImageWatcher::C_NotifyAck::finish(int r) {
+  assert(r == 0);
+  CephContext *cct = image_watcher->m_image_ctx.cct;
+  ldout(cct, 10) << this << " C_NotifyAck finish: id=" << notify_id << ", "
+                 << "handle=" << handle << dendl;
+
+  image_watcher->acknowledge_notify(notify_id, handle, out);
+}
+
+void ImageWatcher::C_SnapCreateResponseMessage::finish(int r) {
+  CephContext *cct = notify_ack->image_watcher->m_image_ctx.cct;
+  ldout(cct, 10) << this << " C_SnapCreateResponseMessage: r=" << r << dendl;
+
+  RWLock::RLocker owner_locker(image_watcher->m_image_ctx.owner_lock);
+  if (image_watcher->m_lock_owner_state == LOCK_OWNER_STATE_LOCKED) {
+    r = librbd::snap_create_helper(&image_watcher->m_image_ctx, NULL,
+                                   snap_name.c_str());
+    ::encode(ResponseMessage(r), notify_ack->out);
+  }
+  notify_ack->complete(0);
 }
+
+} // namespace librbd
index 760a6981b3feb3d8e44fe6c6a16a8aee0c49745a..6fbc48869258d0b8ddb2af8fdf32c95d96614995 100644 (file)
@@ -158,6 +158,31 @@ namespace librbd {
       RemoteProgressContext *m_prog_ctx;
     };
 
+    struct C_NotifyAck : public Context {
+      ImageWatcher *image_watcher;
+      uint64_t notify_id;
+      uint64_t handle;
+      bufferlist out;
+
+      C_NotifyAck(ImageWatcher *image_watcher, uint64_t notify_id,
+                  uint64_t handle);
+      virtual void finish(int r);
+    };
+
+    struct C_SnapCreateResponseMessage : public Context {
+      ImageWatcher *image_watcher;
+      C_NotifyAck *notify_ack;
+      std::string snap_name;
+
+      C_SnapCreateResponseMessage(ImageWatcher *image_watcher,
+                                  C_NotifyAck *notify_ack,
+                                  const std::string &snap_name)
+        : image_watcher(image_watcher), notify_ack(notify_ack),
+          snap_name(snap_name) {
+      }
+      virtual void finish(int r);
+    };
+
     struct HandlePayloadVisitor : public boost::static_visitor<void> {
       ImageWatcher *image_watcher;
       uint64_t notify_id;
@@ -169,17 +194,12 @@ namespace librbd {
       {
       }
 
-      inline void operator()(const WatchNotify::HeaderUpdatePayload &payload) const {
-       bufferlist out;
-       image_watcher->handle_payload(payload, &out);
-       image_watcher->acknowledge_notify(notify_id, handle, out);
-      }
-
       template <typename Payload>
       inline void operator()(const Payload &payload) const {
-       bufferlist out;
-       image_watcher->handle_payload(payload, &out);
-       image_watcher->acknowledge_notify(notify_id, handle, out);
+        C_NotifyAck *ctx = new C_NotifyAck(image_watcher, notify_id, handle);
+        if (image_watcher->handle_payload(payload, ctx)) {
+          ctx->complete(0);
+        }
       }
     };
 
@@ -242,26 +262,26 @@ namespace librbd {
     int notify_async_complete(const WatchNotify::AsyncRequestId &id,
                              int r);
 
-    void handle_payload(const WatchNotify::HeaderUpdatePayload& payload,
-                       bufferlist *out);
-    void handle_payload(const WatchNotify::AcquiredLockPayload& payload,
-                       bufferlist *out);
-    void handle_payload(const WatchNotify::ReleasedLockPayload& payload,
-                       bufferlist *out);
-    void handle_payload(const WatchNotify::RequestLockPayload& payload,
-                       bufferlist *out);
-    void handle_payload(const WatchNotify::AsyncProgressPayload& payload,
-                       bufferlist *out);
-    void handle_payload(const WatchNotify::AsyncCompletePayload& payload,
-                       bufferlist *out);
-    void handle_payload(const WatchNotify::FlattenPayload& payload,
-                       bufferlist *out);
-    void handle_payload(const WatchNotify::ResizePayload& payload,
-                       bufferlist *out);
-    void handle_payload(const WatchNotify::SnapCreatePayload& payload,
-                       bufferlist *out);
-    void handle_payload(const WatchNotify::UnknownPayload& payload,
-                       bufferlist *out);
+    bool handle_payload(const WatchNotify::HeaderUpdatePayload& payload,
+                       C_NotifyAck *ctx);
+    bool handle_payload(const WatchNotify::AcquiredLockPayload& payload,
+                       C_NotifyAck *ctx);
+    bool handle_payload(const WatchNotify::ReleasedLockPayload& payload,
+                       C_NotifyAck *ctx);
+    bool handle_payload(const WatchNotify::RequestLockPayload& payload,
+                       C_NotifyAck *ctx);
+    bool handle_payload(const WatchNotify::AsyncProgressPayload& payload,
+                       C_NotifyAck *ctx);
+    bool handle_payload(const WatchNotify::AsyncCompletePayload& payload,
+                       C_NotifyAck *ctx);
+    bool handle_payload(const WatchNotify::FlattenPayload& payload,
+                       C_NotifyAck *ctx);
+    bool handle_payload(const WatchNotify::ResizePayload& payload,
+                       C_NotifyAck *ctx);
+    bool handle_payload(const WatchNotify::SnapCreatePayload& payload,
+                       C_NotifyAck *ctx);
+    bool handle_payload(const WatchNotify::UnknownPayload& payload,
+                       C_NotifyAck *ctx);
 
     void handle_notify(uint64_t notify_id, uint64_t handle, bufferlist &bl);
     void handle_error(uint64_t cookie, int err);
index 96d0a00ce30c7ee3b454b3ae6a5e718898323126..70d7d5497bea0a04a5594d9a9e66edef727b8bbe 100644 (file)
@@ -37,10 +37,6 @@ librbd_la_LIBADD = \
        libcls_lock_client.la \
        $(PTHREAD_LIBS) $(EXTRALIBS)
 
-if WITH_LTTNG
-librbd_la_LIBADD += $(LIBRBD_TP)
-endif
-
 librbd_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0
 if LINUX
 librbd_la_CXXFLAGS = -fvisibility=hidden -fvisibility-inlines-hidden
index 9e7aae2d92025c0a99746909971ed4e863ccd0f6..ea06d769d050257cb0f3cc45bb2c1eca4ff5dddd 100644 (file)
@@ -176,7 +176,7 @@ void ObjectMap::refresh(uint64_t snap_id)
   if (r < 0) {
     lderr(cct) << "error refreshing object map: " << cpp_strerror(r)
                << dendl;
-    invalidate();
+    invalidate(false);
     m_object_map.clear();
     return;
   }
@@ -189,7 +189,7 @@ void ObjectMap::refresh(uint64_t snap_id)
   if (m_object_map.size() < num_objs) {
     lderr(cct) << "object map smaller than current object count: "
                << m_object_map.size() << " != " << num_objs << dendl;
-    invalidate();
+    invalidate(false);
   } else if (m_object_map.size() > num_objs) {
     // resize op might have been interrupted
     ldout(cct, 1) << "object map larger than current object count: "
@@ -227,7 +227,7 @@ void ObjectMap::rollback(uint64_t snap_id) {
   if (r < 0) {
     lderr(cct) << "unable to load snapshot object map '" << snap_oid << "': "
               << cpp_strerror(r) << dendl;
-    invalidate();
+    invalidate(false);
     return;
   }
 
@@ -239,7 +239,7 @@ void ObjectMap::rollback(uint64_t snap_id) {
   if (r < 0) {
     lderr(cct) << "unable to rollback object map: " << cpp_strerror(r)
               << dendl;
-    invalidate();
+    invalidate(true);
   }
 }
 
@@ -265,7 +265,8 @@ void ObjectMap::snapshot(uint64_t snap_id) {
   if (r < 0) {
     lderr(cct) << "unable to load object map: " << cpp_strerror(r)
               << dendl;
-    invalidate();
+    invalidate(false);
+    return;
   }
 
   std::string snap_oid(object_map_name(m_image_ctx.id, snap_id));
@@ -273,7 +274,7 @@ void ObjectMap::snapshot(uint64_t snap_id) {
   if (r < 0) {
     lderr(cct) << "unable to snapshot object map '" << snap_oid << "': "
               << cpp_strerror(r) << dendl;
-    invalidate();
+    invalidate(false);
   }
 }
 
@@ -333,7 +334,7 @@ bool ObjectMap::aio_update(uint64_t start_object_no, uint64_t end_object_no,
   return false;
 }
 
-void ObjectMap::invalidate() {
+void ObjectMap::invalidate(bool force) {
   assert(m_image_ctx.snap_lock.is_wlocked());
   assert(m_image_ctx.object_map_lock.is_wlocked());
   uint64_t flags;
@@ -355,7 +356,7 @@ void ObjectMap::invalidate() {
   }
 
   librados::ObjectWriteOperation op;
-  if (m_image_ctx.snap_id == CEPH_NOSNAP) {
+  if (m_image_ctx.snap_id == CEPH_NOSNAP && !force) {
     m_image_ctx.image_watcher->assert_header_locked(&op);
   }
   cls_client::set_flags(&op, m_image_ctx.snap_id, m_image_ctx.flags,
@@ -380,7 +381,7 @@ bool ObjectMap::Request::should_complete(int r) {
   case STATE_REQUEST:
     if (r == -EBUSY) {
       lderr(cct) << "object map lock not owned by client" << dendl;
-      return true;
+      return invalidate();
     } else if (r < 0) {
       lderr(cct) << "failed to update object map: " << cpp_strerror(r)
                 << dendl;
@@ -425,7 +426,6 @@ bool ObjectMap::Request::invalidate() {
   m_image_ctx.flags |= RBD_FLAG_OBJECT_MAP_INVALID;
 
   librados::ObjectWriteOperation op;
-  m_image_ctx.image_watcher->assert_header_locked(&op);
   cls_client::set_flags(&op, CEPH_NOSNAP, m_image_ctx.flags,
                         RBD_FLAG_OBJECT_MAP_INVALID);
 
index 4104636515782038dd52c6c3e551e609e30be81e..62532070411e04f3e0e253e7806f86168f971dd2 100644 (file)
@@ -131,7 +131,7 @@ private:
 
   bool m_enabled;
 
-  void invalidate();
+  void invalidate(bool force);
 
 };
 
index 4942a38bbdc2113f7772c1ee8763b825f8fc8810..1763c23102fd56fa1653a3c1e04ef166671c944b 100644 (file)
@@ -45,6 +45,7 @@ public:
     typename TaskContexts::iterator it = m_task_contexts.find(task);
     if (it != m_task_contexts.end()) {
       delete it->second.first;
+      m_safe_timer->cancel_event(it->second.second);
       m_task_contexts.erase(it);
     }
   }
index 7364e6cf101c1cc0f7c185b0c1dc01229d946225..b4b4d9e48780d8986c9716da8730bb78092f8c18 100644 (file)
@@ -135,6 +135,41 @@ int invoke_async_request(ImageCtx *ictx, const std::string& request_type,
   return r;
 }
 
+int validate_pool(IoCtx &io_ctx, CephContext *cct) {
+  if (!cct->_conf->rbd_validate_pool) {
+    return 0;
+  }
+
+  int r = io_ctx.stat(RBD_DIRECTORY, NULL, NULL);
+  if (r == 0) {
+    return 0;
+  } else if (r < 0 && r != -ENOENT) {
+    lderr(cct) << "failed to stat RBD directory: " << cpp_strerror(r) << dendl;
+    return r;
+  }
+
+  // allocate a self-managed snapshot id if this a new pool to force
+  // self-managed snapshot mode
+  uint64_t snap_id;
+  r = io_ctx.selfmanaged_snap_create(&snap_id);
+  if (r == -EINVAL) {
+    lderr(cct) << "pool not configured for self-managed RBD snapshot support"
+               << dendl;
+    return r;
+  } else if (r < 0) {
+    lderr(cct) << "failed to allocate self-managed snapshot: "
+               << cpp_strerror(r) << dendl;
+    return r;
+  }
+
+  r = io_ctx.selfmanaged_snap_remove(snap_id);
+  if (r < 0) {
+    lderr(cct) << "failed to release self-managed snapshot " << snap_id
+               << ": " << cpp_strerror(r) << dendl;
+  }
+  return 0;
+}
+
 } // anonymous namespace
 
   const string id_obj_name(const string &name)
@@ -872,8 +907,14 @@ reprotect_and_return_err:
                uint64_t size, int order)
   {
     CephContext *cct = (CephContext *)io_ctx.cct();
+
+    int r = validate_pool(io_ctx, cct);
+    if (r < 0) {
+      return r;
+    }
+
     ldout(cct, 2) << "adding rbd image to directory..." << dendl;
-    int r = tmap_set(io_ctx, imgname);
+    r = tmap_set(io_ctx, imgname);
     if (r < 0) {
       lderr(cct) << "error adding image to directory: " << cpp_strerror(r)
                 << dendl;
@@ -918,9 +959,14 @@ reprotect_and_return_err:
 
     ceph_file_layout layout;
 
+    int r = validate_pool(io_ctx, cct);
+    if (r < 0) {
+      return r;
+    }
+
     id_obj = id_obj_name(imgname);
 
-    int r = io_ctx.create(id_obj, true);
+    r = io_ctx.create(id_obj, true);
     if (r < 0) {
       lderr(cct) << "error creating rbd id object: " << cpp_strerror(r)
                 << dendl;
@@ -2824,12 +2870,12 @@ reprotect_and_return_err:
 
   int simple_diff_cb(uint64_t off, size_t len, int exists, void *arg)
   {
-    // This reads the existing extents in a parent from the beginning
-    // of time.  Since images are thin-provisioned, the extents will
-    // always represent data, not holes.
-    assert(exists);
-    interval_set<uint64_t> *diff = static_cast<interval_set<uint64_t> *>(arg);
-    diff->insert(off, len);
+    // it's possible for a discard to create a hole in the parent image --
+    // ignore
+    if (exists) {
+      interval_set<uint64_t> *diff = static_cast<interval_set<uint64_t> *>(arg);
+      diff->insert(off, len);
+    }
     return 0;
   }
 
index a99f7d4725c84e766344693315b72531e79e59aa..2e9e58cea0692c5f4236a7afbf62bc125706d1a3 100644 (file)
@@ -21,6 +21,7 @@
 #include "common/snap_types.h"
 #include "common/perf_counters.h"
 #include "common/WorkQueue.h"
+#include "common/TracepointProvider.h"
 #include "include/Context.h"
 #include "include/rbd/librbd.hpp"
 #include "osdc/ObjectCacher.h"
 #include <vector>
 
 #ifdef WITH_LTTNG
+#define TRACEPOINT_DEFINE
+#define TRACEPOINT_PROBE_DYNAMIC_LINKAGE
 #include "tracing/librbd.h"
+#undef TRACEPOINT_PROBE_DYNAMIC_LINKAGE
+#undef TRACEPOINT_DEFINE
 #else
 #define tracepoint(...)
 #endif
@@ -54,6 +59,8 @@ using librados::IoCtx;
 
 namespace {
 
+TracepointProvider::Traits tracepoint_traits("librbd_tp.so", "rbd_tracing");
+
 class C_AioReadWQ : public Context {
 public:
   C_AioReadWQ(librbd::ImageCtx *ictx, uint64_t off, size_t len,
@@ -165,6 +172,10 @@ void submit_aio_flush(librbd::ImageCtx *ictx, librbd::AioCompletion *c) {
   }
 }
 
+CephContext* get_cct(IoCtx &io_ctx) {
+  return reinterpret_cast<CephContext*>(io_ctx.cct());
+}
+
 librbd::AioCompletion* get_aio_completion(librbd::RBD::AioCompletion *comp) {
   return reinterpret_cast<librbd::AioCompletion *>(comp->pc);
 }
@@ -217,8 +228,14 @@ namespace librbd {
                const char *snap_name)
   {
     ImageCtx *ictx = new ImageCtx(name, "", snap_name, io_ctx, false);
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
     tracepoint(librbd, open_image_enter, ictx, ictx->name.c_str(), ictx->id.c_str(), ictx->snap_name.c_str(), ictx->read_only);
 
+    if (image.ctx != NULL) {
+      close_image(reinterpret_cast<ImageCtx*>(image.ctx));
+      image.ctx = NULL;
+    }
+
     int r = librbd::open_image(ictx);
     if (r < 0) {
       tracepoint(librbd, open_image_exit, r);
@@ -234,8 +251,14 @@ namespace librbd {
                          const char *snap_name)
   {
     ImageCtx *ictx = new ImageCtx(name, "", snap_name, io_ctx, true);
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
     tracepoint(librbd, open_image_enter, ictx, ictx->name.c_str(), ictx->id.c_str(), ictx->snap_name.c_str(), ictx->read_only);
 
+    if (image.ctx != NULL) {
+      close_image(reinterpret_cast<ImageCtx*>(image.ctx));
+      image.ctx = NULL;
+    }
+
     int r = librbd::open_image(ictx);
     if (r < 0) {
       tracepoint(librbd, open_image_exit, r);
@@ -249,6 +272,7 @@ namespace librbd {
 
   int RBD::create(IoCtx& io_ctx, const char *name, uint64_t size, int *order)
   {
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
     tracepoint(librbd, create_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name, size, *order);
     int r = librbd::create(io_ctx, name, size, order);
     tracepoint(librbd, create_exit, r, *order);
@@ -258,6 +282,7 @@ namespace librbd {
   int RBD::create2(IoCtx& io_ctx, const char *name, uint64_t size,
                   uint64_t features, int *order)
   {
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
     tracepoint(librbd, create2_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name, size, features, *order);
     int r = librbd::create(io_ctx, name, size, false, features, order, 0, 0);
     tracepoint(librbd, create2_exit, r, *order);
@@ -268,6 +293,7 @@ namespace librbd {
                   uint64_t features, int *order, uint64_t stripe_unit,
                   uint64_t stripe_count)
   {
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
     tracepoint(librbd, create3_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name, size, features, *order, stripe_unit, stripe_count);
     int r = librbd::create(io_ctx, name, size, false, features, order,
                          stripe_unit, stripe_count);
@@ -279,6 +305,7 @@ namespace librbd {
                 IoCtx& c_ioctx, const char *c_name, uint64_t features,
                 int *c_order)
   {
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(p_ioctx));
     tracepoint(librbd, clone_enter, p_ioctx.get_pool_name().c_str(), p_ioctx.get_id(), p_name, p_snap_name, c_ioctx.get_pool_name().c_str(), c_ioctx.get_id(), c_name, features);
     int r = librbd::clone(p_ioctx, p_name, p_snap_name, c_ioctx, c_name,
                         features, c_order, 0, 0);
@@ -290,6 +317,7 @@ namespace librbd {
                  IoCtx& c_ioctx, const char *c_name, uint64_t features,
                  int *c_order, uint64_t stripe_unit, int stripe_count)
   {
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(p_ioctx));
     tracepoint(librbd, clone2_enter, p_ioctx.get_pool_name().c_str(), p_ioctx.get_id(), p_name, p_snap_name, c_ioctx.get_pool_name().c_str(), c_ioctx.get_id(), c_name, features, stripe_unit, stripe_count);
     int r = librbd::clone(p_ioctx, p_name, p_snap_name, c_ioctx, c_name,
                         features, c_order, stripe_unit, stripe_count);
@@ -299,6 +327,7 @@ namespace librbd {
 
   int RBD::remove(IoCtx& io_ctx, const char *name)
   {
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
     tracepoint(librbd, remove_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name);
     librbd::NoOpProgressContext prog_ctx;
     int r = librbd::remove(io_ctx, name, prog_ctx);
@@ -309,6 +338,7 @@ namespace librbd {
   int RBD::remove_with_progress(IoCtx& io_ctx, const char *name,
                                ProgressContext& pctx)
   {
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
     tracepoint(librbd, remove_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name);
     int r = librbd::remove(io_ctx, name, pctx);
     tracepoint(librbd, remove_exit, r);
@@ -317,6 +347,7 @@ namespace librbd {
 
   int RBD::list(IoCtx& io_ctx, vector<string>& names)
   {
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
     tracepoint(librbd, list_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id());
     int r = librbd::list(io_ctx, names);
     if (r >= 0) {
@@ -330,6 +361,7 @@ namespace librbd {
 
   int RBD::rename(IoCtx& src_io_ctx, const char *srcname, const char *destname)
   {
+    TracepointProvider::initialize<tracepoint_traits>(get_cct(src_io_ctx));
     tracepoint(librbd, rename_enter, src_io_ctx.get_pool_name().c_str(), src_io_ctx.get_id(), srcname, destname);
     int r = librbd::rename(src_io_ctx, srcname, destname);
     tracepoint(librbd, rename_exit, r);
@@ -928,6 +960,7 @@ extern "C" int rbd_list(rados_ioctx_t p, char *names, size_t *size)
 {
   librados::IoCtx io_ctx;
   librados::IoCtx::from_rados_ioctx_t(p, io_ctx);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
   tracepoint(librbd, list_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id());
   vector<string> cpp_names;
   int r = librbd::list(io_ctx, cpp_names);
@@ -969,6 +1002,7 @@ extern "C" int rbd_create(rados_ioctx_t p, const char *name, uint64_t size, int
 {
   librados::IoCtx io_ctx;
   librados::IoCtx::from_rados_ioctx_t(p, io_ctx);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
   tracepoint(librbd, create_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name, size, *order);
   int r = librbd::create(io_ctx, name, size, order);
   tracepoint(librbd, create_exit, r, *order);
@@ -981,6 +1015,7 @@ extern "C" int rbd_create2(rados_ioctx_t p, const char *name,
 {
   librados::IoCtx io_ctx;
   librados::IoCtx::from_rados_ioctx_t(p, io_ctx);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
   tracepoint(librbd, create2_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name, size, features, *order);
   int r = librbd::create(io_ctx, name, size, false, features, order, 0, 0);
   tracepoint(librbd, create2_exit, r, *order);
@@ -994,6 +1029,7 @@ extern "C" int rbd_create3(rados_ioctx_t p, const char *name,
 {
   librados::IoCtx io_ctx;
   librados::IoCtx::from_rados_ioctx_t(p, io_ctx);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
   tracepoint(librbd, create3_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name, size, features, *order, stripe_unit, stripe_count);
   int r = librbd::create(io_ctx, name, size, false, features, order,
                        stripe_unit, stripe_count);
@@ -1008,6 +1044,7 @@ extern "C" int rbd_clone(rados_ioctx_t p_ioctx, const char *p_name,
   librados::IoCtx p_ioc, c_ioc;
   librados::IoCtx::from_rados_ioctx_t(p_ioctx, p_ioc);
   librados::IoCtx::from_rados_ioctx_t(c_ioctx, c_ioc);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(p_ioc));
   tracepoint(librbd, clone_enter, p_ioc.get_pool_name().c_str(), p_ioc.get_id(), p_name, p_snap_name, c_ioc.get_pool_name().c_str(), c_ioc.get_id(), c_name, features);
   int r = librbd::clone(p_ioc, p_name, p_snap_name, c_ioc, c_name,
                       features, c_order, 0, 0);
@@ -1023,6 +1060,7 @@ extern "C" int rbd_clone2(rados_ioctx_t p_ioctx, const char *p_name,
   librados::IoCtx p_ioc, c_ioc;
   librados::IoCtx::from_rados_ioctx_t(p_ioctx, p_ioc);
   librados::IoCtx::from_rados_ioctx_t(c_ioctx, c_ioc);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(p_ioc));
   tracepoint(librbd, clone2_enter, p_ioc.get_pool_name().c_str(), p_ioc.get_id(), p_name, p_snap_name, c_ioc.get_pool_name().c_str(), c_ioc.get_id(), c_name, features, stripe_unit, stripe_count);
   int r = librbd::clone(p_ioc, p_name, p_snap_name, c_ioc, c_name,
                       features, c_order, stripe_unit, stripe_count);
@@ -1034,6 +1072,7 @@ extern "C" int rbd_remove(rados_ioctx_t p, const char *name)
 {
   librados::IoCtx io_ctx;
   librados::IoCtx::from_rados_ioctx_t(p, io_ctx);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
   tracepoint(librbd, remove_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name);
   librbd::NoOpProgressContext prog_ctx;
   int r = librbd::remove(io_ctx, name, prog_ctx);
@@ -1046,6 +1085,7 @@ extern "C" int rbd_remove_with_progress(rados_ioctx_t p, const char *name,
 {
   librados::IoCtx io_ctx;
   librados::IoCtx::from_rados_ioctx_t(p, io_ctx);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
   tracepoint(librbd, remove_enter, io_ctx.get_pool_name().c_str(), io_ctx.get_id(), name);
   librbd::CProgressContext prog_ctx(cb, cbdata);
   int r = librbd::remove(io_ctx, name, prog_ctx);
@@ -1129,6 +1169,7 @@ extern "C" int rbd_rename(rados_ioctx_t src_p, const char *srcname,
 {
   librados::IoCtx src_io_ctx;
   librados::IoCtx::from_rados_ioctx_t(src_p, src_io_ctx);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(src_io_ctx));
   tracepoint(librbd, rename_enter, src_io_ctx.get_pool_name().c_str(), src_io_ctx.get_id(), srcname, destname);
   int r = librbd::rename(src_io_ctx, srcname, destname);
   tracepoint(librbd, rename_exit, r);
@@ -1140,6 +1181,7 @@ extern "C" int rbd_open(rados_ioctx_t p, const char *name, rbd_image_t *image,
 {
   librados::IoCtx io_ctx;
   librados::IoCtx::from_rados_ioctx_t(p, io_ctx);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
   librbd::ImageCtx *ictx = new librbd::ImageCtx(name, "", snap_name, io_ctx,
                                                false);
   tracepoint(librbd, open_image_enter, ictx, ictx->name.c_str(), ictx->id.c_str(), ictx->snap_name.c_str(), ictx->read_only);
@@ -1155,6 +1197,7 @@ extern "C" int rbd_open_read_only(rados_ioctx_t p, const char *name,
 {
   librados::IoCtx io_ctx;
   librados::IoCtx::from_rados_ioctx_t(p, io_ctx);
+  TracepointProvider::initialize<tracepoint_traits>(get_cct(io_ctx));
   librbd::ImageCtx *ictx = new librbd::ImageCtx(name, "", snap_name, io_ctx,
                                                true);
   tracepoint(librbd, open_image_enter, ictx, ictx->name.c_str(), ictx->id.c_str(), ictx->snap_name.c_str(), ictx->read_only);
index 3dc6c631061a5385d7b85f5dc1b46f01b0e30da4..a3e54dfa61bff9c1ccf73515fdcb9527fabd7d82 100644 (file)
@@ -241,7 +241,7 @@ void Log::_flush(EntryQueue *t, EntryQueue *requeue, bool crash)
       }
 
       if (do_syslog) {
-       syslog(LOG_USER, "%s%s", buf, s.c_str());
+       syslog(LOG_USER|LOG_DEBUG, "%s%s", buf, s.c_str());
       }
 
       if (do_stderr) {
@@ -263,7 +263,7 @@ void Log::_log_message(const char *s, bool crash)
       cerr << "problem writing to " << m_log_file << ": " << cpp_strerror(r) << std::endl;
   }
   if ((crash ? m_syslog_crash : m_syslog_log) >= 0) {
-    syslog(LOG_USER, "%s", s);
+    syslog(LOG_USER|LOG_DEBUG, "%s", s);
   }
   
   if ((crash ? m_stderr_crash : m_stderr_log) >= 0) {
index 1833d55cfd73fb1f5d6b372e2956e10fd308bb58..9ae27baee45e1c8b5c6b3ae3ad22b1329f1ddbe7 100644 (file)
@@ -4,10 +4,10 @@
     compress
     sharedscripts
     postrotate
-        if which invoke-rc.d > /dev/null 2>&1 && [ -x `which invoke-rc.d` ]; then
-            invoke-rc.d ceph reload >/dev/null
-        elif which service > /dev/null 2>&1 && [ -x `which service` ]; then
+        if which service > /dev/null 2>&1 && [ -x `which service` ]; then
             service ceph reload >/dev/null
+        elif which invoke-rc.d > /dev/null 2>&1 && [ -x `which invoke-rc.d` ]; then
+            invoke-rc.d ceph reload >/dev/null
         fi
         # Possibly reload twice, but depending on ceph.conf the reload above may be a no-op
         if which initctl > /dev/null 2>&1 && [ -x `which initctl` ]; then
index 6f54cb4bbc70079037d0db1bbc32efcd9ba28cf9..79d66de6189597288881c825fe5fb6cd1702a6e6 100644 (file)
@@ -78,8 +78,15 @@ void Elector::start()
   init();
   
   // start by trying to elect me
-  if (epoch % 2 == 0) 
+  if (epoch % 2 == 0) {
     bump_epoch(epoch+1);  // odd == election cycle
+  } else {
+    // do a trivial db write just to ensure it is writeable.
+    MonitorDBStore::TransactionRef t(new MonitorDBStore::Transaction);
+    t->put(Monitor::MONITOR_NAME, "election_writeable_test", rand());
+    int r = mon->store->apply_transaction(t);
+    assert(r >= 0);
+  }
   start_stamp = ceph_clock_now(g_ceph_context);
   electing_me = true;
   acked_me[mon->rank] = CEPH_FEATURES_ALL;
index 4cf26cd41b91a5a7cf30944264579eeeaf66c80a..95be55ebe02e311d6c80f37d473f6952d6457b6a 100644 (file)
@@ -1054,6 +1054,21 @@ int MDSMonitor::_check_pool(
          << " is an erasure-code pool";
       return -EINVAL;
     }
+
+    // That cache tier overlay must be writeback, not readonly (it's the
+    // write operations like modify+truncate we care about support for)
+    const pg_pool_t *write_tier = mon->osdmon()->osdmap.get_pg_pool(
+        pool->write_tier);
+    assert(write_tier != NULL);  // OSDMonitor shouldn't allow DNE tier
+    if (write_tier->cache_mode == pg_pool_t::CACHEMODE_FORWARD
+        || write_tier->cache_mode == pg_pool_t::CACHEMODE_READONLY) {
+      *ss << "EC pool '" << pool_name << "' has a write tier ("
+          << mon->osdmon()->osdmap.get_pool_name(pool->write_tier)
+          << ") that is configured "
+             "to forward writes.  Use a cache mode such as 'writeback' for "
+             "CephFS";
+      return -EINVAL;
+    }
   }
 
   if (pool->is_tier()) {
@@ -1570,22 +1585,14 @@ int MDSMonitor::filesystem_command(
        return -ENOENT;
       }
     }
-    const pg_pool_t *p = mon->osdmon()->osdmap.get_pg_pool(poolid);
-    if (!p) {
-      ss << "pool '" << poolname << "' does not exist";
-      return -ENOENT;
-    }
-    if (p->is_erasure()) {
-      // I'm sorry Dave, I'm afraid I can't do that
-      poolid = -1;
-      ss << "can't use pool '" << poolname << "' as it's an erasure-code pool";
-      return -EINVAL;
-    }
-    if (poolid >= 0) {
-      pending_mdsmap.add_data_pool(poolid);
-      ss << "added data pool " << poolid << " to mdsmap";
-      r = 0;
+
+    r = _check_pool(poolid, &ss);
+    if (r != 0) {
+      return r;
     }
+
+    pending_mdsmap.add_data_pool(poolid);
+    ss << "added data pool " << poolid << " to mdsmap";
   } else if (prefix == "mds remove_data_pool") {
     string poolname;
     cmd_getval(g_ceph_context, cmdmap, "pool", poolname);
index 04de7e29b573a49ddf4e5c9a700e4200231c9e51..9c9a3e7a2b4a6326388f354d396a77edeef62ced 100644 (file)
@@ -116,9 +116,7 @@ int MonClient::get_monmap_privately()
   bool temp_msgr = false;
   Messenger* smessenger = NULL;
   if (!messenger) {
-    messenger = smessenger = Messenger::create(cct, cct->_conf->ms_type,
-                                              entity_name_t::CLIENT(-1),
-                                              "temp_mon_client", getpid());
+    messenger = smessenger = Messenger::create_client_messenger(cct, "temp_mon_client");
     messenger->add_dispatcher_head(this);
     smessenger->start();
     temp_msgr = true;
@@ -218,9 +216,7 @@ int MonClient::ping_monitor(const string &mon_id, string *result_reply)
 
   MonClientPinger *pinger = new MonClientPinger(cct, result_reply);
 
-  Messenger *smsgr = Messenger::create(cct, cct->_conf->ms_type,
-                                      entity_name_t::CLIENT(-1),
-                                      "temp_ping_client", getpid());
+  Messenger *smsgr = Messenger::create_client_messenger(cct, "temp_ping_client");
   smsgr->add_dispatcher_head(pinger);
   smsgr->start();
 
index ba2aecfe2dd7d44c93eeecc74f5eff25480fe612..4a34283e0d9d6f9aafd37bd5d5ce334ea02af06e 100644 (file)
@@ -4041,6 +4041,10 @@ void Monitor::handle_subscribe(MMonSubscribe *m)
       }
     } else if (p->first == "osdmap") {
       if ((int)s->is_capable("osd", MON_CAP_R)) {
+       if (s->osd_epoch > p->second.start) {
+         // client needs earlier osdmaps on purpose, so reset the sent epoch
+         s->osd_epoch = 0;
+       }
         osdmon()->check_sub(s->sub_map["osdmap"]);
       }
     } else if (p->first == "osd_pg_creates") {
@@ -4656,9 +4660,9 @@ bool Monitor::ms_verify_authorizer(Connection *con, int peer_type,
       CephXServiceTicketInfo auth_ticket_info;
       
       if (authorizer_data.length()) {
-       int ret = cephx_verify_authorizer(g_ceph_context, &keyring, iter,
+       bool ret = cephx_verify_authorizer(g_ceph_context, &keyring, iter,
                                          auth_ticket_info, authorizer_reply);
-       if (ret >= 0) {
+       if (ret) {
          session_key = auth_ticket_info.session_key;
          isvalid = true;
        } else {
index e37b95db9008584e8113b45e81b70476dc8665f1..2f6f8d8ba8749e0e5679c03a0619967f0c2a023b 100644 (file)
@@ -291,6 +291,8 @@ class MonitorDBStore
          db->compact_range_async(compact.front().first, compact.front().second.first, compact.front().second.second);
        compact.pop_front();
       }
+    } else {
+      assert(0 == "failed to write to db");
     }
     return r;
   }
@@ -448,11 +450,15 @@ class MonitorDBStore
 
     virtual pair<string,string> get_next_key() {
       assert(iter->valid());
-      pair<string,string> r = iter->raw_key();
-      do {
-       iter->next();
-      } while (iter->valid() && sync_prefixes.count(iter->raw_key().first) == 0);
-      return r;
+
+      for (; iter->valid(); iter->next()) {
+        pair<string,string> r = iter->raw_key();
+        if (sync_prefixes.count(r.first) > 0) {
+          iter->next();
+          return r;
+        }
+      }
+      return pair<string,string>();
     }
 
     virtual bool _is_valid() {
@@ -564,7 +570,8 @@ class MonitorDBStore
     for (iter = prefixes.begin(); iter != prefixes.end(); ++iter) {
       dbt->rmkeys_by_prefix((*iter));
     }
-    db->submit_transaction_sync(dbt);
+    int r = db->submit_transaction_sync(dbt);
+    assert(r >= 0);
   }
 
   int open(ostream &out) {
index cdbb6c752e9e2eafac585fc6c394602fe4ed2072..968efc43759836590ce2b5eb70ef34e63583c8ad 100644 (file)
@@ -274,9 +274,6 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
 
   for (int o = 0; o < osdmap.get_max_osd(); o++) {
     if (osdmap.is_down(o)) {
-      // invalidate osd_epoch cache
-      osd_epoch.erase(o);
-
       // populate down -> out map
       if (osdmap.is_in(o) &&
          down_pending_out.count(o) == 0) {
@@ -285,11 +282,7 @@ void OSDMonitor::update_from_paxos(bool *need_bootstrap)
       }
     }
   }
-  // blow away any osd_epoch items beyond max_osd
-  map<int,epoch_t>::iterator p = osd_epoch.upper_bound(osdmap.get_max_osd());
-  while (p != osd_epoch.end()) {
-    osd_epoch.erase(p++);
-  }
+  // XXX: need to trim MonSession connected with a osd whose id > max_osd?
 
   /** we don't have any of the feature bit infrastructure in place for
    * supporting primary_temp mappings without breaking old clients/OSDs.*/
@@ -2146,19 +2139,13 @@ void OSDMonitor::send_incremental(PaxosServiceMessage *req, epoch_t first)
          << " to " << req->get_orig_source_inst()
          << dendl;
 
-  int osd = -1;
-  if (req->get_source().is_osd()) {
-    osd = req->get_source().num();
-    map<int,epoch_t>::iterator p = osd_epoch.find(osd);
-    if (p != osd_epoch.end()) {
-      if (first <= p->second) {
-       dout(10) << __func__ << " osd." << osd << " should already have epoch "
-                << p->second << dendl;
-       first = p->second + 1;
-       if (first > osdmap.get_epoch())
-         return;
-      }
-    }
+  MonSession *s = req->get_session();
+  if (s && first <= s->osd_epoch) {
+    dout(10) << __func__ << s->inst << " should already have epoch "
+            << s->osd_epoch << dendl;
+    first = s->osd_epoch + 1;
+    if (first > osdmap.get_epoch())
+      return;
   }
 
   if (first < get_first_committed()) {
@@ -2177,8 +2164,9 @@ void OSDMonitor::send_incremental(PaxosServiceMessage *req, epoch_t first)
     m->maps[first] = bl;
     mon->send_reply(req, m);
 
-    if (osd >= 0)
-      note_osd_has_epoch(osd, osdmap.get_epoch());
+    if (s) {
+      s->osd_epoch = osdmap.get_epoch();
+    }
     return;
   }
 
@@ -2190,28 +2178,8 @@ void OSDMonitor::send_incremental(PaxosServiceMessage *req, epoch_t first)
   m->newest_map = osdmap.get_epoch();
   mon->send_reply(req, m);
 
-  if (osd >= 0)
-    note_osd_has_epoch(osd, last);
-}
-
-// FIXME: we assume the OSD actually receives this.  if the mon
-// session drops and they reconnect we may not share the same maps
-// with them again, which could cause a strange hang (perhaps stuck
-// 'waiting for osdmap' requests?).  this information should go in the
-// MonSession, but I think these functions need to be refactored in
-// terms of MonSession first for that to work.
-void OSDMonitor::note_osd_has_epoch(int osd, epoch_t epoch)
-{
-  dout(20) << __func__ << " osd." << osd << " epoch " << epoch << dendl;
-  map<int,epoch_t>::iterator p = osd_epoch.find(osd);
-  if (p != osd_epoch.end()) {
-    dout(20) << __func__ << " osd." << osd << " epoch " << epoch
-            << " (was " << p->second << ")" << dendl;
-    p->second = epoch;
-  } else {
-    dout(20) << __func__ << " osd." << osd << " epoch " << epoch << dendl;
-    osd_epoch[osd] = epoch;
-  }
+  if (s)
+    s->osd_epoch = last;
 }
 
 void OSDMonitor::send_incremental(epoch_t first, MonSession *session,
@@ -2235,6 +2203,7 @@ void OSDMonitor::send_incremental(epoch_t first, MonSession *session,
     m->newest_map = osdmap.get_epoch();
     m->maps[first] = bl;
     session->con->send_message(m);
+    session->osd_epoch = first;
     first++;
   }
 
@@ -2243,9 +2212,7 @@ void OSDMonitor::send_incremental(epoch_t first, MonSession *session,
     MOSDMap *m = build_incremental(first, last);
     session->con->send_message(m);
     first = last + 1;
-
-    if (session->inst.name.is_osd())
-      note_osd_has_epoch(session->inst.name.num(), last);
+    session->osd_epoch = last;
 
     if (onetime)
       break;
@@ -6229,7 +6196,7 @@ done:
     const pg_pool_t *tp = osdmap.get_pg_pool(tierpool_id);
     assert(tp);
 
-    if (!_check_remove_tier(pool_id, p, &err, &ss)) {
+    if (!_check_remove_tier(pool_id, p, tp, &err, &ss)) {
       goto reply;
     }
 
@@ -6334,7 +6301,7 @@ done:
       goto reply;
     }
 
-    if (!_check_remove_tier(pool_id, p, &err, &ss)) {
+    if (!_check_remove_tier(pool_id, p, NULL, &err, &ss)) {
       goto reply;
     }
 
@@ -7000,17 +6967,29 @@ bool OSDMonitor::_check_become_tier(
  */
 bool OSDMonitor::_check_remove_tier(
     const int64_t base_pool_id, const pg_pool_t *base_pool,
+    const pg_pool_t *tier_pool,
     int *err, ostream *ss) const
 {
   const std::string &base_pool_name = osdmap.get_pool_name(base_pool_id);
 
-  // If the pool is in use by CephFS, then refuse to remove its
-  // tier
+  // Apply CephFS-specific checks
   const MDSMap &pending_mdsmap = mon->mdsmon()->pending_mdsmap;
   if (pending_mdsmap.pool_in_use(base_pool_id)) {
-    *ss << "pool '" << base_pool_name << "' is in use by CephFS via its tier";
-    *err = -EBUSY;
-    return false;
+    if (base_pool->type != pg_pool_t::TYPE_REPLICATED) {
+      // If the underlying pool is erasure coded, we can't permit the
+      // removal of the replicated tier that CephFS relies on to access it
+      *ss << "pool '" << base_pool_name << "' is in use by CephFS via its tier";
+      *err = -EBUSY;
+      return false;
+    }
+
+    if (tier_pool && tier_pool->cache_mode == pg_pool_t::CACHEMODE_WRITEBACK) {
+      *ss << "pool '" << base_pool_name << "' is in use by CephFS, and this "
+             "tier is still in use as a writeback cache.  Change the cache "
+             "mode and flush the cache before removing it";
+      *err = -EBUSY;
+      return false;
+    }
   }
 
   *err = 0;
index 414bf0824102898e12f03102896ff76b7d894658..3c70cf240e7f8103a40a0944c42836622e7597d9 100644 (file)
@@ -135,16 +135,9 @@ private:
 
   map<int,double> osd_weight;
 
-  /*
-   * cache what epochs we think osds have.  this is purely
-   * optimization to try to avoid sending the same inc maps twice.
-   */
-  map<int,epoch_t> osd_epoch;
   SimpleLRU<version_t, bufferlist> inc_osd_cache;
   SimpleLRU<version_t, bufferlist> full_osd_cache;
 
-  void note_osd_has_epoch(int osd, epoch_t epoch);
-
   void check_failures(utime_t now);
   bool check_failure(utime_t now, int target_osd, failure_info_t& fi);
 
@@ -259,7 +252,7 @@ private:
       int64_t base_pool_id, const pg_pool_t *base_pool,
       int *err, ostream *ss) const;
   bool _check_remove_tier(
-      int64_t base_pool_id, const pg_pool_t *base_pool,
+      int64_t base_pool_id, const pg_pool_t *base_pool, const pg_pool_t *tier_pool,
       int *err, ostream *ss) const;
 
   int _prepare_remove_pool(int64_t pool, ostream *ss);
index e60ed6ae29d3e446e546986c422be36dd7cfae8a..2be6693a89169e3bc8a7d80abdb4f190a55c3fcf 100644 (file)
@@ -373,7 +373,7 @@ void PGMap::calc_stats()
 
   redo_full_sets();
 
-  calc_min_last_epoch_clean();
+  min_last_epoch_clean = calc_min_last_epoch_clean();
 }
 
 void PGMap::update_pg(pg_t pgid, bufferlist& bl)
@@ -650,6 +650,7 @@ void PGMap::dump_basic(Formatter *f) const
   f->dump_stream("stamp") << stamp;
   f->dump_unsigned("last_osdmap_epoch", last_osdmap_epoch);
   f->dump_unsigned("last_pg_scan", last_pg_scan);
+  f->dump_unsigned("min_last_epoch_clean", min_last_epoch_clean);
   f->dump_float("full_ratio", full_ratio);
   f->dump_float("near_full_ratio", nearfull_ratio);
   
@@ -982,7 +983,7 @@ void PGMap::print_osd_blocked_by_stats(std::ostream *ss) const
 void PGMap::recovery_summary(Formatter *f, list<string> *psl,
                              const pool_stat_t& delta_sum) const
 {
-  if (delta_sum.stats.sum.num_objects_degraded) {
+  if (delta_sum.stats.sum.num_objects_degraded && delta_sum.stats.sum.num_object_copies > 0) {
     double pc = (double)delta_sum.stats.sum.num_objects_degraded /
       (double)delta_sum.stats.sum.num_object_copies * (double)100.0;
     char b[20];
@@ -998,7 +999,7 @@ void PGMap::recovery_summary(Formatter *f, list<string> *psl,
       psl->push_back(ss.str());
     }
   }
-  if (delta_sum.stats.sum.num_objects_misplaced) {
+  if (delta_sum.stats.sum.num_objects_misplaced && delta_sum.stats.sum.num_object_copies > 0) {
     double pc = (double)delta_sum.stats.sum.num_objects_misplaced /
       (double)delta_sum.stats.sum.num_object_copies * (double)100.0;
     char b[20];
@@ -1014,7 +1015,7 @@ void PGMap::recovery_summary(Formatter *f, list<string> *psl,
       psl->push_back(ss.str());
     }
   }
-  if (delta_sum.stats.sum.num_objects_unfound) {
+  if (delta_sum.stats.sum.num_objects_unfound && delta_sum.stats.sum.num_objects) {
     double pc = (double)delta_sum.stats.sum.num_objects_unfound /
       (double)delta_sum.stats.sum.num_objects * (double)100.0;
     char b[20];
index 07e63053762abdaaabd5ab01a54e2ff83b05407b..3c2b756af1a008c21f8d0010579448b6b3879427 100644 (file)
@@ -1295,9 +1295,12 @@ int64_t PGMonitor::get_rule_avail(OSDMap& osdmap, int ruleno)
   for (map<int,float>::iterator p = wm.begin(); p != wm.end(); ++p) {
     ceph::unordered_map<int32_t,osd_stat_t>::const_iterator osd_info = pg_map.osd_stat.find(p->first);
     if (osd_info != pg_map.osd_stat.end()) {
-      if (osd_info->second.kb == 0) {
+      if (osd_info->second.kb == 0 || p->second == 0) {
         // osd must be out, hence its stats have been zeroed
         // (unless we somehow managed to have a disk with size 0...)
+        //
+        // (p->second == 0), if osd weight is 0, no need to
+        // calculate proj below.
         continue;
       }
       int64_t proj = (float)((osd_info->second).kb_avail * 1024ull) /
index 4bdffc285f4631f4a350c47e33ed028a5127cf8e..c87cebc3da092db2ad7c2102e5e6b811df31b73a 100644 (file)
@@ -383,6 +383,9 @@ void PaxosService::trim(MonitorDBStore::TransactionRef t,
   if (g_conf->mon_compact_on_trim) {
     dout(20) << " compacting prefix " << get_service_name() << dendl;
     t->compact_range(get_service_name(), stringify(from - 1), stringify(to));
+    t->compact_range(get_service_name(),
+                    mon->store->combine_strings(full_prefix_name, from - 1),
+                    mon->store->combine_strings(full_prefix_name, to));
   }
 }
 
index 4a19d84a4fbcd6f273be6548a4a1022c942f120f..f3f93e4a64a7fe1586995e7a44617c10fa42436d 100644 (file)
@@ -50,6 +50,7 @@ struct MonSession : public RefCountedObject {
   uint64_t global_id;
 
   map<string, Subscription*> sub_map;
+  epoch_t osd_epoch;           // the osdmap epoch sent to the mon client
 
   AuthServiceHandler *auth_handler;
   EntityName entity_name;
@@ -60,7 +61,9 @@ struct MonSession : public RefCountedObject {
   MonSession(const entity_inst_t& i, Connection *c) :
     con(c), inst(i), closed(false), item(this),
     auid(0),
-    global_id(0), auth_handler(NULL),
+    global_id(0),
+    osd_epoch(0),
+    auth_handler(NULL),
     proxy_con(NULL), proxy_tid(0) {
     time_established = ceph_clock_now(g_ceph_context);
   }
index b63950e0a624a1a15786da71303dd8537e018f5f..ea28808b2f4c242b034e9a55110e9e339ded0c29 100644 (file)
 #include "msg/xio/XioMessenger.h"
 #endif
 
+Messenger *Messenger::create_client_messenger(CephContext *cct, string lname)
+{
+  uint64_t nonce = 0;
+  get_random_bytes((char*)&nonce, sizeof(nonce));
+  return Messenger::create(cct, cct->_conf->ms_type, entity_name_t::CLIENT(),
+                          lname, nonce);
+}
+
 Messenger *Messenger::create(CephContext *cct, const string &type,
                             entity_name_t name, string lname,
                             uint64_t nonce)
index 429e5007e77832f62cf57a340c34b5de5a11fcf8..82f6c021c01749f2736ae5526111636a639e319a 100644 (file)
@@ -158,6 +158,21 @@ public:
                           string lname,
                            uint64_t nonce);
 
+  /**
+   * create a new messenger
+   *
+   * Create a new messenger instance.
+   * Same as the above, but a slightly simpler interface for clients:
+   * - Generate a random nonce
+   * - use the default feature bits
+   * - get the messenger type from cct
+   * - use the client entity_type
+   *
+   * @param cct context
+   * @param lname logical name of the messenger in this process (e.g., "client")
+   */
+  static Messenger *create_client_messenger(CephContext *cct, string lname);
+
   /**
    * @defgroup Accessors
    * @{
index 685799f64bd4b1331fbecb0f53afaf941c175907..fdd5844cc4e8580fc8f195bfb3632289e765e99e 100644 (file)
@@ -80,7 +80,7 @@ class Processor {
   void accept();
 };
 
-class WorkerPool: CephContext::AssociatedSingletonObject {
+class WorkerPool {
   WorkerPool(const WorkerPool &);
   WorkerPool& operator=(const WorkerPool &);
   CephContext *cct;
index f6c3bb872a2ea0ad2be85c72a3a9b25f24a670a2..c7f9bea31a9e3303bc43d4c276952f574bc578a1 100644 (file)
@@ -78,7 +78,11 @@ using ceph::crypto::SHA1;
 #include "common/config.h"
 
 #ifdef WITH_LTTNG
+#define TRACEPOINT_DEFINE
+#define TRACEPOINT_PROBE_DYNAMIC_LINKAGE
 #include "tracing/objectstore.h"
+#undef TRACEPOINT_PROBE_DYNAMIC_LINKAGE
+#undef TRACEPOINT_DEFINE
 #else
 #define tracepoint(...)
 #endif
@@ -3780,6 +3784,7 @@ int FileStore::_fgetattrs(int fd, map<string,bufferptr>& aset)
     dout(10) << " -ERANGE, got " << len << dendl;
     if (len < 0) {
       assert(!m_filestore_fail_eio || len != -EIO);
+      delete[] names2;
       return len;
     }
     name = names2;
@@ -3798,8 +3803,10 @@ int FileStore::_fgetattrs(int fd, map<string,bufferptr>& aset)
       if (*name) {
         dout(20) << "fgetattrs " << fd << " getting '" << name << "'" << dendl;
         int r = _fgetattr(fd, attrname, aset[name]);
-        if (r < 0)
+        if (r < 0) {
+         delete[] names2;
          return r;
+        }
       }
     }
     name += strlen(name) + 1;
index af1fb8d8121258edc278839324c0c89b74650f91..a9291b743c9bc3b214d8bb1cdb86fa04a6fa2239 100644 (file)
@@ -258,6 +258,7 @@ private:
       q.push_back(o);
     }
     Op *peek_queue() {
+      Mutex::Locker l(qlock);
       assert(apply_lock.is_locked());
       return q.front();
     }
index 2638810ededea1029145e972b505aa03d4c2a9b7..7e584b44af1443645580250fdea0d409ff773a70 100644 (file)
@@ -40,9 +40,6 @@ endif
 
 libos_la_CXXFLAGS = ${AM_CXXFLAGS}
 libos_la_LIBADD = $(LIBOS_TYPES)
-if WITH_LTTNG
-libos_la_LIBADD += $(LIBOS_TP)
-endif
 
 noinst_LTLIBRARIES += libos.la
 
index 845ea832eeb80e9a0dba9d7d925f0e8397b75886..3b517402bcef79943953ceb1208e6a02e8766110 100644 (file)
@@ -366,6 +366,15 @@ void ECBackend::handle_recovery_read_complete(
     op.xattrs.swap(*attrs);
 
     if (!op.obc) {
+      // attrs only reference the origin bufferlist (decode from ECSubReadReply message)
+      // whose size is much greater than attrs in recovery. If obc cache it (get_obc maybe
+      // cache the attr), this causes the whole origin bufferlist would not be free until
+      // obc is evicted from obc cache. So rebuild the bufferlist before cache it.
+      for (map<string, bufferlist>::iterator it = op.xattrs.begin();
+           it != op.xattrs.end();
+           ++it) {
+        it->second.rebuild();
+      }
       op.obc = get_parent()->get_obc(hoid, op.xattrs);
       op.recovery_info.size = op.obc->obs.oi.size;
       op.recovery_info.oi = op.obc->obs.oi;
index 7998d4d4ea3b32f36245f0afbaefc6b5125c573e..4292fb994d343b52c048f9898d199d675d26ace4 100644 (file)
@@ -32,9 +32,6 @@ if WITH_KINETIC
 libosd_la_CXXFLAGS += -std=gnu++11
 endif
 libosd_la_LIBADD = $(LIBOSDC) $(LIBOS) $(LIBOSD_TYPES) $(LIBOS_TYPES)
-if WITH_LTTNG
-libosd_la_LIBADD += $(LIBOSD_TP)
-endif
 noinst_LTLIBRARIES += libosd.la
 
 noinst_HEADERS += \
index 0c01ba6168df6e0688ba78defc91bc6082919a2e..f121a3dfbf529ebc9bfa73cc1d2a35423fc417e2 100644 (file)
 #include "common/config.h"
 
 #ifdef WITH_LTTNG
+#define TRACEPOINT_DEFINE
+#define TRACEPOINT_PROBE_DYNAMIC_LINKAGE
 #include "tracing/osd.h"
+#undef TRACEPOINT_PROBE_DYNAMIC_LINKAGE
+#undef TRACEPOINT_DEFINE
 #else
 #define tracepoint(...)
 #endif
@@ -530,7 +534,7 @@ void OSDService::agent_entry()
     int max = g_conf->osd_agent_max_ops - agent_ops;
     agent_lock.Unlock();
     if (!pg->agent_work(max)) {
-      dout(10) << __func__ << " " << *pg
+      dout(10) << __func__ << " " << pg->get_pgid()
        << " no agent_work, delay for " << g_conf->osd_agent_delay_time
        << " seconds" << dendl;
 
@@ -2289,6 +2293,7 @@ int OSD::shutdown()
       p->second->osr->flush();
     }
   }
+  clear_pg_stat_queue();
   
   // finish ops
   op_shardedwq.drain(); // should already be empty except for lagard PGs
@@ -3040,6 +3045,8 @@ void OSD::build_past_intervals_parallel()
                 << " " << debug.str() << dendl;
        p.old_up = up;
        p.old_acting = acting;
+       p.primary = primary;
+       p.up_primary = up_primary;
        p.same_interval_since = cur_epoch;
       }
     }
@@ -4649,21 +4656,17 @@ void OSD::send_alive()
 void OSD::send_failures()
 {
   assert(osd_lock.is_locked());
-  bool locked = false;
-  if (!failure_queue.empty()) {
-    heartbeat_lock.Lock();
-    locked = true;
-  }
+  Mutex::Locker l(heartbeat_lock);
   utime_t now = ceph_clock_now(cct);
   while (!failure_queue.empty()) {
     int osd = failure_queue.begin()->first;
     int failed_for = (int)(double)(now - failure_queue.begin()->second);
     entity_inst_t i = osdmap->get_inst(osd);
-    monc->send_mon_message(new MOSDFailure(monc->get_fsid(), i, failed_for, osdmap->get_epoch()));
+    monc->send_mon_message(new MOSDFailure(monc->get_fsid(), i, failed_for,
+                                          osdmap->get_epoch()));
     failure_pending[osd] = i;
     failure_queue.erase(osd);
   }
-  if (locked) heartbeat_lock.Unlock();
 }
 
 void OSD::send_still_alive(epoch_t epoch, const entity_inst_t &i)
@@ -5919,6 +5922,30 @@ bool OSD::scrub_random_backoff()
   return false;
 }
 
+OSDService::ScrubJob::ScrubJob(const spg_t& pg, const utime_t& timestamp, bool must)
+  : pgid(pg),
+    sched_time(timestamp),
+    deadline(timestamp)
+{
+  // if not explicitly requested, postpone the scrub with a random delay
+  if (!must) {
+    sched_time += g_conf->osd_scrub_min_interval;
+    if (g_conf->osd_scrub_interval_randomize_ratio > 0) {
+      sched_time += rand() % (int)(g_conf->osd_scrub_min_interval *
+                                  g_conf->osd_scrub_interval_randomize_ratio);
+    }
+    deadline += g_conf->osd_scrub_max_interval;
+  }
+}
+
+bool OSDService::ScrubJob::ScrubJob::operator<(const OSDService::ScrubJob& rhs) const {
+  if (sched_time < rhs.sched_time)
+    return true;
+  if (sched_time > rhs.sched_time)
+    return false;
+  return pgid < rhs.pgid;
+}
+
 bool OSD::scrub_time_permit(utime_t now)
 {
   struct tm bdt; 
@@ -5935,91 +5962,73 @@ bool OSD::scrub_time_permit(utime_t now)
     }    
   }
   if (!time_permit) {
-    dout(20) << "scrub_should_schedule should run between " << cct->_conf->osd_scrub_begin_hour
+    dout(20) << __func__ << " should run between " << cct->_conf->osd_scrub_begin_hour
             << " - " << cct->_conf->osd_scrub_end_hour
             << " now " << bdt.tm_hour << " = no" << dendl;
   } else {
-    dout(20) << "scrub_should_schedule should run between " << cct->_conf->osd_scrub_begin_hour
+    dout(20) << __func__ << " should run between " << cct->_conf->osd_scrub_begin_hour
             << " - " << cct->_conf->osd_scrub_end_hour
             << " now " << bdt.tm_hour << " = yes" << dendl;
   }
   return time_permit;
 }
 
-bool OSD::scrub_should_schedule()
+bool OSD::scrub_load_below_threshold()
 {
-  if (!scrub_time_permit(ceph_clock_now(cct))) {
-    return false;
-  }
   double loadavgs[1];
   if (getloadavg(loadavgs, 1) != 1) {
-    dout(10) << "scrub_should_schedule couldn't read loadavgs\n" << dendl;
+    dout(10) << __func__ << " couldn't read loadavgs\n" << dendl;
     return false;
   }
 
   if (loadavgs[0] >= cct->_conf->osd_scrub_load_threshold) {
-    dout(20) << "scrub_should_schedule loadavg " << loadavgs[0]
+    dout(20) << __func__ << " loadavg " << loadavgs[0]
             << " >= max " << cct->_conf->osd_scrub_load_threshold
             << " = no, load too high" << dendl;
     return false;
+  } else {
+    dout(20) << __func__ << " loadavg " << loadavgs[0]
+            << " < max " << cct->_conf->osd_scrub_load_threshold
+            << " = yes" << dendl;
+    return true;
   }
-
-  dout(20) << "scrub_should_schedule loadavg " << loadavgs[0]
-          << " < max " << cct->_conf->osd_scrub_load_threshold
-          << " = yes" << dendl;
-  return loadavgs[0] < cct->_conf->osd_scrub_load_threshold;
 }
 
 void OSD::sched_scrub()
 {
-  assert(osd_lock.is_locked());
-
-  bool load_is_low = scrub_should_schedule();
-
-  dout(20) << "sched_scrub load_is_low=" << (int)load_is_low << dendl;
-
   utime_t now = ceph_clock_now(cct);
-  
-  //dout(20) << " " << last_scrub_pg << dendl;
+  bool time_permit = scrub_time_permit(now);
+  bool load_is_low = scrub_load_below_threshold();
+  dout(20) << "sched_scrub load_is_low=" << (int)load_is_low << dendl;
 
-  pair<utime_t, spg_t> pos;
-  if (service.first_scrub_stamp(&pos)) {
+  OSDService::ScrubJob scrub;
+  if (service.first_scrub_stamp(&scrub)) {
     do {
-      utime_t t = pos.first;
-      spg_t pgid = pos.second;
-      dout(30) << "sched_scrub examine " << pgid << " at " << t << dendl;
-
-      utime_t diff = now - t;
-      if ((double)diff < cct->_conf->osd_scrub_min_interval) {
-       dout(10) << "sched_scrub " << pgid << " at " << t
-                << ": " << (double)diff << " < min (" << cct->_conf->osd_scrub_min_interval << " seconds)" << dendl;
-       break;
-      }
-      if ((double)diff < cct->_conf->osd_scrub_max_interval && !load_is_low) {
+      dout(30) << "sched_scrub examine " << scrub.pgid << " at " << scrub.sched_time << dendl;
+
+      if (scrub.sched_time > now) {
        // save ourselves some effort
-       dout(10) << "sched_scrub " << pgid << " high load at " << t
-                << ": " << (double)diff << " < max (" << cct->_conf->osd_scrub_max_interval << " seconds)" << dendl;
+       dout(10) << "sched_scrub " << scrub.pgid << " schedued at " << scrub.sched_time
+                << " > " << now << dendl;
        break;
       }
 
-      PG *pg = _lookup_lock_pg(pgid);
-      if (pg) {
-       if (pg->get_pgbackend()->scrub_supported() && pg->is_active() &&
-           (load_is_low ||
-            (double)diff >= cct->_conf->osd_scrub_max_interval ||
-            pg->scrubber.must_scrub)) {
-         dout(10) << "sched_scrub scrubbing " << pgid << " at " << t
-                  << (pg->scrubber.must_scrub ? ", explicitly requested" :
-                  ( (double)diff >= cct->_conf->osd_scrub_max_interval ? ", diff >= max" : ""))
-                  << dendl;
-         if (pg->sched_scrub()) {
-           pg->unlock();
-           break;
-         }
+      PG *pg = _lookup_lock_pg(scrub.pgid);
+      if (!pg)
+       continue;
+      if (pg->get_pgbackend()->scrub_supported() && pg->is_active() &&
+         (scrub.deadline < now || (time_permit && load_is_low))) {
+       dout(10) << "sched_scrub scrubbing " << scrub.pgid << " at " << scrub.sched_time
+                << (pg->scrubber.must_scrub ? ", explicitly requested" :
+                    (load_is_low ? ", load_is_low" : " deadline < now"))
+                << dendl;
+       if (pg->sched_scrub()) {
+         pg->unlock();
+         break;
        }
-       pg->unlock();
       }
-    } while  (service.next_scrub_stamp(pos, &pos));
+      pg->unlock();
+    } while (service.next_scrub_stamp(scrub, &scrub));
   }    
   dout(20) << "sched_scrub done" << dendl;
 }
@@ -7848,11 +7857,11 @@ void OSD::check_replay_queue()
       PG *pg = _lookup_lock_pg_with_map_lock_held(pgid);
       pg_map_lock.unlock();
       dout(10) << "check_replay_queue " << *pg << dendl;
-      if (pg->is_active() &&
-          pg->is_replay() &&
+      if ((pg->is_active() || pg->is_activating()) &&
+         pg->is_replay() &&
           pg->is_primary() &&
           pg->replay_until == p->second) {
-        pg->replay_queued_ops();
+       pg->replay_queued_ops();
       }
       pg->unlock();
     } else {
index a3b636e35a7cbca370435b5d0834a9a7bf873dc4..3cc8df05d84e12029832fa291edf90732bcfee56 100644 (file)
@@ -505,37 +505,51 @@ public:
   Mutex sched_scrub_lock;
   int scrubs_pending;
   int scrubs_active;
-  set< pair<utime_t,spg_t> > last_scrub_pg;
+  struct ScrubJob {
+    /// pg to be scrubbed
+    spg_t pgid;
+    /// a time scheduled for scrub. but the scrub could be delayed if system
+    /// load is too high or it fails to fall in the scrub hours
+    utime_t sched_time;
+    /// the hard upper bound of scrub time
+    utime_t deadline;
+    ScrubJob() {}
+    explicit ScrubJob(const spg_t& pg, const utime_t& timestamp, bool must = true);
+    /// order the jobs by sched_time
+    bool operator<(const ScrubJob& rhs) const;
+  };
+  set<ScrubJob> sched_scrub_pg;
 
-  void reg_last_pg_scrub(spg_t pgid, utime_t t) {
+  /// @returns the scrub_reg_stamp used for unregister the scrub job
+  utime_t reg_pg_scrub(spg_t pgid, utime_t t, bool must) {
+    ScrubJob scrub(pgid, t, must);
     Mutex::Locker l(sched_scrub_lock);
-    last_scrub_pg.insert(pair<utime_t,spg_t>(t, pgid));
+    sched_scrub_pg.insert(scrub);
+    return scrub.sched_time;
   }
-  void unreg_last_pg_scrub(spg_t pgid, utime_t t) {
+  void unreg_pg_scrub(spg_t pgid, utime_t t) {
     Mutex::Locker l(sched_scrub_lock);
-    pair<utime_t,spg_t> p(t, pgid);
-    set<pair<utime_t,spg_t> >::iterator it = last_scrub_pg.find(p);
-    assert(it != last_scrub_pg.end());
-    last_scrub_pg.erase(it);
+    size_t removed = sched_scrub_pg.erase(ScrubJob(pgid, t));
+    assert(removed);
   }
-  bool first_scrub_stamp(pair<utime_t, spg_t> *out) {
+  bool first_scrub_stamp(ScrubJob *out) {
     Mutex::Locker l(sched_scrub_lock);
-    if (last_scrub_pg.empty())
+    if (sched_scrub_pg.empty())
       return false;
-    set< pair<utime_t, spg_t> >::iterator iter = last_scrub_pg.begin();
+    set<ScrubJob>::iterator iter = sched_scrub_pg.begin();
     *out = *iter;
     return true;
   }
-  bool next_scrub_stamp(pair<utime_t, spg_t> next,
-                       pair<utime_t, spg_t> *out) {
+  bool next_scrub_stamp(const ScrubJob& next,
+                       ScrubJob *out) {
     Mutex::Locker l(sched_scrub_lock);
-    if (last_scrub_pg.empty())
+    if (sched_scrub_pg.empty())
       return false;
-    set< pair<utime_t, spg_t> >::iterator iter = last_scrub_pg.lower_bound(next);
-    if (iter == last_scrub_pg.end())
+    set<ScrubJob>::iterator iter = sched_scrub_pg.lower_bound(next);
+    if (iter == sched_scrub_pg.end())
       return false;
     ++iter;
-    if (iter == last_scrub_pg.end())
+    if (iter == sched_scrub_pg.end())
       return false;
     *out = *iter;
     return true;
@@ -2102,7 +2116,7 @@ protected:
   // -- scrubbing --
   void sched_scrub();
   bool scrub_random_backoff();
-  bool scrub_should_schedule();
+  bool scrub_load_below_threshold();
   bool scrub_time_permit(utime_t now);
 
   xlist<PG*> scrub_queue;
index a9154d48a297a85402e5f0b651111e2fd99f4b86..173b468b5b0ed1118bae3b28043d78029b5f5e5b 100644 (file)
@@ -590,6 +590,10 @@ void OSDMap::Incremental::decode(bufferlist::iterator& bl)
     bl.advance(-struct_v_size);
     decode_classic(bl);
     encode_features = 0;
+    if (struct_v >= 6)
+      encode_features = CEPH_FEATURE_PGID64;
+    else
+      encode_features = 0;
     return;
   }
   {
@@ -641,7 +645,7 @@ void OSDMap::Incremental::decode(bufferlist::iterator& bl)
     if (struct_v >= 2)
       ::decode(encode_features, bl);
     else
-      encode_features = 0;
+      encode_features = CEPH_FEATURE_PGID64 | CEPH_FEATURE_OSDMAP_ENC;
     DECODE_FINISH(bl); // osd-only data
   }
 
index 3e17d30774a5505d4af140fc735268e039258056..acdc3af4f2cf1d50b48f865c15ed84a3282f21a4 100644 (file)
@@ -430,6 +430,10 @@ public:
     return exists(osd) && (osd_state[osd] & CEPH_OSD_UP);
   }
 
+  bool has_been_up_since(int osd, epoch_t epoch) const {
+    return is_up(osd) && get_up_from(osd) <= epoch;
+  }
+
   bool is_down(int osd) const {
     return !is_up(osd);
   }
index 12963342feb78b616c6dc075863ccfcf440b2946..37b3aec4d6e6fc7f63805af4795d8ac932b3b1b5 100644 (file)
 #include "osd/osd_types.h"
 
 #ifdef WITH_LTTNG
+#define TRACEPOINT_DEFINE
+#define TRACEPOINT_PROBE_DYNAMIC_LINKAGE
 #include "tracing/oprequest.h"
+#undef TRACEPOINT_PROBE_DYNAMIC_LINKAGE
+#undef TRACEPOINT_DEFINE
 #else
 #define tracepoint(...)
 #endif
index 7b91bf8c97d934d60004f30174b034c462ddd03d..634dc5656055fc0e69429fd8fd0dccdfa53226e1 100644 (file)
 #include "common/BackTrace.h"
 
 #ifdef WITH_LTTNG
+#define TRACEPOINT_DEFINE
+#define TRACEPOINT_PROBE_DYNAMIC_LINKAGE
 #include "tracing/pg.h"
+#undef TRACEPOINT_PROBE_DYNAMIC_LINKAGE
+#undef TRACEPOINT_DEFINE
 #else
 #define tracepoint(...)
 #endif
@@ -285,7 +289,8 @@ void PG::proc_master_log(
   if (oinfo.last_epoch_started > info.last_epoch_started)
     info.last_epoch_started = oinfo.last_epoch_started;
   info.history.merge(oinfo.history);
-  assert(info.last_epoch_started >= info.history.last_epoch_started);
+  assert(cct->_conf->osd_find_best_info_ignore_history_les ||
+        info.last_epoch_started >= info.history.last_epoch_started);
 
   peer_missing[from].swap(omissing);
 }
@@ -313,7 +318,8 @@ void PG::proc_replica_log(
   peer_missing[from].swap(omissing);
 }
 
-bool PG::proc_replica_info(pg_shard_t from, const pg_info_t &oinfo)
+bool PG::proc_replica_info(
+  pg_shard_t from, const pg_info_t &oinfo, epoch_t send_epoch)
 {
   map<pg_shard_t, pg_info_t>::iterator p = peer_info.find(from);
   if (p != peer_info.end() && p->second.last_update == oinfo.last_update) {
@@ -321,6 +327,12 @@ bool PG::proc_replica_info(pg_shard_t from, const pg_info_t &oinfo)
     return false;
   }
 
+  if (!get_osdmap()->has_been_up_since(from.osd, send_epoch)) {
+    dout(10) << " got info " << oinfo << " from down osd." << from
+            << " discarding" << dendl;
+    return false;
+  }
+
   dout(10) << " got osd." << from << " " << oinfo << dendl;
   assert(is_primary());
   peer_info[from] = oinfo;
@@ -1818,6 +1830,7 @@ void PG::queue_op(OpRequestRef& op)
 void PG::replay_queued_ops()
 {
   assert(is_replay());
+  assert(is_active() || is_activating());
   eversion_t c = info.last_update;
   list<OpRequestRef> replay;
   dout(10) << "replay_queued_ops" << dendl;
@@ -1838,9 +1851,13 @@ void PG::replay_queued_ops()
     replay.push_back(p->second);
   }
   replay_queue.clear();
-  requeue_ops(replay);
-  requeue_ops(waiting_for_active);
-  assert(waiting_for_peered.empty());
+  if (is_active()) {
+    requeue_ops(replay);
+    requeue_ops(waiting_for_active);
+    assert(waiting_for_peered.empty());
+  } else {
+    waiting_for_active.splice(waiting_for_active.begin(), replay);
+  }
 
   publish_stats_to_osd();
 }
@@ -3318,20 +3335,27 @@ bool PG::sched_scrub()
 
 void PG::reg_next_scrub()
 {
+  if (!is_primary())
+    return;
+
+  utime_t reg_stamp;
   if (scrubber.must_scrub ||
       (info.stats.stats_invalid && g_conf->osd_scrub_invalid_stats)) {
-    scrubber.scrub_reg_stamp = utime_t();
+    reg_stamp = ceph_clock_now(cct);
   } else {
-    scrubber.scrub_reg_stamp = info.history.last_scrub_stamp;
+    reg_stamp = info.history.last_scrub_stamp;
   }
-  if (is_primary())
-    osd->reg_last_pg_scrub(info.pgid, scrubber.scrub_reg_stamp);
+  // note down the sched_time, so we can locate this scrub, and remove it
+  // later on.
+  scrubber.scrub_reg_stamp = osd->reg_pg_scrub(info.pgid,
+                                              reg_stamp,
+                                              scrubber.must_scrub);
 }
 
 void PG::unreg_next_scrub()
 {
   if (is_primary())
-    osd->unreg_last_pg_scrub(info.pgid, scrubber.scrub_reg_stamp);
+    osd->unreg_pg_scrub(info.pgid, scrubber.scrub_reg_stamp);
 }
 
 void PG::sub_op_scrub_map(OpRequestRef op)
@@ -3799,26 +3823,8 @@ void PG::scrub(ThreadPool::TPHandle &handle)
     return;
   }
 
-  // when we're starting a scrub, we need to determine which type of scrub to do
   if (!scrubber.active) {
-    OSDMapRef curmap = osd->get_osdmap();
     assert(backfill_targets.empty());
-    for (unsigned i=0; i<acting.size(); i++) {
-      if (acting[i] == pg_whoami.osd)
-       continue;
-      if (acting[i] == CRUSH_ITEM_NONE)
-       continue;
-      ConnectionRef con = osd->get_con_osd_cluster(acting[i], get_osdmap()->get_epoch());
-      if (!con)
-       continue;
-      if (!con->has_feature(CEPH_FEATURE_CHUNKY_SCRUB)) {
-        dout(20) << "OSD " << acting[i]
-                 << " does not support chunky scrubs, falling back to classic"
-                 << dendl;
-        assert(0 == "Running incompatible OSD");
-        break;
-      }
-    }
 
     scrubber.deep = state_test(PG_STATE_DEEP_SCRUB);
 
@@ -5280,12 +5286,12 @@ void PG::handle_advance_map(
           << dendl;
   update_osdmap_ref(osdmap);
   pool.update(osdmap);
-  if (pool.info.last_change == osdmap_ref->get_epoch())
-    on_pool_change();
   AdvMap evt(
     osdmap, lastmap, newup, up_primary,
     newacting, acting_primary);
   recovery_state.handle_event(evt, rctx);
+  if (pool.info.last_change == osdmap_ref->get_epoch())
+    on_pool_change();
 }
 
 void PG::handle_activate_map(RecoveryCtx *rctx)
@@ -5377,7 +5383,8 @@ boost::statechart::result PG::RecoveryState::Initial::react(const Load& l)
 boost::statechart::result PG::RecoveryState::Initial::react(const MNotifyRec& notify)
 {
   PG *pg = context< RecoveryMachine >().pg;
-  pg->proc_replica_info(notify.from, notify.notify.info);
+  pg->proc_replica_info(
+    notify.from, notify.notify.info, notify.notify.epoch_sent);
   pg->update_heartbeat_peers();
   pg->set_last_peering_reset();
   return transit< Primary >();
@@ -5610,7 +5617,8 @@ boost::statechart::result PG::RecoveryState::Primary::react(const MNotifyRec& no
     dout(10) << *pg << " got dup osd." << notevt.from << " info " << notevt.notify.info
             << ", identical to ours" << dendl;
   } else {
-    pg->proc_replica_info(notevt.from, notevt.notify.info);
+    pg->proc_replica_info(
+      notevt.from, notevt.notify.info, notevt.notify.epoch_sent);
   }
   return discard_event();
 }
@@ -6467,7 +6475,8 @@ boost::statechart::result PG::RecoveryState::Active::react(const MNotifyRec& not
     dout(10) << "Active: got notify from " << notevt.from 
             << ", calling proc_replica_info and discover_all_missing"
             << dendl;
-    pg->proc_replica_info(notevt.from, notevt.notify.info);
+    pg->proc_replica_info(
+      notevt.from, notevt.notify.info, notevt.notify.epoch_sent);
     if (pg->have_unfound()) {
       pg->discover_all_missing(*context< RecoveryMachine >().get_query_map());
     }
@@ -6904,7 +6913,8 @@ boost::statechart::result PG::RecoveryState::GetInfo::react(const MNotifyRec& in
   }
 
   epoch_t old_start = pg->info.history.last_epoch_started;
-  if (pg->proc_replica_info(infoevt.from, infoevt.notify.info)) {
+  if (pg->proc_replica_info(
+       infoevt.from, infoevt.notify.info, infoevt.notify.epoch_sent)) {
     // we got something new ...
     auto_ptr<PriorSet> &prior_set = context< Peering >().prior_set;
     if (old_start < pg->info.history.last_epoch_started) {
@@ -7259,7 +7269,8 @@ boost::statechart::result PG::RecoveryState::Incomplete::react(const MNotifyRec&
             << ", identical to ours" << dendl;
     return discard_event();
   } else {
-    pg->proc_replica_info(notevt.from, notevt.notify.info);
+    pg->proc_replica_info(
+      notevt.from, notevt.notify.info, notevt.notify.epoch_sent);
     // try again!
     return transit< GetLog >();
   }
index 41de9d6d14a6a021d65ca100467590136d3cea53..e06b9102553620bfc9f81fe2efcf509fe4ba50fe 100644 (file)
@@ -843,7 +843,8 @@ public:
                        pg_missing_t& omissing, pg_shard_t from);
   void proc_master_log(ObjectStore::Transaction& t, pg_info_t &oinfo, pg_log_t &olog,
                       pg_missing_t& omissing, pg_shard_t from);
-  bool proc_replica_info(pg_shard_t from, const pg_info_t &info);
+  bool proc_replica_info(
+    pg_shard_t from, const pg_info_t &info, epoch_t send_epoch);
 
 
   struct LogEntryTrimmer : public ObjectModDesc::Visitor {
@@ -2078,6 +2079,7 @@ public:
 
   int get_state() const { return state; }
   bool       is_active() const { return state_test(PG_STATE_ACTIVE); }
+  bool       is_activating() const { return state_test(PG_STATE_ACTIVATING); }
   bool       is_peering() const { return state_test(PG_STATE_PEERING); }
   bool       is_down() const { return state_test(PG_STATE_DOWN); }
   bool       is_replay() const { return state_test(PG_STATE_REPLAY); }
index 7fc56d10fa49087a0d16a14d45bfdceb19623fb5..2b897d7f8e0b764daf54bfdbe8501ffb52fc9767 100644 (file)
@@ -675,7 +675,10 @@ void PGBackend::be_compare_scrubmaps(
        update = MAYBE;
       }
       if (update != NO) {
-       utime_t age = now - auth_oi.local_mtime;
+       utime_t mtime = auth_oi.local_mtime;
+       if (mtime == utime_t())
+         mtime = auth_oi.mtime;
+       utime_t age = now - mtime;
        if (update == FORCE ||
            age > g_conf->osd_deep_scrub_update_digest_min_age) {
          dout(20) << __func__ << " will update digest on " << *k << dendl;
index b86d4d1e7444f1661af0604e0f2804eb02160b0f..64815739566de34b7f5e3a8b4336a29efaf9a007 100644 (file)
@@ -1500,6 +1500,9 @@ void ReplicatedBackend::prepare_pull(
                       recovery_info.clone_subset);
     // FIXME: this may overestimate if we are pulling multiple clones in parallel...
     dout(10) << " pulling " << recovery_info << dendl;
+
+    assert(ssc->snapset.clone_size.count(soid.snap));
+    recovery_info.size = ssc->snapset.clone_size[soid.snap];
   } else {
     // pulling head or unversioned object.
     // always pull the whole thing.
@@ -1802,6 +1805,15 @@ bool ReplicatedBackend::handle_pull_response(
 
   bool first = pi.recovery_progress.first;
   if (first) {
+    // attrs only reference the origin bufferlist (decode from MOSDPGPush message)
+    // whose size is much greater than attrs in recovery. If obc cache it (get_obc maybe
+    // cache the attr), this causes the whole origin bufferlist would not be free until
+    // obc is evicted from obc cache. So rebuild the bufferlist before cache it.
+    for (map<string, bufferlist>::iterator it = pop.attrset.begin();
+         it != pop.attrset.end();
+         ++it) {
+      it->second.rebuild();
+    }
     pi.obc = get_parent()->get_obc(pi.recovery_info.soid, pop.attrset);
     pi.recovery_info.oi = pi.obc->obs.oi;
     pi.recovery_info = recalc_subsets(pi.recovery_info, pi.obc->ssc);
index 59d8efafae3c75a69ced15272ac7651d79588e47..2c3f12ddf21cdb3749020f3ec6af4d1af2e4292d 100644 (file)
@@ -1856,24 +1856,29 @@ bool ReplicatedPG::maybe_handle_cache(OpRequestRef op,
       }
       break;
     default:
-      if (in_hit_set) {
-       promote_object(obc, missing_oid, oloc, promote_op);
-      } else {
+      unsigned count = (int)in_hit_set;
+      if (count) {
        // Check if in other hit sets
-       map<time_t,HitSetRef>::iterator itor;
-       bool in_other_hit_sets = false;
-       for (itor = agent_state->hit_set_map.begin(); itor != agent_state->hit_set_map.end(); ++itor) {
-         if (itor->second->contains(missing_oid)) {
-           in_other_hit_sets = true;
+       const hobject_t& oid = obc.get() ? obc->obs.oi.soid : missing_oid;
+       for (map<time_t,HitSetRef>::reverse_iterator itor =
+              agent_state->hit_set_map.rbegin();
+            itor != agent_state->hit_set_map.rend();
+            ++itor) {
+         if (!itor->second->contains(oid)) {
+           break;
+         }
+         ++count;
+         if (count >= pool.info.min_read_recency_for_promote) {
            break;
          }
-       }
-       if (in_other_hit_sets) {
-         promote_object(obc, missing_oid, oloc, promote_op);
-       } else if (!can_proxy_read) {
-         do_cache_redirect(op);
        }
       }
+      if (count >= pool.info.min_read_recency_for_promote) {
+       promote_object(obc, missing_oid, oloc, promote_op);
+      } else {
+       // not promoting
+       return false;
+      }
       break;
     }
     return true;
@@ -2101,6 +2106,9 @@ void ReplicatedPG::cancel_proxy_read(ProxyReadOpRef prdop)
   // cancel objecter op, if we can
   if (prdop->objecter_tid) {
     osd->objecter->op_cancel(prdop->objecter_tid, -ECANCELED);
+    for (uint32_t i = 0; i < prdop->ops.size(); i++) {
+      prdop->ops[i].outdata.clear();
+    }
     proxyread_ops.erase(prdop->objecter_tid);
     prdop->objecter_tid = 0;
   }
@@ -2285,10 +2293,8 @@ void ReplicatedPG::execute_ctx(OpContext *ctx)
     return;
   }
 
-  // check for full
-  if (ctx->delta_stats.num_bytes > 0 &&
-      pool.info.has_flag(pg_pool_t::FLAG_FULL)) {
-    reply_ctx(ctx, -ENOSPC);
+  if (result == -ENOSPC) {
+    reply_ctx(ctx, result);
     return;
   }
 
@@ -3277,6 +3283,23 @@ struct FillInExtent : public Context {
   }
 };
 
+struct ToSparseReadResult : public Context {
+  bufferlist& data_bl;
+  ceph_le64& len;
+  ToSparseReadResult(bufferlist& bl, ceph_le64& len):
+    data_bl(bl), len(len) {}
+  void finish(int r) {
+    if (r < 0) return;
+    len = r;
+    bufferlist outdata;
+    map<uint64_t, uint64_t> extents;
+    extents.insert(make_pair(0, len));
+    ::encode(extents, outdata);
+    ::encode_destructively(data_bl, outdata);
+    data_bl.swap(outdata);
+  }
+};
+
 template<typename V>
 static string list_keys(const map<string, V>& m) {
   string s;
@@ -3501,17 +3524,21 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
     /* map extents */
     case CEPH_OSD_OP_SPARSE_READ:
       tracepoint(osd, do_osd_op_pre_sparse_read, soid.oid.name.c_str(), soid.snap.val, oi.size, oi.truncate_seq, op.extent.offset, op.extent.length, op.extent.truncate_size, op.extent.truncate_seq);
-      if (pool.info.require_rollback()) {
-       result = -EOPNOTSUPP;
+      if (op.extent.truncate_seq) {
+       dout(0) << "sparse_read does not support truncation sequence " << dendl;
+       result = -EINVAL;
        break;
       }
       ++ctx->num_read;
-      {
-        if (op.extent.truncate_seq) {
-          dout(0) << "sparse_read does not support truncation sequence " << dendl;
-          result = -EINVAL;
-          break;
-        }
+      if (pool.info.ec_pool()) {
+       // translate sparse read to a normal one if not supported
+       ctx->pending_async_reads.push_back(
+         make_pair(
+           boost::make_tuple(op.extent.offset, op.extent.length, op.flags),
+           make_pair(&osd_op.outdata, new ToSparseReadResult(osd_op.outdata,
+                                                             op.extent.length))));
+       dout(10) << " async_read (was sparse_read) noted for " << soid << dendl;
+      } else {
        // read into a buffer
        bufferlist bl;
         int total_read = 0;
@@ -3551,6 +3578,11 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
          data_bl.claim_append(tmpbl);
          last = miter->first + r;
         }
+        
+        if (r < 0) {
+          result = r;
+          break;
+        }
 
        // verify trailing hole?
        if (cct->_conf->osd_verify_sparse_read_holes) {
@@ -3566,21 +3598,15 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
          }
        }
 
-        if (r < 0) {
-          result = r;
-          break;
-        }
-
         op.extent.length = total_read;
 
         ::encode(m, osd_op.outdata);
         ::encode(data_bl, osd_op.outdata);
 
-       ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(op.extent.length, 10);
-       ctx->delta_stats.num_rd++;
-
        dout(10) << " sparse_read got " << total_read << " bytes from object " << soid << dendl;
       }
+      ctx->delta_stats.num_rd_kb += SHIFT_ROUND_UP(op.extent.length, 10);
+      ctx->delta_stats.num_rd++;
       break;
 
     case CEPH_OSD_OP_CALL:
@@ -4047,9 +4073,13 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
 
        notify_info_t n;
        n.timeout = timeout;
+       n.notify_id = osd->get_next_id(get_osdmap()->get_epoch());
        n.cookie = op.watch.cookie;
         n.bl = bl;
        ctx->notifies.push_back(n);
+
+       // return our unique notify id to the client
+       ::encode(n.notify_id, osd_op.outdata);
       }
       break;
 
@@ -5577,7 +5607,7 @@ void ReplicatedPG::do_osd_op_effects(OpContext *ctx, const ConnectionRef& conn)
        p->bl,
        p->timeout,
        p->cookie,
-       osd->get_next_id(get_osdmap()->get_epoch()),
+       p->notify_id,
        ctx->obc->obs.oi.user_version,
        osd));
     for (map<pair<uint64_t, entity_name_t>, WatchRef>::iterator i =
@@ -5647,6 +5677,15 @@ int ReplicatedPG::prepare_transaction(OpContext *ctx)
     return result;
   }
 
+  // check for full
+  if ((ctx->delta_stats.num_bytes > 0 ||
+       ctx->delta_stats.num_objects > 0) &&
+      (pool.info.has_flag(pg_pool_t::FLAG_FULL) ||
+       get_osdmap()->test_flag(CEPH_OSDMAP_FULL))) {
+    dout(20) << __func__ << ": full, returning -ENOSPC" << dendl;
+    return -ENOSPC;
+  }
+
   // clone, if necessary
   if (soid.snap == CEPH_NOSNAP)
     make_writeable(ctx);
@@ -5733,7 +5772,10 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type, bool maintain_ssc
       ctx->snapset_obc->obs.oi.version = ctx->at_version;
       ctx->snapset_obc->obs.oi.last_reqid = ctx->reqid;
       ctx->snapset_obc->obs.oi.mtime = ctx->mtime;
-      ctx->snapset_obc->obs.oi.local_mtime = now;
+      if (pool.info.is_tier() || pool.info.has_tiers())
+       ctx->snapset_obc->obs.oi.local_mtime = now;
+      else
+       ctx->snapset_obc->obs.oi.local_mtime = utime_t();
 
       bufferlist bv(sizeof(ctx->new_obs.oi));
       ::encode(ctx->snapset_obc->obs.oi, bv);
@@ -5774,7 +5816,10 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type, bool maintain_ssc
     if (ctx->mtime != utime_t()) {
       ctx->new_obs.oi.mtime = ctx->mtime;
       dout(10) << " set mtime to " << ctx->new_obs.oi.mtime << dendl;
-      ctx->new_obs.oi.local_mtime = now;
+      if (pool.info.is_tier() || pool.info.has_tiers())
+       ctx->new_obs.oi.local_mtime = now;
+      else
+       ctx->new_obs.oi.local_mtime = utime_t();
     } else {
       dout(10) << " mtime unchanged at " << ctx->new_obs.oi.mtime << dendl;
     }
@@ -5839,7 +5884,8 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type, bool maintain_ssc
   // apply new object state.
   ctx->obc->obs = ctx->new_obs;
 
-  if (!maintain_ssc && soid.is_head()) {
+  if (soid.is_head() && !ctx->obc->obs.exists &&
+      (!maintain_ssc || ctx->cache_evict)) {
     ctx->obc->ssc->exists = false;
     ctx->obc->ssc->snapset = SnapSet();
   } else {
@@ -6341,13 +6387,13 @@ void ReplicatedPG::process_copy_chunk(hobject_t oid, ceph_tid_t tid, int r)
   copy_ops.erase(cobc->obs.oi.soid);
   cobc->stop_block();
 
-  // cancel and requeue proxy reads on this object
-  kick_proxy_read_blocked(cobc->obs.oi.soid);
   for (map<ceph_tid_t, ProxyReadOpRef>::iterator it = proxyread_ops.begin();
       it != proxyread_ops.end(); ++it) {
     if (it->second->soid == cobc->obs.oi.soid) {
       cancel_proxy_read(it->second);
     }
+    // cancel and requeue proxy reads on this object
+    kick_proxy_read_blocked(cobc->obs.oi.soid);
   }
 
   kick_object_context_blocked(cobc);
@@ -6487,7 +6533,10 @@ void ReplicatedPG::finish_copyfrom(OpContext *ctx)
   obs.oi.user_version = ctx->user_at_version;
 
   obs.oi.set_data_digest(cb->results->data_digest);
-  obs.oi.set_omap_digest(cb->results->omap_digest);
+  if (obs.oi.is_omap())
+    obs.oi.set_omap_digest(cb->results->omap_digest);
+  else
+    obs.oi.clear_omap_digest();
 
   obs.oi.truncate_seq = cb->results->truncate_seq;
   obs.oi.truncate_size = cb->results->truncate_size;
@@ -6672,6 +6721,8 @@ void ReplicatedPG::finish_promote(int r, CopyResults *results,
       tctx->new_obs.oi.set_data_digest(results->data_digest);
     if (results->has_omap)
       tctx->new_obs.oi.set_omap_digest(results->omap_digest);
+    else
+      tctx->new_obs.oi.clear_omap_digest();
     tctx->new_obs.oi.truncate_seq = results->truncate_seq;
     tctx->new_obs.oi.truncate_size = results->truncate_size;
 
@@ -8102,19 +8153,18 @@ void ReplicatedPG::add_object_context_to_pg_stat(ObjectContextRef obc, pg_stat_t
 void ReplicatedPG::kick_object_context_blocked(ObjectContextRef obc)
 {
   const hobject_t& soid = obc->obs.oi.soid;
-  map<hobject_t, list<OpRequestRef> >::iterator p = waiting_for_blocked_object.find(soid);
-  if (p == waiting_for_blocked_object.end())
-    return;
-
   if (obc->is_blocked()) {
     dout(10) << __func__ << " " << soid << " still blocked" << dendl;
     return;
   }
 
-  list<OpRequestRef>& ls = p->second;
-  dout(10) << __func__ << " " << soid << " requeuing " << ls.size() << " requests" << dendl;
-  requeue_ops(ls);
-  waiting_for_blocked_object.erase(p);
+  map<hobject_t, list<OpRequestRef> >::iterator p = waiting_for_blocked_object.find(soid);
+  if (p != waiting_for_blocked_object.end()) {
+    list<OpRequestRef>& ls = p->second;
+    dout(10) << __func__ << " " << soid << " requeuing " << ls.size() << " requests" << dendl;
+    requeue_ops(ls);
+    waiting_for_blocked_object.erase(p);
+  }
 
   if (obc->requeue_scrub_on_unblock)
     osd->queue_for_scrub(this);
@@ -11394,7 +11444,10 @@ void ReplicatedPG::_scrub(
     ctx->at_version = get_next_version();
     ctx->mtime = utime_t();      // do not update mtime
     ctx->new_obs.oi.set_data_digest(p->second.first);
-    ctx->new_obs.oi.set_omap_digest(p->second.second);
+    if (ctx->new_obs.oi.is_omap())
+      ctx->new_obs.oi.set_omap_digest(p->second.second);
+    else
+      ctx->new_obs.oi.clear_omap_digest();
     finish_ctx(ctx, pg_log_entry_t::MODIFY, true, true);
     ctx->on_finish = new C_ScrubDigestUpdated(this);
     simple_repop_submit(repop);
index b2bea5b7204e4b93c48256c2039e823e0333bb4b..29f4fc4cc53a13032c402d6209004240f4abaed9 100644 (file)
@@ -4225,7 +4225,16 @@ void object_info_t::encode(bufferlist& bl) const
        ++i) {
     old_watchers.insert(make_pair(i->first.second, i->second));
   }
-  ENCODE_START(15, 8, bl);
+
+  // kludge to reduce xattr size for most rbd objects
+  int ev = 15;
+  if (!(flags & FLAG_OMAP_DIGEST) &&
+      !(flags & FLAG_DATA_DIGEST) &&
+      local_mtime == utime_t()) {
+    ev = 13;
+  }
+
+  ENCODE_START(ev, 8, bl);
   ::encode(soid, bl);
   ::encode(myoloc, bl);        //Retained for compatibility
   ::encode((__u32)0, bl); // was category, no longer used
@@ -4250,16 +4259,20 @@ void object_info_t::encode(bufferlist& bl) const
   ::encode(watchers, bl);
   __u32 _flags = flags;
   ::encode(_flags, bl);
-  ::encode(local_mtime, bl);
-  ::encode(data_digest, bl);
-  ::encode(omap_digest, bl);
+  if (ev >= 14) {
+    ::encode(local_mtime, bl);
+  }
+  if (ev >= 15) {
+    ::encode(data_digest, bl);
+    ::encode(omap_digest, bl);
+  }
   ENCODE_FINISH(bl);
 }
 
 void object_info_t::decode(bufferlist::iterator& bl)
 {
   object_locator_t myoloc;
-  DECODE_START_LEGACY_COMPAT_LEN(14, 8, 8, bl);
+  DECODE_START_LEGACY_COMPAT_LEN(15, 8, 8, bl);
   map<entity_name_t, watch_info_t> old_watchers;
   ::decode(soid, bl);
   ::decode(myoloc, bl);
index b9b3b8150ab97759219199875072505dacb0defe..b058c135ce2ac2e9a0a81769a509428e03b39f4e 100644 (file)
@@ -2836,12 +2836,15 @@ static inline ostream& operator<<(ostream& out, const watch_info_t& w) {
 
 struct notify_info_t {
   uint64_t cookie;
+  uint64_t notify_id;
   uint32_t timeout;
   bufferlist bl;
 };
 
 static inline ostream& operator<<(ostream& out, const notify_info_t& n) {
-  return out << "notify(cookie " << n.cookie << " " << n.timeout << "s)";
+  return out << "notify(cookie " << n.cookie
+            << " notify" << n.notify_id
+            << " " << n.timeout << "s)";
 }
 
 
@@ -2956,7 +2959,7 @@ struct object_info_t {
   }
   void new_object() {
     set_data_digest(-1);
-    set_omap_digest(-1);
+    clear_omap_digest();
   }
 
   void encode(bufferlist& bl) const;
index d21292e08fc0676c69dc166dea852e2a6c19d852..b2c257237628126acf218df179c0c3f079413a56 100644 (file)
@@ -1158,7 +1158,7 @@ int ObjectCacher::_readx(OSDRead *rd, ObjectSet *oset, Context *onfinish,
        uint64_t rx_bytes = static_cast<uint64_t>(
          stat_rx + bh_it->second->length());
         bytes_not_in_cache += bh_it->second->length();
-       if (!waitfor_read.empty() || rx_bytes > max_size) {
+       if (!waitfor_read.empty() || (stat_rx > 0 && rx_bytes > max_size)) {
          // cache is full with concurrent reads -- wait for rx's to complete
          // to constrain memory growth (especially during copy-ups)
          if (success) {
index 856425af9553a679c5c1fd266cf724aaee5d054d..2b5a979f8239097658bacb7ec3ad1280bbe662eb 100644 (file)
@@ -419,6 +419,7 @@ void Objecter::_send_linger(LingerOp *info)
   vector<OSDOp> opv;
   Context *oncommit = NULL;
   info->watch_lock.get_read(); // just to read registered status
+  bufferlist *poutbl = NULL;
   if (info->registered && info->is_watch) {
     ldout(cct, 15) << "send_linger " << info->linger_id << " reconnect" << dendl;
     opv.push_back(OSDOp());
@@ -430,7 +431,12 @@ void Objecter::_send_linger(LingerOp *info)
   } else {
     ldout(cct, 15) << "send_linger " << info->linger_id << " register" << dendl;
     opv = info->ops;
-    oncommit = new C_Linger_Commit(this, info);
+    C_Linger_Commit *c = new C_Linger_Commit(this, info);
+    if (!info->is_watch) {
+      info->notify_id = 0;
+      poutbl = &c->outbl;
+    }
+    oncommit = c;
   }
   info->watch_lock.put_read();
   Op *o = new Op(info->target.base_oid, info->target.base_oloc,
@@ -438,6 +444,7 @@ void Objecter::_send_linger(LingerOp *info)
                 NULL, NULL,
                 info->pobjver);
   o->oncommit_sync = oncommit;
+  o->outbl = poutbl;
   o->snapid = info->snap;
   o->snapc = info->snapc;
   o->mtime = info->mtime;
@@ -467,7 +474,7 @@ void Objecter::_send_linger(LingerOp *info)
   logger->inc(l_osdc_linger_send);
 }
 
-void Objecter::_linger_commit(LingerOp *info, int r
+void Objecter::_linger_commit(LingerOp *info, int r, bufferlist& outbl)
 {
   RWLock::WLocker wl(info->watch_lock);
   ldout(cct, 10) << "_linger_commit " << info->linger_id << dendl;
@@ -479,6 +486,17 @@ void Objecter::_linger_commit(LingerOp *info, int r)
   // only tell the user the first time we do this
   info->registered = true;
   info->pobjver = NULL;
+
+  if (!info->is_watch) {
+    // make note of the notify_id
+    bufferlist::iterator p = outbl.begin();
+    try {
+      ::decode(info->notify_id, p);
+      ldout(cct, 10) << "_linger_commit  notify_id=" << info->notify_id << dendl;
+    }
+    catch (buffer::error& e) {
+    }
+  }
 }
 
 struct C_DoWatchError : public Context {
@@ -777,11 +795,17 @@ void Objecter::handle_watch_notify(MWatchNotify *m)
       }
     }
   } else if (!info->is_watch) {
-    // notify completion; we can do this inline since we know the only user
-    // (librados) is safe to call in fast-dispatch context
-    assert(info->on_notify_finish);
-    info->notify_result_bl->claim(m->get_data());
-    info->on_notify_finish->complete(m->return_code);
+    // we have CEPH_WATCH_EVENT_NOTIFY_COMPLETE; we can do this inline since
+    // we know the only user (librados) is safe to call in fast-dispatch context
+    if (info->notify_id &&
+       info->notify_id != m->notify_id) {
+      ldout(cct, 10) << __func__ << " reply notify " << m->notify_id
+                    << " != " << info->notify_id << ", ignoring" << dendl;
+    } else {
+      assert(info->on_notify_finish);
+      info->notify_result_bl->claim(m->get_data());
+      info->on_notify_finish->complete(m->return_code);
+    }
   } else {
     finisher->queue(new C_DoWatchNotify(this, info, m));
     _linger_callback_queue();
@@ -1126,6 +1150,7 @@ void Objecter::handle_osd_map(MOSDMap *m)
        _send_op(op);
       }
     } else {
+      _op_cancel_map_check(op);
       _cancel_linger_op(op);
     }
     s->lock.unlock();
@@ -1256,6 +1281,8 @@ int Objecter::pool_snap_list(int64_t poolid, vector<uint64_t> *snaps)
   RWLock::RLocker rl(rwlock);
 
   const pg_pool_t *pi = osdmap->get_pg_pool(poolid);
+  if (!pi)
+    return -ENOENT;
   for (map<snapid_t,pool_snap_info_t>::const_iterator p = pi->snaps.begin();
        p != pi->snaps.end();
        ++p) {
@@ -1303,7 +1330,7 @@ void Objecter::_check_op_pool_dne(Op *op, bool session_locked)
       if (!session_locked) {
         s->lock.get_write();
       }
-      _finish_op(op);
+      _finish_op(op, 0);
       if (!session_locked) {
         s->lock.unlock();
       }
@@ -1780,6 +1807,7 @@ void Objecter::_kick_requests(OSDSession *session, map<uint64_t, LingerOp *>& lr
       if (!op->target.paused)
        resend[op->tid] = op;
     } else {
+      _op_cancel_map_check(op);
       _cancel_linger_op(op);
     }
   }
@@ -1850,54 +1878,53 @@ void Objecter::tick()
 
   set<OSDSession*> toping;
 
-  int r = 0;
 
   // look for laggy requests
   utime_t cutoff = ceph_clock_now(cct);
   cutoff -= cct->_conf->objecter_timeout;  // timeout
 
-  unsigned laggy_ops;
-
-  do {
-    laggy_ops = 0;
-    for (map<int,OSDSession*>::iterator siter = osd_sessions.begin(); siter != osd_sessions.end(); ++siter) {
-      OSDSession *s = siter->second;
-      RWLock::RLocker l(s->lock);
-      for (map<ceph_tid_t,Op*>::iterator p = s->ops.begin();
-           p != s->ops.end();
-           ++p) {
-        Op *op = p->second;
-        assert(op->session);
-        if (op->stamp < cutoff) {
-          ldout(cct, 2) << " tid " << p->first << " on osd." << op->session->osd << " is laggy" << dendl;
-          toping.insert(op->session);
-          ++laggy_ops;
-        }
-      }
-      for (map<uint64_t,LingerOp*>::iterator p = s->linger_ops.begin();
-           p != s->linger_ops.end();
-           ++p) {
-        LingerOp *op = p->second;
-        RWLock::WLocker wl(op->watch_lock);
-        assert(op->session);
-        ldout(cct, 10) << " pinging osd that serves lingering tid " << p->first << " (osd." << op->session->osd << ")" << dendl;
-        toping.insert(op->session);
-       if (op->is_watch && op->registered && !op->last_error)
-         _send_linger_ping(op);
-      }
-      for (map<uint64_t,CommandOp*>::iterator p = s->command_ops.begin();
-           p != s->command_ops.end();
-           ++p) {
-        CommandOp *op = p->second;
-        assert(op->session);
-        ldout(cct, 10) << " pinging osd that serves command tid " << p->first << " (osd." << op->session->osd << ")" << dendl;
-        toping.insert(op->session);
+  unsigned laggy_ops = 0;
+
+  for (map<int,OSDSession*>::iterator siter = osd_sessions.begin(); siter != osd_sessions.end(); ++siter) {
+    OSDSession *s = siter->second;
+    RWLock::RLocker l(s->lock);
+    bool found = false;
+    for (map<ceph_tid_t,Op*>::iterator p = s->ops.begin();
+       p != s->ops.end();
+       ++p) {
+      Op *op = p->second;
+      assert(op->session);
+      if (op->stamp < cutoff) {
+       ldout(cct, 2) << " tid " << p->first << " on osd." << op->session->osd << " is laggy" << dendl;
+       found = true;
+       ++laggy_ops;
       }
     }
-    if (num_homeless_ops.read() || !toping.empty()) {
-      _maybe_request_map();
+    for (map<uint64_t,LingerOp*>::iterator p = s->linger_ops.begin();
+       p != s->linger_ops.end();
+       ++p) {
+      LingerOp *op = p->second;
+      RWLock::WLocker wl(op->watch_lock);
+      assert(op->session);
+      ldout(cct, 10) << " pinging osd that serves lingering tid " << p->first << " (osd." << op->session->osd << ")" << dendl;
+      found = true;
+      if (op->is_watch && op->registered && !op->last_error)
+       _send_linger_ping(op);
     }
-  } while (r == -EAGAIN);
+    for (map<uint64_t,CommandOp*>::iterator p = s->command_ops.begin();
+       p != s->command_ops.end();
+       ++p) {
+      CommandOp *op = p->second;
+      assert(op->session);
+      ldout(cct, 10) << " pinging osd that serves command tid " << p->first << " (osd." << op->session->osd << ")" << dendl;
+      found = true;
+    }
+    if (found)
+      toping.insert(s);
+  }
+  if (num_homeless_ops.read() || !toping.empty()) {
+    _maybe_request_map();
+  }
 
   logger->set(l_osdc_op_laggy, laggy_ops);
   logger->set(l_osdc_osd_laggy, toping.size());
@@ -1968,13 +1995,10 @@ class C_CancelOp : public Context
   ceph_tid_t tid;
   Objecter *objecter;
 public:
-  C_CancelOp(Objecter *objecter) : objecter(objecter) {}
+  C_CancelOp(ceph_tid_t tid, Objecter *objecter) : tid(tid), objecter(objecter) {}
   void finish(int r) {
     objecter->op_cancel(tid, -ETIMEDOUT);
   }
-  void set_tid(ceph_tid_t _tid) {
-    tid = _tid;
-  }
 };
 
 ceph_tid_t Objecter::op_submit(Op *op, int *ctx_budget)
@@ -2003,21 +2027,15 @@ ceph_tid_t Objecter::_op_submit_with_budget(Op *op, RWLock::Context& lc, int *ct
     }
   }
 
-  C_CancelOp *cb = NULL;
   if (osd_timeout > 0) {
-    cb = new C_CancelOp(this);
-    op->ontimeout = cb;
-  }
-
-  ceph_tid_t tid = _op_submit(op, lc);
-
-  if (cb) {
-    cb->set_tid(tid);
+    if (op->tid == 0)
+      op->tid = last_tid.inc();
+    op->ontimeout = new C_CancelOp(op->tid, this);
     Mutex::Locker l(timer_lock);
     timer.add_event_after(osd_timeout, op->ontimeout);
   }
 
-  return tid;
+  return _op_submit(op, lc);
 }
 
 void Objecter::_send_op_account(Op *op)
@@ -2195,7 +2213,10 @@ int Objecter::op_cancel(OSDSession *s, ceph_tid_t tid, int r)
   if (op->onack) {
     op->onack->complete(r);
     op->onack = NULL;
+    num_unacked.dec();
   }
+  if (op->oncommit || op->oncommit_sync)
+    num_uncommitted.dec();
   if (op->oncommit) {
     op->oncommit->complete(r);
     op->oncommit = NULL;
@@ -2205,7 +2226,7 @@ int Objecter::op_cancel(OSDSession *s, ceph_tid_t tid, int r)
     op->oncommit_sync = NULL;
   }
   _op_cancel_map_check(op);
-  _finish_op(op);
+  _finish_op(op, r);
   s->lock.unlock();
 
   return 0;
@@ -2279,6 +2300,7 @@ epoch_t Objecter::op_cancel_writes(int r)
   rwlock.get_write();
 
   std::vector<ceph_tid_t> to_cancel;
+  bool found = false;
 
   for (map<int, OSDSession *>::iterator siter = osd_sessions.begin(); siter != osd_sessions.end(); ++siter) {
     OSDSession *s = siter->second;
@@ -2289,19 +2311,26 @@ epoch_t Objecter::op_cancel_writes(int r)
       }
     }
     s->lock.unlock();
-  }
 
-  for (std::vector<ceph_tid_t>::iterator titer = to_cancel.begin(); titer != to_cancel.end(); ++titer) {
-    int cancel_result = _op_cancel(*titer, r);
-    // We hold rwlock across search and cancellation, so cancels should always succeed
-    assert(cancel_result == 0);
+    for (std::vector<ceph_tid_t>::iterator titer = to_cancel.begin(); titer != to_cancel.end(); ++titer) {
+      int cancel_result = op_cancel(s, *titer, r);
+      // We hold rwlock across search and cancellation, so cancels should always succeed
+      assert(cancel_result == 0);
+    }
+    if (!found && to_cancel.size())
+      found = true;
+    to_cancel.clear();
   }
 
   const epoch_t epoch = osdmap->get_epoch();
 
   rwlock.unlock();
 
-  return epoch;
+  if (found) {
+    return epoch;
+  } else {
+    return -1;
+  }
 }
 
 bool Objecter::is_pg_changed(
@@ -2531,10 +2560,7 @@ int Objecter::_calc_target(op_target_t *t, epoch_t *last_force_resend,  bool any
 int Objecter::_map_session(op_target_t *target, OSDSession **s,
                           RWLock::Context& lc)
 {
-  int r = _calc_target(target);
-  if (r < 0) {
-    return r;
-  }
+  _calc_target(target);
   return _get_session(target->osd, s, lc);
 }
 
@@ -2671,14 +2697,20 @@ void Objecter::_cancel_linger_op(Op *op)
   ldout(cct, 15) << "cancel_op " << op->tid << dendl;
 
   assert(!op->should_resend);
-  delete op->onack;
-  delete op->oncommit;
-  delete op->oncommit_sync;
+  if (op->onack) {
+    delete op->onack;
+    num_unacked.dec();
+  }
+  if (op->oncommit || op->oncommit_sync) {
+    delete op->oncommit;
+    delete op->oncommit_sync;
+    num_uncommitted.dec();
+  }
 
-  _finish_op(op);
+  _finish_op(op, 0);
 }
 
-void Objecter::_finish_op(Op *op)
+void Objecter::_finish_op(Op *op, int r)
 {
   ldout(cct, 15) << "finish_op " << op->tid << dendl;
 
@@ -2687,7 +2719,7 @@ void Objecter::_finish_op(Op *op)
   if (!op->ctx_budgeted && op->budgeted)
     put_op_budget(op);
 
-  if (op->ontimeout) {
+  if (op->ontimeout && r != -ETIMEDOUT) {
     Mutex::Locker l(timer_lock);
     timer.cancel_event(op->ontimeout);
   }
@@ -2716,7 +2748,7 @@ void Objecter::finish_op(OSDSession *session, ceph_tid_t tid)
 
   Op *op = iter->second;
 
-  _finish_op(op);
+  _finish_op(op, 0);
 }
 
 MOSDOp *Objecter::_prepare_osd_op(Op *op)
@@ -3038,7 +3070,7 @@ void Objecter::handle_osd_op_reply(MOSDOpReply *m)
   // done with this tid?
   if (!op->onack && !op->oncommit && !op->oncommit_sync) {
     ldout(cct, 15) << "handle_osd_op_reply completed tid " << tid << dendl;
-    _finish_op(op);
+    _finish_op(op, 0);
   }
 
   ldout(cct, 5) << num_unacked.read() << " unacked, " << num_uncommitted.read() << " uncommitted" << dendl;
@@ -3608,12 +3640,24 @@ void Objecter::handle_pool_op_reply(MPoolOpReply *m)
     if (osdmap->get_epoch() < m->epoch) {
       rwlock.unlock();
       rwlock.get_write();
+      // recheck op existence since we have let go of rwlock
+      // (for promotion) above.
+      iter = pool_ops.find(tid);
+      if (iter == pool_ops.end())
+        goto done; // op is gone.
       if (osdmap->get_epoch() < m->epoch) {
         ldout(cct, 20) << "waiting for client to reach epoch " << m->epoch << " before calling back" << dendl;
         _wait_for_new_map(op->onfinish, m->epoch, m->replyCode);
+      } else {
+       // map epoch changed, probably because a MOSDMap message
+       // sneaked in. Do caller-specified callback now or else
+       // we lose it forever.
+       assert(op->onfinish);
+       op->onfinish->complete(m->replyCode);   
       }
     }
     else {
+      assert(op->onfinish);
       op->onfinish->complete(m->replyCode);
     }
     op->onfinish = NULL;
@@ -3623,11 +3667,13 @@ void Objecter::handle_pool_op_reply(MPoolOpReply *m)
     }
     iter = pool_ops.find(tid);
     if (iter != pool_ops.end()) {
-      _finish_pool_op(op);
+      _finish_pool_op(op, 0);
     }
   } else {
     ldout(cct, 10) << "unknown request " << tid << dendl;
   }
+
+done:
   rwlock.unlock();
 
   ldout(cct, 10) << "done" << dendl;
@@ -3652,17 +3698,17 @@ int Objecter::pool_op_cancel(ceph_tid_t tid, int r)
   if (op->onfinish)
     op->onfinish->complete(r);
 
-  _finish_pool_op(op);
+  _finish_pool_op(op, r);
   return 0;
 }
 
-void Objecter::_finish_pool_op(PoolOp *op)
+void Objecter::_finish_pool_op(PoolOp *op, int r)
 {
   assert(rwlock.is_wlocked());
   pool_ops.erase(op->tid);
   logger->set(l_osdc_poolop_active, pool_ops.size());
 
-  if (op->ontimeout) {
+  if (op->ontimeout && r != -ETIMEDOUT) {
     Mutex::Locker l(timer_lock);
     timer.cancel_event(op->ontimeout);
   }
@@ -3740,7 +3786,7 @@ void Objecter::handle_get_pool_stats_reply(MGetPoolStatsReply *m)
       last_seen_pgmap_version = m->version;
     }
     op->onfinish->complete(0);
-    _finish_pool_stat_op(op);
+    _finish_pool_stat_op(op, 0);
   } else {
     ldout(cct, 10) << "unknown request " << tid << dendl;
   } 
@@ -3765,18 +3811,18 @@ int Objecter::pool_stat_op_cancel(ceph_tid_t tid, int r)
   PoolStatOp *op = it->second;
   if (op->onfinish)
     op->onfinish->complete(r);
-  _finish_pool_stat_op(op);
+  _finish_pool_stat_op(op, r);
   return 0;
 }
 
-void Objecter::_finish_pool_stat_op(PoolStatOp *op)
+void Objecter::_finish_pool_stat_op(PoolStatOp *op, int r)
 {
   assert(rwlock.is_wlocked());
 
   poolstat_ops.erase(op->tid);
   logger->set(l_osdc_poolstat_active, poolstat_ops.size());
 
-  if (op->ontimeout) {
+  if (op->ontimeout && r != -ETIMEDOUT) {
     Mutex::Locker l(timer_lock);
     timer.cancel_event(op->ontimeout);
   }
@@ -3847,7 +3893,7 @@ void Objecter::handle_fs_stats_reply(MStatfsReply *m)
     if (m->h.version > last_seen_pgmap_version)
       last_seen_pgmap_version = m->h.version;
     op->onfinish->complete(0);
-    _finish_statfs_op(op);
+    _finish_statfs_op(op, 0);
   } else {
     ldout(cct, 10) << "unknown request " << tid << dendl;
   }
@@ -3872,18 +3918,18 @@ int Objecter::statfs_op_cancel(ceph_tid_t tid, int r)
   StatfsOp *op = it->second;
   if (op->onfinish)
     op->onfinish->complete(r);
-  _finish_statfs_op(op);
+  _finish_statfs_op(op, r);
   return 0;
 }
 
-void Objecter::_finish_statfs_op(StatfsOp *op)
+void Objecter::_finish_statfs_op(StatfsOp *op, int r)
 {
   assert(rwlock.is_wlocked());
 
   statfs_ops.erase(op->tid);
   logger->set(l_osdc_statfs_active, statfs_ops.size());
 
-  if (op->ontimeout) {
+  if (op->ontimeout && r != -ETIMEDOUT) {
     Mutex::Locker l(timer_lock);
     timer.cancel_event(op->ontimeout);
   }
@@ -4449,7 +4495,7 @@ int Objecter::command_op_cancel(OSDSession *s, ceph_tid_t tid, int r)
 
   CommandOp *op = it->second;
   _command_cancel_map_check(op);
-  _finish_command(op, -ETIMEDOUT, "");
+  _finish_command(op, r, "");
   return 0;
 }
 
@@ -4463,7 +4509,7 @@ void Objecter::_finish_command(CommandOp *c, int r, string rs)
   if (c->onfinish)
     c->onfinish->complete(r);
 
-  if (c->ontimeout) {
+  if (c->ontimeout && r != -ETIMEDOUT) {
     Mutex::Locker l(timer_lock);
     timer.cancel_event(c->ontimeout);
   }
index b9fd0cd6c12bd097cf483940417c75f213cd0c93..c72c9b792083e34f5358a39d14b3448c0443027b 100644 (file)
@@ -1561,6 +1561,7 @@ public:
     // we trigger these from an async finisher
     Context *on_notify_finish;
     bufferlist *notify_result_bl;
+    uint64_t notify_id;
 
     WatchContext *watch_context;
 
@@ -1595,6 +1596,7 @@ public:
                 on_reg_commit(NULL),
                 on_notify_finish(NULL),
                 notify_result_bl(NULL),
+                notify_id(0),
                 watch_context(NULL),
                 session(NULL),
                 register_tid(0),
@@ -1619,6 +1621,7 @@ public:
   struct C_Linger_Commit : public Context {
     Objecter *objecter;
     LingerOp *info;
+    bufferlist outbl;  // used for notify only
     C_Linger_Commit(Objecter *o, LingerOp *l) : objecter(o), info(l) {
       info->get();
     }
@@ -1626,7 +1629,7 @@ public:
       info->put();
     }
     void finish(int r) {
-      objecter->_linger_commit(info, r);
+      objecter->_linger_commit(info, r, outbl);
     }
   };
 
@@ -1738,7 +1741,7 @@ public:
   void _send_op_account(Op *op);
   void _cancel_linger_op(Op *op);
   void finish_op(OSDSession *session, ceph_tid_t tid);
-  void _finish_op(Op *op);
+  void _finish_op(Op *op, int r);
   static bool is_pg_changed(
     int oldprimary,
     const vector<int>& oldacting,
@@ -1771,7 +1774,7 @@ public:
 
   void _linger_submit(LingerOp *info);
   void _send_linger(LingerOp *info);
-  void _linger_commit(LingerOp *info, int r);
+  void _linger_commit(LingerOp *info, int r, bufferlist& outbl);
   void _linger_reconnect(LingerOp *info, int r);
   void _send_linger_ping(LingerOp *info);
   void _linger_ping(LingerOp *info, int r, utime_t sent, uint32_t register_gen);
@@ -1962,6 +1965,7 @@ private:
 public:
   ceph_tid_t op_submit(Op *op, int *ctx_budget = NULL);
   bool is_active() {
+    RWLock::RLocker l(rwlock);
     return !((!inflight_ops.read()) && linger_ops.empty() && poolstat_ops.empty() && statfs_ops.empty());
   }
 
@@ -2465,7 +2469,7 @@ public:
 private:
   void pool_op_submit(PoolOp *op);
   void _pool_op_submit(PoolOp *op);
-  void _finish_pool_op(PoolOp *op);
+  void _finish_pool_op(PoolOp *op, int r);
   void _do_delete_pool(int64_t pool, Context *onfinish);
 public:
   int create_pool_snap(int64_t pool, string& snapName, Context *onfinish);
@@ -2491,7 +2495,7 @@ public:
   void get_pool_stats(list<string>& pools, map<string,pool_stat_t> *result,
                      Context *onfinish);
   int pool_stat_op_cancel(ceph_tid_t tid, int r);
-  void _finish_pool_stat_op(PoolStatOp *op);
+  void _finish_pool_stat_op(PoolStatOp *op, int r);
 
   // ---------------------------
   // df stats
@@ -2501,7 +2505,7 @@ public:
   void handle_fs_stats_reply(MStatfsReply *m);
   void get_fs_stats(struct ceph_statfs& result, Context *onfinish);
   int statfs_op_cancel(ceph_tid_t tid, int r);
-  void _finish_statfs_op(StatfsOp *op);
+  void _finish_statfs_op(StatfsOp *op, int r);
 
   // ---------------------------
   // some scatter/gather hackery
index 6f5457d1461f94c9e6c942422d8e25b63d996679..372c657cb6c524959ee44cd06daafef19fbbb605 100644 (file)
@@ -8,6 +8,7 @@
  * LGPL2.  See file COPYING.
  *
  */
+#define _LARGEFILE64_SOURCE
 #include "include/int_types.h"
 
 #include "mon/MonClient.h"
@@ -42,6 +43,7 @@
 #include <sstream>
 #include <stdlib.h>
 #include <sys/types.h>
+#include <unistd.h>
 #include <time.h>
 #include "include/memory.h"
 #include <sys/ioctl.h>
@@ -978,15 +980,7 @@ static int do_bench_write(librbd::Image& image, uint64_t io_size,
   for (off = 0; off < io_bytes; ) {
     b.wait_for(io_threads - 1);
     i = 0;
-    while (i < io_threads && off < io_bytes &&
-          b.start_write(io_threads, thread_offset[i], io_size, bl, op_flags)) {
-      ++i;
-      ++ios;
-      off += io_size;
-
-      ++cur_ios;
-      cur_off += io_size;
-
+    while (i < io_threads && off < io_bytes) {
       if (pattern == "rand") {
         thread_offset[i] = (rand() % (size / io_size)) * io_size;
       } else {
@@ -994,6 +988,16 @@ static int do_bench_write(librbd::Image& image, uint64_t io_size,
         if (thread_offset[i] + io_size > size)
           thread_offset[i] = 0;
       }
+
+      if (!b.start_write(io_threads, thread_offset[i], io_size, bl, op_flags))
+       break;
+
+      ++i;
+      ++ios;
+      off += io_size;
+
+      ++cur_ios;
+      cur_off += io_size;
     }
 
     utime_t now = ceph_clock_now(NULL);
@@ -2048,7 +2052,8 @@ static int do_merge_diff(const char *first, const char *second, const char *path
           if (r < 0)
             goto done;
         } else {
-          r = lseek(fd, delta, SEEK_CUR);
+          off64_t l = lseek64(fd, delta, SEEK_CUR);
+          r = l < 0 ? -errno : 0;
           if(r < 0)
             goto done;
         }
diff --git a/ceph/src/rbd_replay/ActionTypes.cc b/ceph/src/rbd_replay/ActionTypes.cc
new file mode 100644 (file)
index 0000000..36ed3ca
--- /dev/null
@@ -0,0 +1,354 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "rbd_replay/ActionTypes.h"
+#include "include/assert.h"
+#include "include/byteorder.h"
+#include "include/stringify.h"
+#include "common/Formatter.h"
+#include <iostream>
+#include <boost/variant.hpp>
+
+namespace rbd_replay {
+namespace action {
+
+namespace {
+
+bool byte_swap_required(__u8 version) {
+#if defined(CEPH_LITTLE_ENDIAN)
+  return (version == 0);
+#else
+  return false;
+#endif
+}
+
+void decode_big_endian_string(std::string &str, bufferlist::iterator &it) {
+#if defined(CEPH_LITTLE_ENDIAN)
+  uint32_t length;
+  ::decode(length, it);
+  length = swab32(length);
+  str.clear();
+  it.copy(length, str);
+#else
+  assert(false);
+#endif
+}
+
+class EncodeVisitor : public boost::static_visitor<void> {
+public:
+  EncodeVisitor(bufferlist &bl) : m_bl(bl) {
+  }
+
+  template <typename Action>
+  inline void operator()(const Action &action) const {
+    ::encode(static_cast<uint8_t>(Action::ACTION_TYPE), m_bl);
+    action.encode(m_bl);
+  }
+private:
+  bufferlist &m_bl;
+};
+
+class DecodeVisitor : public boost::static_visitor<void> {
+public:
+  DecodeVisitor(__u8 version, bufferlist::iterator &iter)
+    : m_version(version), m_iter(iter) {
+  }
+
+  template <typename Action>
+  inline void operator()(Action &action) const {
+    action.decode(m_version, m_iter);
+  }
+private:
+  __u8 m_version;
+  bufferlist::iterator &m_iter;
+};
+
+class DumpVisitor : public boost::static_visitor<void> {
+public:
+  DumpVisitor(Formatter *formatter) : m_formatter(formatter) {}
+
+  template <typename Action>
+  inline void operator()(const Action &action) const {
+    ActionType action_type = Action::ACTION_TYPE;
+    m_formatter->dump_string("action_type", stringify(action_type));
+    action.dump(m_formatter);
+  }
+private:
+  ceph::Formatter *m_formatter;
+};
+
+} // anonymous namespace
+
+void Dependency::encode(bufferlist &bl) const {
+  ::encode(id, bl);
+  ::encode(time_delta, bl);
+}
+
+void Dependency::decode(bufferlist::iterator &it) {
+  decode(1, it);
+}
+
+void Dependency::decode(__u8 version, bufferlist::iterator &it) {
+  ::decode(id, it);
+  ::decode(time_delta, it);
+  if (byte_swap_required(version)) {
+    id = swab32(id);
+    time_delta = swab64(time_delta);
+  }
+}
+
+void Dependency::dump(Formatter *f) const {
+  f->dump_unsigned("id", id);
+  f->dump_unsigned("time_delta", time_delta);
+}
+
+void Dependency::generate_test_instances(std::list<Dependency *> &o) {
+  o.push_back(new Dependency());
+  o.push_back(new Dependency(1, 123456789));
+}
+
+void ActionBase::encode(bufferlist &bl) const {
+  ::encode(id, bl);
+  ::encode(thread_id, bl);
+  ::encode(dependencies, bl);
+}
+
+void ActionBase::decode(__u8 version, bufferlist::iterator &it) {
+  ::decode(id, it);
+  ::decode(thread_id, it);
+  if (version == 0) {
+    uint32_t num_successors;
+    ::decode(num_successors, it);
+
+    uint32_t num_completion_successors;
+    ::decode(num_completion_successors, it);
+  }
+
+  if (byte_swap_required(version)) {
+    id = swab32(id);
+    thread_id = swab64(thread_id);
+
+    uint32_t dep_count;
+    ::decode(dep_count, it);
+    dep_count = swab32(dep_count);
+    dependencies.resize(dep_count);
+    for (uint32_t i = 0; i < dep_count; ++i) {
+      dependencies[i].decode(0, it);
+    }
+  } else {
+    ::decode(dependencies, it);
+  }
+}
+
+void ActionBase::dump(Formatter *f) const {
+  f->dump_unsigned("id", id);
+  f->dump_unsigned("thread_id", thread_id);
+  f->open_array_section("dependencies");
+  for (size_t i = 0; i < dependencies.size(); ++i) {
+    f->open_object_section("dependency");
+    dependencies[i].dump(f);
+    f->close_section();
+  }
+  f->close_section();
+}
+
+void ImageActionBase::encode(bufferlist &bl) const {
+  ActionBase::encode(bl);
+  ::encode(imagectx_id, bl);
+}
+
+void ImageActionBase::decode(__u8 version, bufferlist::iterator &it) {
+  ActionBase::decode(version, it);
+  ::decode(imagectx_id, it);
+  if (byte_swap_required(version)) {
+    imagectx_id = swab64(imagectx_id);
+  }
+}
+
+void ImageActionBase::dump(Formatter *f) const {
+  ActionBase::dump(f);
+  f->dump_unsigned("imagectx_id", imagectx_id);
+}
+
+void IoActionBase::encode(bufferlist &bl) const {
+  ImageActionBase::encode(bl);
+  ::encode(offset, bl);
+  ::encode(length, bl);
+}
+
+void IoActionBase::decode(__u8 version, bufferlist::iterator &it) {
+  ImageActionBase::decode(version, it);
+  ::decode(offset, it);
+  ::decode(length, it);
+  if (byte_swap_required(version)) {
+    offset = swab64(offset);
+    length = swab64(length);
+  }
+}
+
+void IoActionBase::dump(Formatter *f) const {
+  ImageActionBase::dump(f);
+  f->dump_unsigned("offset", offset);
+  f->dump_unsigned("length", length);
+}
+
+void OpenImageAction::encode(bufferlist &bl) const {
+  ImageActionBase::encode(bl);
+  ::encode(name, bl);
+  ::encode(snap_name, bl);
+  ::encode(read_only, bl);
+}
+
+void OpenImageAction::decode(__u8 version, bufferlist::iterator &it) {
+  ImageActionBase::decode(version, it);
+  if (byte_swap_required(version)) {
+    decode_big_endian_string(name, it);
+    decode_big_endian_string(snap_name, it);
+  } else {
+    ::decode(name, it);
+    ::decode(snap_name, it);
+  }
+  ::decode(read_only, it);
+}
+
+void OpenImageAction::dump(Formatter *f) const {
+  ImageActionBase::dump(f);
+  f->dump_string("name", name);
+  f->dump_string("snap_name", snap_name);
+  f->dump_bool("read_only", read_only);
+}
+
+void UnknownAction::encode(bufferlist &bl) const {
+  assert(false);
+}
+
+void UnknownAction::decode(__u8 version, bufferlist::iterator &it) {
+}
+
+void UnknownAction::dump(Formatter *f) const {
+}
+
+void ActionEntry::encode(bufferlist &bl) const {
+  ENCODE_START(1, 1, bl);
+  boost::apply_visitor(EncodeVisitor(bl), action);
+  ENCODE_FINISH(bl);
+}
+
+void ActionEntry::decode(bufferlist::iterator &it) {
+  DECODE_START(1, it);
+  decode(struct_v, it);
+  DECODE_FINISH(it);
+}
+
+void ActionEntry::decode_unversioned(bufferlist::iterator &it) {
+  decode(0, it);
+}
+
+void ActionEntry::decode(__u8 version, bufferlist::iterator &it) {
+  uint8_t action_type;
+  ::decode(action_type, it);
+
+  // select the correct action variant based upon the action_type
+  switch (action_type) {
+  case ACTION_TYPE_START_THREAD:
+    action = StartThreadAction();
+    break;
+  case ACTION_TYPE_STOP_THREAD:
+    action = StopThreadAction();
+    break;
+  case ACTION_TYPE_READ:
+    action = ReadAction();
+    break;
+  case ACTION_TYPE_WRITE:
+    action = WriteAction();
+    break;
+  case ACTION_TYPE_AIO_READ:
+    action = AioReadAction();
+    break;
+  case ACTION_TYPE_AIO_WRITE:
+    action = AioWriteAction();
+    break;
+  case ACTION_TYPE_OPEN_IMAGE:
+    action = OpenImageAction();
+    break;
+  case ACTION_TYPE_CLOSE_IMAGE:
+    action = CloseImageAction();
+    break;
+  }
+
+  boost::apply_visitor(DecodeVisitor(version, it), action);
+}
+
+void ActionEntry::dump(Formatter *f) const {
+  boost::apply_visitor(DumpVisitor(f), action);
+}
+
+void ActionEntry::generate_test_instances(std::list<ActionEntry *> &o) {
+  Dependencies dependencies;
+  dependencies.push_back(Dependency(3, 123456789));
+  dependencies.push_back(Dependency(4, 234567890));
+
+  o.push_back(new ActionEntry(StartThreadAction()));
+  o.push_back(new ActionEntry(StartThreadAction(1, 123456789, dependencies)));
+  o.push_back(new ActionEntry(StopThreadAction()));
+  o.push_back(new ActionEntry(StopThreadAction(1, 123456789, dependencies)));
+
+  o.push_back(new ActionEntry(ReadAction()));
+  o.push_back(new ActionEntry(ReadAction(1, 123456789, dependencies, 3, 4, 5)));
+  o.push_back(new ActionEntry(WriteAction()));
+  o.push_back(new ActionEntry(WriteAction(1, 123456789, dependencies, 3, 4,
+                                          5)));
+  o.push_back(new ActionEntry(AioReadAction()));
+  o.push_back(new ActionEntry(AioReadAction(1, 123456789, dependencies, 3, 4,
+                                            5)));
+  o.push_back(new ActionEntry(AioWriteAction()));
+  o.push_back(new ActionEntry(AioWriteAction(1, 123456789, dependencies, 3, 4,
+                                             5)));
+
+  o.push_back(new ActionEntry(OpenImageAction()));
+  o.push_back(new ActionEntry(OpenImageAction(1, 123456789, dependencies, 3,
+                                              "image_name", "snap_name",
+                                              true)));
+  o.push_back(new ActionEntry(CloseImageAction()));
+  o.push_back(new ActionEntry(CloseImageAction(1, 123456789, dependencies, 3)));
+}
+
+} // namespace action
+} // namespace rbd_replay
+
+std::ostream &operator<<(std::ostream &out,
+                         const rbd_replay::action::ActionType &type) {
+  using namespace rbd_replay::action;
+
+  switch (type) {
+  case ACTION_TYPE_START_THREAD:
+    out << "StartThread";
+    break;
+  case ACTION_TYPE_STOP_THREAD:
+    out << "StopThread";
+    break;
+  case ACTION_TYPE_READ:
+    out << "Read";
+    break;
+  case ACTION_TYPE_WRITE:
+    out << "Write";
+    break;
+  case ACTION_TYPE_AIO_READ:
+    out << "AioRead";
+    break;
+  case ACTION_TYPE_AIO_WRITE:
+    out << "AioWrite";
+    break;
+  case ACTION_TYPE_OPEN_IMAGE:
+    out << "OpenImage";
+    break;
+  case ACTION_TYPE_CLOSE_IMAGE:
+    out << "CloseImage";
+    break;
+  default:
+    out << "Unknown (" << static_cast<uint32_t>(type) << ")";
+    break;
+  }
+  return out;
+}
+
diff --git a/ceph/src/rbd_replay/ActionTypes.h b/ceph/src/rbd_replay/ActionTypes.h
new file mode 100644 (file)
index 0000000..63ef34e
--- /dev/null
@@ -0,0 +1,277 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#ifndef CEPH_RBD_REPLAY_ACTION_TYPES_H
+#define CEPH_RBD_REPLAY_ACTION_TYPES_H
+
+#include "include/int_types.h"
+#include "include/buffer.h"
+#include "include/encoding.h"
+#include <iosfwd>
+#include <list>
+#include <string>
+#include <vector>
+#include <boost/variant/variant.hpp>
+
+namespace ceph { class Formatter; }
+
+namespace rbd_replay {
+namespace action {
+
+typedef uint64_t imagectx_id_t;
+typedef uint64_t thread_id_t;
+
+/// Even IDs are normal actions, odd IDs are completions.
+typedef uint32_t action_id_t;
+
+static const std::string BANNER("rbd-replay-trace");
+
+/**
+ * Dependencies link actions to earlier actions or completions.
+ * If an action has a dependency \c d then it waits until \c d.time_delta
+ * nanoseconds after the action or completion with ID \c d.id has fired.
+ */
+struct Dependency {
+  /// ID of the action or completion to wait for.
+  action_id_t id;
+
+  /// Nanoseconds of delay to wait until after the action or completion fires.
+  uint64_t time_delta;
+
+  /**
+   * @param id ID of the action or completion to wait for.
+   * @param time_delta Nanoseconds of delay to wait after the action or
+   *                   completion fires.
+   */
+  Dependency() : id(0), time_delta(0) {
+  }
+  Dependency(action_id_t id, uint64_t time_delta)
+    : id(id), time_delta(time_delta) {
+  }
+
+  void encode(bufferlist &bl) const;
+  void decode(bufferlist::iterator &it);
+  void decode(__u8 version, bufferlist::iterator &it);
+  void dump(Formatter *f) const;
+
+  static void generate_test_instances(std::list<Dependency *> &o);
+};
+
+WRITE_CLASS_ENCODER(Dependency);
+
+typedef std::vector<Dependency> Dependencies;
+
+enum ActionType {
+  ACTION_TYPE_START_THREAD = 0,
+  ACTION_TYPE_STOP_THREAD  = 1,
+  ACTION_TYPE_READ         = 2,
+  ACTION_TYPE_WRITE        = 3,
+  ACTION_TYPE_AIO_READ     = 4,
+  ACTION_TYPE_AIO_WRITE    = 5,
+  ACTION_TYPE_OPEN_IMAGE   = 6,
+  ACTION_TYPE_CLOSE_IMAGE  = 7
+};
+
+struct ActionBase {
+  action_id_t id;
+  thread_id_t thread_id;
+  Dependencies dependencies;
+
+  ActionBase() : id(0), thread_id(0) {
+  }
+  ActionBase(action_id_t id, thread_id_t thread_id,
+             const Dependencies &dependencies)
+    : id(id), thread_id(thread_id), dependencies(dependencies) {
+  }
+
+  void encode(bufferlist &bl) const;
+  void decode(__u8 version, bufferlist::iterator &it);
+  void dump(Formatter *f) const;
+};
+
+struct StartThreadAction : public ActionBase {
+  static const ActionType ACTION_TYPE = ACTION_TYPE_START_THREAD;
+
+  StartThreadAction() {
+  }
+  StartThreadAction(action_id_t id, thread_id_t thread_id,
+                    const Dependencies &dependencies)
+    : ActionBase(id, thread_id, dependencies) {
+  }
+};
+
+struct StopThreadAction : public ActionBase {
+  static const ActionType ACTION_TYPE = ACTION_TYPE_STOP_THREAD;
+
+  StopThreadAction() {
+  }
+  StopThreadAction(action_id_t id, thread_id_t thread_id,
+                   const Dependencies &dependencies)
+    : ActionBase(id, thread_id, dependencies) {
+  }
+};
+
+struct ImageActionBase : public ActionBase {
+  imagectx_id_t imagectx_id;
+
+  ImageActionBase() : imagectx_id(0) {
+  }
+  ImageActionBase(action_id_t id, thread_id_t thread_id,
+                  const Dependencies &dependencies, imagectx_id_t imagectx_id)
+    : ActionBase(id, thread_id, dependencies), imagectx_id(imagectx_id) {
+  }
+
+  void encode(bufferlist &bl) const;
+  void decode(__u8 version, bufferlist::iterator &it);
+  void dump(Formatter *f) const;
+};
+
+struct IoActionBase : public ImageActionBase {
+  uint64_t offset;
+  uint64_t length;
+
+  IoActionBase() : offset(0), length(0) {
+  }
+  IoActionBase(action_id_t id, thread_id_t thread_id,
+               const Dependencies &dependencies, imagectx_id_t imagectx_id,
+               uint64_t offset, uint64_t length)
+    : ImageActionBase(id, thread_id, dependencies, imagectx_id),
+      offset(offset), length(length) {
+  }
+
+  void encode(bufferlist &bl) const;
+  void decode(__u8 version, bufferlist::iterator &it);
+  void dump(Formatter *f) const;
+};
+
+struct ReadAction : public IoActionBase {
+  static const ActionType ACTION_TYPE = ACTION_TYPE_READ;
+
+  ReadAction() {
+  }
+  ReadAction(action_id_t id, thread_id_t thread_id,
+             const Dependencies &dependencies, imagectx_id_t imagectx_id,
+             uint64_t offset, uint64_t length)
+    : IoActionBase(id, thread_id, dependencies, imagectx_id, offset, length) {
+  }
+};
+
+struct WriteAction : public IoActionBase {
+  static const ActionType ACTION_TYPE = ACTION_TYPE_WRITE;
+
+  WriteAction() {
+  }
+  WriteAction(action_id_t id, thread_id_t thread_id,
+              const Dependencies &dependencies, imagectx_id_t imagectx_id,
+              uint64_t offset, uint64_t length)
+    : IoActionBase(id, thread_id, dependencies, imagectx_id, offset, length) {
+  }
+};
+
+struct AioReadAction : public IoActionBase {
+  static const ActionType ACTION_TYPE = ACTION_TYPE_AIO_READ;
+
+  AioReadAction() {
+  }
+  AioReadAction(action_id_t id, thread_id_t thread_id,
+                const Dependencies &dependencies, imagectx_id_t imagectx_id,
+                uint64_t offset, uint64_t length)
+    : IoActionBase(id, thread_id, dependencies, imagectx_id, offset, length) {
+  }
+};
+
+struct AioWriteAction : public IoActionBase {
+  static const ActionType ACTION_TYPE = ACTION_TYPE_AIO_WRITE;
+
+  AioWriteAction() {
+  }
+  AioWriteAction(action_id_t id, thread_id_t thread_id,
+                 const Dependencies &dependencies, imagectx_id_t imagectx_id,
+                 uint64_t offset, uint64_t length)
+    : IoActionBase(id, thread_id, dependencies, imagectx_id, offset, length) {
+  }
+};
+
+struct OpenImageAction : public ImageActionBase {
+  static const ActionType ACTION_TYPE = ACTION_TYPE_OPEN_IMAGE;
+
+  std::string name;
+  std::string snap_name;
+  bool read_only;
+
+  OpenImageAction() : read_only(false) {
+  }
+  OpenImageAction(action_id_t id, thread_id_t thread_id,
+                  const Dependencies &dependencies, imagectx_id_t imagectx_id,
+                  const std::string &name, const std::string &snap_name,
+                  bool read_only)
+    : ImageActionBase(id, thread_id, dependencies, imagectx_id),
+      name(name), snap_name(snap_name), read_only(read_only) {
+  }
+
+  void encode(bufferlist &bl) const;
+  void decode(__u8 version, bufferlist::iterator &it);
+  void dump(Formatter *f) const;
+};
+
+struct CloseImageAction : public ImageActionBase {
+  static const ActionType ACTION_TYPE = ACTION_TYPE_CLOSE_IMAGE;
+
+  CloseImageAction() {
+  }
+  CloseImageAction(action_id_t id, thread_id_t thread_id,
+                   const Dependencies &dependencies, imagectx_id_t imagectx_id)
+    : ImageActionBase(id, thread_id, dependencies, imagectx_id) {
+  }
+};
+
+struct UnknownAction {
+  static const ActionType ACTION_TYPE = static_cast<ActionType>(-1);
+
+  void encode(bufferlist &bl) const;
+  void decode(__u8 version, bufferlist::iterator &it);
+  void dump(Formatter *f) const;
+};
+
+typedef boost::variant<StartThreadAction,
+                       StopThreadAction,
+                       ReadAction,
+                       WriteAction,
+                       AioReadAction,
+                       AioWriteAction,
+                       OpenImageAction,
+                       CloseImageAction,
+                       UnknownAction> Action;
+
+class ActionEntry {
+public:
+  Action action;
+
+  ActionEntry() : action(UnknownAction()) {
+  }
+  ActionEntry(const Action &action) : action(action) {
+  }
+
+  void encode(bufferlist &bl) const;
+  void decode(bufferlist::iterator &it);
+  void decode_unversioned(bufferlist::iterator &it);
+  void dump(Formatter *f) const;
+
+  static void generate_test_instances(std::list<ActionEntry *> &o);
+
+private:
+  void decode(__u8 version, bufferlist::iterator &it);
+};
+
+WRITE_CLASS_ENCODER(ActionEntry);
+
+} // namespace action
+} // namespace rbd_replay
+
+std::ostream &operator<<(std::ostream &out,
+                         const rbd_replay::action::ActionType &type);
+
+using rbd_replay::action::decode;
+using rbd_replay::action::encode;
+
+#endif // CEPH_RBD_REPLAY_ACTION_TYPES_H
diff --git a/ceph/src/rbd_replay/BufferReader.cc b/ceph/src/rbd_replay/BufferReader.cc
new file mode 100644 (file)
index 0000000..5bf2cc2
--- /dev/null
@@ -0,0 +1,38 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#include "rbd_replay/BufferReader.h"
+#include "include/assert.h"
+#include "include/intarith.h"
+#include "include/page.h"
+
+namespace rbd_replay {
+
+BufferReader::BufferReader(int fd, size_t min_bytes, size_t max_bytes)
+  : m_fd(fd), m_min_bytes(min_bytes), m_max_bytes(max_bytes),
+    m_bl_it(m_bl.begin()), m_eof_reached(false) {
+  assert(m_min_bytes <= m_max_bytes);
+}
+
+int BufferReader::fetch(bufferlist::iterator **it) {
+  if (m_bl_it.get_remaining() < m_min_bytes) {
+    ssize_t bytes_to_read = ROUND_UP_TO(m_max_bytes - m_bl_it.get_remaining(),
+                                        CEPH_PAGE_SIZE);
+    while (!m_eof_reached && bytes_to_read > 0) {
+      int r = m_bl.read_fd(m_fd, CEPH_PAGE_SIZE);
+      if (r < 0) {
+        return r;
+      }
+      if (r == 0) {
+       m_eof_reached = true;
+      }
+      assert(r <= bytes_to_read);
+      bytes_to_read -= r;
+    }
+  }
+
+  *it = &m_bl_it;
+  return 0;
+}
+
+} // namespace rbd_replay
diff --git a/ceph/src/rbd_replay/BufferReader.h b/ceph/src/rbd_replay/BufferReader.h
new file mode 100644 (file)
index 0000000..07f7b09
--- /dev/null
@@ -0,0 +1,34 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#ifndef CEPH_RBD_REPLAY_BUFFER_READER_H
+#define CEPH_RBD_REPLAY_BUFFER_READER_H
+
+#include "include/int_types.h"
+#include "include/buffer.h"
+
+namespace rbd_replay {
+
+class BufferReader {
+public:
+  static const size_t DEFAULT_MIN_BYTES = 1<<20;
+  static const size_t DEFAULT_MAX_BYTES = 1<<22;
+
+  BufferReader(int fd, size_t min_bytes = DEFAULT_MIN_BYTES,
+               size_t max_bytes = DEFAULT_MAX_BYTES);
+
+  int fetch(bufferlist::iterator **it);
+
+private:
+  int m_fd;
+  size_t m_min_bytes;
+  size_t m_max_bytes;
+  bufferlist m_bl;
+  bufferlist::iterator m_bl_it;
+  bool m_eof_reached;
+
+};
+
+} // namespace rbd_replay
+
+#endif // CEPH_RBD_REPLAY_BUFFER_READER_H
diff --git a/ceph/src/rbd_replay/Deser.cc b/ceph/src/rbd_replay/Deser.cc
deleted file mode 100644 (file)
index 986a18c..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2014 Adam Crume <adamcrume@gmail.com>
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- *
- */
-
-#include "Deser.hpp"
-#include <arpa/inet.h>
-#include <cstdlib>
-#include <endian.h>
-
-
-rbd_replay::Deser::Deser(std::istream &in)
-  : m_in(in) {
-}
-
-uint8_t rbd_replay::Deser::read_uint8_t() {
-  uint8_t data;
-  m_in.read(reinterpret_cast<char*>(&data), sizeof(data));
-  return data;
-}
-
-uint16_t rbd_replay::Deser::read_uint16_t() {
-  uint16_t data;
-  m_in.read(reinterpret_cast<char*>(&data), sizeof(data));
-  return ntohs(data);
-}
-
-uint32_t rbd_replay::Deser::read_uint32_t() {
-  uint32_t data;
-  m_in.read(reinterpret_cast<char*>(&data), sizeof(data));
-  return ntohl(data);
-}
-
-uint64_t rbd_replay::Deser::read_uint64_t() {
-  uint64_t data;
-  m_in.read(reinterpret_cast<char*>(&data), sizeof(data));
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-  data = (static_cast<uint64_t>(ntohl(data)) << 32 | ntohl(data >> 32));
-#endif
-  return data;
-}
-
-std::string rbd_replay::Deser::read_string() {
-  uint32_t length = read_uint32_t();
-  char* data = reinterpret_cast<char*>(malloc(length));
-  m_in.read(data, length);
-  std::string s(data, length);
-  free(data);
-  return s;
-}
-
-bool rbd_replay::Deser::read_bool() {
-  return read_uint8_t() != 0;
-}
-
-bool rbd_replay::Deser::eof() {
-  return m_in.eof();
-}
diff --git a/ceph/src/rbd_replay/Deser.hpp b/ceph/src/rbd_replay/Deser.hpp
deleted file mode 100644 (file)
index b466ace..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2014 Adam Crume <adamcrume@gmail.com>
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- *
- */
-
-#ifndef _INCLUDED_RBD_REPLAY_DESER_HPP
-#define _INCLUDED_RBD_REPLAY_DESER_HPP
-
-#include <iostream>
-#include <stdint.h>
-
-namespace rbd_replay {
-
-/**
-   Helper for deserializing data in an architecture-indepdendent way.
-   Everything is read big-endian.
-   @see Ser
-*/
-class Deser {
-public:
-  Deser(std::istream &in);
-
-  uint8_t read_uint8_t();
-
-  uint16_t read_uint16_t();
-
-  uint32_t read_uint32_t();
-
-  uint64_t read_uint64_t();
-
-  std::string read_string();
-
-  bool read_bool();
-
-  bool eof();
-
-private:
-  std::istream &m_in;
-};
-
-}
-
-#endif
index fa101b7423fdc8f6adb74d3eb0279cb42120c477..23a8e9152e089d934bbd78d1e291850347e40287 100644 (file)
@@ -2,35 +2,46 @@ if ENABLE_CLIENT
 if WITH_RADOS
 if WITH_RBD
 
+librbd_replay_types_la_SOURCES = \
+       rbd_replay/ActionTypes.cc
+noinst_HEADERS += \
+        rbd_replay/ActionTypes.h
+noinst_LTLIBRARIES += librbd_replay_types.la
+DENCODER_DEPS += librbd_replay_types.la
+
 # librbd_replay_la exists only to help with unit tests
-librbd_replay_la_SOURCES = rbd_replay/actions.cc \
-       rbd_replay/Deser.cc \
+librbd_replay_la_SOURCES = \
+       rbd_replay/actions.cc \
+       rbd_replay/BufferReader.cc \
        rbd_replay/ImageNameMap.cc \
        rbd_replay/PendingIO.cc \
        rbd_replay/rbd_loc.cc \
-       rbd_replay/Replayer.cc \
-       rbd_replay/Ser.cc
-librbd_replay_la_LIBADD = $(LIBRBD) \
+       rbd_replay/Replayer.cc
+librbd_replay_la_LIBADD = \
+       $(LIBRBD) \
        $(LIBRADOS) \
        $(CEPH_GLOBAL)
 noinst_LTLIBRARIES += librbd_replay.la
-noinst_HEADERS += rbd_replay/BoundedBuffer.hpp \
+noinst_HEADERS += \
        rbd_replay/actions.hpp \
-       rbd_replay/Deser.hpp \
+       rbd_replay/BoundedBuffer.hpp \
+       rbd_replay/BufferReader.h \
        rbd_replay/ImageNameMap.hpp \
        rbd_replay/ios.hpp \
        rbd_replay/PendingIO.hpp \
        rbd_replay/rbd_loc.hpp \
        rbd_replay/rbd_replay_debug.hpp \
-       rbd_replay/Replayer.hpp \
-       rbd_replay/Ser.hpp
-
+       rbd_replay/Replayer.hpp
 
-rbd_replay_SOURCES = rbd_replay/rbd-replay.cc
-rbd_replay_LDADD = $(LIBRBD) \
+rbd_replay_SOURCES = \
+       rbd_replay/rbd-replay.cc
+rbd_replay_LDADD = \
+       librbd_replay.la \
+       librbd_replay_types.la \
+       $(LIBRBD) \
        $(LIBRADOS) \
        $(CEPH_GLOBAL) \
-       librbd_replay.la
+       $(LIBCOMMON)
 
 if LINUX
 bin_PROGRAMS += rbd-replay
@@ -43,12 +54,16 @@ librbd_replay_ios_la_LIBADD = $(LIBRBD) \
        librbd_replay.la
 noinst_LTLIBRARIES += librbd_replay_ios.la
 
-rbd_replay_prep_SOURCES = rbd_replay/rbd-replay-prep.cc
-rbd_replay_prep_LDADD = $(LIBRBD) \
-       $(LIBRADOS) \
-       $(CEPH_GLOBAL) \
+rbd_replay_prep_SOURCES = \
+       rbd_replay/rbd-replay-prep.cc
+rbd_replay_prep_LDADD = \
        librbd_replay.la \
        librbd_replay_ios.la \
+       librbd_replay_types.la \
+       $(LIBRBD) \
+       $(LIBRADOS) \
+       $(CEPH_GLOBAL) \
+       $(LIBCOMMON) \
        -lbabeltrace \
        -lbabeltrace-ctf \
        -lboost_date_time
index 19403e51a3d67ccfcb3965b508214d5dc22321c9..a40e886eec6eaa02547adaf2479013a4624f110a 100644 (file)
  */
 
 #include "Replayer.hpp"
+#include "common/errno.h"
+#include "rbd_replay/ActionTypes.h"
+#include "rbd_replay/BufferReader.h"
 #include <boost/foreach.hpp>
 #include <boost/thread/thread.hpp>
+#include <boost/scope_exit.hpp>
 #include <fstream>
 #include "global/global_context.h"
 #include "rbd_replay_debug.hpp"
 using namespace std;
 using namespace rbd_replay;
 
+namespace {
+
+bool is_versioned_replay(BufferReader &buffer_reader) {
+  bufferlist::iterator *it;
+  int r = buffer_reader.fetch(&it);
+  if (r < 0) {
+    return false;
+  }
+
+  if (it->get_remaining() < action::BANNER.size()) {
+    return false;
+  }
+
+  std::string banner;
+  it->copy(action::BANNER.size(), banner);
+  bool versioned = (banner == action::BANNER);
+  if (!versioned) {
+    it->seek(0);
+  }
+  return versioned;
+}
+
+} // anonymous namespace
 
 Worker::Worker(Replayer &replayer)
   : m_replayer(replayer),
@@ -154,36 +181,67 @@ void Replayer::run(const std::string& replay_file) {
     rados.init(NULL);
     int r = rados.init_with_context(g_ceph_context);
     if (r) {
-      cerr << "Unable to read conf file: " << r << std::endl;
+      cerr << "Failed to initialize RADOS: " << cpp_strerror(r) << std::endl;
       goto out;
     }
     r = rados.connect();
     if (r) {
-      cerr << "Unable to connect to Rados: " << r << std::endl;
+      cerr << "Failed to connect to cluster: " << cpp_strerror(r) << std::endl;
       goto out;
     }
     m_ioctx = new librados::IoCtx();
     {
       r = rados.ioctx_create(m_pool_name.c_str(), *m_ioctx);
       if (r) {
-       cerr << "Unable to create IoCtx: " << r << std::endl;
+        cerr << "Failed to open pool " << m_pool_name << ": "
+             << cpp_strerror(r) << std::endl;
        goto out2;
       }
       m_rbd = new librbd::RBD();
       map<thread_id_t, Worker*> workers;
 
-      ifstream input(replay_file.c_str(), ios::in | ios::binary);
-      if (!input.is_open()) {
-       cerr << "Unable to open " << replay_file << std::endl;
-       exit(1);
+      int fd = open(replay_file.c_str(), O_RDONLY);
+      if (fd < 0) {
+        std::cerr << "Failed to open " << replay_file << ": "
+                  << cpp_strerror(errno) << std::endl;
+        exit(1);
       }
+      BOOST_SCOPE_EXIT( (fd) ) {
+        close(fd);
+      } BOOST_SCOPE_EXIT_END;
 
-      Deser deser(input);
+      BufferReader buffer_reader(fd);
+      bool versioned = is_versioned_replay(buffer_reader);
       while (true) {
-       Action::ptr action = Action::read_from(deser);
+        action::ActionEntry action_entry;
+        try {
+          bufferlist::iterator *it;
+          int r = buffer_reader.fetch(&it);
+          if (r < 0) {
+            std::cerr << "Failed to read from trace file: " << cpp_strerror(r)
+                      << std::endl;
+            exit(-r);
+          }
+         if (it->get_remaining() == 0) {
+           break;
+         }
+
+          if (versioned) {
+            action_entry.decode(*it);
+          } else {
+            action_entry.decode_unversioned(*it);
+          }
+        } catch (const buffer::error &err) {
+          std::cerr << "Failed to decode trace action: " << err.what() << std::endl;
+          exit(1);
+        }
+
+       Action::ptr action = Action::construct(action_entry);
        if (!action) {
-         break;
+          // unknown / unsupported action
+         continue;
        }
+
        if (action->is_start_thread()) {
          Worker *worker = new Worker(*this);
          workers[action->thread_id()] = worker;
@@ -257,9 +315,9 @@ bool Replayer::is_action_complete(action_id_t id) {
   return tracker.actions.count(id) > 0;
 }
 
-void Replayer::wait_for_actions(const vector<dependency_d> &deps) {
+void Replayer::wait_for_actions(const action::Dependencies &deps) {
   boost::posix_time::ptime release_time(boost::posix_time::neg_infin);
-  BOOST_FOREACH(const dependency_d &dep, deps) {
+  BOOST_FOREACH(const action::Dependency &dep, deps) {
     dout(DEPGRAPH_LEVEL) << "Waiting for " << dep.id << dendl;
     boost::system_time start_time(boost::get_system_time());
     action_tracker_d &tracker = tracker_for(dep.id);
index 538e7fddd4df31d1207282b6dc17095b0625c018..acad7258fccd4c8ff7c21a52310c88699343b00f 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <boost/thread/mutex.hpp>
 #include <boost/thread/shared_mutex.hpp>
+#include "rbd_replay/ActionTypes.h"
 #include "BoundedBuffer.hpp"
 #include "ImageNameMap.hpp"
 #include "PendingIO.hpp"
@@ -100,7 +101,7 @@ public:
 
   bool is_action_complete(action_id_t id);
 
-  void wait_for_actions(const std::vector<dependency_d> &deps);
+  void wait_for_actions(const action::Dependencies &deps);
 
   std::string pool_name() const;
 
diff --git a/ceph/src/rbd_replay/Ser.cc b/ceph/src/rbd_replay/Ser.cc
deleted file mode 100644 (file)
index 97a63cd..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2014 Adam Crume <adamcrume@gmail.com>
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- *
- */
-
-#include "Ser.hpp"
-#include <arpa/inet.h>
-#include <cstdlib>
-#include <endian.h>
-
-
-rbd_replay::Ser::Ser(std::ostream &out)
-  : m_out(out) {
-}
-
-void rbd_replay::Ser::write_uint8_t(uint8_t data) {
-  m_out.write(reinterpret_cast<char*>(&data), sizeof(data));
-}
-
-void rbd_replay::Ser::write_uint16_t(uint16_t data) {
-  data = htons(data);
-  m_out.write(reinterpret_cast<char*>(&data), sizeof(data));
-}
-
-void rbd_replay::Ser::write_uint32_t(uint32_t data) {
-  data = htonl(data);
-  m_out.write(reinterpret_cast<char*>(&data), sizeof(data));
-}
-
-void rbd_replay::Ser::write_uint64_t(uint64_t data) {
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-  data = (static_cast<uint64_t>(htonl(data)) << 32 | htonl(data >> 32));
-#endif
-  m_out.write(reinterpret_cast<char*>(&data), sizeof(data));
-}
-
-void rbd_replay::Ser::write_string(const std::string& data) {
-  write_uint32_t(data.length());
-  m_out.write(data.data(), data.length());
-}
-
-void rbd_replay::Ser::write_bool(bool data) {
-  write_uint8_t(data ? 1 : 0);
-}
diff --git a/ceph/src/rbd_replay/Ser.hpp b/ceph/src/rbd_replay/Ser.hpp
deleted file mode 100644 (file)
index 130465d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
-// vim: ts=8 sw=2 smarttab
-/*
- * Ceph - scalable distributed file system
- *
- * Copyright (C) 2014 Adam Crume <adamcrume@gmail.com>
- *
- * This is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software
- * Foundation.  See file COPYING.
- *
- */
-
-#ifndef _INCLUDED_RBD_REPLAY_SER_HPP
-#define _INCLUDED_RBD_REPLAY_SER_HPP
-
-#include <iostream>
-#include <stdint.h>
-
-namespace rbd_replay {
-
-/**
-   Helper for serializing data in an architecture-indepdendent way.
-   Everything is written big-endian.
-   @see Deser
-*/
-class Ser {
-public:
-  Ser(std::ostream &out);
-
-  void write_uint8_t(uint8_t);
-
-  void write_uint16_t(uint16_t);
-
-  void write_uint32_t(uint32_t);
-
-  void write_uint64_t(uint64_t);
-
-  void write_string(const std::string&);
-
-  void write_bool(bool b);
-
-private:
-  std::ostream &m_out;
-};
-
-}
-
-#endif
index 2bcdfb194ec608031668082372513674d0f8bea8..7726d08706dbc40849d3726c38d23a2886758d4f 100644 (file)
 using namespace rbd_replay;
 using namespace std;
 
+namespace {
 
-Action::Action(action_id_t id,
-               thread_id_t thread_id,
-               int num_successors,
-               int num_completion_successors,
-               std::vector<dependency_d> &predecessors)
-  : m_id(id),
-    m_thread_id(thread_id),
-    m_num_successors(num_successors),
-    m_num_completion_successors(num_completion_successors),
-    m_predecessors(predecessors) {
-    }
-
-Action::~Action() {
+std::string create_fake_data() {
+  char data[1 << 20]; // 1 MB
+  for (unsigned int i = 0; i < sizeof(data); i++) {
+    data[i] = (char) i;
+  }
+  return std::string(data, sizeof(data));
 }
 
-Action::ptr Action::read_from(Deser &d) {
-  uint8_t type = d.read_uint8_t();
-  if (d.eof()) {
-    return Action::ptr();
-  }
-  uint32_t ionum = d.read_uint32_t();
-  uint64_t thread_id = d.read_uint64_t();
-  uint32_t num_successors = d.read_uint32_t();
-  uint32_t num_completion_successors = d.read_uint32_t();
-  uint32_t num_dependencies = d.read_uint32_t();
-  vector<dependency_d> deps;
-  for (unsigned int i = 0; i < num_dependencies; i++) {
-    uint32_t dep_id = d.read_uint32_t();
-    uint64_t time_delta = d.read_uint64_t();
-    deps.push_back(dependency_d(dep_id, time_delta));
+struct ConstructVisitor : public boost::static_visitor<Action::ptr> {
+  inline Action::ptr operator()(const action::StartThreadAction &action) const {
+    return Action::ptr(new StartThreadAction(action));
   }
-  DummyAction dummy(ionum, thread_id, num_successors, num_completion_successors, deps);
-  switch (type) {
-  case IO_START_THREAD:
-    return StartThreadAction::read_from(dummy, d);
-  case IO_STOP_THREAD:
-    return StopThreadAction::read_from(dummy, d);
-  case IO_READ:
-    return ReadAction::read_from(dummy, d);
-  case IO_WRITE:
-    return WriteAction::read_from(dummy, d);
-  case IO_ASYNC_READ:
-    return AioReadAction::read_from(dummy, d);
-  case IO_ASYNC_WRITE:
-    return AioWriteAction::read_from(dummy, d);
-  case IO_OPEN_IMAGE:
-    return OpenImageAction::read_from(dummy, d);
-  case IO_CLOSE_IMAGE:
-    return CloseImageAction::read_from(dummy, d);
-  default:
-    cerr << "Invalid action type: " << type << std::endl;
-    exit(1);
+
+  inline Action::ptr operator()(const action::StopThreadAction &action) const{
+    return Action::ptr(new StopThreadAction(action));
   }
-}
 
-std::ostream& Action::dump_action_fields(std::ostream& o) const {
-  o << "id=" << m_id << ", thread_id=" << m_thread_id << ", predecessors=[";
-  bool first = true;
-  BOOST_FOREACH(const dependency_d &d, m_predecessors) {
-    if (!first) {
-      o << ",";
-    }
-    o << d.id;
-    first = false;
+  inline Action::ptr operator()(const action::ReadAction &action) const {
+    return Action::ptr(new ReadAction(action));
   }
-  return o << "]";
-}
 
-std::ostream& rbd_replay::operator<<(std::ostream& o, const Action& a) {
-  return a.dump(o);
-}
+  inline Action::ptr operator()(const action::AioReadAction &action) const {
+    return Action::ptr(new AioReadAction(action));
+  }
 
+  inline Action::ptr operator()(const action::WriteAction &action) const {
+    return Action::ptr(new WriteAction(action));
+  }
 
-std::ostream& DummyAction::dump(std::ostream& o) const {
-  o << "DummyAction[";
-  dump_action_fields(o);
-  return o << "]";
-}
+  inline Action::ptr operator()(const action::AioWriteAction &action) const {
+    return Action::ptr(new AioWriteAction(action));
+  }
 
+  inline Action::ptr operator()(const action::OpenImageAction &action) const {
+    return Action::ptr(new OpenImageAction(action));
+  }
 
-StartThreadAction::StartThreadAction(Action &src)
-  : Action(src) {
-}
+  inline Action::ptr operator()(const action::CloseImageAction &action) const {
+    return Action::ptr(new CloseImageAction(action));
+  }
 
-void StartThreadAction::perform(ActionCtx &ctx) {
-  cerr << "StartThreadAction should never actually be performed" << std::endl;
-  exit(1);
-}
+  inline Action::ptr operator()(const action::UnknownAction &action) const {
+    return Action::ptr();
+  }
+};
 
-bool StartThreadAction::is_start_thread() {
-  return true;
-}
+} // anonymous namespace
 
-Action::ptr StartThreadAction::read_from(Action &src, Deser &d) {
-  return Action::ptr(new StartThreadAction(src));
+std::ostream& rbd_replay::operator<<(std::ostream& o, const Action& a) {
+  return a.dump(o);
 }
 
-std::ostream& StartThreadAction::dump(std::ostream& o) const {
-  o << "StartThreadAction[";
-  dump_action_fields(o);
-  return o << "]";
+Action::ptr Action::construct(const action::ActionEntry &action_entry) {
+  return boost::apply_visitor(ConstructVisitor(), action_entry.action);
 }
 
-
-StopThreadAction::StopThreadAction(Action &src)
-  : Action(src) {
+void StartThreadAction::perform(ActionCtx &ctx) {
+  cerr << "StartThreadAction should never actually be performed" << std::endl;
+  exit(1);
 }
 
 void StopThreadAction::perform(ActionCtx &ctx) {
@@ -136,116 +90,33 @@ void StopThreadAction::perform(ActionCtx &ctx) {
   ctx.stop();
 }
 
-Action::ptr StopThreadAction::read_from(Action &src, Deser &d) {
-  return Action::ptr(new StopThreadAction(src));
-}
-
-std::ostream& StopThreadAction::dump(std::ostream& o) const {
-  o << "StopThreadAction[";
-  dump_action_fields(o);
-  return o << "]";
-}
-
-
-AioReadAction::AioReadAction(const Action &src,
-                             imagectx_id_t imagectx_id,
-                             uint64_t offset,
-                             uint64_t length)
-  : Action(src),
-    m_imagectx_id(imagectx_id),
-    m_offset(offset),
-    m_length(length) {
-    }
-
-Action::ptr AioReadAction::read_from(Action &src, Deser &d) {
-  imagectx_id_t imagectx_id = d.read_uint64_t();
-  uint64_t offset = d.read_uint64_t();
-  uint64_t length = d.read_uint64_t();
-  return Action::ptr(new AioReadAction(src, imagectx_id, offset, length));
-}
-
 void AioReadAction::perform(ActionCtx &worker) {
   dout(ACTION_LEVEL) << "Performing " << *this << dendl;
-  librbd::Image *image = worker.get_image(m_imagectx_id);
+  librbd::Image *image = worker.get_image(m_action.imagectx_id);
   assert(image);
   PendingIO::ptr io(new PendingIO(pending_io_id(), worker));
   worker.add_pending(io);
-  int r = image->aio_read(m_offset, m_length, io->bufferlist(), &io->completion());
+  int r = image->aio_read(m_action.offset, m_action.length, io->bufferlist(), &io->completion());
   assertf(r >= 0, "id = %d, r = %d", id(), r);
 }
 
-std::ostream& AioReadAction::dump(std::ostream& o) const {
-  o << "AioReadAction[";
-  dump_action_fields(o);
-  return o << ", imagectx_id=" << m_imagectx_id << ", offset=" << m_offset << ", length=" << m_length << "]";
-}
-
-
-ReadAction::ReadAction(const Action &src,
-                       imagectx_id_t imagectx_id,
-                       uint64_t offset,
-                       uint64_t length)
-  : Action(src),
-    m_imagectx_id(imagectx_id),
-    m_offset(offset),
-    m_length(length) {
-    }
-
-Action::ptr ReadAction::read_from(Action &src, Deser &d) {
-  imagectx_id_t imagectx_id = d.read_uint64_t();
-  uint64_t offset = d.read_uint64_t();
-  uint64_t length = d.read_uint64_t();
-  return Action::ptr(new ReadAction(src, imagectx_id, offset, length));
-}
-
 void ReadAction::perform(ActionCtx &worker) {
   dout(ACTION_LEVEL) << "Performing " << *this << dendl;
-  librbd::Image *image = worker.get_image(m_imagectx_id);
+  librbd::Image *image = worker.get_image(m_action.imagectx_id);
   PendingIO::ptr io(new PendingIO(pending_io_id(), worker));
   worker.add_pending(io);
-  ssize_t r = image->read(m_offset, m_length, io->bufferlist());
+  ssize_t r = image->read(m_action.offset, m_action.length, io->bufferlist());
   assertf(r >= 0, "id = %d, r = %d", id(), r);
   worker.remove_pending(io);
 }
 
-std::ostream& ReadAction::dump(std::ostream& o) const {
-  o << "ReadAction[";
-  dump_action_fields(o);
-  return o << ", imagectx_id=" << m_imagectx_id << ", offset=" << m_offset << ", length=" << m_length << "]";
-}
-
-
-AioWriteAction::AioWriteAction(const Action &src,
-                               imagectx_id_t imagectx_id,
-                               uint64_t offset,
-                               uint64_t length)
-  : Action(src),
-    m_imagectx_id(imagectx_id),
-    m_offset(offset),
-    m_length(length) {
-    }
-
-Action::ptr AioWriteAction::read_from(Action &src, Deser &d) {
-  imagectx_id_t imagectx_id = d.read_uint64_t();
-  uint64_t offset = d.read_uint64_t();
-  uint64_t length = d.read_uint64_t();
-  return Action::ptr(new AioWriteAction(src, imagectx_id, offset, length));
-}
-
-static std::string create_fake_data() {
-  char data[1 << 20]; // 1 MB
-  for (unsigned int i = 0; i < sizeof(data); i++) {
-    data[i] = (char) i;
-  }
-  return std::string(data, sizeof(data));
-}
 
 void AioWriteAction::perform(ActionCtx &worker) {
   static const std::string fake_data(create_fake_data());
   dout(ACTION_LEVEL) << "Performing " << *this << dendl;
-  librbd::Image *image = worker.get_image(m_imagectx_id);
+  librbd::Image *image = worker.get_image(m_action.imagectx_id);
   PendingIO::ptr io(new PendingIO(pending_io_id(), worker));
-  uint64_t remaining = m_length;
+  uint64_t remaining = m_action.length;
   while (remaining > 0) {
     uint64_t n = std::min(remaining, (uint64_t)fake_data.length());
     io->bufferlist().append(fake_data.data(), n);
@@ -255,126 +126,52 @@ void AioWriteAction::perform(ActionCtx &worker) {
   if (worker.readonly()) {
     worker.remove_pending(io);
   } else {
-    int r = image->aio_write(m_offset, m_length, io->bufferlist(), &io->completion());
+    int r = image->aio_write(m_action.offset, m_action.length, io->bufferlist(), &io->completion());
     assertf(r >= 0, "id = %d, r = %d", id(), r);
   }
 }
 
-std::ostream& AioWriteAction::dump(std::ostream& o) const {
-  o << "AioWriteAction[";
-  dump_action_fields(o);
-  return o << ", imagectx_id=" << m_imagectx_id << ", offset=" << m_offset << ", length=" << m_length << "]";
-}
-
-
-WriteAction::WriteAction(const Action &src,
-                         imagectx_id_t imagectx_id,
-                         uint64_t offset,
-                         uint64_t length)
-  : Action(src),
-    m_imagectx_id(imagectx_id),
-    m_offset(offset),
-    m_length(length) {
-    }
-
-Action::ptr WriteAction::read_from(Action &src, Deser &d) {
-  imagectx_id_t imagectx_id = d.read_uint64_t();
-  uint64_t offset = d.read_uint64_t();
-  uint64_t length = d.read_uint64_t();
-  return Action::ptr(new WriteAction(src, imagectx_id, offset, length));
-}
-
 void WriteAction::perform(ActionCtx &worker) {
   dout(ACTION_LEVEL) << "Performing " << *this << dendl;
-  librbd::Image *image = worker.get_image(m_imagectx_id);
+  librbd::Image *image = worker.get_image(m_action.imagectx_id);
   PendingIO::ptr io(new PendingIO(pending_io_id(), worker));
   worker.add_pending(io);
-  io->bufferlist().append_zero(m_length);
+  io->bufferlist().append_zero(m_action.length);
   if (!worker.readonly()) {
-    ssize_t r = image->write(m_offset, m_length, io->bufferlist());
+    ssize_t r = image->write(m_action.offset, m_action.length, io->bufferlist());
     assertf(r >= 0, "id = %d, r = %d", id(), r);
   }
   worker.remove_pending(io);
 }
 
-std::ostream& WriteAction::dump(std::ostream& o) const {
-  o << "WriteAction[";
-  dump_action_fields(o);
-  return o << ", imagectx_id=" << m_imagectx_id << ", offset=" << m_offset << ", length=" << m_length << "]";
-}
-
-
-OpenImageAction::OpenImageAction(Action &src,
-                                 imagectx_id_t imagectx_id,
-                                 string name,
-                                 string snap_name,
-                                 bool readonly)
-  : Action(src),
-    m_imagectx_id(imagectx_id),
-    m_name(name),
-    m_snap_name(snap_name),
-    m_readonly(readonly) {
-    }
-
-Action::ptr OpenImageAction::read_from(Action &src, Deser &d) {
-  imagectx_id_t imagectx_id = d.read_uint64_t();
-  string name = d.read_string();
-  string snap_name = d.read_string();
-  bool readonly = d.read_bool();
-  return Action::ptr(new OpenImageAction(src, imagectx_id, name, snap_name, readonly));
-}
-
 void OpenImageAction::perform(ActionCtx &worker) {
   dout(ACTION_LEVEL) << "Performing " << *this << dendl;
   PendingIO::ptr io(new PendingIO(pending_io_id(), worker));
   worker.add_pending(io);
   librbd::Image *image = new librbd::Image();
   librbd::RBD *rbd = worker.rbd();
-  rbd_loc name(worker.map_image_name(m_name, m_snap_name));
+  rbd_loc name(worker.map_image_name(m_action.name, m_action.snap_name));
   int r;
-  if (m_readonly || worker.readonly()) {
+  if (m_action.read_only || worker.readonly()) {
     r = rbd->open_read_only(*worker.ioctx(), *image, name.image.c_str(), name.snap.c_str());
   } else {
     r = rbd->open(*worker.ioctx(), *image, name.image.c_str(), name.snap.c_str());
   }
   if (r) {
-    cerr << "Unable to open image '" << m_name
-        << "' with snap '" << m_snap_name
+    cerr << "Unable to open image '" << m_action.name
+        << "' with snap '" << m_action.snap_name
         << "' (mapped to '" << name.str()
-        << "') and readonly " << m_readonly
+        << "') and readonly " << m_action.read_only
         << ": (" << -r << ") " << strerror(-r) << std::endl;
     exit(1);
   }
-  worker.put_image(m_imagectx_id, image);
+  worker.put_image(m_action.imagectx_id, image);
   worker.remove_pending(io);
 }
 
-std::ostream& OpenImageAction::dump(std::ostream& o) const {
-  o << "OpenImageAction[";
-  dump_action_fields(o);
-  return o << ", imagectx_id=" << m_imagectx_id << ", name='" << m_name << "', snap_name='" << m_snap_name << "', readonly=" << m_readonly << "]";
-}
-
-
-CloseImageAction::CloseImageAction(Action &src,
-                                   imagectx_id_t imagectx_id)
-  : Action(src),
-    m_imagectx_id(imagectx_id) {
-    }
-
-Action::ptr CloseImageAction::read_from(Action &src, Deser &d) {
-  imagectx_id_t imagectx_id = d.read_uint64_t();
-  return Action::ptr(new CloseImageAction(src, imagectx_id));
-}
-
 void CloseImageAction::perform(ActionCtx &worker) {
   dout(ACTION_LEVEL) << "Performing " << *this << dendl;
-  worker.erase_image(m_imagectx_id);
+  worker.erase_image(m_action.imagectx_id);
   worker.set_action_complete(pending_io_id());
 }
 
-std::ostream& CloseImageAction::dump(std::ostream& o) const {
-  o << "CloseImageAction[";
-  dump_action_fields(o);
-  return o << ", imagectx_id=" << m_imagectx_id << "]";
-}
index 068e4dc413944ee378a48d067b8f5ae04484bebb..ea46a883362e62ec7badd833d9f2c2bfdade7547 100644 (file)
 
 #include <boost/shared_ptr.hpp>
 #include "include/rbd/librbd.hpp"
-#include "Deser.hpp"
+#include "common/Formatter.h"
+#include "rbd_replay/ActionTypes.h"
 #include "rbd_loc.hpp"
+#include <iostream>
 
 // Stupid Doxygen requires this or else the typedef docs don't appear anywhere.
 /// @file rbd_replay/actions.hpp
@@ -31,44 +33,8 @@ typedef uint64_t thread_id_t;
 /// Even IDs are normal actions, odd IDs are completions.
 typedef uint32_t action_id_t;
 
-/**
-   Dependencies link actions to earlier actions or completions.
-   If an action has a dependency \c d then it waits until \c d.time_delta nanoseconds after the action or completion with ID \c d.id has fired.
-*/
-struct dependency_d {
-  /// ID of the action or completion to wait for.
-  action_id_t id;
-
-  /// Nanoseconds of delay to wait until after the action or completion fires.
-  uint64_t time_delta;
-
-  /**
-     @param id ID of the action or completion to wait for.
-     @param time_delta Nanoseconds of delay to wait after the action or completion fires.
-   */
-  dependency_d(action_id_t id,
-              uint64_t time_delta)
-    : id(id),
-      time_delta(time_delta) {
-  }
-};
-
-// These are written to files, so don't change existing assignments.
-enum io_type {
-  IO_START_THREAD,
-  IO_STOP_THREAD,
-  IO_READ,
-  IO_WRITE,
-  IO_ASYNC_READ,
-  IO_ASYNC_WRITE,
-  IO_OPEN_IMAGE,
-  IO_CLOSE_IMAGE,
-};
-
-
 class PendingIO;
 
-
 /**
    %Context through which an Action interacts with its environment.
  */
@@ -131,19 +97,14 @@ class Action {
 public:
   typedef boost::shared_ptr<Action> ptr;
 
-  Action(action_id_t id,
-        thread_id_t thread_id,
-        int num_successors,
-        int num_completion_successors,
-        std::vector<dependency_d> &predecessors);
-
-  virtual ~Action();
+  virtual ~Action() {
+  }
 
   virtual void perform(ActionCtx &ctx) = 0;
 
   /// Returns the ID of the completion corresponding to this action.
   action_id_t pending_io_id() {
-    return m_id + 1;
+    return id() + 1;
   }
 
   // There's probably a better way to do this, but oh well.
@@ -151,206 +112,172 @@ public:
     return false;
   }
 
-  action_id_t id() const {
-    return m_id;
-  }
+  virtual action_id_t id() const = 0;
+  virtual thread_id_t thread_id() const = 0;
+  virtual const action::Dependencies& predecessors() const = 0;
+
+  virtual std::ostream& dump(std::ostream& o) const = 0;
+
+  static ptr construct(const action::ActionEntry &action_entry);
+};
 
-  thread_id_t thread_id() const {
-    return m_thread_id;
+template <typename ActionType>
+class TypedAction : public Action {
+public:
+  TypedAction(const ActionType &action) : m_action(action) {
   }
 
-  const std::vector<dependency_d>& predecessors() const {
-    return m_predecessors;
+  virtual action_id_t id() const {
+    return m_action.id;
   }
 
-  /// Reads and constructs an action from the replay file.
-  static ptr read_from(Deser &d);
+  virtual thread_id_t thread_id() const {
+    return m_action.thread_id;
+  }
 
-protected:
-  std::ostream& dump_action_fields(std::ostream& o) const;
+  virtual const action::Dependencies& predecessors() const {
+    return m_action.dependencies;
+  }
 
-private:
-  friend std::ostream& operator<<(std::ostream&, const Action&);
+  virtual std::ostream& dump(std::ostream& o) const {
+    o << get_action_name() << ": ";
+    ceph::JSONFormatter formatter(false);
+    formatter.open_object_section("");
+    m_action.dump(&formatter);
+    formatter.close_section();
+    formatter.flush(o);
+    return o;
+  }
 
-  virtual std::ostream& dump(std::ostream& o) const = 0;
+protected:
+  const ActionType m_action;
 
-  const action_id_t m_id;
-  const thread_id_t m_thread_id;
-  const int m_num_successors;
-  const int m_num_completion_successors;
-  const std::vector<dependency_d> m_predecessors;
+  virtual const char *get_action_name() const = 0;
 };
 
 /// Writes human-readable debug information about the action to the stream.
 /// @related Action
 std::ostream& operator<<(std::ostream& o, const Action& a);
 
-
-/**
-   Placeholder for partially-constructed actions.
-   Does nothing, and does not appear in the replay file.
- */
-class DummyAction : public Action {
+class StartThreadAction : public TypedAction<action::StartThreadAction> {
 public:
-  DummyAction(action_id_t id,
-             thread_id_t thread_id,
-             int num_successors,
-             int num_completion_successors,
-             std::vector<dependency_d> &predecessors)
-    : Action(id, thread_id, num_successors, num_completion_successors, predecessors) {
+  explicit StartThreadAction(const action::StartThreadAction &action)
+    : TypedAction<action::StartThreadAction>(action) {
   }
 
-  void perform(ActionCtx &ctx) {
+  virtual bool is_start_thread() {
+    return true;
   }
+  virtual void perform(ActionCtx &ctx);
 
-private:
-  std::ostream& dump(std::ostream& o) const;
-};
-
-
-class StopThreadAction : public Action {
-public:
-  explicit StopThreadAction(Action &src);
-
-  void perform(ActionCtx &ctx);
-
-  static Action::ptr read_from(Action &src, Deser &d);
-
-private:
-  std::ostream& dump(std::ostream& o) const;
+protected:
+  virtual const char *get_action_name() const {
+    return "StartThreadAction";
+  }
 };
 
-
-class AioReadAction : public Action {
+class StopThreadAction : public TypedAction<action::StopThreadAction> {
 public:
-  AioReadAction(const Action &src,
-               imagectx_id_t imagectx_id,
-               uint64_t offset,
-               uint64_t length);
-
-  void perform(ActionCtx &ctx);
-
-  static Action::ptr read_from(Action &src, Deser &d);
+  explicit StopThreadAction(const action::StopThreadAction &action)
+    : TypedAction<action::StopThreadAction>(action) {
+  }
 
-private:
-  std::ostream& dump(std::ostream& o) const;
+  virtual void perform(ActionCtx &ctx);
 
-  imagectx_id_t m_imagectx_id;
-  uint64_t m_offset;
-  uint64_t m_length;
+protected:
+  virtual const char *get_action_name() const {
+    return "StartThreadAction";
+  }
 };
 
 
-class ReadAction : public Action {
+class AioReadAction : public TypedAction<action::AioReadAction> {
 public:
-  ReadAction(const Action &src,
-            imagectx_id_t imagectx_id,
-            uint64_t offset,
-            uint64_t length);
-
-  void perform(ActionCtx &ctx);
-
-  static Action::ptr read_from(Action &src, Deser &d);
+  AioReadAction(const action::AioReadAction &action)
+    : TypedAction<action::AioReadAction>(action) {
+  }
 
-private:
-  std::ostream& dump(std::ostream& o) const;
+  virtual void perform(ActionCtx &ctx);
 
-  imagectx_id_t m_imagectx_id;
-  uint64_t m_offset;
-  uint64_t m_length;
+protected:
+  virtual const char *get_action_name() const {
+    return "AioReadAction";
+  }
 };
 
 
-class AioWriteAction : public Action {
+class ReadAction : public TypedAction<action::ReadAction> {
 public:
-  AioWriteAction(const Action &src,
-                imagectx_id_t imagectx_id,
-                uint64_t offset,
-                uint64_t length);
-
-  void perform(ActionCtx &ctx);
-
-  static Action::ptr read_from(Action &src, Deser &d);
+  ReadAction(const action::ReadAction &action)
+    : TypedAction<action::ReadAction>(action) {
+  }
 
-private:
-  std::ostream& dump(std::ostream& o) const;
+  virtual void perform(ActionCtx &ctx);
 
-  imagectx_id_t m_imagectx_id;
-  uint64_t m_offset;
-  uint64_t m_length;
+protected:
+  virtual const char *get_action_name() const {
+    return "ReadAction";
+  }
 };
 
 
-class WriteAction : public Action {
+class AioWriteAction : public TypedAction<action::AioWriteAction> {
 public:
-  WriteAction(const Action &src,
-             imagectx_id_t imagectx_id,
-             uint64_t offset,
-             uint64_t length);
-
-  void perform(ActionCtx &ctx);
-
-  static Action::ptr read_from(Action &src, Deser &d);
+  AioWriteAction(const action::AioWriteAction &action)
+    : TypedAction<action::AioWriteAction>(action) {
+  }
 
-private:
-  std::ostream& dump(std::ostream& o) const;
+  virtual void perform(ActionCtx &ctx);
 
-  imagectx_id_t m_imagectx_id;
-  uint64_t m_offset;
-  uint64_t m_length;
+protected:
+  virtual const char *get_action_name() const {
+    return "AioWriteAction";
+  }
 };
 
 
-class OpenImageAction : public Action {
+class WriteAction : public TypedAction<action::WriteAction> {
 public:
-  OpenImageAction(Action &src,
-                 imagectx_id_t imagectx_id,
-                 std::string name,
-                 std::string snap_name,
-                 bool readonly);
-
-  void perform(ActionCtx &ctx);
-
-  static Action::ptr read_from(Action &src, Deser &d);
+  WriteAction(const action::WriteAction &action)
+    : TypedAction<action::WriteAction>(action) {
+  }
 
-private:
-  std::ostream& dump(std::ostream& o) const;
+  virtual void perform(ActionCtx &ctx);
 
-  imagectx_id_t m_imagectx_id;
-  std::string m_name;
-  std::string m_snap_name;
-  bool m_readonly;
+protected:
+  virtual const char *get_action_name() const {
+    return "WriteAction";
+  }
 };
 
 
-class CloseImageAction : public Action {
+class OpenImageAction : public TypedAction<action::OpenImageAction> {
 public:
-  CloseImageAction(Action &src,
-                  imagectx_id_t imagectx_id);
-
-  void perform(ActionCtx &ctx);
-
-  static Action::ptr read_from(Action &src, Deser &d);
+  OpenImageAction(const action::OpenImageAction &action)
+    : TypedAction<action::OpenImageAction>(action) {
+  }
 
-private:
-  std::ostream& dump(std::ostream& o) const;
+  virtual void perform(ActionCtx &ctx);
 
-  imagectx_id_t m_imagectx_id;
+protected:
+  virtual const char *get_action_name() const {
+    return "OpenImageAction";
+  }
 };
 
 
-class StartThreadAction : public Action {
+class CloseImageAction : public TypedAction<action::CloseImageAction> {
 public:
-  explicit StartThreadAction(Action &src);
-
-  void perform(ActionCtx &ctx);
-
-  bool is_start_thread();
+  CloseImageAction(const action::CloseImageAction &action)
+    : TypedAction<action::CloseImageAction>(action) {
+  }
 
-  static Action::ptr read_from(Action &src, Deser &d);
+  virtual void perform(ActionCtx &ctx);
 
-private:
-  std::ostream& dump(std::ostream& o) const;
+protected:
+  virtual const char *get_action_name() const {
+    return "CloseImageAction";
+  }
 };
 
 }
index ccc560f85c814bd24be844f0902f4ce46f919632..7437bed8897846fc6786e566bfdd90a0ac9d9f59 100644 (file)
 // In other words, (a.id < b.id) == (a.timestamp < b.timestamp) for all IOs a and b.
 
 #include "ios.hpp"
+#include "rbd_replay/ActionTypes.h"
 
 using namespace std;
 using namespace rbd_replay;
 
-bool rbd_replay::compare_io_ptrs_by_start_time(IO::ptr p1, IO::ptr p2) {
-  return p1->start_time() < p2->start_time();
-}
+namespace {
 
-static uint64_t min_time(const map<action_id_t, IO::ptr>& s) {
-  if (s.empty()) {
-    return 0;
-  }
-  return s.begin()->second->start_time();
-}
-
-static uint64_t max_time(const map<action_id_t, IO::ptr>& s) {
-  if (s.empty()) {
-    return 0;
-  }
-  map<action_id_t, IO::ptr>::const_iterator itr(s.end());
-  --itr;
-  return itr->second->start_time();
+bool compare_dependencies_by_start_time(const action::Dependency &lhs,
+                                        const action::Dependency &rhs) {
+  return lhs.time_delta < rhs.time_delta;
 }
 
-void IO::add_dependencies(const io_set_t& deps) {
-  io_set_t base(m_dependencies);
-  for (io_set_t::const_iterator itr = deps.begin(); itr != deps.end(); ++itr) {
-    ptr dep(*itr);
-    for (io_set_t::const_iterator itr2 = dep->m_dependencies.begin(); itr2 != dep->m_dependencies.end(); ++itr2) {
-      base.insert(*itr2);
+action::Dependencies convert_dependencies(uint64_t start_time,
+                                          const io_set_t &deps) {
+  action::Dependencies action_deps;
+  action_deps.reserve(deps.size());
+  for (io_set_t::const_iterator it = deps.begin(); it != deps.end(); ++it) {
+    boost::shared_ptr<IO> io = *it;
+    uint64_t time_delta = 0;
+    if (start_time >= io->start_time()) {
+      time_delta = start_time - io->start_time();
     }
+    action_deps.push_back(action::Dependency(io->ionum(), time_delta));
   }
-  batch_unreachable_from(deps, base, &m_dependencies);
+  std::sort(action_deps.begin(), action_deps.end(),
+            compare_dependencies_by_start_time);
+  return action_deps;
 }
 
+} // anonymous namespace
+
 void IO::write_debug_base(ostream& out, string type) const {
   out << m_ionum << ": " << m_start_time / 1000000.0 << ": " << type << ", thread = " << m_thread_id << ", deps = {";
   bool first = true;
@@ -62,150 +58,40 @@ void IO::write_debug_base(ostream& out, string type) const {
     }
     out << (*itr)->m_ionum << ": " << m_start_time - (*itr)->m_start_time;
   }
-  out << "}, num_successors = " << m_num_successors << ", numCompletionSuccessors = " << num_completion_successors();
+  out << "}";
 }
 
 
-void IO::write_to(Ser& out, io_type iotype) const {
-  out.write_uint8_t(iotype);
-  out.write_uint32_t(m_ionum);
-  out.write_uint64_t(m_thread_id);
-  out.write_uint32_t(m_num_successors);
-  out.write_uint32_t(num_completion_successors());
-  out.write_uint32_t(m_dependencies.size());
-  vector<IO::ptr> deps;
-  for (io_set_t::const_iterator itr = m_dependencies.begin(), end = m_dependencies.end(); itr != end; ++itr) {
-    deps.push_back(*itr);
-  }
-  sort(deps.begin(), deps.end(), compare_io_ptrs_by_start_time);
-  for (vector<IO::ptr>::const_iterator itr = deps.begin(), end = deps.end(); itr != end; ++itr) {
-    out.write_uint32_t((*itr)->m_ionum);
-    out.write_uint64_t(m_start_time - (*itr)->m_start_time);
-  }
-}
-
-IO::ptr IO::create_completion(uint64_t start_time, thread_id_t thread_id) {
-  assert(!m_completion.lock());
-  IO::ptr completion(new CompletionIO(m_ionum + 1, start_time, thread_id));
-  m_completion = completion;
-  completion->m_dependencies.insert(shared_from_this());
-  return completion;
-}
-
-
-// TODO: Add unit tests
-// Anything in 'deps' which is not reachable from 'base' is added to 'unreachable'
-void rbd_replay::batch_unreachable_from(const io_set_t& deps, const io_set_t& base, io_set_t* unreachable) {
-  if (deps.empty()) {
-    return;
-  }
-
-  map<action_id_t, IO::ptr> searching_for;
-  for (io_set_t::const_iterator itr = deps.begin(); itr != deps.end(); ++itr) {
-    searching_for[(*itr)->ionum()] = *itr;
-  }
-
-  map<action_id_t, IO::ptr> boundary;
-  for (io_set_t::const_iterator itr = base.begin(); itr != base.end(); ++itr) {
-    boundary[(*itr)->ionum()] = *itr;
-  }
-
-  // The boundary horizon is the maximum timestamp of IOs in the boundary.
-  // This monotonically decreases, because dependencies (which are added to the set)
-  // have earlier timestamp than the dependent IOs (which were just removed from the set).
-  uint64_t boundary_horizon = max_time(boundary);
-
-  for (io_map_t::iterator itr = searching_for.begin(); itr != searching_for.end(); ) {
-    if (boundary_horizon >= itr->second->start_time()) {
-      break;
-    }
-    unreachable->insert(itr->second);
-    searching_for.erase(itr++);
-  }
-  if (searching_for.empty()) {
-    return;
-  }
-
-  // The searching horizon is the minimum timestamp of IOs in the searching set.
-  // This monotonically increases, because elements are only removed from the set.
-  uint64_t searching_horizon = min_time(searching_for);
-
-  while (!boundary.empty()) {
-    // Take an IO from the end, which has the highest timestamp.
-    // This reduces the boundary horizon as early as possible,
-    // which means we can short cut as soon as possible.
-    map<action_id_t, boost::shared_ptr<IO> >::iterator b_itr(boundary.end());
-    --b_itr;
-    boost::shared_ptr<IO> io(b_itr->second);
-    boundary.erase(b_itr);
-
-    for (io_set_t::const_iterator itr = io->dependencies().begin(), end = io->dependencies().end(); itr != end; ++itr) {
-      IO::ptr dep(*itr);
-      assertf(dep->ionum() < io->ionum(), "IO: %d, dependency: %d", io->ionum(), dep->ionum());
-      io_map_t::iterator p = searching_for.find(dep->ionum());
-      if (p != searching_for.end()) {
-       searching_for.erase(p);
-       if (dep->start_time() == searching_horizon) {
-         searching_horizon = min_time(searching_for);
-         if (searching_horizon == 0) {
-           return;
-         }
-       }
-      }
-      boundary[dep->ionum()] = dep;
-    }
-
-    boundary_horizon = max_time(boundary);
-    if (boundary_horizon != 0) {
-      // Anything we're searching for that has a timestamp greater than the
-      // boundary horizon will never be found, since the boundary horizon
-      // falls monotonically.
-      for (io_map_t::iterator itr = searching_for.begin(); itr != searching_for.end(); ) {
-       if (boundary_horizon >= itr->second->start_time()) {
-         break;
-       }
-       unreachable->insert(itr->second);
-       searching_for.erase(itr++);
-      }
-      searching_horizon = min_time(searching_for);
-      if (searching_horizon == 0) {
-       return;
-      }
-    }
-  }
-
-  // Anything we're still searching for has not been found.
-  for (io_map_t::iterator itr = searching_for.begin(), end = searching_for.end(); itr != end; ++itr) {
-    unreachable->insert(itr->second);
-  }
-}
-
 ostream& operator<<(ostream& out, IO::ptr io) {
   io->write_debug(out);
   return out;
 }
 
-void StartThreadIO::write_to(Ser& out) const {
-  IO::write_to(out, IO_START_THREAD);
+void StartThreadIO::encode(bufferlist &bl) const {
+  action::Action action((action::StartThreadAction(
+    ionum(), thread_id(), convert_dependencies(start_time(), dependencies()))));
+  ::encode(action, bl);
 }
 
 void StartThreadIO::write_debug(std::ostream& out) const {
   write_debug_base(out, "start thread");
 }
 
-void StopThreadIO::write_to(Ser& out) const {
-  IO::write_to(out, IO_STOP_THREAD);
+void StopThreadIO::encode(bufferlist &bl) const {
+  action::Action action((action::StopThreadAction(
+    ionum(), thread_id(), convert_dependencies(start_time(), dependencies()))));
+  ::encode(action, bl);
 }
 
 void StopThreadIO::write_debug(std::ostream& out) const {
   write_debug_base(out, "stop thread");
 }
 
-void ReadIO::write_to(Ser& out) const {
-  IO::write_to(out, IO_READ);
-  out.write_uint64_t(m_imagectx);
-  out.write_uint64_t(m_offset);
-  out.write_uint64_t(m_length);
+void ReadIO::encode(bufferlist &bl) const {
+  action::Action action((action::ReadAction(
+    ionum(), thread_id(), convert_dependencies(start_time(), dependencies()),
+    m_imagectx, m_offset, m_length)));
+  ::encode(action, bl);
 }
 
 void ReadIO::write_debug(std::ostream& out) const {
@@ -213,11 +99,11 @@ void ReadIO::write_debug(std::ostream& out) const {
   out << ", imagectx=" << m_imagectx << ", offset=" << m_offset << ", length=" << m_length << "]";
 }
 
-void WriteIO::write_to(Ser& out) const {
-  IO::write_to(out, IO_WRITE);
-  out.write_uint64_t(m_imagectx);
-  out.write_uint64_t(m_offset);
-  out.write_uint64_t(m_length);
+void WriteIO::encode(bufferlist &bl) const {
+  action::Action action((action::WriteAction(
+    ionum(), thread_id(), convert_dependencies(start_time(), dependencies()),
+    m_imagectx, m_offset, m_length)));
+  ::encode(action, bl);
 }
 
 void WriteIO::write_debug(std::ostream& out) const {
@@ -225,11 +111,11 @@ void WriteIO::write_debug(std::ostream& out) const {
   out << ", imagectx=" << m_imagectx << ", offset=" << m_offset << ", length=" << m_length << "]";
 }
 
-void AioReadIO::write_to(Ser& out) const {
-  IO::write_to(out, IO_ASYNC_READ);
-  out.write_uint64_t(m_imagectx);
-  out.write_uint64_t(m_offset);
-  out.write_uint64_t(m_length);
+void AioReadIO::encode(bufferlist &bl) const {
+  action::Action action((action::AioReadAction(
+    ionum(), thread_id(), convert_dependencies(start_time(), dependencies()),
+    m_imagectx, m_offset, m_length)));
+  ::encode(action, bl);
 }
 
 void AioReadIO::write_debug(std::ostream& out) const {
@@ -237,11 +123,11 @@ void AioReadIO::write_debug(std::ostream& out) const {
   out << ", imagectx=" << m_imagectx << ", offset=" << m_offset << ", length=" << m_length << "]";
 }
 
-void AioWriteIO::write_to(Ser& out) const {
-  IO::write_to(out, IO_ASYNC_WRITE);
-  out.write_uint64_t(m_imagectx);
-  out.write_uint64_t(m_offset);
-  out.write_uint64_t(m_length);
+void AioWriteIO::encode(bufferlist &bl) const {
+  action::Action action((action::AioWriteAction(
+    ionum(), thread_id(), convert_dependencies(start_time(), dependencies()),
+    m_imagectx, m_offset, m_length)));
+  ::encode(action, bl);
 }
 
 void AioWriteIO::write_debug(std::ostream& out) const {
@@ -249,12 +135,11 @@ void AioWriteIO::write_debug(std::ostream& out) const {
   out << ", imagectx=" << m_imagectx << ", offset=" << m_offset << ", length=" << m_length << "]";
 }
 
-void OpenImageIO::write_to(Ser& out) const {
-  IO::write_to(out, IO_OPEN_IMAGE);
-  out.write_uint64_t(m_imagectx);
-  out.write_string(m_name);
-  out.write_string(m_snap_name);
-  out.write_bool(m_readonly);
+void OpenImageIO::encode(bufferlist &bl) const {
+  action::Action action((action::OpenImageAction(
+    ionum(), thread_id(), convert_dependencies(start_time(), dependencies()),
+    m_imagectx, m_name, m_snap_name, m_readonly)));
+  ::encode(action, bl);
 }
 
 void OpenImageIO::write_debug(std::ostream& out) const {
@@ -262,9 +147,11 @@ void OpenImageIO::write_debug(std::ostream& out) const {
   out << ", imagectx=" << m_imagectx << ", name='" << m_name << "', snap_name='" << m_snap_name << "', readonly=" << m_readonly;
 }
 
-void CloseImageIO::write_to(Ser& out) const {
-  IO::write_to(out, IO_CLOSE_IMAGE);
-  out.write_uint64_t(m_imagectx);
+void CloseImageIO::encode(bufferlist &bl) const {
+  action::Action action((action::CloseImageAction(
+    ionum(), thread_id(), convert_dependencies(start_time(), dependencies()),
+    m_imagectx)));
+  ::encode(action, bl);
 }
 
 void CloseImageIO::write_debug(std::ostream& out) const {
index 5bebcd71731d58a3a4434eade548bd28bc6df1bc..17559331c7a53d7a48dc6cdf57d2382b10703a29 100644 (file)
 // This code assumes that IO IDs and timestamps are related monotonically.
 // In other words, (a.id < b.id) == (a.timestamp < b.timestamp) for all IOs a and b.
 
+#include "include/buffer.h"
 #include <boost/enable_shared_from_this.hpp>
 #include <boost/shared_ptr.hpp>
 #include <iostream>
 #include <map>
 #include <set>
+#include <vector>
 #include "actions.hpp"
-#include "Ser.hpp"
 
 
 namespace rbd_replay {
@@ -35,23 +36,6 @@ typedef std::set<boost::shared_ptr<IO> > io_set_t;
 
 typedef std::map<action_id_t, boost::shared_ptr<IO> > io_map_t;
 
-/**
-   Calculates reachability of IOs in the dependency graph.
-   All IOs in \c deps which are not transitive dependencies of anything in \c base
-   is added to \c unreachable.
-   In other words, for every IO \c x in \c deps: if nothing in \c base depends on \c x,
-   and nothing in \c base has dependencies that depend on \c x, etc.,
-   then \c x is added to \c unreachable.
-   Note that \c unreachable is \em not cleared, so the same set can be used across multiple
-   calls to collect dependencies.
-   @param[in] deps IOs to search for
-   @param[in] base root set of IOs to search from
-   @param[out] unreachable collects unreachable IOs
-   @related IO
-*/
-void batch_unreachable_from(const io_set_t& deps, const io_set_t& base, io_set_t* unreachable);
-
-
 /**
    Used by rbd-replay-prep for processing the raw trace.
    Corresponds to the Action class, except that Actions are executed by rbd-replay,
@@ -60,26 +44,22 @@ void batch_unreachable_from(const io_set_t& deps, const io_set_t& base, io_set_t
 class IO : public boost::enable_shared_from_this<IO> {
 public:
   typedef boost::shared_ptr<IO> ptr;
-
-  typedef boost::weak_ptr<IO> weak_ptr;
+  typedef std::vector<ptr> ptrs;
 
   /**
      @param ionum ID of this %IO
      @param start_time time the %IO started, in nanoseconds
      @param thread_id ID of the thread that issued the %IO
-     @param prev previously issued %IO on the same thread.  NULL for the first %IO on a thread.
    */
   IO(action_id_t ionum,
      uint64_t start_time,
      thread_id_t thread_id,
-     ptr prev)
+     const io_set_t& deps)
     : m_ionum(ionum),
       m_start_time(start_time),
-      m_dependencies(io_set_t()),
-      m_completion(weak_ptr()),
-      m_num_successors(0),
+      m_dependencies(deps),
       m_thread_id(thread_id),
-      m_prev(prev) {
+      m_completed(false) {
   }
 
   virtual ~IO() {
@@ -97,21 +77,7 @@ public:
     return m_dependencies;
   }
 
-  void add_dependencies(const io_set_t& deps);
-
-  /**
-     Returns the completion's number of successors, or 0 if the %IO does not have a completion.
-   */
-  uint64_t num_completion_successors() const {
-    ptr c(m_completion.lock());
-    return c ? c->m_num_successors : 0;
-  }
-
-  virtual void write_to(Ser& out) const = 0;
-
-  virtual bool is_completion() const {
-    return false;
-  }
+  virtual void encode(bufferlist &bl) const = 0;
 
   void set_ionum(action_id_t ionum) {
     m_ionum = ionum;
@@ -121,40 +87,21 @@ public:
     return m_ionum;
   }
 
-  ptr prev() const {
-    return m_prev;
-  }
-
-  void set_num_successors(uint32_t n) {
-    m_num_successors = n;
-  }
-
-  uint32_t num_successors() const {
-    return m_num_successors;
+  thread_id_t thread_id() const {
+    return m_thread_id;
   }
 
   virtual void write_debug(std::ostream& out) const = 0;
 
-  /**
-     Creates the completion for this IO.
-     This may only be called once per IO, and may not be called on completion IOs.
-     The completion must be stored, or else m_completion will expire.
-   */
-  ptr create_completion(uint64_t start_time, thread_id_t thread_id);
-
 protected:
-  void write_to(Ser& out, io_type iotype) const;
-
   void write_debug_base(std::ostream& out, std::string iotype) const;
 
 private:
   action_id_t m_ionum;
   uint64_t m_start_time;
   io_set_t m_dependencies;
-  boost::weak_ptr<IO> m_completion;
-  uint32_t m_num_successors;
   thread_id_t m_thread_id;
-  ptr m_prev;
+  bool m_completed;
 };
 
 /// Used for dumping debug info.
@@ -167,10 +114,10 @@ public:
   StartThreadIO(action_id_t ionum,
                uint64_t start_time,
                thread_id_t thread_id)
-    : IO(ionum, start_time, thread_id, IO::ptr()) {
+    : IO(ionum, start_time, thread_id, io_set_t()) {
   }
 
-  void write_to(Ser& out) const;
+  virtual void encode(bufferlist &bl) const;
 
   void write_debug(std::ostream& out) const;
 };
@@ -179,11 +126,12 @@ class StopThreadIO : public IO {
 public:
   StopThreadIO(action_id_t ionum,
               uint64_t start_time,
-              thread_id_t thread_id)
-    : IO(ionum, start_time, thread_id, IO::ptr()) {
+              thread_id_t thread_id,
+               const io_set_t& deps)
+    : IO(ionum, start_time, thread_id, deps) {
   }
 
-  void write_to(Ser& out) const;
+  virtual void encode(bufferlist &bl) const;
 
   void write_debug(std::ostream& out) const;
 };
@@ -193,17 +141,17 @@ public:
   ReadIO(action_id_t ionum,
         uint64_t start_time,
         thread_id_t thread_id,
-        IO::ptr prev,
+         const io_set_t& deps,
         imagectx_id_t imagectx,
         uint64_t offset,
         uint64_t length)
-    : IO(ionum, start_time, thread_id, prev),
+    : IO(ionum, start_time, thread_id, deps),
       m_imagectx(imagectx),
       m_offset(offset),
       m_length(length) {
   }
 
-  void write_to(Ser& out) const;
+  virtual void encode(bufferlist &bl) const;
 
   void write_debug(std::ostream& out) const;
 
@@ -218,17 +166,17 @@ public:
   WriteIO(action_id_t ionum,
          uint64_t start_time,
          thread_id_t thread_id,
-         IO::ptr prev,
+          const io_set_t& deps,
          imagectx_id_t imagectx,
          uint64_t offset,
          uint64_t length)
-    : IO(ionum, start_time, thread_id, prev),
+    : IO(ionum, start_time, thread_id, deps),
       m_imagectx(imagectx),
       m_offset(offset),
       m_length(length) {
   }
 
-  void write_to(Ser& out) const;
+  virtual void encode(bufferlist &bl) const;
 
   void write_debug(std::ostream& out) const;
 
@@ -243,17 +191,17 @@ public:
   AioReadIO(action_id_t ionum,
            uint64_t start_time,
            thread_id_t thread_id,
-           IO::ptr prev,
+            const io_set_t& deps,
            imagectx_id_t imagectx,
            uint64_t offset,
            uint64_t length)
-    : IO(ionum, start_time, thread_id, prev),
+    : IO(ionum, start_time, thread_id, deps),
       m_imagectx(imagectx),
       m_offset(offset),
       m_length(length) {
   }
 
-  void write_to(Ser& out) const;
+  virtual void encode(bufferlist &bl) const;
 
   void write_debug(std::ostream& out) const;
 
@@ -268,17 +216,17 @@ public:
   AioWriteIO(action_id_t ionum,
             uint64_t start_time,
             thread_id_t thread_id,
-            IO::ptr prev,
+             const io_set_t& deps,
             imagectx_id_t imagectx,
             uint64_t offset,
             uint64_t length)
-    : IO(ionum, start_time, thread_id, prev),
+    : IO(ionum, start_time, thread_id, deps),
       m_imagectx(imagectx),
       m_offset(offset),
       m_length(length) {
   }
 
-  void write_to(Ser& out) const;
+  virtual void encode(bufferlist &bl) const;
 
   void write_debug(std::ostream& out) const;
 
@@ -293,19 +241,19 @@ public:
   OpenImageIO(action_id_t ionum,
              uint64_t start_time,
              thread_id_t thread_id,
-             IO::ptr prev,
+              const io_set_t& deps,
              imagectx_id_t imagectx,
              const std::string& name,
              const std::string& snap_name,
              bool readonly)
-    : IO(ionum, start_time, thread_id, prev),
+    : IO(ionum, start_time, thread_id, deps),
       m_imagectx(imagectx),
       m_name(name),
       m_snap_name(snap_name),
       m_readonly(readonly) {
   }
 
-  void write_to(Ser& out) const;
+  virtual void encode(bufferlist &bl) const;
 
   imagectx_id_t imagectx() const {
     return m_imagectx;
@@ -325,13 +273,13 @@ public:
   CloseImageIO(action_id_t ionum,
               uint64_t start_time,
               thread_id_t thread_id,
-              IO::ptr prev,
+               const io_set_t& deps,
               imagectx_id_t imagectx)
-    : IO(ionum, start_time, thread_id, prev),
+    : IO(ionum, start_time, thread_id, deps),
       m_imagectx(imagectx) {
   }
 
-  void write_to(Ser& out) const;
+  virtual void encode(bufferlist &bl) const;
 
   imagectx_id_t imagectx() const {
     return m_imagectx;
@@ -343,29 +291,6 @@ private:
   imagectx_id_t m_imagectx;
 };
 
-class CompletionIO : public IO {
-public:
-  CompletionIO(action_id_t ionum,
-              uint64_t start_time,
-              thread_id_t thread_id)
-    : IO(ionum, start_time, thread_id, IO::ptr()) {
-  }
-
-  void write_to(Ser& out) const {
-  }
-
-  bool is_completion() const {
-    return true;
-  }
-
-  void write_debug(std::ostream& out) const {
-    write_debug_base(out, "completion");
-  }
-};
-
-/// @related IO
-bool compare_io_ptrs_by_start_time(IO::ptr p1, IO::ptr p2);
-
 }
 
 #endif
index 8a602e0aae3e1444cbc455831cb3d10eee6d5caa..61cff592cf2759d7dfa49183f468ab821cf89557 100644 (file)
 // This code assumes that IO IDs and timestamps are related monotonically.
 // In other words, (a.id < b.id) == (a.timestamp < b.timestamp) for all IOs a and b.
 
+#include "common/errno.h"
+#include "rbd_replay/ActionTypes.h"
 #include <babeltrace/babeltrace.h>
 #include <babeltrace/ctf/events.h>
 #include <babeltrace/ctf/iterator.h>
+#include <sys/types.h>
+#include <fcntl.h>
 #include <cstdlib>
 #include <string>
 #include <assert.h>
 #include <fstream>
+#include <set>
 #include <boost/thread/thread.hpp>
+#include <boost/scope_exit.hpp>
 #include "ios.hpp"
 
 using namespace std;
 using namespace rbd_replay;
 
+#define ASSERT_EXIT(check, str)    \
+  if (!(check)) {                  \
+    std::cerr << str << std::endl; \
+    exit(1);                       \
+  }
 
 class Thread {
 public:
@@ -37,7 +48,6 @@ public:
         uint64_t window)
     : m_id(id),
       m_window(window),
-      m_pending_io(IO::ptr()),
       m_latest_io(IO::ptr()),
       m_max_ts(0) {
   }
@@ -52,35 +62,26 @@ public:
     return m_max_ts;
   }
 
-  void issued_io(IO::ptr io, const map<thread_id_t, ptr>& threads) {
+  void issued_io(IO::ptr io, std::set<IO::ptr> *latest_ios) {
     assert(io);
-    io_set_t latest_ios;
-    for (map<thread_id_t, ptr>::const_iterator itr = threads.begin(), end = threads.end(); itr != end; ++itr) {
-      assertf(itr->second, "id = %ld", itr->first);
-      ptr thread(itr->second);
-      if (thread->m_latest_io) {
-       if (thread->m_latest_io->start_time() + m_window > io->start_time()) {
-         latest_ios.insert(thread->m_latest_io);
-       }
-      }
+    if (m_latest_io.get() != NULL) {
+      latest_ios->erase(m_latest_io);
     }
-    io->add_dependencies(latest_ios);
     m_latest_io = io;
-    m_pending_io = io;
+    latest_ios->insert(io);
   }
 
   thread_id_t id() const {
     return m_id;
   }
 
-  IO::ptr pending_io() {
-    return m_pending_io;
+  IO::ptr latest_io() {
+    return m_latest_io;
   }
 
 private:
   thread_id_t m_id;
   uint64_t m_window;
-  IO::ptr m_pending_io;
   IO::ptr m_latest_io;
   uint64_t m_max_ts;
 };
@@ -119,7 +120,10 @@ private:
 };
 
 static void usage(string prog) {
-  cout << "Usage: " << prog << " [ --window <seconds> ] [ --anonymize ] <trace-input> <replay-output>" << endl;
+  std::stringstream str;
+  str << "Usage: " << prog << " ";
+  std::cout << str.str() << "[ --window <seconds> ] [ --anonymize ] [ --verbose ]" << std::endl
+            << std::string(str.str().size(), ' ') << "<trace-input> <replay-output>" << endl;
 }
 
 __attribute__((noreturn)) static void usage_exit(string prog, string msg) {
@@ -132,14 +136,9 @@ class Processor {
 public:
   Processor()
     : m_window(1000000000ULL), // 1 billion nanoseconds, i.e., one second
-      m_threads(),
       m_io_count(0),
-      m_recent_completions(io_set_t()),
-      m_open_images(set<imagectx_id_t>()),
-      m_ios(vector<IO::ptr>()),
-      m_pending_ios(map<uint64_t, IO::ptr>()),
       m_anonymize(false),
-      m_anonymized_images(map<string, AnonymizedImage>()) {
+      m_verbose(false) {
   }
 
   void run(vector<string> args) {
@@ -155,11 +154,11 @@ public:
        }
        m_window = (uint64_t)(1e9 * atof(args[++i].c_str()));
       } else if (arg.find("--window=") == 0) {
-       // TODO: test
-       printf("Arg: '%s'\n", arg.c_str() + sizeof("--window="));
        m_window = (uint64_t)(1e9 * atof(arg.c_str() + sizeof("--window=")));
       } else if (arg == "--anonymize") {
        m_anonymize = true;
+      } else if (arg == "--verbose") {
+        m_verbose = true;
       } else if (arg == "-h" || arg == "--help") {
        usage(args[0]);
        exit(0);
@@ -186,10 +185,11 @@ public:
                                            NULL, // packet_seek
                                            NULL, // stream_list
                                            NULL); // metadata
-    assertf(trace_handle >= 0, "trace_handle = %d", trace_handle);
+    ASSERT_EXIT(trace_handle >= 0, "Error loading trace file");
 
     uint64_t start_time_ns = bt_trace_handle_get_timestamp_begin(ctx, trace_handle, BT_CLOCK_REAL);
-    assert(start_time_ns != -1ULL);
+    ASSERT_EXIT(start_time_ns != -1ULL,
+                "Error extracting creation time from trace");
 
     struct bt_ctf_iter *itr = bt_ctf_iter_create(ctx,
                                                 NULL, // begin_pos
@@ -198,6 +198,15 @@ public:
 
     struct bt_iter *bt_itr = bt_ctf_get_iter(itr);
 
+    int fd = open(output_file_name.c_str(), O_WRONLY | O_CREAT | O_EXCL, 0644);
+    ASSERT_EXIT(fd >= 0, "Error opening output file " << output_file_name <<
+                         ": " << cpp_strerror(errno));
+    BOOST_SCOPE_EXIT( (fd) ) {
+      close(fd);
+    } BOOST_SCOPE_EXIT_END;
+
+    write_banner(fd);
+
     uint64_t trace_start = 0;
     bool first = true;
     while(true) {
@@ -206,7 +215,7 @@ public:
        break;
       }
       uint64_t ts = bt_ctf_get_timestamp(evt);
-      assert(ts != -1ULL);
+      ASSERT_EXIT(ts != -1ULL, "Error extracting event timestamp");
 
       if (first) {
        trace_start = ts;
@@ -215,100 +224,76 @@ public:
       ts -= trace_start;
       ts += 4; // This is so we have room to insert two events (thread start and open image) at unique timestamps before whatever the first event is.
 
-      process_event(ts, evt);
+      IO::ptrs ptrs;
+      process_event(ts, evt, &ptrs);
+      serialize_events(fd, ptrs);
 
       int r = bt_iter_next(bt_itr);
-      assert(!r);
+      ASSERT_EXIT(r == 0, "Error advancing event iterator");
     }
 
     bt_ctf_iter_destroy(itr);
 
-    insert_thread_stops();
+    insert_thread_stops(fd);
+  }
 
-    for (vector<IO::ptr>::const_iterator itr = m_ios.begin(); itr != m_ios.end(); ++itr) {
-      IO::ptr io(*itr);
-      IO::ptr prev(io->prev());
-      if (prev) {
-       // TODO: explain when prev is and isn't a dep
-       io_set_t::iterator depitr = io->dependencies().find(prev);
-       if (depitr != io->dependencies().end()) {
-         io->dependencies().erase(depitr);
-       }
-      }
-      if (io->is_completion()) {
-       io->dependencies().clear();
-      }
-      for (io_set_t::const_iterator depitr = io->dependencies().begin(); depitr != io->dependencies().end(); ++depitr) {
-       IO::ptr dep(*depitr);
-       dep->set_num_successors(dep->num_successors() + 1);
-      }
-    }
+private:
+  void write_banner(int fd) {
+    bufferlist bl;
+    bl.append(rbd_replay::action::BANNER);
+    int r = bl.write_fd(fd);
+    ASSERT_EXIT(r >= 0, "Error writing to output file: " << cpp_strerror(r));
+  }
+
+  void serialize_events(int fd, const IO::ptrs &ptrs) {
+    for (IO::ptrs::const_iterator it = ptrs.begin(); it != ptrs.end(); ++it) {
+      IO::ptr io(*it);
+
+      bufferlist bl;
+      io->encode(bl);
 
-    ofstream myfile;
-    myfile.open(output_file_name.c_str(), ios::out | ios::binary);
-    Ser ser(myfile);
-    for (vector<IO::ptr>::iterator itr = m_ios.begin(); itr != m_ios.end(); ++itr) {
-      (*itr)->write_to(ser);
+      int r = bl.write_fd(fd);
+      ASSERT_EXIT(r >= 0, "Error writing to output file: " << cpp_strerror(r));
+
+      if (m_verbose) {
+        io->write_debug(std::cout);
+        std::cout << std::endl;
+      }
     }
-    myfile.close();
   }
 
-private:
-  void insert_thread_stops() {
-    sort(m_ios.begin(), m_ios.end(), compare_io_ptrs_by_start_time);
-    for (map<thread_id_t, Thread::ptr>::const_iterator itr = m_threads.begin(), end = m_threads.end(); itr != end; ++itr) {
+  void insert_thread_stops(int fd) {
+    IO::ptrs ios;
+    for (map<thread_id_t, Thread::ptr>::const_iterator itr = m_threads.begin(),
+         end = m_threads.end(); itr != end; ++itr) {
       Thread::ptr thread(itr->second);
-      const action_id_t none = -1;
-      action_id_t ionum = none;
-      action_id_t maxIONum = 0; // only valid if ionum is none
-      for (vector<IO::ptr>::const_iterator itr2 = m_ios.begin(); itr2 != m_ios.end(); ++itr2) {
-       IO::ptr io(*itr2);
-       if (io->ionum() > maxIONum) {
-         maxIONum = io->ionum();
-       }
-       if (io->start_time() > thread->max_ts()) {
-         ionum = io->ionum();
-         if (ionum & 1) {
-           ionum++;
-         }
-         break;
-       }
-      }
-      if (ionum == none) {
-       if (maxIONum & 1) {
-         maxIONum--;
-       }
-       ionum = maxIONum + 2;
-      }
-      for (vector<IO::ptr>::const_iterator itr2 = m_ios.begin(); itr2 != m_ios.end(); ++itr2) {
-       IO::ptr io(*itr2);
-       if (io->ionum() >= ionum) {
-         io->set_ionum(io->ionum() + 2);
-       }
-      }
-      IO::ptr stop_thread_io(new StopThreadIO(ionum, thread->max_ts(), thread->id()));
-      vector<IO::ptr>::iterator insertion_point = lower_bound(m_ios.begin(), m_ios.end(), stop_thread_io, compare_io_ptrs_by_start_time);
-      m_ios.insert(insertion_point, stop_thread_io);
+      ios.push_back(IO::ptr(new StopThreadIO(next_id(), thread->max_ts(),
+                                             thread->id(),
+                                             m_recent_completions)));
     }
+    serialize_events(fd, ios);
   }
 
-  void process_event(uint64_t ts, struct bt_ctf_event *evt) {
+  void process_event(uint64_t ts, struct bt_ctf_event *evt,
+                     IO::ptrs *ios) {
     const char *event_name = bt_ctf_event_name(evt);
     const struct bt_definition *scope_context = bt_ctf_get_top_level_scope(evt,
                                                                           BT_STREAM_EVENT_CONTEXT);
-    assert(scope_context);
+    ASSERT_EXIT(scope_context != NULL, "Error retrieving event context");
+
     const struct bt_definition *scope_fields = bt_ctf_get_top_level_scope(evt,
                                                                          BT_EVENT_FIELDS);
-    assert(scope_fields);
+    ASSERT_EXIT(scope_fields != NULL, "Error retrieving event fields");
 
     const struct bt_definition *pthread_id_field = bt_ctf_get_field(evt, scope_context, "pthread_id");
-    assert(pthread_id_field);
+    ASSERT_EXIT(pthread_id_field != NULL, "Error retrieving thread id");
+
     thread_id_t threadID = bt_ctf_get_uint64(pthread_id_field);
     Thread::ptr &thread(m_threads[threadID]);
     if (!thread) {
       thread.reset(new Thread(threadID, m_window));
       IO::ptr io(new StartThreadIO(next_id(), ts - 4, threadID));
-      m_ios.push_back(io);
+      ios->push_back(io);
     }
     thread->insert_ts(ts);
 
@@ -322,28 +307,34 @@ private:
 
       const char* string(const char* name) {
        const struct bt_definition *field = bt_ctf_get_field(m_evt, m_scope, name);
-       assertf(field, "field name = '%s'", name);
+        ASSERT_EXIT(field != NULL, "Error retrieving field '" << name << "'");
+
        const char* c = bt_ctf_get_string(field);
        int err = bt_ctf_field_get_error();
-       assertf(c && err == 0, "field name = '%s', err = %d", name, err);
+        ASSERT_EXIT(c && err == 0, "Error retrieving field value '" << name <<
+                                   "': error=" << err);
        return c;
       }
 
       int64_t int64(const char* name) {
        const struct bt_definition *field = bt_ctf_get_field(m_evt, m_scope, name);
-       assertf(field, "field name = '%s'", name);
+        ASSERT_EXIT(field != NULL, "Error retrieving field '" << name << "'");
+
        int64_t val = bt_ctf_get_int64(field);
        int err = bt_ctf_field_get_error();
-       assertf(err == 0, "field name = '%s', err = %d", name, err);
+        ASSERT_EXIT(err == 0, "Error retrieving field value '" << name <<
+                              "': error=" << err);
        return val;
       }
 
       uint64_t uint64(const char* name) {
        const struct bt_definition *field = bt_ctf_get_field(m_evt, m_scope, name);
-       assertf(field, "field name = '%s'", name);
+        ASSERT_EXIT(field != NULL, "Error retrieving field '" << name << "'");
+
        uint64_t val = bt_ctf_get_uint64(field);
        int err = bt_ctf_field_get_error();
-       assertf(err == 0, "field name = '%s', err = %d", name, err);
+        ASSERT_EXIT(err == 0, "Error retrieving field value '" << name <<
+                              "': error=" << err);
        return val;
       }
 
@@ -352,72 +343,69 @@ private:
       const struct bt_definition *m_scope;
     } fields(evt, scope_fields);
 
-    if (strcmp(event_name, "librbd:read_enter") == 0) {
+    if (strcmp(event_name, "librbd:open_image_enter") == 0) {
       string name(fields.string("name"));
       string snap_name(fields.string("snap_name"));
-      bool readonly = fields.int64("read_only");
-      imagectx_id_t imagectx = fields.uint64("imagectx");
-      uint64_t offset = fields.uint64("offset");
-      uint64_t length = fields.uint64("length");
-      require_image(ts, thread, imagectx, name, snap_name, readonly);
-      action_id_t ionum = next_id();
-      IO::ptr io(new ReadIO(ionum, ts, threadID, thread->pending_io(), imagectx, offset, length));
-      io->add_dependencies(m_recent_completions);
-      thread->issued_io(io, m_threads);
-      m_ios.push_back(io);
-    } else if (strcmp(event_name, "librbd:open_image_enter") == 0) {
-      string name(fields.string("name"));
-      string snap_name(fields.string("snap_name"));
-      bool readonly = fields.int64("read_only");
+      bool readonly = fields.uint64("read_only");
       imagectx_id_t imagectx = fields.uint64("imagectx");
       action_id_t ionum = next_id();
       pair<string, string> aname(map_image_snap(name, snap_name));
-      IO::ptr io(new OpenImageIO(ionum, ts, threadID, thread->pending_io(), imagectx, aname.first, aname.second, readonly));
-      io->add_dependencies(m_recent_completions);
-      thread->issued_io(io, m_threads);
-      m_ios.push_back(io);
+      IO::ptr io(new OpenImageIO(ionum, ts, threadID, m_recent_completions,
+                                 imagectx, aname.first, aname.second,
+                                 readonly));
+      thread->issued_io(io, &m_latest_ios);
+      ios->push_back(io);
     } else if (strcmp(event_name, "librbd:open_image_exit") == 0) {
-      IO::ptr completionIO(thread->pending_io()->create_completion(ts, threadID));
-      m_ios.push_back(completionIO);
-      boost::shared_ptr<OpenImageIO> io(boost::dynamic_pointer_cast<OpenImageIO>(thread->pending_io()));
+      completed(thread->latest_io());
+      boost::shared_ptr<OpenImageIO> io(boost::dynamic_pointer_cast<OpenImageIO>(thread->latest_io()));
       assert(io);
       m_open_images.insert(io->imagectx());
     } else if (strcmp(event_name, "librbd:close_image_enter") == 0) {
       imagectx_id_t imagectx = fields.uint64("imagectx");
       action_id_t ionum = next_id();
-      IO::ptr io(new CloseImageIO(ionum, ts, threadID, thread->pending_io(), imagectx));
-      io->add_dependencies(m_recent_completions);
-      thread->issued_io(io, m_threads);
-      m_ios.push_back(thread->pending_io());
+      IO::ptr io(new CloseImageIO(ionum, ts, threadID, m_recent_completions,
+                                  imagectx));
+      thread->issued_io(io, &m_latest_ios);
+      ios->push_back(thread->latest_io());
     } else if (strcmp(event_name, "librbd:close_image_exit") == 0) {
-      IO::ptr completionIO(thread->pending_io()->create_completion(ts, threadID));
-      m_ios.push_back(completionIO);
-      completed(completionIO);
-      boost::shared_ptr<CloseImageIO> io(boost::dynamic_pointer_cast<CloseImageIO>(thread->pending_io()));
+      completed(thread->latest_io());
+      boost::shared_ptr<CloseImageIO> io(boost::dynamic_pointer_cast<CloseImageIO>(thread->latest_io()));
       assert(io);
       m_open_images.erase(io->imagectx());
+    } else if (strcmp(event_name, "librbd:read_enter") == 0 ||
+               strcmp(event_name, "librbd:read2_enter") == 0) {
+      string name(fields.string("name"));
+      string snap_name(fields.string("snap_name"));
+      bool readonly = fields.int64("read_only");
+      imagectx_id_t imagectx = fields.uint64("imagectx");
+      uint64_t offset = fields.uint64("offset");
+      uint64_t length = fields.uint64("length");
+      require_image(ts, thread, imagectx, name, snap_name, readonly, ios);
+      action_id_t ionum = next_id();
+      IO::ptr io(new ReadIO(ionum, ts, threadID, m_recent_completions, imagectx,
+                            offset, length));
+      thread->issued_io(io, &m_latest_ios);
+      ios->push_back(io);
     } else if (strcmp(event_name, "librbd:read_exit") == 0) {
-      IO::ptr completionIO(thread->pending_io()->create_completion(ts, threadID));
-      m_ios.push_back(completionIO);
-      completed(completionIO);
-    } else if (strcmp(event_name, "librbd:write_enter") == 0) {
+      completed(thread->latest_io());
+    } else if (strcmp(event_name, "librbd:write_enter") == 0 ||
+               strcmp(event_name, "librbd:write2_enter") == 0) {
       string name(fields.string("name"));
       string snap_name(fields.string("snap_name"));
       bool readonly = fields.int64("read_only");
       uint64_t offset = fields.uint64("off");
       uint64_t length = fields.uint64("buf_len");
       imagectx_id_t imagectx = fields.uint64("imagectx");
-      require_image(ts, thread, imagectx, name, snap_name, readonly);
+      require_image(ts, thread, imagectx, name, snap_name, readonly, ios);
       action_id_t ionum = next_id();
-      IO::ptr io(new WriteIO(ionum, ts, threadID, thread->pending_io(), imagectx, offset, length));
-      io->add_dependencies(m_recent_completions);
-      thread->issued_io(io, m_threads);
-      m_ios.push_back(io);
+      IO::ptr io(new WriteIO(ionum, ts, threadID, m_recent_completions,
+                             imagectx, offset, length));
+      thread->issued_io(io, &m_latest_ios);
+      ios->push_back(io);
     } else if (strcmp(event_name, "librbd:write_exit") == 0) {
-      IO::ptr completionIO(thread->pending_io()->create_completion(ts, threadID));
-      m_ios.push_back(completionIO);
-      completed(completionIO);
-    } else if (strcmp(event_name, "librbd:aio_read_enter") == 0) {
+      completed(thread->latest_io());
+    } else if (strcmp(event_name, "librbd:aio_read_enter") == 0 ||
+               strcmp(event_name, "librbd:aio_read2_enter") == 0) {
       string name(fields.string("name"));
       string snap_name(fields.string("snap_name"));
       bool readonly = fields.int64("read_only");
@@ -425,14 +413,15 @@ private:
       imagectx_id_t imagectx = fields.uint64("imagectx");
       uint64_t offset = fields.uint64("offset");
       uint64_t length = fields.uint64("length");
-      require_image(ts, thread, imagectx, name, snap_name, readonly);
+      require_image(ts, thread, imagectx, name, snap_name, readonly, ios);
       action_id_t ionum = next_id();
-      IO::ptr io(new AioReadIO(ionum, ts, threadID, thread->pending_io(), imagectx, offset, length));
-      io->add_dependencies(m_recent_completions);
-      m_ios.push_back(io);
-      thread->issued_io(io, m_threads);
+      IO::ptr io(new AioReadIO(ionum, ts, threadID, m_recent_completions,
+                               imagectx, offset, length));
+      ios->push_back(io);
+      thread->issued_io(io, &m_latest_ios);
       m_pending_ios[completion] = io;
-    } else if (strcmp(event_name, "librbd:aio_write_enter") == 0) {
+    } else if (strcmp(event_name, "librbd:aio_write_enter") == 0 ||
+               strcmp(event_name, "librbd:aio_write2_enter") == 0) {
       string name(fields.string("name"));
       string snap_name(fields.string("snap_name"));
       bool readonly = fields.int64("read_only");
@@ -440,12 +429,12 @@ private:
       uint64_t length = fields.uint64("len");
       uint64_t completion = fields.uint64("completion");
       imagectx_id_t imagectx = fields.uint64("imagectx");
-      require_image(ts, thread, imagectx, name, snap_name, readonly);
+      require_image(ts, thread, imagectx, name, snap_name, readonly, ios);
       action_id_t ionum = next_id();
-      IO::ptr io(new AioWriteIO(ionum, ts, threadID, thread->pending_io(), imagectx, offset, length));
-      io->add_dependencies(m_recent_completions);
-      thread->issued_io(io, m_threads);
-      m_ios.push_back(io);
+      IO::ptr io(new AioWriteIO(ionum, ts, threadID, m_recent_completions,
+                                imagectx, offset, length));
+      thread->issued_io(io, &m_latest_ios);
+      ios->push_back(io);
       m_pending_ios[completion] = io;
     } else if (strcmp(event_name, "librbd:aio_complete_enter") == 0) {
       uint64_t completion = fields.uint64("completion");
@@ -453,13 +442,9 @@ private:
       if (itr != m_pending_ios.end()) {
        IO::ptr completedIO(itr->second);
        m_pending_ios.erase(itr);
-       IO::ptr completionIO(completedIO->create_completion(ts, threadID));
-       m_ios.push_back(completionIO);
-       completed(completionIO);
+        completed(completedIO);
       }
     }
-
-    //        cout << ts << "\t" << event_name << "\tthreadID = " << threadID << endl;
   }
 
   action_id_t next_id() {
@@ -469,9 +454,14 @@ private:
   }
 
   void completed(IO::ptr io) {
-    uint64_t limit = io->start_time() < m_window ? 0 : io->start_time() - m_window;
-    for (io_set_t::iterator itr = m_recent_completions.begin(); itr != m_recent_completions.end(); ) {
-      if ((*itr)->start_time() < limit) {
+    uint64_t limit = (io->start_time() < m_window ?
+      0 : io->start_time() - m_window);
+    for (io_set_t::iterator itr = m_recent_completions.begin();
+         itr != m_recent_completions.end(); ) {
+      IO::ptr recent_comp(*itr);
+      if ((recent_comp->start_time() < limit ||
+           io->dependencies().count(recent_comp) != 0) &&
+          m_latest_ios.count(recent_comp) == 0) {
        m_recent_completions.erase(itr++);
       } else {
        ++itr;
@@ -496,20 +486,20 @@ private:
                     imagectx_id_t imagectx,
                     const string& name,
                     const string& snap_name,
-                    bool readonly) {
+                    bool readonly,
+                     IO::ptrs *ios) {
     assert(thread);
     if (m_open_images.count(imagectx) > 0) {
       return;
     }
     action_id_t ionum = next_id();
     pair<string, string> aname(map_image_snap(name, snap_name));
-    IO::ptr io(new OpenImageIO(ionum, ts - 2, thread->id(), thread->pending_io(), imagectx, aname.first, aname.second, readonly));
-    io->add_dependencies(m_recent_completions);
-    thread->issued_io(io, m_threads);
-    m_ios.push_back(io);
-    IO::ptr completionIO(io->create_completion(ts - 1, thread->id()));
-    m_ios.push_back(completionIO);
-    completed(completionIO);
+    IO::ptr io(new OpenImageIO(ionum, ts - 2, thread->id(),
+                               m_recent_completions, imagectx, aname.first,
+                               aname.second, readonly));
+    thread->issued_io(io, &m_latest_ios);
+    ios->push_back(io);
+    completed(io);
     m_open_images.insert(imagectx);
   }
 
@@ -518,13 +508,15 @@ private:
   uint32_t m_io_count;
   io_set_t m_recent_completions;
   set<imagectx_id_t> m_open_images;
-  vector<IO::ptr> m_ios;
 
   // keyed by completion
   map<uint64_t, IO::ptr> m_pending_ios;
+  std::set<IO::ptr> m_latest_ios;
 
   bool m_anonymize;
   map<string, AnonymizedImage> m_anonymized_images;
+
+  bool m_verbose;
 };
 
 int main(int argc, char** argv) {
index 7e527e852d7f3eafd914d54aafe695b1ae9fd163..6cdfd13c251fbbf0c5171e550766e5444c61e674 100644 (file)
@@ -4,10 +4,10 @@
     compress
     sharedscripts
     postrotate
-        if which invoke-rc.d > /dev/null 2>&1 && [ -x `which invoke-rc.d` ]; then
-            invoke-rc.d radosgw reload >/dev/null
-        elif which service > /dev/null 2>&1 && [ -x `which service` ]; then
+        if which service > /dev/null 2>&1 && [ -x `which service` ]; then
             service ceph-radosgw reload >/dev/null
+        elif which invoke-rc.d > /dev/null 2>&1 && [ -x `which invoke-rc.d` ]; then
+            invoke-rc.d radosgw reload >/dev/null
         fi
         # Possibly reload twice, but depending on ceph.conf the reload above may be a no-op
         if which initctl > /dev/null 2>&1 && [ -x `which initctl` ]; then
index 45cb2e197eddc7e27cb0d281a9079d32d8ab6689..2ba77e3369739f54fc28863065d47b901b9389dc 100644 (file)
@@ -112,6 +112,8 @@ void _usage()
   cerr << "  replicalog get             get replica metadata log entry\n";
   cerr << "  replicalog update          update replica metadata log entry\n";
   cerr << "  replicalog delete          delete replica metadata log entry\n";
+  cout << "  orphans find               init and run search for leaked rados objects\n";
+  cout << "  orphans finish             clean up search for leaked rados objects\n";
   cerr << "options:\n";
   cerr << "   --uid=<id>                user id\n";
   cerr << "   --subuser=<name>          subuser name\n";
@@ -174,6 +176,9 @@ void _usage()
   cerr << "   --max-objects             specify max objects (negative value to disable)\n";
   cerr << "   --max-size                specify max size (in bytes, negative value to disable)\n";
   cerr << "   --quota-scope             scope of quota (bucket, user)\n";
+  cout << "\nOrphans search options:\n";
+  cout << "   --pool                    data pool to scan for leaked rados objects in\n";
+  cout << "   --num-shards              num of shards to use for keeping the temporary scan info\n";
   cerr << "\n";
   generic_client_usage();
 }
index 81e504c5f9b1dd60c5554994a32a3b810b0e9506..5c075f98a0e749230a7cedc689d8de638d8618f8 100644 (file)
@@ -127,6 +127,13 @@ void RGWMongoose::init_env(CephContext *cct)
   char port_buf[16];
   snprintf(port_buf, sizeof(port_buf), "%d", port);
   env.set("SERVER_PORT", port_buf);
+
+  if (info->is_ssl) {
+    if (port == 0) {
+      strcpy(port_buf,"443");
+    }
+    env.set("SERVER_PORT_SECURE", port_buf);
+  }
 }
 
 int RGWMongoose::send_status(const char *status, const char *status_name)
index 5b4e39b0113c60d41c5d9d447e1b426e1898c169..d05e3167adb15011c7a54697a355f03380d567f4 100644 (file)
@@ -80,7 +80,6 @@ using ceph::crypto::MD5;
 #define RGW_BUCKETS_OBJ_SUFFIX ".buckets"
 
 #define RGW_MAX_PENDING_CHUNKS  16
-#define RGW_MAX_PUT_SIZE        (5ULL*1024*1024*1024)
 #define RGW_MIN_MULTIPART_SIZE (5ULL*1024*1024)
 
 #define RGW_FORMAT_PLAIN        0
index 4301bdde8b4c78829330d39114bdf1a01e5f69d9..cd8785f19dea8b8591d1e2b859cc9c63229f0fcd 100644 (file)
@@ -808,8 +808,13 @@ int RGWGetObj::handle_user_manifest(const char *prefix)
   if (pos < 0)
     return -EINVAL;
 
-  string bucket_name = prefix_str.substr(0, pos);
-  string obj_prefix = prefix_str.substr(pos + 1);
+  string bucket_name_raw, bucket_name;
+  bucket_name_raw = prefix_str.substr(0, pos);
+  url_decode(bucket_name_raw, bucket_name);
+
+  string obj_prefix_raw, obj_prefix;
+  obj_prefix_raw = prefix_str.substr(pos + 1);
+  url_decode(obj_prefix_raw, obj_prefix);
 
   rgw_bucket bucket;
 
@@ -1059,7 +1064,7 @@ void RGWStatAccount::execute()
   do {
     RGWUserBuckets buckets;
 
-    ret = rgw_read_user_buckets(store, s->user.user_id, buckets, marker, max_buckets, true);
+    ret = rgw_read_user_buckets(store, s->user.user_id, buckets, marker, max_buckets, false);
     if (ret < 0) {
       /* hmm.. something wrong here.. the user was authenticated, so it
          should exist */
@@ -2020,6 +2025,7 @@ void RGWPostObj::execute()
     goto done;
   }
 
+  processor->complete_hash(&hash);
   hash.Final(m);
   buf_to_hex(m, CEPH_CRYPTO_MD5_DIGESTSIZE, calc_md5);
 
@@ -2562,8 +2568,17 @@ void RGWPutACLs::execute()
   new_policy.encode(bl);
   obj = rgw_obj(s->bucket, s->object);
   map<string, bufferlist> attrs;
-  attrs[RGW_ATTR_ACL] = bl;
+
   store->set_atomic(s->obj_ctx, obj);
+
+  if (!s->object.empty()) {
+    ret = get_obj_attrs(store, s, obj, attrs);
+    if (ret < 0)
+      return;
+  }
+  
+  attrs[RGW_ATTR_ACL] = bl;
+
   if (!s->object.empty()) {
     ret = store->set_attrs(s->obj_ctx, obj, attrs, NULL, ptracker);
   } else {
index 0726fc3dedbf50c3e73ee44072e74a85b2c22fd8..c4a64aec77bd5d3de3c89b0f79a25e84c80aa713 100644 (file)
@@ -243,6 +243,7 @@ protected:
   rgw_obj_key next_marker; 
   string max_keys;
   string delimiter;
+  string encoding_type;
   bool list_versions;
   int max;
   int ret;
index 2818d79fc38e4cb0c2587ca8775e1a185db73be5..f59e1f75db4f794f7f240c3d455d0bdc980055f6 100644 (file)
@@ -165,17 +165,13 @@ int RGWOrphanSearch::init(const string& job_name, RGWOrphanSearchInfo *info) {
     return r;
   }
 
-  uint64_t num_shards = (info->num_shards ? info->num_shards : DEFAULT_NUM_SHARDS);
   if (r == 0) {
-    if (num_shards != state.info.num_shards) {
-      return -EINVAL;
-    }
     search_info = state.info;
     search_stage = state.stage;
-  } else { /* r == -ENOENT */
+  } else if (info) { /* r == -ENOENT, initiate a new job if info was provided */ 
     search_info = *info;
     search_info.job_name = job_name;
-    search_info.num_shards = num_shards;
+    search_info.num_shards = (info->num_shards ? info->num_shards : DEFAULT_NUM_SHARDS);
     search_info.start_time = ceph_clock_now(store->ctx());
     search_stage = RGWOrphanSearchStage(ORPHAN_SEARCH_STAGE_INIT);
 
@@ -184,6 +180,9 @@ int RGWOrphanSearch::init(const string& job_name, RGWOrphanSearchInfo *info) {
       lderr(store->ctx()) << "ERROR: failed to write state ret=" << r << dendl;
       return r;
     }
+  } else {
+      lderr(store->ctx()) << "ERROR: job not found" << dendl;
+      return r;
   }
 
   index_objs_prefix = RGW_ORPHAN_INDEX_PREFIX + string(".");
@@ -277,9 +276,28 @@ int RGWOrphanSearch::build_all_oids_index()
     string oid = i->get_oid();
     string locator = i->get_locator();
 
-    string name = oid;
-    if (locator.size())
-      name += " (@" + locator + ")";  
+    ssize_t pos = oid.find('_');
+    if (pos < 0) {
+      cout << "unidentified oid: " << oid << ", skipping" << std::endl;
+      /* what is this object, oids should be in the format of <bucket marker>_<obj>,
+       * skip this entry
+       */
+      continue;
+    }
+    string stripped_oid = oid.substr(pos + 1);
+    string name, instance, ns;
+    if (!rgw_obj::parse_raw_oid(stripped_oid, &name, &instance, &ns)) {
+      cout << "cannot parse oid: " << oid << ", skipping" << std::endl;
+      continue;
+    }
+
+    if (ns.empty()) {
+      /* skipping head objects, we don't want to remove these as they are mutable and
+       * cleaning them up is racy (can race with object removal and a later recreation)
+       */
+      cout << "skipping head object: oid=" << oid << std::endl;
+      continue;
+    }
 
     string oid_fp = obj_fingerprint(oid);
 
index 45eba58a6b3c2dd5ec3e244e47637e670781e22d..859e34a770b6e09ea4cdb9fce236e669c34daeb2 100644 (file)
@@ -555,7 +555,7 @@ void end_header(struct req_state *s, RGWOp *op, const char *content_type, const
 
   int r;
   if (content_type) {
-      r = s->cio->print("Content-type: %s\r\n", content_type);
+      r = s->cio->print("Content-Type: %s\r\n", content_type);
       if (r < 0) {
        ldout(s->cct, 0) << "ERROR: s->cio->print() returned err=" << r << dendl;
       }
@@ -817,7 +817,7 @@ int RGWPutObj_ObjStore::verify_params()
 {
   if (s->length) {
     off_t len = atoll(s->length);
-    if (len > (off_t)RGW_MAX_PUT_SIZE) {
+    if (len > (off_t)(s->cct->_conf->rgw_max_put_size)) {
       return -ERR_TOO_LARGE;
     }
   }
@@ -856,7 +856,7 @@ int RGWPutObj_ObjStore::get_data(bufferlist& bl)
     bl.append(bp, 0, len);
   }
 
-  if ((uint64_t)ofs + len > RGW_MAX_PUT_SIZE) {
+  if ((uint64_t)ofs + len > s->cct->_conf->rgw_max_put_size) {
     return -ERR_TOO_LARGE;
   }
 
@@ -875,7 +875,7 @@ int RGWPostObj_ObjStore::verify_params()
     return -ERR_LENGTH_REQUIRED;
   }
   off_t len = atoll(s->length);
-  if (len > (off_t)RGW_MAX_PUT_SIZE) {
+  if (len > (off_t)(s->cct->_conf->rgw_max_put_size)) {
     return -ERR_TOO_LARGE;
   }
 
index 768766f8892cdea73c93c5cacd9178a732c3e98a..0cc7793ac9ad0109fa7392b2b88b4a58c383f154 100644 (file)
@@ -243,6 +243,7 @@ int RGWListBucket_ObjStore_S3::get_params()
     return ret;
   }
   delimiter = s->info.args.get("delimiter");
+  encoding_type = s->info.args.get("encoding-type");
   return 0;
 }
 
@@ -261,13 +262,23 @@ void RGWListBucket_ObjStore_S3::send_versioned_response()
 
   s->formatter->dump_string("IsTruncated", (max && is_truncated ? "true" : "false"));
 
+  bool encode_key = false;
+  if (strcasecmp(encoding_type.c_str(), "url") == 0)
+    encode_key = true;
+
   if (ret >= 0) {
     vector<RGWObjEnt>::iterator iter;
     for (iter = objs.begin(); iter != objs.end(); ++iter) {
       time_t mtime = iter->mtime.sec();
       const char *section_name = (iter->is_delete_marker() ? "DeleteMarker" : "Version");
       s->formatter->open_array_section(section_name);
-      s->formatter->dump_string("Key", iter->key.name);
+      if (encode_key) {
+        string key_name;
+        url_encode(iter->key.name, key_name);
+        s->formatter->dump_string("Key", key_name);
+      } else {
+        s->formatter->dump_string("Key", iter->key.name);
+      }
       string version_id = iter->key.instance;
       if (version_id.empty()) {
         version_id = "null";
@@ -328,11 +339,21 @@ void RGWListBucket_ObjStore_S3::send_response()
 
   s->formatter->dump_string("IsTruncated", (max && is_truncated ? "true" : "false"));
 
+  bool encode_key = false;
+  if (strcasecmp(encoding_type.c_str(), "url") == 0)
+    encode_key = true;
+
   if (ret >= 0) {
     vector<RGWObjEnt>::iterator iter;
     for (iter = objs.begin(); iter != objs.end(); ++iter) {
       s->formatter->open_array_section("Contents");
-      s->formatter->dump_string("Key", iter->key.name);
+      if (encode_key) {
+        string key_name;
+        url_encode(iter->key.name, key_name);
+        s->formatter->dump_string("Key", key_name);
+      } else {
+        s->formatter->dump_string("Key", iter->key.name);
+      }
       time_t mtime = iter->mtime.sec();
       dump_time(s, "LastModified", &mtime);
       s->formatter->dump_format("ETag", "\"%s\"", iter->etag.c_str());
@@ -372,13 +393,21 @@ void RGWGetBucketLocation_ObjStore_S3::send_response()
   end_header(s, this);
   dump_start(s);
 
-  string location_constraint(s->bucket_info.region);
-  if (s->bucket_info.region == "default")
-    location_constraint.clear();
+  string region = s->bucket_info.region;
+  string api_name;
+
+  map<string, RGWRegion>::iterator iter = store->region_map.regions.find(region);
+  if (iter != store->region_map.regions.end()) {
+    api_name = iter->second.api_name;
+  } else  {
+    if (region != "default") {
+      api_name = region;
+    }
+  }
 
   s->formatter->dump_format_ns("LocationConstraint",
                               "http://doc.s3.amazonaws.com/doc/2006-03-01/",
-                              "%s",location_constraint.c_str());
+                              "%s",api_name.c_str());
   rgw_flush_formatter_and_reset(s, s->formatter);
 }
 
index b55ad4ee2b3b9e432e0031554b205f94e9a05c1e..d5b506bb7c48a47e72dc8f785eaa22059ea15e81 100644 (file)
@@ -338,12 +338,6 @@ ceph_test_librbd_api_LDADD = \
        $(LIBRBD) $(LIBRADOS) $(LIBCOMMON) $(UNITTEST_LDADD) $(RADOS_TEST_LDADD)
 bin_DEBUGPROGRAMS += ceph_test_librbd_api
 
-if WITH_LTTNG
-unittest_librbd_LDADD += $(LIBRBD_TP)
-ceph_test_librbd_LDADD += $(LIBRBD_TP)
-ceph_test_librbd_api_LDADD += $(LIBRBD_TP)
-endif
-
 if LINUX
 ceph_test_librbd_fsx_SOURCES = test/librbd/fsx.cc
 ceph_test_librbd_fsx_LDADD = \
index 09ee4739a15b21296f1dd0d0e062de83579be058..3c8d0473bae23fd1b10aa51f7f442e39a17f3008 100644 (file)
@@ -2356,6 +2356,46 @@ TEST(BufferList, TestCopyAll) {
   ASSERT_EQ(memcmp(big.get(), big2.get(), BIG_SZ), 0);
 }
 
+TEST(BufferList, InvalidateCrc) {
+  const static size_t buffer_size = 262144;
+  ceph::shared_ptr <unsigned char> big(
+      (unsigned char*)malloc(buffer_size), free);
+  unsigned char c = 0;
+  char* ptr = (char*) big.get();
+  char* inptr;
+  for (size_t i = 0; i < buffer_size; ++i) {
+    ptr[i] = c++;
+  }
+  bufferlist bl;
+  
+  // test for crashes (shouldn't crash)
+  bl.invalidate_crc();
+  
+  // put data into bufferlist
+  bl.append((const char*)big.get(), buffer_size);
+  
+  // get its crc
+  __u32 crc = bl.crc32c(0);
+  
+  // modify data in bl without its knowledge
+  inptr = (char*) bl.c_str();
+  c = 0;
+  for (size_t i = 0; i < buffer_size; ++i) {
+    inptr[i] = c--;
+  }
+  
+  // make sure data in bl are now different than in big
+  EXPECT_NE(memcmp((void*) ptr, (void*) inptr, buffer_size), 0);
+  
+  // crc should remain the same
+  __u32 new_crc = bl.crc32c(0);
+  EXPECT_EQ(crc, new_crc);
+  
+  // force crc invalidate, check if it is updated
+  bl.invalidate_crc();
+  EXPECT_NE(crc, bl.crc32c(0));
+}
+
 TEST(BufferHash, all) {
   {
     bufferlist bl;
index 140e0e3141a8d7bc679de7109f026c869456efbc..3f9a126c4b63d66fe00e0918a352c72f82fe681e 100644 (file)
@@ -1,28 +1,33 @@
 %bcond_with ocf
 %bcond_without cephfs_java
 
-%if ! (0%{?fedora} > 12 || 0%{?rhel} > 5)
+%if (0%{?el5} || (0%{?rhel_version} >= 500 && 0%{?rhel_version} <= 600))
 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
 %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
 %endif
 
 %{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d}
 
-#################################################################################
-# common
-#################################################################################
+# LTTng-UST enabled on Fedora, RHEL 6, and SLES 12
+%if 0%{?fedora} || 0%{?rhel} == 6 || 0%{?suse_version} == 1315
+%global _with_lttng 1
+%endif
+
 Name:          ceph
 Version:       @VERSION@
 Release:       @RPM_RELEASE@%{?dist}
 Epoch:         1
 Summary:       User space components of the Ceph file system
-License:       GPL-2.0
+License:       LGPL-2.1 and CC-BY-SA-1.0 and GPL-2.0 and BSL-1.0 and GPL-2.0-with-autoconf-exception and BSD-3-Clause and MIT
 Group:         System Environment/Base
 URL:           http://ceph.com/
 Source0:       http://ceph.com/download/%{name}-%{version}.tar.bz2
-%if 0%{?fedora} || 0%{?centos} || 0%{?rhel}
+%if 0%{?fedora} || 0%{?rhel}
 Patch0:                init-ceph.in-fedora.patch
 %endif
+#################################################################################
+# dependencies that apply across all distro families
+#################################################################################
 Requires:      librbd1 = %{epoch}:%{version}-%{release}
 Requires:      librados2 = %{epoch}:%{version}-%{release}
 Requires:      libcephfs1 = %{epoch}:%{version}-%{release}
@@ -32,13 +37,17 @@ Requires:   python-rbd = %{epoch}:%{version}-%{release}
 Requires:      python-cephfs = %{epoch}:%{version}-%{release}
 Requires:      python
 Requires:      python-requests
-Requires:      python-flask
+Requires:      grep
 Requires:      xfsprogs
+Requires:      logrotate
 Requires:      parted
 Requires:      util-linux
 Requires:      hdparm
 Requires:      cryptsetup
 Requires(post):        binutils
+%if 0%{with cephfs_java}
+BuildRequires: sharutils
+%endif
 BuildRequires: gcc-c++
 BuildRequires: boost-devel
 %if 0%{defined suse_version}
@@ -49,6 +58,7 @@ BuildRequires:  bzip2-devel
 BuildRequires: cryptsetup
 BuildRequires: gdbm
 BuildRequires: hdparm
+BuildRequires: leveldb-devel > 1.2
 BuildRequires: libaio-devel
 BuildRequires: libcurl-devel
 BuildRequires: libedit-devel
@@ -57,10 +67,9 @@ BuildRequires:       libuuid-devel
 BuildRequires: libblkid-devel >= 2.17
 BuildRequires: libudev-devel
 BuildRequires: libtool
-BuildRequires: leveldb-devel > 1.2
 BuildRequires: make
-BuildRequires: perl
 BuildRequires: parted
+BuildRequires: perl
 BuildRequires: pkgconfig
 BuildRequires: python
 BuildRequires: python-nose
@@ -77,13 +86,12 @@ BuildRequires:      net-tools
 %endif
 
 #################################################################################
-# specific
+# distro-conditional dependencies
 #################################################################################
-%if ! 0%{?rhel} || 0%{?fedora}
-BuildRequires: sharutils
-%endif
-
 %if 0%{defined suse_version}
+Requires:      python-Flask
+BuildRequires: net-tools
+BuildRequires: libbz2-devel
 %if 0%{?suse_version} > 1210
 Requires:      gptfdisk
 BuildRequires: gperftools-devel
@@ -91,7 +99,6 @@ BuildRequires:        gperftools-devel
 Requires:      scsirastools
 BuildRequires: google-perftools-devel
 %endif
-Recommends:    logrotate
 BuildRequires: %insserv_prereq
 BuildRequires: mozilla-nss-devel
 BuildRequires: keyutils-devel
@@ -106,6 +113,18 @@ Requires(post):    chkconfig
 Requires(preun):chkconfig
 Requires(preun):initscripts
 BuildRequires: gperftools-devel
+Requires:      python-flask
+%endif
+# lttng and babeltrace for rbd-replay-prep
+%if 0%{?_with_lttng}
+%if 0%{?fedora} || 0%{?rhel}
+BuildRequires: lttng-ust-devel
+BuildRequires: libbabeltrace-devel
+%endif
+%if 0%{?suse_version}
+BuildRequires: lttng-ust-devel
+BuildRequires:  babeltrace-devel
+%endif
 %endif
 
 %description
@@ -126,9 +145,6 @@ Requires:   python-rados = %{epoch}:%{version}-%{release}
 Requires:      python-rbd = %{epoch}:%{version}-%{release}
 Requires:      python-cephfs = %{epoch}:%{version}-%{release}
 Requires:      python-requests
-%if 0%{?rhel} || 0%{?fedora}
-Requires:  redhat-lsb-core
-%endif
 # python-argparse is only needed in distros with Python 2.6 or lower
 %if (0%{?rhel} && 0%{?rhel} <= 6) || (0%{?suse_version} && 0%{?suse_version} <= 1110)
 Requires:      python-argparse
@@ -190,7 +206,7 @@ managers such as Pacemaker.
 Summary:       RADOS distributed object store client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 %endif
 %description -n librados2
@@ -223,7 +239,7 @@ object store.
 Summary:       RADOS striping interface
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-Requires:      librados2 = %{epoch}:%{version}
+Requires:      librados2 = %{epoch}:%{version}-%{release}
 %description -n libradosstriper1
 Striping interface built on top of the rados library, allowing
 to stripe bigger objects onto several standard rados objects using
@@ -245,7 +261,7 @@ Summary:    RADOS block device client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      librados2 = %{epoch}:%{version}-%{release}
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 %endif
 %description -n librbd1
@@ -280,7 +296,7 @@ block device.
 Summary:       Ceph distributed file system client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 Obsoletes:     ceph-libcephfs
 %endif
@@ -325,17 +341,13 @@ Summary:  Ceph benchmarks and test tools
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      ceph-common
-%if (0%{?fedora} >= 20 || 0%{?rhel} == 6)
-BuildRequires: lttng-ust-devel
-BuildRequires: libbabeltrace-devel
-%endif
 %description -n ceph-test
 This package contains Ceph benchmarks and test tools.
 
 %if 0%{with cephfs_java}
 
 %package -n libcephfs_jni1
-Summary:       Java Native Interface library for CephFS Java bindings.
+Summary:       Java Native Interface library for CephFS Java bindings
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -346,7 +358,7 @@ This package contains the Java Native Interface library for CephFS Java
 bindings.
 
 %package -n libcephfs_jni1-devel
-Summary:       Development files for CephFS Java Native Interface library.
+Summary:       Development files for CephFS Java Native Interface library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -357,7 +369,7 @@ This package contains the development files for CephFS Java Native Interface
 library.
 
 %package -n cephfs-java
-Summary:       Java libraries for the Ceph File System.
+Summary:       Java libraries for the Ceph File System
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -376,7 +388,7 @@ This package contains the Java libraries for the Ceph File System.
 %endif
 
 %package libs-compat
-Summary:       Meta package to include ceph libraries.
+Summary:       Meta package to include ceph libraries
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Obsoletes:     ceph-libs
@@ -436,7 +448,7 @@ python-cephfs instead.
 #################################################################################
 %prep
 %setup -q
-%if 0%{?fedora} || 0%{?rhel} || 0%{?centos}
+%if 0%{?fedora} || 0%{?rhel}
 %patch0 -p1 -b .init
 %endif
 
@@ -529,8 +541,10 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/tmp
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mon
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/osd
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mds
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/radosgw
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-osd
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-mds
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-rgw
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/radosgw
 
 %clean
@@ -613,6 +627,10 @@ fi
 %{_libdir}/rados-classes/libcls_version.so*
 %dir %{_libdir}/ceph/erasure-code
 %{_libdir}/ceph/erasure-code/libec_*.so*
+%if 0%{?_with_lttng}
+%{_libdir}/libos_tp.so*
+%{_libdir}/libosd_tp.so*
+%endif
 %{_udevrulesdir}/60-ceph-partuuid-workaround.rules
 %{_udevrulesdir}/95-ceph-osd.rules
 %config %{_sysconfdir}/bash_completion.d/ceph
@@ -646,6 +664,7 @@ fi
 %dir %{_localstatedir}/lib/ceph/bootstrap-osd
 %dir %{_localstatedir}/lib/ceph/bootstrap-mds
 %ghost %dir %{_localstatedir}/run/ceph/
+%dir %{_localstatedir}/lib/ceph/bootstrap-rgw
 
 #################################################################################
 %files -n ceph-common
@@ -659,6 +678,11 @@ fi
 %{_bindir}/ceph-crush-location
 %{_bindir}/rados
 %{_bindir}/rbd
+%{_bindir}/rbd-replay
+%{_bindir}/rbd-replay-many
+%if 0%{?_with_lttng}
+%{_bindir}/rbd-replay-prep
+%endif
 %{_bindir}/ceph-post-file
 %{_bindir}/ceph-brag
 %{_mandir}/man8/ceph-authtool.8*
@@ -670,11 +694,16 @@ fi
 %{_mandir}/man8/ceph.8*
 %{_mandir}/man8/rados.8*
 %{_mandir}/man8/rbd.8*
+%{_mandir}/man8/rbd-replay.8*
+%{_mandir}/man8/rbd-replay-many.8*
+%{_mandir}/man8/rbd-replay-prep.8*
 %{_datadir}/ceph/known_hosts_drop.ceph.com
 %{_datadir}/ceph/id_dsa_drop.ceph.com
 %{_datadir}/ceph/id_dsa_drop.ceph.com.pub
 %dir %{_sysconfdir}/ceph/
 %dir %{_localstatedir}/log/ceph/
+%dir %{_datarootdir}/ceph/
+%dir %{_libexecdir}/ceph/
 %config %{_sysconfdir}/bash_completion.d/rados
 %config %{_sysconfdir}/bash_completion.d/rbd
 %config(noreplace) %{_sysconfdir}/ceph/rbdmap
@@ -718,6 +747,7 @@ fi
 %config(noreplace) %{_sysconfdir}/logrotate.d/radosgw
 %config %{_sysconfdir}/bash_completion.d/radosgw-admin
 %dir %{_localstatedir}/log/radosgw/
+%dir %{_localstatedir}/lib/ceph/radosgw
 
 %post radosgw
 /sbin/ldconfig
@@ -756,6 +786,9 @@ fi
 %files -n librados2
 %defattr(-,root,root,-)
 %{_libdir}/librados.so.*
+%if 0%{?_with_lttng}
+%{_libdir}/librados_tp.so.*
+%endif
 
 %post -n librados2
 /sbin/ldconfig
@@ -776,6 +809,9 @@ fi
 %{_includedir}/rados/rados_types.hpp
 %{_includedir}/rados/memory.h
 %{_libdir}/librados.so
+%if 0%{?_with_lttng}
+%{_libdir}/librados_tp.so
+%endif
 
 #################################################################################
 %files -n python-rados
@@ -805,6 +841,9 @@ fi
 %files -n librbd1
 %defattr(-,root,root,-)
 %{_libdir}/librbd.so.*
+%if 0%{?_with_lttng}
+%{_libdir}/librbd_tp.so.*
+%endif
 
 %post -n librbd1
 /sbin/ldconfig
@@ -822,6 +861,9 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %{_includedir}/rbd/librbd.hpp
 %{_includedir}/rbd/features.h
 %{_libdir}/librbd.so
+%if 0%{?_with_lttng}
+%{_libdir}/librbd_tp.so
+%endif
 
 #################################################################################
 %files -n python-rbd
@@ -883,14 +925,6 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %{_bindir}/ceph-monstore-tool
 %{_bindir}/ceph-osdomap-tool
 %{_bindir}/ceph-kvstore-tool
-%{_mandir}/man8/rbd-replay.8*
-%{_mandir}/man8/rbd-replay-many.8*
-%{_mandir}/man8/rbd-replay-prep.8*
-%{_bindir}/rbd-replay
-%{_bindir}/rbd-replay-many
-%if (0%{?fedora} >= 20 || 0%{?rhel} == 6)
-%{_bindir}/rbd-replay-prep
-%endif
 
 #################################################################################
 %if 0%{with cephfs_java}
@@ -898,6 +932,12 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %defattr(-,root,root,-)
 %{_libdir}/libcephfs_jni.so.*
 
+%post -n libcephfs_jni1
+/sbin/ldconfig
+
+%postun -n libcephfs_jni1
+/sbin/ldconfig
+
 #################################################################################
 %files -n libcephfs_jni1-devel
 %defattr(-,root,root,-)
index 140e0e3141a8d7bc679de7109f026c869456efbc..3f9a126c4b63d66fe00e0918a352c72f82fe681e 100644 (file)
@@ -1,28 +1,33 @@
 %bcond_with ocf
 %bcond_without cephfs_java
 
-%if ! (0%{?fedora} > 12 || 0%{?rhel} > 5)
+%if (0%{?el5} || (0%{?rhel_version} >= 500 && 0%{?rhel_version} <= 600))
 %{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
 %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
 %endif
 
 %{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d}
 
-#################################################################################
-# common
-#################################################################################
+# LTTng-UST enabled on Fedora, RHEL 6, and SLES 12
+%if 0%{?fedora} || 0%{?rhel} == 6 || 0%{?suse_version} == 1315
+%global _with_lttng 1
+%endif
+
 Name:          ceph
 Version:       @VERSION@
 Release:       @RPM_RELEASE@%{?dist}
 Epoch:         1
 Summary:       User space components of the Ceph file system
-License:       GPL-2.0
+License:       LGPL-2.1 and CC-BY-SA-1.0 and GPL-2.0 and BSL-1.0 and GPL-2.0-with-autoconf-exception and BSD-3-Clause and MIT
 Group:         System Environment/Base
 URL:           http://ceph.com/
 Source0:       http://ceph.com/download/%{name}-%{version}.tar.bz2
-%if 0%{?fedora} || 0%{?centos} || 0%{?rhel}
+%if 0%{?fedora} || 0%{?rhel}
 Patch0:                init-ceph.in-fedora.patch
 %endif
+#################################################################################
+# dependencies that apply across all distro families
+#################################################################################
 Requires:      librbd1 = %{epoch}:%{version}-%{release}
 Requires:      librados2 = %{epoch}:%{version}-%{release}
 Requires:      libcephfs1 = %{epoch}:%{version}-%{release}
@@ -32,13 +37,17 @@ Requires:   python-rbd = %{epoch}:%{version}-%{release}
 Requires:      python-cephfs = %{epoch}:%{version}-%{release}
 Requires:      python
 Requires:      python-requests
-Requires:      python-flask
+Requires:      grep
 Requires:      xfsprogs
+Requires:      logrotate
 Requires:      parted
 Requires:      util-linux
 Requires:      hdparm
 Requires:      cryptsetup
 Requires(post):        binutils
+%if 0%{with cephfs_java}
+BuildRequires: sharutils
+%endif
 BuildRequires: gcc-c++
 BuildRequires: boost-devel
 %if 0%{defined suse_version}
@@ -49,6 +58,7 @@ BuildRequires:  bzip2-devel
 BuildRequires: cryptsetup
 BuildRequires: gdbm
 BuildRequires: hdparm
+BuildRequires: leveldb-devel > 1.2
 BuildRequires: libaio-devel
 BuildRequires: libcurl-devel
 BuildRequires: libedit-devel
@@ -57,10 +67,9 @@ BuildRequires:       libuuid-devel
 BuildRequires: libblkid-devel >= 2.17
 BuildRequires: libudev-devel
 BuildRequires: libtool
-BuildRequires: leveldb-devel > 1.2
 BuildRequires: make
-BuildRequires: perl
 BuildRequires: parted
+BuildRequires: perl
 BuildRequires: pkgconfig
 BuildRequires: python
 BuildRequires: python-nose
@@ -77,13 +86,12 @@ BuildRequires:      net-tools
 %endif
 
 #################################################################################
-# specific
+# distro-conditional dependencies
 #################################################################################
-%if ! 0%{?rhel} || 0%{?fedora}
-BuildRequires: sharutils
-%endif
-
 %if 0%{defined suse_version}
+Requires:      python-Flask
+BuildRequires: net-tools
+BuildRequires: libbz2-devel
 %if 0%{?suse_version} > 1210
 Requires:      gptfdisk
 BuildRequires: gperftools-devel
@@ -91,7 +99,6 @@ BuildRequires:        gperftools-devel
 Requires:      scsirastools
 BuildRequires: google-perftools-devel
 %endif
-Recommends:    logrotate
 BuildRequires: %insserv_prereq
 BuildRequires: mozilla-nss-devel
 BuildRequires: keyutils-devel
@@ -106,6 +113,18 @@ Requires(post):    chkconfig
 Requires(preun):chkconfig
 Requires(preun):initscripts
 BuildRequires: gperftools-devel
+Requires:      python-flask
+%endif
+# lttng and babeltrace for rbd-replay-prep
+%if 0%{?_with_lttng}
+%if 0%{?fedora} || 0%{?rhel}
+BuildRequires: lttng-ust-devel
+BuildRequires: libbabeltrace-devel
+%endif
+%if 0%{?suse_version}
+BuildRequires: lttng-ust-devel
+BuildRequires:  babeltrace-devel
+%endif
 %endif
 
 %description
@@ -126,9 +145,6 @@ Requires:   python-rados = %{epoch}:%{version}-%{release}
 Requires:      python-rbd = %{epoch}:%{version}-%{release}
 Requires:      python-cephfs = %{epoch}:%{version}-%{release}
 Requires:      python-requests
-%if 0%{?rhel} || 0%{?fedora}
-Requires:  redhat-lsb-core
-%endif
 # python-argparse is only needed in distros with Python 2.6 or lower
 %if (0%{?rhel} && 0%{?rhel} <= 6) || (0%{?suse_version} && 0%{?suse_version} <= 1110)
 Requires:      python-argparse
@@ -190,7 +206,7 @@ managers such as Pacemaker.
 Summary:       RADOS distributed object store client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 %endif
 %description -n librados2
@@ -223,7 +239,7 @@ object store.
 Summary:       RADOS striping interface
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-Requires:      librados2 = %{epoch}:%{version}
+Requires:      librados2 = %{epoch}:%{version}-%{release}
 %description -n libradosstriper1
 Striping interface built on top of the rados library, allowing
 to stripe bigger objects onto several standard rados objects using
@@ -245,7 +261,7 @@ Summary:    RADOS block device client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      librados2 = %{epoch}:%{version}-%{release}
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 %endif
 %description -n librbd1
@@ -280,7 +296,7 @@ block device.
 Summary:       Ceph distributed file system client library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
-%if 0%{?rhel} || 0%{?centos} || 0%{?fedora}
+%if 0%{?rhel} || 0%{?fedora}
 Obsoletes:     ceph-libs < %{epoch}:%{version}-%{release}
 Obsoletes:     ceph-libcephfs
 %endif
@@ -325,17 +341,13 @@ Summary:  Ceph benchmarks and test tools
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      ceph-common
-%if (0%{?fedora} >= 20 || 0%{?rhel} == 6)
-BuildRequires: lttng-ust-devel
-BuildRequires: libbabeltrace-devel
-%endif
 %description -n ceph-test
 This package contains Ceph benchmarks and test tools.
 
 %if 0%{with cephfs_java}
 
 %package -n libcephfs_jni1
-Summary:       Java Native Interface library for CephFS Java bindings.
+Summary:       Java Native Interface library for CephFS Java bindings
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -346,7 +358,7 @@ This package contains the Java Native Interface library for CephFS Java
 bindings.
 
 %package -n libcephfs_jni1-devel
-Summary:       Development files for CephFS Java Native Interface library.
+Summary:       Development files for CephFS Java Native Interface library
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -357,7 +369,7 @@ This package contains the development files for CephFS Java Native Interface
 library.
 
 %package -n cephfs-java
-Summary:       Java libraries for the Ceph File System.
+Summary:       Java libraries for the Ceph File System
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Requires:      java
@@ -376,7 +388,7 @@ This package contains the Java libraries for the Ceph File System.
 %endif
 
 %package libs-compat
-Summary:       Meta package to include ceph libraries.
+Summary:       Meta package to include ceph libraries
 Group:         System Environment/Libraries
 License:       LGPL-2.0
 Obsoletes:     ceph-libs
@@ -436,7 +448,7 @@ python-cephfs instead.
 #################################################################################
 %prep
 %setup -q
-%if 0%{?fedora} || 0%{?rhel} || 0%{?centos}
+%if 0%{?fedora} || 0%{?rhel}
 %patch0 -p1 -b .init
 %endif
 
@@ -529,8 +541,10 @@ mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/tmp
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mon
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/osd
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mds
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/radosgw
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-osd
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-mds
+mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-rgw
 mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/radosgw
 
 %clean
@@ -613,6 +627,10 @@ fi
 %{_libdir}/rados-classes/libcls_version.so*
 %dir %{_libdir}/ceph/erasure-code
 %{_libdir}/ceph/erasure-code/libec_*.so*
+%if 0%{?_with_lttng}
+%{_libdir}/libos_tp.so*
+%{_libdir}/libosd_tp.so*
+%endif
 %{_udevrulesdir}/60-ceph-partuuid-workaround.rules
 %{_udevrulesdir}/95-ceph-osd.rules
 %config %{_sysconfdir}/bash_completion.d/ceph
@@ -646,6 +664,7 @@ fi
 %dir %{_localstatedir}/lib/ceph/bootstrap-osd
 %dir %{_localstatedir}/lib/ceph/bootstrap-mds
 %ghost %dir %{_localstatedir}/run/ceph/
+%dir %{_localstatedir}/lib/ceph/bootstrap-rgw
 
 #################################################################################
 %files -n ceph-common
@@ -659,6 +678,11 @@ fi
 %{_bindir}/ceph-crush-location
 %{_bindir}/rados
 %{_bindir}/rbd
+%{_bindir}/rbd-replay
+%{_bindir}/rbd-replay-many
+%if 0%{?_with_lttng}
+%{_bindir}/rbd-replay-prep
+%endif
 %{_bindir}/ceph-post-file
 %{_bindir}/ceph-brag
 %{_mandir}/man8/ceph-authtool.8*
@@ -670,11 +694,16 @@ fi
 %{_mandir}/man8/ceph.8*
 %{_mandir}/man8/rados.8*
 %{_mandir}/man8/rbd.8*
+%{_mandir}/man8/rbd-replay.8*
+%{_mandir}/man8/rbd-replay-many.8*
+%{_mandir}/man8/rbd-replay-prep.8*
 %{_datadir}/ceph/known_hosts_drop.ceph.com
 %{_datadir}/ceph/id_dsa_drop.ceph.com
 %{_datadir}/ceph/id_dsa_drop.ceph.com.pub
 %dir %{_sysconfdir}/ceph/
 %dir %{_localstatedir}/log/ceph/
+%dir %{_datarootdir}/ceph/
+%dir %{_libexecdir}/ceph/
 %config %{_sysconfdir}/bash_completion.d/rados
 %config %{_sysconfdir}/bash_completion.d/rbd
 %config(noreplace) %{_sysconfdir}/ceph/rbdmap
@@ -718,6 +747,7 @@ fi
 %config(noreplace) %{_sysconfdir}/logrotate.d/radosgw
 %config %{_sysconfdir}/bash_completion.d/radosgw-admin
 %dir %{_localstatedir}/log/radosgw/
+%dir %{_localstatedir}/lib/ceph/radosgw
 
 %post radosgw
 /sbin/ldconfig
@@ -756,6 +786,9 @@ fi
 %files -n librados2
 %defattr(-,root,root,-)
 %{_libdir}/librados.so.*
+%if 0%{?_with_lttng}
+%{_libdir}/librados_tp.so.*
+%endif
 
 %post -n librados2
 /sbin/ldconfig
@@ -776,6 +809,9 @@ fi
 %{_includedir}/rados/rados_types.hpp
 %{_includedir}/rados/memory.h
 %{_libdir}/librados.so
+%if 0%{?_with_lttng}
+%{_libdir}/librados_tp.so
+%endif
 
 #################################################################################
 %files -n python-rados
@@ -805,6 +841,9 @@ fi
 %files -n librbd1
 %defattr(-,root,root,-)
 %{_libdir}/librbd.so.*
+%if 0%{?_with_lttng}
+%{_libdir}/librbd_tp.so.*
+%endif
 
 %post -n librbd1
 /sbin/ldconfig
@@ -822,6 +861,9 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %{_includedir}/rbd/librbd.hpp
 %{_includedir}/rbd/features.h
 %{_libdir}/librbd.so
+%if 0%{?_with_lttng}
+%{_libdir}/librbd_tp.so
+%endif
 
 #################################################################################
 %files -n python-rbd
@@ -883,14 +925,6 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %{_bindir}/ceph-monstore-tool
 %{_bindir}/ceph-osdomap-tool
 %{_bindir}/ceph-kvstore-tool
-%{_mandir}/man8/rbd-replay.8*
-%{_mandir}/man8/rbd-replay-many.8*
-%{_mandir}/man8/rbd-replay-prep.8*
-%{_bindir}/rbd-replay
-%{_bindir}/rbd-replay-many
-%if (0%{?fedora} >= 20 || 0%{?rhel} == 6)
-%{_bindir}/rbd-replay-prep
-%endif
 
 #################################################################################
 %if 0%{with cephfs_java}
@@ -898,6 +932,12 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
 %defattr(-,root,root,-)
 %{_libdir}/libcephfs_jni.so.*
 
+%post -n libcephfs_jni1
+/sbin/ldconfig
+
+%postun -n libcephfs_jni1
+/sbin/ldconfig
+
 #################################################################################
 %files -n libcephfs_jni1-devel
 %defattr(-,root,root,-)
index bdb7324b77afd45327c1ae9c2c2924c3a6817e73..a294549409c05aedaae70d842e69598bb3bb9f9a 100644 (file)
@@ -69,6 +69,8 @@
     replicalog get             get replica metadata log entry
     replicalog update          update replica metadata log entry
     replicalog delete          delete replica metadata log entry
+    orphans find               init and run search for leaked rados objects
+    orphans finish             clean up search for leaked rados objects
   options:
      --uid=<id>                user id
      --subuser=<name>          subuser name
      --max-size                specify max size (in bytes, negative value to disable)
      --quota-scope             scope of quota (bucket, user)
   
+  Orphans search options:
+     --pool                    data pool to scan for leaked rados objects in
+     --num-shards              num of shards to use for keeping the temporary scan info
+  
     --conf/-c FILE    read configuration from the given configuration file
     --id/-i ID        set ID portion of my name
     --name/-n TYPE.ID set name
index 21eefe7402bcd8934e1500fe9f57bf9e4f930b4d..d425885f809c5aff88e39b7f90b778990e2bb6e5 100644 (file)
@@ -232,6 +232,10 @@ TYPE(EUpdate)
 TYPE(librbd::WatchNotify::NotifyMessage)
 TYPE(librbd::WatchNotify::ResponseMessage)
 
+#include "rbd_replay/ActionTypes.h"
+TYPE(rbd_replay::action::Dependency)
+TYPE(rbd_replay::action::ActionEntry);
+
 #ifdef WITH_RADOSGW
 
 #include "rgw/rgw_rados.h"
index b9183aa0ff2eeea7b6fcba6b7935f667761466cd..99fff2e50883ee0567f0dda8a260d1718916007e 100644 (file)
@@ -478,6 +478,41 @@ TEST(LibRadosAio, RoundTripPP3)
   destroy_one_pool_pp(pool_name, cluster);
 }
 
+TEST(LibRadosAio, RoundTripSparseReadPP) {
+  AioTestDataPP test_data;
+  ASSERT_EQ("", test_data.init());
+  AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
+         (void*)&test_data, set_completion_completePP, set_completion_safePP);
+  AioCompletion *my_completion_null = NULL;
+  ASSERT_NE(my_completion, my_completion_null);
+  char buf[128];
+  memset(buf, 0xcc, sizeof(buf));
+  bufferlist bl1;
+  bl1.append(buf, sizeof(buf));
+  ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+                                          bl1, sizeof(buf), 0));
+  {
+    TestAlarm alarm;
+    sem_wait(&test_data.m_sem);
+    sem_wait(&test_data.m_sem);
+  }
+  ASSERT_EQ(0, my_completion->get_return_value());
+  std::map<uint64_t, uint64_t> extents;
+  bufferlist bl2;
+  AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
+         (void*)&test_data, set_completion_completePP, set_completion_safePP);
+  ASSERT_NE(my_completion2, my_completion_null);
+  ASSERT_EQ(0, test_data.m_ioctx.aio_sparse_read("foo",
+                             my_completion2, &extents, &bl2, sizeof(buf), 0));
+  {
+    TestAlarm alarm;
+    ASSERT_EQ(0, my_completion2->wait_for_complete());
+  }
+  ASSERT_EQ(0, my_completion2->get_return_value());
+  assert_eq_sparse(bl1, extents, bl2);
+  delete my_completion;
+  delete my_completion2;
+}
 
 TEST(LibRadosAio, RoundTripAppend) {
   AioTestData test_data;
@@ -2076,6 +2111,42 @@ TEST(LibRadosAioEC, RoundTripPP3)
   destroy_one_pool_pp(pool_name, cluster);
 }
 
+TEST(LibRadosAioEC, RoundTripSparseReadPP) {
+  AioTestDataECPP test_data;
+  ASSERT_EQ("", test_data.init());
+  AioCompletion *my_completion = test_data.m_cluster.aio_create_completion(
+         (void*)&test_data, set_completion_completeECPP, set_completion_safeECPP);
+  AioCompletion *my_completion_null = NULL;
+  ASSERT_NE(my_completion, my_completion_null);
+  char buf[128];
+  memset(buf, 0xcc, sizeof(buf));
+  bufferlist bl1;
+  bl1.append(buf, sizeof(buf));
+  ASSERT_EQ(0, test_data.m_ioctx.aio_write("foo", my_completion,
+                                          bl1, sizeof(buf), 0));
+  {
+    TestAlarm alarm;
+    sem_wait(&test_data.m_sem);
+    sem_wait(&test_data.m_sem);
+  }
+  ASSERT_EQ(0, my_completion->get_return_value());
+
+  map<uint64_t, uint64_t> extents;
+  bufferlist bl2;
+  AioCompletion *my_completion2 = test_data.m_cluster.aio_create_completion(
+         (void*)&test_data, set_completion_completeECPP, set_completion_safeECPP);
+  ASSERT_NE(my_completion2, my_completion_null);
+  ASSERT_EQ(0, test_data.m_ioctx.aio_sparse_read("foo",
+                             my_completion2, &extents, &bl2, sizeof(buf), 0));
+  {
+    TestAlarm alarm;
+    ASSERT_EQ(0, my_completion2->wait_for_complete());
+  }
+  ASSERT_EQ(0, my_completion2->get_return_value());
+  assert_eq_sparse(bl1, extents, bl2);
+  delete my_completion;
+  delete my_completion2;
+}
 
 TEST(LibRadosAioEC, RoundTripAppend) {
   AioTestDataEC test_data;
index 6f391df7353bd7b751de7b1a7eb294535066ad07..0cb2a8e9f0366aa72209442417652e7e99e1f08a 100644 (file)
@@ -223,6 +223,25 @@ TEST_F(LibRadosIoPP, ReadOpPP) {
   }
 }
 
+TEST_F(LibRadosIoPP, SparseReadOpPP) {
+  char buf[128];
+  memset(buf, 0xcc, sizeof(buf));
+  bufferlist bl;
+  bl.append(buf, sizeof(buf));
+  ASSERT_EQ(0, ioctx.write("foo", bl, sizeof(buf), 0));
+
+  {
+    std::map<uint64_t, uint64_t> extents;
+    bufferlist read_bl;
+    int rval = -1;
+    ObjectReadOperation op;
+    op.sparse_read(0, sizeof(buf), &extents, &read_bl, &rval);
+    ASSERT_EQ(0, ioctx.operate("foo", &op, NULL));
+    ASSERT_EQ(0, rval);
+    assert_eq_sparse(bl, extents, read_bl);
+  }
+}
+
 TEST_F(LibRadosIo, RoundTrip) {
   char buf[128];
   char buf2[128];
@@ -689,6 +708,25 @@ TEST_F(LibRadosIoECPP, ReadOpPP) {
   }
 }
 
+TEST_F(LibRadosIoECPP, SparseReadOpPP) {
+  char buf[128];
+  memset(buf, 0xcc, sizeof(buf));
+  bufferlist bl;
+  bl.append(buf, sizeof(buf));
+  ASSERT_EQ(0, ioctx.write("foo", bl, sizeof(buf), 0));
+
+  {
+    std::map<uint64_t, uint64_t> extents;
+    bufferlist read_bl;
+    int rval = -1;
+    ObjectReadOperation op;
+    op.sparse_read(0, sizeof(buf), &extents, &read_bl, &rval);
+    ASSERT_EQ(0, ioctx.operate("foo", &op, NULL));
+    ASSERT_EQ(0, rval);
+    assert_eq_sparse(bl, extents, read_bl);
+  }
+}
+
 TEST_F(LibRadosIoEC, RoundTrip) {
   char buf[128];
   char buf2[128];
index f8a92a2ffad330f119133d7cb416ea07dbc4247e..fd92fc234c50bedb40c78452a4898bdcbfda2a0d 100644 (file)
@@ -10,6 +10,7 @@
 #include <string>
 #include <time.h>
 #include <unistd.h>
+#include "gtest/gtest.h"
 
 using namespace librados;
 
@@ -43,25 +44,42 @@ std::string create_one_pool(const std::string &pool_name, rados_t *cluster)
   return "";
 }
 
+int destroy_ec_profile(rados_t *cluster)
+{
+    char *cmd[2];
+    cmd[0] = (char *)"{\"prefix\": \"osd erasure-code-profile rm\", \"name\": \"testprofile\"}";
+    cmd[1] = NULL;
+    return rados_mon_command(*cluster, (const char **)cmd, 1, "", 0, NULL, 0, NULL, 0);
+}
+
 std::string create_one_ec_pool(const std::string &pool_name, rados_t *cluster)
 {
   std::string err = connect_cluster(cluster);
   if (err.length())
     return err;
 
+  int ret = destroy_ec_profile(cluster);
+  if (ret) {
+    rados_shutdown(*cluster);
+    std::ostringstream oss;
+    oss << "rados_mon_command erasure-code-profile rm testprofile failed with error " << ret;
+    return oss.str();
+  }
+    
   char *cmd[2];
-
   cmd[1] = NULL;
 
-  cmd[0] = (char *)"{\"prefix\": \"osd erasure-code-profile set\", \"name\": \"testprofile\", \"profile\": [ \"k=2\", \"m=1\", \"ruleset-failure-domain=osd\"]}";
-  int ret = rados_mon_command(*cluster, (const char **)cmd, 1, "", 0, NULL, NULL, NULL, NULL);
+  std::string profile_create = "{\"prefix\": \"osd erasure-code-profile set\", \"name\": \"testprofile\", \"profile\": [ \"k=2\", \"m=1\", \"ruleset-failure-domain=osd\"]}";
+  cmd[0] = (char *)profile_create.c_str();
+  ret = rados_mon_command(*cluster, (const char **)cmd, 1, "", 0, NULL, 0, NULL, 0);
   if (ret) {
-    rados_shutdown(*cluster);
     std::ostringstream oss;
+
+    rados_shutdown(*cluster);
     oss << "rados_mon_command erasure-code-profile set name:testprofile failed with error " << ret;
     return oss.str();
   }
-    
+
   std::string cmdstr = "{\"prefix\": \"osd pool create\", \"pool\": \"" +
      pool_name + "\", \"pool_type\":\"erasure\", \"pg_num\":8, \"pgp_num\":8, \"erasure_code_profile\":\"testprofile\"}";
   cmd[0] = (char *)cmdstr.c_str();
@@ -69,13 +87,12 @@ std::string create_one_ec_pool(const std::string &pool_name, rados_t *cluster)
   if (ret) {
     std::ostringstream oss;
 
-    cmd[0] = (char *)"{\"prefix\": \"osd erasure-code-profile rm\", \"name\": \"testprofile\"}";
-    int ret2 = rados_mon_command(*cluster, (const char **)cmd, 1, "", 0, NULL, 0, NULL, 0);
+    int ret2 = destroy_ec_profile(cluster);
     if (ret2)
       oss << "rados_mon_command osd erasure-code-profile rm name:testprofile failed with error " << ret2 << std::endl;
 
     rados_shutdown(*cluster);
-    oss << "rados_mon_command erasure-code-profile set name:testprofile failed with error " << ret;
+    oss << "rados_mon_command osd pool create failed with error " << ret;
     return oss.str();
   }
 
@@ -98,14 +115,29 @@ std::string create_one_pool_pp(const std::string &pool_name, Rados &cluster)
   return "";
 }
 
+int destroy_ec_profile_pp(Rados &cluster)
+{
+  bufferlist inbl;
+  return cluster.mon_command("{\"prefix\": \"osd erasure-code-profile rm\", \"name\": \"testprofile\"}",
+                             inbl, NULL, NULL);
+}
+
 std::string create_one_ec_pool_pp(const std::string &pool_name, Rados &cluster)
 {
   std::string err = connect_cluster_pp(cluster);
   if (err.length())
     return err;
 
+  int ret = destroy_ec_profile_pp(cluster);
+  if (ret) {
+    cluster.shutdown();
+    std::ostringstream oss;
+    oss << "rados_mon_command erasure-code-profile rm testprofile failed with error " << ret;
+    return oss.str();
+  }
+
   bufferlist inbl;
-  int ret = cluster.mon_command(
+  ret = cluster.mon_command(
     "{\"prefix\": \"osd erasure-code-profile set\", \"name\": \"testprofile\", \"profile\": [ \"k=2\", \"m=1\", \"ruleset-failure-domain=osd\"]}",
     inbl, NULL, NULL);
   if (ret) {
@@ -121,9 +153,7 @@ std::string create_one_ec_pool_pp(const std::string &pool_name, Rados &cluster)
   if (ret) {
     std::ostringstream oss;
     bufferlist inbl;
-    int ret2 = cluster.mon_command(
-      "{\"prefix\": \"osd erasure-code-profile rm\", \"name\": \"testprofile\"}",
-      inbl, NULL, NULL);
+    int ret2 = destroy_ec_profile_pp(cluster);
     if (ret2)
       oss << "mon_command osd erasure-code-profile rm name:testprofile failed with error " << ret2 << std::endl;
 
@@ -211,12 +241,7 @@ int destroy_one_ec_pool(const std::string &pool_name, rados_t *cluster)
 {
   int ret = rados_pool_delete(*cluster, pool_name.c_str());
   if (ret == 0) {
-    char *cmd[2];
-
-    cmd[1] = NULL;
-
-    cmd[0] = (char *)"{\"prefix\": \"osd erasure-code-profile rm\", \"name\": \"testprofile\"}";
-    int ret2 = rados_mon_command(*cluster, (const char **)cmd, 1, "", 0, NULL, 0, NULL, 0);
+    int ret2 = destroy_ec_profile(cluster);
     if (ret2) {
       rados_shutdown(*cluster);
       return ret2;
@@ -243,9 +268,7 @@ int destroy_one_ec_pool_pp(const std::string &pool_name, Rados &cluster)
   int ret = cluster.pool_delete(pool_name.c_str());
   bufferlist inbl;
   if (ret == 0) {
-    int ret2 = cluster.mon_command(
-      "{\"prefix\": \"osd erasure-code-profile rm\", \"name\": \"testprofile\"}",
-      inbl, NULL, NULL);
+    int ret2 = destroy_ec_profile_pp(cluster);
     if (ret2) {
       cluster.shutdown();
       return ret2;
@@ -255,3 +278,29 @@ int destroy_one_ec_pool_pp(const std::string &pool_name, Rados &cluster)
   cluster.shutdown();
   return ret;
 }
+
+void assert_eq_sparse(bufferlist& expected,
+                      const std::map<uint64_t, uint64_t>& extents,
+                      bufferlist& actual) {
+  bufferlist::iterator i = expected.begin();
+  bufferlist::iterator p = actual.begin();
+  uint64_t pos = 0;
+  for (std::map<uint64_t, uint64_t>::const_iterator extent = extents.begin();
+       extent != extents.end();
+       ++extent) {
+    const uint64_t start = extent->first;
+    const uint64_t end = start + extent->second;
+    for (; pos < end; ++i, ++pos) {
+      ASSERT_FALSE(i.end());
+      if (pos < start) {
+        // check the hole
+        ASSERT_EQ('\0', *i);
+      } else {
+        // then the extent
+        ASSERT_EQ(*i, *p);
+        ++p;
+      }
+    }
+  }
+  ASSERT_EQ(expected.length(), pos);
+}
index 6cf522def31d8194c9170311c4f3fd44be69d000..cd1f9817653458646b62e2b724b2dc8c237103e7 100644 (file)
@@ -18,6 +18,7 @@
 #include "include/rados/librados.h"
 #include "include/rados/librados.hpp"
 
+#include <map>
 #include <string>
 #include <unistd.h>
 
@@ -35,6 +36,9 @@ int destroy_one_pool(const std::string &pool_name, rados_t *cluster);
 int destroy_one_ec_pool(const std::string &pool_name, rados_t *cluster);
 int destroy_one_pool_pp(const std::string &pool_name, librados::Rados &cluster);
 int destroy_one_ec_pool_pp(const std::string &pool_name, librados::Rados &cluster);
+void assert_eq_sparse(bufferlist& expected,
+                      const std::map<uint64_t, uint64_t>& extents,
+                      bufferlist& actual);
 
 class TestAlarm
 {
index 925dc598385b32c6920163fe84ce38a2bc960ff6..eac9d8b51f13a9391cf395fca29f914be8faf103 100644 (file)
@@ -84,7 +84,8 @@ private:
 
 TestRadosClient::TestRadosClient(CephContext *cct)
   : m_cct(cct->get()),
-    m_watch_notify(m_cct)
+    m_aio_finisher(new Finisher(m_cct)),
+    m_watch_notify(m_cct, m_aio_finisher)
 {
   get();
 
@@ -96,7 +97,6 @@ TestRadosClient::TestRadosClient(CephContext *cct)
   }
 
   // replicate AIO callback processing
-  m_aio_finisher = new Finisher(m_cct);
   m_aio_finisher->start();
 }
 
index 14a43bc58cb1cf7bc56b3a1201e4995e82a42fce..f40eea835784169861e20e460dbc28723c0bb188 100644 (file)
@@ -9,23 +9,19 @@
 
 namespace librados {
 
-TestWatchNotify::TestWatchNotify(CephContext *cct)
-  : m_cct(cct), m_finisher(new Finisher(cct)), m_handle(), m_notify_id(),
+TestWatchNotify::TestWatchNotify(CephContext *cct, Finisher *finisher)
+  : m_cct(cct), m_finisher(finisher), m_handle(), m_notify_id(),
     m_file_watcher_lock("librados::TestWatchNotify::m_file_watcher_lock"),
     m_pending_notifies(0) {
   m_cct->get();
-  m_finisher->start();
 }
 
 TestWatchNotify::~TestWatchNotify() {
-  m_finisher->stop();
-  delete m_finisher;
   m_cct->put();
 }
 
 TestWatchNotify::NotifyHandle::NotifyHandle()
-  : pbl(NULL), pending_responses(),
-    lock("TestWatchNotify::NotifyHandle::lock") {
+  : lock("TestWatchNotify::NotifyHandle::lock") {
 }
 
 TestWatchNotify::Watcher::Watcher()
@@ -50,7 +46,7 @@ int TestWatchNotify::list_watchers(const std::string& o,
        it != watcher->watch_handles.end(); ++it) {
     obj_watch_t obj;
     strcpy(obj.addr, ":/0");
-    obj.watcher_id = static_cast<int64_t>(it->second.instance_id);
+    obj.watcher_id = static_cast<int64_t>(it->second.gid);
     obj.cookie = it->second.handle;
     obj.timeout_seconds = 30;
     out_watchers->push_back(obj);
@@ -60,35 +56,64 @@ int TestWatchNotify::list_watchers(const std::string& o,
 
 int TestWatchNotify::notify(const std::string& oid, bufferlist& bl,
                             uint64_t timeout_ms, bufferlist *pbl) {
-  Mutex lock("TestRadosClient::watcher_notify::lock");
-  Cond cond;
-  bool done = false;
+  uint64_t notify_id;
+  {
+    Mutex::Locker file_watcher_locker(m_file_watcher_lock);
+    ++m_pending_notifies;
+    notify_id = ++m_notify_id;
+  }
 
+  SharedNotifyHandle notify_handle(new NotifyHandle());
   {
     SharedWatcher watcher = get_watcher(oid);
-    RWLock::WLocker l(watcher->lock);
-    {
-      Mutex::Locker l2(m_file_watcher_lock);
-      ++m_pending_notifies;
-      uint64_t notify_id = ++m_notify_id;
+    RWLock::WLocker watcher_locker(watcher->lock);
+
+    WatchHandles watch_handles = watcher->watch_handles;
+    for (WatchHandles::iterator w_it = watch_handles.begin();
+         w_it != watch_handles.end(); ++w_it) {
+      WatchHandle &watch_handle = w_it->second;
+
+      Mutex::Locker notify_handle_locker(notify_handle->lock);
+      notify_handle->pending_watcher_ids.insert(std::make_pair(
+        watch_handle.gid, watch_handle.handle));
+    }
+
+    watcher->notify_handles[notify_id] = notify_handle;
+
+    FunctionContext *ctx = new FunctionContext(
+      boost::bind(&TestWatchNotify::execute_notify, this, oid, bl, notify_id));
+    m_finisher->queue(ctx);
+  }
+
+  {
+    utime_t timeout;
+    timeout.set_from_double(ceph_clock_now(m_cct) + (timeout_ms / 1000.0));
 
-      SharedNotifyHandle notify_handle(new NotifyHandle());
-      notify_handle->pbl = pbl;
+    Mutex::Locker notify_locker(notify_handle->lock);
+    while (!notify_handle->pending_watcher_ids.empty()) {
+      notify_handle->cond.WaitUntil(notify_handle->lock, timeout);
+    }
 
-      watcher->notify_handles[notify_id] = notify_handle;
+    if (pbl != NULL) {
+      ::encode(notify_handle->notify_responses, *pbl);
+      ::encode(notify_handle->pending_watcher_ids, *pbl);
+    }
+  }
 
-      FunctionContext *ctx = new FunctionContext(
-          boost::bind(&TestWatchNotify::execute_notify, this,
-                      oid, bl, notify_id, &lock, &cond, &done));
-      m_finisher->queue(ctx);
+  SharedWatcher watcher = get_watcher(oid);
+  Mutex::Locker file_watcher_locker(m_file_watcher_lock);
+  {
+    RWLock::WLocker watcher_locker(watcher->lock);
+
+    watcher->notify_handles.erase(notify_id);
+    if (watcher->watch_handles.empty() && watcher->notify_handles.empty()) {
+      m_file_watchers.erase(oid);
     }
   }
 
-  lock.Lock();
-  while (!done) {
-    cond.Wait(lock);
+  if (--m_pending_notifies == 0) {
+    m_file_watcher_cond.Signal();
   }
-  lock.Unlock();
   return 0;
 }
 
@@ -107,20 +132,24 @@ void TestWatchNotify::notify_ack(const std::string& o, uint64_t notify_id,
   response.append(bl);
 
   SharedNotifyHandle notify_handle = it->second;
-  Mutex::Locker l2(notify_handle->lock);
-  --notify_handle->pending_responses;
-  notify_handle->notify_responses[std::make_pair(gid, handle)] = response;
-  notify_handle->cond.Signal();
+  Mutex::Locker notify_handle_locker(notify_handle->lock);
+
+  WatcherID watcher_id = std::make_pair(gid, handle);
+  notify_handle->notify_responses[watcher_id] = response;
+  notify_handle->pending_watcher_ids.erase(watcher_id);
+  if (notify_handle->pending_watcher_ids.empty()) {
+    notify_handle->cond.Signal();
+  }
 }
 
-int TestWatchNotify::watch(const std::string& o, uint64_t instance_id,
+int TestWatchNotify::watch(const std::string& o, uint64_t gid,
                            uint64_t *handle, librados::WatchCtx *ctx,
                            librados::WatchCtx2 *ctx2) {
   SharedWatcher watcher = get_watcher(o);
 
   RWLock::WLocker l(watcher->lock);
   WatchHandle watch_handle;
-  watch_handle.instance_id = instance_id;
+  watch_handle.gid = gid;
   watch_handle.handle = ++m_handle;
   watch_handle.watch_ctx = ctx;
   watch_handle.watch_ctx2 = ctx2;
@@ -131,24 +160,21 @@ int TestWatchNotify::watch(const std::string& o, uint64_t instance_id,
 }
 
 int TestWatchNotify::unwatch(uint64_t handle) {
-
-  SharedWatcher watcher;
-  {
-    Mutex::Locker l(m_file_watcher_lock);
-    for (FileWatchers::iterator it = m_file_watchers.begin();
-         it != m_file_watchers.end(); ++it) {
-      if (it->second->watch_handles.find(handle) !=
-            it->second->watch_handles.end()) {
-        watcher = it->second;
-        break;
+  Mutex::Locker l(m_file_watcher_lock);
+  for (FileWatchers::iterator it = m_file_watchers.begin();
+       it != m_file_watchers.end(); ++it) {
+    SharedWatcher watcher = it->second;
+    RWLock::WLocker watcher_locker(watcher->lock);
+
+    WatchHandles::iterator w_it = watcher->watch_handles.find(handle);
+    if (w_it != watcher->watch_handles.end()) {
+      watcher->watch_handles.erase(w_it);
+      if (watcher->watch_handles.empty() && watcher->notify_handles.empty()) {
+        m_file_watchers.erase(it);
       }
+      break;
     }
   }
-
-  if (watcher) {
-    RWLock::WLocker l(watcher->lock);
-    watcher->watch_handles.erase(handle);
-  }
   return 0;
 }
 
@@ -168,65 +194,55 @@ TestWatchNotify::SharedWatcher TestWatchNotify::_get_watcher(
 }
 
 void TestWatchNotify::execute_notify(const std::string &oid,
-                                     bufferlist &bl, uint64_t notify_id,
-                                     Mutex *lock, Cond *cond,
-                                     bool *done) {
-  WatchHandles watch_handles;
-  SharedNotifyHandle notify_handle;
-
-  {
-    SharedWatcher watcher = get_watcher(oid);
-    RWLock::RLocker l(watcher->lock);
+                                     bufferlist &bl, uint64_t notify_id) {
+  SharedWatcher watcher = get_watcher(oid);
+  RWLock::RLocker watcher_locker(watcher->lock);
+  WatchHandles &watch_handles = watcher->watch_handles;
 
-    NotifyHandles::iterator n_it = watcher->notify_handles.find(notify_id);
-    if (n_it == watcher->notify_handles.end()) {
-      return;
-    }
-
-    watch_handles = watcher->watch_handles;
-    notify_handle = n_it->second;
+  NotifyHandles::iterator n_it = watcher->notify_handles.find(notify_id);
+  if (n_it == watcher->notify_handles.end()) {
+    return;
   }
 
-  utime_t timeout;
-  timeout.set_from_double(ceph_clock_now(m_cct) + 15);
-
-  for (WatchHandles::iterator w_it = watch_handles.begin();
-       w_it != watch_handles.end(); ++w_it) {
-    WatchHandle &watch_handle = w_it->second;
-
-    bufferlist notify_bl;
-    notify_bl.append(bl);
-    if (watch_handle.watch_ctx2 != NULL) {
-      {
-        Mutex::Locker l2(notify_handle->lock);
-        ++notify_handle->pending_responses;
+  SharedNotifyHandle notify_handle = n_it->second;
+  Mutex::Locker notify_handle_locker(notify_handle->lock);
+
+  WatcherIDs watcher_ids(notify_handle->pending_watcher_ids);
+  for (WatcherIDs::iterator w_id_it = watcher_ids.begin();
+       w_id_it != watcher_ids.end(); ++w_id_it) {
+    WatcherID watcher_id = *w_id_it;
+    WatchHandles::iterator w_it = watch_handles.find(watcher_id.second);
+    if (w_it == watch_handles.end()) {
+      notify_handle->pending_watcher_ids.erase(watcher_id);
+    } else {
+      WatchHandle &watch_handle = w_it->second;
+      assert(watch_handle.gid == watcher_id.first);
+      assert(watch_handle.handle == watcher_id.second);
+
+      bufferlist notify_bl;
+      notify_bl.append(bl);
+
+      notify_handle->lock.Unlock();
+      watcher->lock.put_read();
+      if (watch_handle.watch_ctx2 != NULL) {
+        watch_handle.watch_ctx2->handle_notify(notify_id, w_it->first, 0,
+                                               notify_bl);
+      } else if (watch_handle.watch_ctx != NULL) {
+        watch_handle.watch_ctx->notify(0, 0, notify_bl);
       }
-      watch_handle.watch_ctx2->handle_notify(notify_id, w_it->first, 0,
-                                             notify_bl);
-    } else if (watch_handle.watch_ctx != NULL) {
-      watch_handle.watch_ctx->notify(0, 0, notify_bl);
-    }
-  }
+      watcher->lock.get_read();
+      notify_handle->lock.Lock();
 
-  {
-    Mutex::Locker l2(notify_handle->lock);
-    while (notify_handle->pending_responses > 0) {
-      notify_handle->cond.WaitUntil(notify_handle->lock, timeout);
-    }
-    if (notify_handle->pbl != NULL) {
-      ::encode(notify_handle->notify_responses, *notify_handle->pbl);
+      if (watch_handle.watch_ctx2 == NULL) {
+        // auto ack old-style watch/notify clients
+        notify_handle->notify_responses[watcher_id] = bufferlist();
+        notify_handle->pending_watcher_ids.erase(watcher_id);
+      }
     }
   }
 
-  Mutex::Locker l3(*lock);
-  *done = true;
-  cond->Signal();
-
-  {
-    Mutex::Locker file_watcher_locker(m_file_watcher_lock);
-    if (--m_pending_notifies == 0) {
-      m_file_watcher_cond.Signal();
-    }
+  if (notify_handle->pending_watcher_ids.empty()) {
+    notify_handle->cond.Signal();
   }
 }
 
index 1761302bbf37bde86e16895f4fc1ccb263d22a22..7ff4b1afaaadf17b3e041d293f012cdb7339f612 100644 (file)
@@ -21,13 +21,14 @@ namespace librados {
 
 class TestWatchNotify : boost::noncopyable {
 public:
+  typedef std::pair<uint64_t, uint64_t> WatcherID;
+  typedef std::set<WatcherID> WatcherIDs;
   typedef std::map<std::pair<uint64_t, uint64_t>, bufferlist> NotifyResponses;
 
   struct NotifyHandle {
     NotifyHandle();
+    WatcherIDs pending_watcher_ids;
     NotifyResponses notify_responses;
-    bufferlist *pbl;
-    size_t pending_responses;
     Mutex lock;
     Cond cond;
   };
@@ -35,7 +36,7 @@ public:
   typedef std::map<uint64_t, SharedNotifyHandle> NotifyHandles;
 
   struct WatchHandle {
-    uint64_t instance_id;
+    uint64_t gid;
     uint64_t handle;
     librados::WatchCtx* watch_ctx;
     librados::WatchCtx2* watch_ctx2;
@@ -51,7 +52,7 @@ public:
   };
   typedef boost::shared_ptr<Watcher> SharedWatcher;
 
-  TestWatchNotify(CephContext *cct);
+  TestWatchNotify(CephContext *cct, Finisher *finisher);
   ~TestWatchNotify();
 
   void flush();
@@ -61,7 +62,7 @@ public:
              uint64_t timeout_ms, bufferlist *pbl);
   void notify_ack(const std::string& o, uint64_t notify_id,
                   uint64_t handle, uint64_t gid, bufferlist& bl);
-  int watch(const std::string& o, uint64_t instance_id, uint64_t *handle,
+  int watch(const std::string& o, uint64_t gid, uint64_t *handle,
             librados::WatchCtx *ctx, librados::WatchCtx2 *ctx2);
   int unwatch(uint64_t handle);
 
@@ -84,7 +85,7 @@ private:
   SharedWatcher get_watcher(const std::string& oid);
   SharedWatcher _get_watcher(const std::string& oid);
   void execute_notify(const std::string &oid, bufferlist &bl,
-                      uint64_t notify_id, Mutex *lock, Cond *cond, bool *done);
+                      uint64_t notify_id);
 
 };
 
index f48f081ccb922eaf224445f71695d75964dba46d..59981ea0c2fc3690767debed0ecdc83f4ddf59ba 100644 (file)
@@ -2276,6 +2276,46 @@ TEST_F(TestLibRBD, DiffIterateRegression6926)
   ASSERT_EQ(static_cast<size_t>(0), extents.size());
 }
 
+TEST_F(TestLibRBD, DiffIterateParentDiscard)
+{
+  REQUIRE_FEATURE(RBD_FEATURE_LAYERING);
+
+  librados::IoCtx ioctx;
+  ASSERT_EQ(0, this->_rados.ioctx_create(this->m_pool_name.c_str(), ioctx));
+
+  librbd::RBD rbd;
+  librbd::Image image;
+  std::string name = this->get_temp_image_name();
+  uint64_t size = 20 << 20;
+  int order = 0;
+
+  ASSERT_EQ(0, create_image_pp(rbd, ioctx, name.c_str(), size, &order));
+  ASSERT_EQ(0, rbd.open(ioctx, image, name.c_str(), NULL));
+
+  interval_set<uint64_t> exists;
+  interval_set<uint64_t> one;
+  scribble(image, 10, 102400, &exists, &one);
+  ASSERT_EQ(0, image.snap_create("one"));
+
+  ASSERT_EQ(1 << order, image.discard(0, 1 << order));
+  ASSERT_EQ(0, image.snap_create("two"));
+  ASSERT_EQ(0, image.snap_protect("two"));
+  exists.clear();
+  one.clear();
+
+  std::string clone_name = this->get_temp_image_name();
+  ASSERT_EQ(0, rbd.clone(ioctx, name.c_str(), "two", ioctx,
+                         clone_name.c_str(), RBD_FEATURE_LAYERING, &order));
+  ASSERT_EQ(0, rbd.open(ioctx, image, clone_name.c_str(), NULL));
+
+  interval_set<uint64_t> two;
+  scribble(image, 10, 102400, &exists, &two);
+
+  interval_set<uint64_t> diff;
+  ASSERT_EQ(0, image.diff_iterate(NULL, 0, size, iterate_cb, (void *)&diff));
+  ASSERT_TRUE(two.subset_of(diff));
+}
+
 TEST_F(TestLibRBD, ZeroLengthWrite)
 {
   rados_ioctx_t ioctx;
@@ -2360,7 +2400,7 @@ TEST_F(TestLibRBD, LargeCacheRead)
   rados_ioctx_t ioctx;
   rados_ioctx_create(_cluster, m_pool_name.c_str(), &ioctx);
 
-  uint32_t new_cache_size = 16777216;
+  uint32_t new_cache_size = 1 << 20;
   std::string orig_cache_size;
   ASSERT_EQ(0, _rados.conf_get("rbd_cache_size", orig_cache_size));
   ASSERT_EQ(0, _rados.conf_set("rbd_cache_size",
@@ -2372,24 +2412,22 @@ TEST_F(TestLibRBD, LargeCacheRead)
   } BOOST_SCOPE_EXIT_END;
 
   rbd_image_t image;
-  int order = 0;
-  const char *name = "testimg";
-  uint64_t size = new_cache_size + 1;
+  int order = 21;
+  std::string name = get_temp_image_name();
+  uint64_t size = 1 << order;
 
-  ASSERT_EQ(0, create_image(ioctx, name, size, &order));
-  ASSERT_EQ(0, rbd_open(ioctx, name, &image, NULL));
+  ASSERT_EQ(0, create_image(ioctx, name.c_str(), size, &order));
+  ASSERT_EQ(0, rbd_open(ioctx, name.c_str(), &image, NULL));
 
   std::string buffer(1 << order, '1');
-  for (size_t offs = 0; offs < size; offs += buffer.size()) {
-    size_t len = std::min<uint64_t>(buffer.size(), size - offs);
-    ASSERT_EQ(static_cast<ssize_t>(len),
-             rbd_write(image, offs, len, buffer.c_str()));
-  }
+  ASSERT_EQ(static_cast<ssize_t>(buffer.size()),
+           rbd_write(image, 0, buffer.size(), buffer.c_str()));
 
   ASSERT_EQ(0, rbd_invalidate_cache(image));
 
-  buffer.resize(size);
-  ASSERT_EQ(static_cast<ssize_t>(size-1024), rbd_read(image, 1024, size, &buffer[0]));
+  ASSERT_EQ(static_cast<ssize_t>(buffer.size()), 
+           rbd_read(image, 0, buffer.size(), &buffer[0]));
 
   ASSERT_EQ(0, rbd_close(image));
 
@@ -2464,8 +2502,12 @@ TEST_F(TestLibRBD, SnapCreateViaLockOwner)
   librbd::Image image1;
   ASSERT_EQ(0, rbd.open(ioctx, image1, name.c_str(), NULL));
 
+  // switch to writeback cache
+  ASSERT_EQ(0, image1.flush());
+
   bufferlist bl;
-  ASSERT_EQ(0, image1.write(0, 0, bl));
+  bl.append(std::string(4096, '1'));
+  ASSERT_EQ(bl.length(), image1.write(0, bl.length(), bl));
 
   bool lock_owner;
   ASSERT_EQ(0, image1.is_exclusive_lock_owner(&lock_owner));
@@ -2637,7 +2679,13 @@ TEST_F(TestLibRBD, BlockingAIO)
   int order = 18;
   ASSERT_EQ(0, create_image_pp(rbd, ioctx, name.c_str(), size, &order));
 
+  std::string non_blocking_aio;
+  ASSERT_EQ(0, _rados.conf_get("rbd_non_blocking_aio", non_blocking_aio));
   ASSERT_EQ(0, _rados.conf_set("rbd_non_blocking_aio", "0"));
+  BOOST_SCOPE_EXIT( (non_blocking_aio) ) {
+    ASSERT_EQ(0, _rados.conf_set("rbd_non_blocking_aio",
+                                 non_blocking_aio.c_str()));
+  } BOOST_SCOPE_EXIT_END;
 
   librbd::Image image;
   ASSERT_EQ(0, rbd.open(ioctx, image, name.c_str(), NULL));
@@ -2786,3 +2834,34 @@ TEST_F(TestLibRBD, CacheMayCopyOnWrite) {
   ASSERT_EQ(1024, clone.read(offset + 2048, 1024, read_bl));
   ASSERT_TRUE(expect_bl.contents_equal(read_bl));
 }
+
+TEST_F(TestLibRBD, FlushEmptyOpsOnExternalSnapshot) {
+  std::string cache_enabled;
+  ASSERT_EQ(0, _rados.conf_get("rbd_cache", cache_enabled));
+  ASSERT_EQ(0, _rados.conf_set("rbd_cache", "false"));
+  BOOST_SCOPE_EXIT( (cache_enabled) ) {
+    ASSERT_EQ(0, _rados.conf_set("rbd_cache", cache_enabled.c_str()));
+  } BOOST_SCOPE_EXIT_END;
+
+  librados::IoCtx ioctx;
+  ASSERT_EQ(0, _rados.ioctx_create(m_pool_name.c_str(), ioctx));
+
+  librbd::RBD rbd;
+  std::string name = get_temp_image_name();
+  uint64_t size = 1 << 18;
+  int order = 0;
+  ASSERT_EQ(0, create_image_pp(rbd, ioctx, name.c_str(), size, &order));
+
+  librbd::Image image1;
+  librbd::Image image2;
+  ASSERT_EQ(0, rbd.open(ioctx, image1, name.c_str(), NULL));
+  ASSERT_EQ(0, rbd.open(ioctx, image2, name.c_str(), NULL));
+  ASSERT_EQ(0, image1.snap_create("snap1"));
+
+  librbd::RBD::AioCompletion *read_comp =
+    new librbd::RBD::AioCompletion(NULL, NULL);
+  bufferlist read_bl;
+  image2.aio_read(0, 1024, read_bl, read_comp);
+  ASSERT_EQ(0, read_comp->wait_for_complete());
+  read_comp->release();
+}
index 9f7a6b2d0b1fe818542e5af265b3a0e1dfdc0b4c..f13fa8936669c6017f9f3e858ef5afb401b7a4eb 100644 (file)
@@ -81,7 +81,40 @@ TEST(pgmap, min_last_epoch_clean)
 
 }
 
-
+TEST(pgmap, calc_stats)
+{
+  bufferlist bl;
+  {
+    PGMap pg_map;
+    PGMap::Incremental inc;
+    osd_stat_t os;
+    pg_stat_t ps;
+
+    ps.last_epoch_clean = 999;
+    inc.pg_stat_updates[pg_t(9,9)] = ps;
+    inc.version = 1;
+    inc.update_stat(0, 123, os);
+    pg_map.apply_incremental(g_ceph_context, inc);
+    ASSERT_EQ(123u, pg_map.get_min_last_epoch_clean());
+    pg_map.encode(bl);
+  }
+  {
+    PGMap pg_map;
+    PGMap::Incremental inc;
+    osd_stat_t os;
+    pg_stat_t ps;
+
+    ps.last_epoch_clean = 999;
+    inc.pg_stat_updates[pg_t(9,9)] = ps;
+    inc.version = 1;
+    inc.update_stat(0, 321, os);
+    pg_map.apply_incremental(g_ceph_context, inc);
+    ASSERT_EQ(321u, pg_map.get_min_last_epoch_clean());
+    bufferlist::iterator p = bl.begin();
+    ::decode(pg_map, p);
+    ASSERT_EQ(123u, pg_map.get_min_last_epoch_clean());
+  }
+}
 
 int main(int argc, char **argv) {
   vector<const char*> args;
index cb3419c53acdcf62043829591bdc764d7830bd55..e18906d19314892b316e127171e004a5c42fe341 100644 (file)
@@ -244,8 +244,7 @@ class ClientStub : public TestStub
       return err;
     }
 
-    messenger.reset(Messenger::create(cct, cct->_conf->ms_type, entity_name_t::CLIENT(-1),
-                                     "stubclient", getpid()));
+    messenger.reset(Messenger::create_client_messenger(cct, "stubclient"));
     assert(messenger.get() != NULL);
 
     messenger->set_default_policy(
index c5ff040eaf07310577f40dcb229fe12ada35af7f..68dd2b18c586549a3c8ac0b2c17cbaac0708883c 100644 (file)
@@ -182,3 +182,43 @@ bool ObjectDesc::check(bufferlist &to_check) {
   }
   return true;
 }
+
+bool ObjectDesc::check_sparse(const std::map<uint64_t, uint64_t>& extents,
+                             bufferlist &to_check) {
+  iterator i = begin();
+  bufferlist::iterator p = to_check.begin();
+  uint64_t pos = 0;
+  for (std::map<uint64_t, uint64_t>::const_iterator extent = extents.begin();
+       extent != extents.end();
+       ++extent) {
+    const uint64_t start = extent->first;
+    const uint64_t end = start + extent->second;
+    for (; pos < end; ++i, ++pos) {
+      if (i.end()) {
+       std::cout << "reached end of iterator first" << std::endl;
+       return false;
+      }
+      if (pos < start) {
+       // check the hole
+       if (*i != '\0') {
+         std::cout << "incorrect buffer at pos " << pos << std::endl;
+         return false;
+       }
+      } else {
+       // then the extent
+       if (*i != *p) {
+         std::cout << "incorrect buffer at pos " << pos << std::endl;
+         return false;
+       }
+       ++p;
+      }
+    }
+  }
+  uint64_t size = layers.empty() ? 0 :
+    most_recent_gen()->get_length(most_recent());
+  if (pos != size) {
+    std::cout << "only read " << pos << " out of size " << size << std::endl;
+    return false;
+  }
+  return true;
+}
index bffb397cfb667af5d564fcd05430938b7ae52c32..feeefebe8dd99782542a3f95aae42897321349fb 100644 (file)
@@ -358,6 +358,8 @@ public:
   // takes ownership of gen
   void update(ContentsGenerator *gen, const ContDesc &next);
   bool check(bufferlist &to_check);
+  bool check_sparse(const std::map<uint64_t, uint64_t>& extends,
+                   bufferlist &to_check);
   const ContDesc &most_recent();
   ContentsGenerator *most_recent_gen() {
     return layers.begin()->first.get();
index 8d6889edb4c1b180c2db077c45a3fbd07e128545..46a936e5996755dfd45207f5b98b8a3d54e88990 100644 (file)
@@ -983,6 +983,8 @@ public:
 
   bufferlist result;
   int retval;
+  std::map<uint64_t, uint64_t> extent_result;
+  bool is_sparse_read;
 
   map<string, bufferlist> attrs;
   int attrretval;
@@ -1003,9 +1005,10 @@ public:
       oid(oid),
       snap(0),
       retval(0),
+      is_sparse_read(false),
       attrretval(0)
   {}
-               
+  
   void _begin()
   {
     context->state_lock.Lock();
@@ -1049,11 +1052,23 @@ public:
       context->io_ctx.snap_set_read(context->snaps[snap]);
     }
 
-    op.read(0,
-           !old_value.has_contents() ? 0 :
-           old_value.most_recent_gen()->get_length(old_value.most_recent()),
-           &result,
-           &retval);
+    uint64_t read_len = 0;
+    if (old_value.has_contents())
+      read_len = old_value.most_recent_gen()->get_length(old_value.most_recent());
+    if (rand() % 2) {
+      is_sparse_read = false;
+      op.read(0,
+             read_len,
+             &result,
+             &retval);
+    } else {
+      is_sparse_read = true;
+      op.sparse_read(0,
+                    read_len,
+                    &extent_result,
+                    &result,
+                    &retval);
+    }
 
     for (map<string, ContDesc>::iterator i = old_value.attrs.begin();
         i != old_value.attrs.end();
@@ -1122,9 +1137,16 @@ public:
               << ", expected " << old_value.most_recent() << std::endl;
          context->errors++;
        }
-       if (!old_value.check(result)) {
-         cerr << num << ": oid " << oid << " contents " << to_check << " corrupt" << std::endl;
-         context->errors++;
+       if (is_sparse_read) {
+         if (!old_value.check_sparse(extent_result, result)) {
+           cerr << num << ": oid " << oid << " contents " << to_check << " corrupt" << std::endl;
+           context->errors++;
+         }
+       } else {
+         if (!old_value.check(result)) {
+           cerr << num << ": oid " << oid << " contents " << to_check << " corrupt" << std::endl;
+           context->errors++;
+         }
        }
        if (context->errors) assert(0);
       }
index 633c5fb43cf307391944adc687007a7dfa720dab..24146875a271ad58ed3e9a23c6fd65f7ece8ee7c 100644 (file)
 #include <stdint.h>
 #include <boost/foreach.hpp>
 #include <cstdarg>
-#include "rbd_replay/Deser.hpp"
 #include "rbd_replay/ImageNameMap.hpp"
 #include "rbd_replay/ios.hpp"
 #include "rbd_replay/rbd_loc.hpp"
-#include "rbd_replay/Ser.hpp"
 
 
 using namespace rbd_replay;
@@ -38,41 +36,6 @@ static void add_mapping(ImageNameMap *map, std::string mapping_string) {
   map->add_mapping(mapping);
 }
 
-TEST(RBDReplay, Ser) {
-  std::ostringstream oss;
-  rbd_replay::Ser ser(oss);
-  ser.write_uint32_t(0x01020304u);
-  ser.write_string("hello");
-  ser.write_bool(true);
-  ser.write_bool(false);
-  std::string s(oss.str());
-  const char* data = s.data();
-  size_t size = s.size();
-  ASSERT_EQ(15U, size);
-  const char expected_data[] = {1, 2, 3, 4, 0, 0, 0, 5, 'h', 'e', 'l', 'l', 'o', 1, 0};
-  for (size_t i = 0; i < size; i++) {
-    EXPECT_EQ(expected_data[i], data[i]);
-  }
-}
-
-TEST(RBDReplay, Deser) {
-  const char data[] = {1, 2, 3, 4, 0, 0, 0, 5, 'h', 'e', 'l', 'l', 'o', 1, 0};
-  const std::string s(data, sizeof(data));
-  std::istringstream iss(s);
-  rbd_replay::Deser deser(iss);
-  EXPECT_FALSE(deser.eof());
-  EXPECT_EQ(0x01020304u, deser.read_uint32_t());
-  EXPECT_FALSE(deser.eof());
-  EXPECT_EQ("hello", deser.read_string());
-  EXPECT_FALSE(deser.eof());
-  EXPECT_TRUE(deser.read_bool());
-  EXPECT_FALSE(deser.eof());
-  EXPECT_FALSE(deser.read_bool());
-  EXPECT_FALSE(deser.eof());
-  deser.read_uint8_t();
-  EXPECT_TRUE(deser.eof());
-}
-
 TEST(RBDReplay, ImageNameMap) {
   ImageNameMap m;
   add_mapping(&m, "x@y=y@x");
@@ -169,57 +132,3 @@ TEST(RBDReplay, rbd_loc_parse) {
   EXPECT_FALSE(m.parse("a@b/c"));
 }
 
-static IO::ptr mkio(action_id_t ionum, int num_expected, ...) {
-  IO::ptr io(new StartThreadIO(ionum, ionum, 0));
-
-  va_list ap;
-  va_start(ap, num_expected);
-  for (int i = 0; i < num_expected ; i++) {
-    IO::ptr* dep = va_arg(ap, IO::ptr*);
-    if (!dep) {
-      break;
-    }
-    io->dependencies().insert(*dep);
-  }
-  va_end(ap);
-
-  return io;
-}
-
-TEST(RBDReplay, batch_unreachable_from) {
-  io_set_t deps;
-  io_set_t base;
-  io_set_t unreachable;
-  IO::ptr io1(mkio(1, 0));
-  IO::ptr io2(mkio(2, 1, &io1));
-  IO::ptr io3(mkio(3, 1, &io2));
-  IO::ptr io4(mkio(4, 1, &io1));
-  IO::ptr io5(mkio(5, 2, &io2, &io4));
-  IO::ptr io6(mkio(6, 2, &io3, &io5));
-  IO::ptr io7(mkio(7, 1, &io4));
-  IO::ptr io8(mkio(8, 2, &io5, &io7));
-  IO::ptr io9(mkio(9, 2, &io6, &io8));
-  // 1 (deps) <-- 2 (deps) <-- 3 (deps)
-  // ^            ^            ^
-  // |            |            |
-  // 4 <--------- 5 (base) <-- 6 (deps)
-  // ^            ^            ^
-  // |            |            |
-  // 7 <--------- 8 <--------- 9
-  deps.insert(io1);
-  deps.insert(io2);
-  deps.insert(io3);
-  deps.insert(io6);
-  base.insert(io5);
-  // Anything in 'deps' which is not reachable from 'base' is added to 'unreachable'
-  batch_unreachable_from(deps, base, &unreachable);
-  EXPECT_EQ(0U, unreachable.count(io1));
-  EXPECT_EQ(0U, unreachable.count(io2));
-  EXPECT_EQ(1U, unreachable.count(io3));
-  EXPECT_EQ(0U, unreachable.count(io4));
-  EXPECT_EQ(0U, unreachable.count(io5));
-  EXPECT_EQ(1U, unreachable.count(io6));
-  EXPECT_EQ(0U, unreachable.count(io7));
-  EXPECT_EQ(0U, unreachable.count(io8));
-  EXPECT_EQ(0U, unreachable.count(io9));
-}
index 744000eba872e1e230284c44d208f41a2a33a201..c37c3af529359d6d63bafb9488d4055e040a677f 100644 (file)
@@ -12,6 +12,7 @@
 */
 #include <boost/program_options/variables_map.hpp>
 #include <boost/program_options/parsers.hpp>
+#include <boost/scope_exit.hpp>
 
 #include <stdlib.h>
 #include <string>
 #include "include/stringify.h"
 #include "mon/MonitorDBStore.h"
 #include "mon/Paxos.h"
+#include "mon/MonMap.h"
+#include "mds/MDSMap.h"
+#include "osd/OSDMap.h"
+#include "crush/CrushCompiler.h"
 
 namespace po = boost::program_options;
 using namespace std;
@@ -164,6 +169,8 @@ int parse_cmd_args(
  *  dump-trace < --trace-file arg >
  *  replay-trace
  *  random-gen
+ *  rewrite-crush
+ *  inflate-pgmap
  *
  * wanted syntax:
  *
@@ -192,6 +199,10 @@ void usage(const char *n, po::options_description &d)
   << "                                  (default: last committed)\n"
   << "  get mdsmap [-- options]         get mdsmap (version VER if specified)\n"
   << "                                  (default: last committed)\n"
+  << "  get crushmap [-- options]       get crushmap (version VER if specified)\n"
+  << "                                  (default: last committed)\n"
+  << "  show-versions [-- options]      show the first&last committed version of map\n"
+  << "                                  (show-versions -- --help for more info)\n"
   << "  dump-keys                       dumps store keys to FILE\n"
   << "                                  (default: stdout)\n"
   << "  dump-paxos [-- options]         dump paxos transactions\n"
@@ -202,6 +213,10 @@ void usage(const char *n, po::options_description &d)
   << "                                  (replay-trace -- --help for more info)\n"
   << "  random-gen [-- options]         add randomly generated ops to the store\n"
   << "                                  (random-gen -- --help for more info)\n"
+  << "  rewrite-crush [-- options]      add a rewrite commit to the store\n"
+  << "                                  (rewrite-crush -- --help for more info)\n"
+  << "  inflate-pgmap [-- options]      add given number of pgmaps to store\n"
+  << "                                  (inflate-pgmap -- --help for more info)\n"
   << std::endl;
   std::cerr << d << std::endl;
   std::cerr
@@ -213,6 +228,287 @@ void usage(const char *n, po::options_description &d)
     << std::endl;
 }
 
+int update_osdmap(MonitorDBStore& store, version_t ver, bool copy,
+                 ceph::shared_ptr<CrushWrapper> crush,
+                 MonitorDBStore::Transaction* t) {
+  const string prefix("osdmap");
+
+  // full
+  bufferlist bl;
+  int r = 0;
+  r = store.get(prefix, store.combine_strings("full", ver), bl);
+  if (r) {
+    std::cerr << "Error getting full map: " << cpp_strerror(r) << std::endl;
+    return r;
+  }
+  OSDMap osdmap;
+  osdmap.decode(bl);
+  osdmap.crush = crush;
+  if (copy) {
+    osdmap.inc_epoch();
+  }
+  bl.clear();
+  // be consistent with OSDMonitor::update_from_paxos()
+  osdmap.encode(bl, CEPH_FEATURES_ALL|CEPH_FEATURE_RESERVED);
+  t->put(prefix, store.combine_strings("full", osdmap.get_epoch()), bl);
+
+  // incremental
+  OSDMap::Incremental inc;
+  if (copy) {
+    inc.epoch = osdmap.get_epoch();
+    inc.fsid = osdmap.get_fsid();
+  } else {
+    bl.clear();
+    r = store.get(prefix, ver, bl);
+    if (r) {
+      std::cerr << "Error getting inc map: " << cpp_strerror(r) << std::endl;
+      return r;
+    }
+    OSDMap::Incremental inc(bl);
+    if (inc.crush.length()) {
+      inc.crush.clear();
+      crush->encode(inc.crush);
+    }
+    if (inc.fullmap.length()) {
+      OSDMap fullmap;
+      fullmap.decode(inc.fullmap);
+      fullmap.crush = crush;
+      inc.fullmap.clear();
+      fullmap.encode(inc.fullmap);
+    }
+  }
+  assert(osdmap.have_crc());
+  inc.full_crc = osdmap.get_crc();
+  bl.clear();
+  // be consistent with OSDMonitor::update_from_paxos()
+  inc.encode(bl, CEPH_FEATURES_ALL|CEPH_FEATURE_RESERVED);
+  t->put(prefix, inc.epoch, bl);
+  return 0;
+}
+
+int rewrite_transaction(MonitorDBStore& store, int version,
+                       const string& crush_file,
+                       MonitorDBStore::Transaction* t) {
+  const string prefix("osdmap");
+
+  // calc the known-good epoch
+  version_t last_committed = store.get(prefix, "last_committed");
+  version_t good_version = 0;
+  if (version <= 0) {
+    if (last_committed >= (unsigned)-version) {
+      good_version = last_committed + version;
+    } else {
+      std::cerr << "osdmap-version is less than: -" << last_committed << std::endl;
+      return EINVAL;
+    }
+  } else {
+    good_version = version;
+  }
+  if (good_version >= last_committed) {
+    std::cout << "good epoch is greater or equal to the last committed one: "
+             << good_version << " >= " << last_committed << std::endl;
+    return 0;
+  }
+
+  // load/extract the crush map
+  int r = 0;
+  ceph::shared_ptr<CrushWrapper> crush(new CrushWrapper);
+  if (crush_file.empty()) {
+    bufferlist bl;
+    r = store.get(prefix, store.combine_strings("full", good_version), bl);
+    if (r) {
+      std::cerr << "Error getting map: " << cpp_strerror(r) << std::endl;
+      return r;
+    }
+    OSDMap osdmap;
+    osdmap.decode(bl);
+    crush = osdmap.crush;
+  } else {
+    string err;
+    bufferlist bl;
+    r = bl.read_file(crush_file.c_str(), &err);
+    if (r) {
+      std::cerr << err << ": " << cpp_strerror(r) << std::endl;
+      return r;
+    }
+    bufferlist::iterator p = bl.begin();
+    crush->decode(p);
+  }
+
+  // prepare a transaction to rewrite the epochs
+  // (good_version, last_committed]
+  // with the good crush map.
+  // XXX: may need to break this into several paxos versions?
+  assert(good_version < last_committed);
+  for (version_t v = good_version + 1; v <= last_committed; v++) {
+    cout << "rewriting epoch #" << v << "/" << last_committed << std::endl;
+    r = update_osdmap(store, v, false, crush, t);
+    if (r)
+      return r;
+  }
+
+  // add a new osdmap epoch to store, so monitors will update their current osdmap
+  // in addition to the ones stored in epochs.
+  //
+  // This is needed due to the way the monitor updates from paxos and the
+  // facilities we are leveraging to push this update to the rest of the
+  // quorum.
+  //
+  // In a nutshell, we are generating a good version of the osdmap, with a
+  // proper crush, and building a transaction that will replace the bad
+  // osdmaps with good osdmaps. But this transaction needs to be applied on
+  // all nodes, so that the monitors will have good osdmaps to share with
+  // clients. We thus leverage Paxos, specifically the recovery mechanism, by
+  // creating a pending value that will be committed once the monitors form an
+  // initial quorum after being brought back to life.
+  //
+  // However, the way the monitor works has the paxos services, including the
+  // OSDMonitor, updating their state from disk *prior* to the recovery phase
+  // begins (so they have an up to date state in memory). This means the
+  // OSDMonitor will see the old, broken map, before the new paxos version is
+  // applied to disk, and the old version is cached. Even though we have the
+  // good map now, and we share the good map with clients, we will still be
+  // working on the old broken map. Instead of mucking around the monitor to
+  // make this work, we instead opt for adding the same osdmap but with a
+  // newer version, so that the OSDMonitor picks up on it when it updates from
+  // paxos after the proposal has been committed. This is not elegant, but
+  // avoids further unpleasantness that would arise from kludging around the
+  // current behavior. Also, has the added benefit of making sure the clients
+  // get an updated version of the map (because last_committed+1 >
+  // last_committed) :)
+  //
+  cout << "adding a new epoch #" << last_committed+1 << std::endl;
+  r = update_osdmap(store, last_committed++, true, crush, t);
+  if (r)
+    return r;
+  t->put(prefix, store.combine_strings("full", "latest"), last_committed);
+  t->put(prefix, "last_committed", last_committed);
+  return 0;
+}
+
+/**
+ * create a new paxos version which carries a proposal to rewrite all epochs
+ * of incremental and full map of "osdmap" after a faulty crush map is injected.
+ * so the leader will trigger a recovery and propagate this fix to its peons,
+ * after the proposal is accepted, and the transaction in it is applied. all
+ * monitors will rewrite the bad crush map with the good one, and have a new
+ * osdmap epoch with the good crush map in it.
+ */
+int rewrite_crush(const char* progname,
+                 vector<string>& subcmds,
+                 MonitorDBStore& store) {
+  po::options_description op_desc("Allowed 'rewrite-crush' options");
+  int version = -1;
+  string crush_file;
+  op_desc.add_options()
+    ("help,h", "produce this help message")
+    ("crush", po::value<string>(&crush_file),
+     ("path to the crush map file "
+      "(default: will instead extract it from the known-good osdmap)"))
+    ("good-epoch", po::value<int>(&version),
+     "known-good epoch of osdmap, if a negative number '-N' is given, the "
+     "$last_committed-N is used instead (default: -1). "
+     "Please note, -1 is not necessarily a good epoch, because there are "
+     "good chance that we have more epochs slipped into the monstore after "
+     "the one where the crushmap is firstly injected.")
+    ;
+  po::variables_map op_vm;
+  int r = parse_cmd_args(&op_desc, NULL, NULL, subcmds, &op_vm);
+  if (r) {
+    return -r;
+  }
+  if (op_vm.count("help")) {
+    usage(progname, op_desc);
+    return 0;
+  }
+
+  MonitorDBStore::Transaction rewrite_txn;
+  r = rewrite_transaction(store, version, crush_file, &rewrite_txn);
+  if (r) {
+    return r;
+  }
+
+  // store the transaction into store as a proposal
+  const string prefix("paxos");
+  version_t pending_v = store.get(prefix, "last_committed") + 1;
+  MonitorDBStore::TransactionRef t(new MonitorDBStore::Transaction);
+  bufferlist bl;
+  rewrite_txn.encode(bl);
+  cout << "adding pending commit " << pending_v
+       << " " << bl.length() << " bytes" << std::endl;
+  t->put(prefix, pending_v, bl);
+  t->put(prefix, "pending_v", pending_v);
+  // a large enough yet unique proposal number will probably do the trick
+  version_t pending_pn = (store.get(prefix, "accepted_pn") / 100 + 4) * 100 + 1;
+  t->put(prefix, "pending_pn", pending_pn);
+  store.apply_transaction(t);
+  return 0;
+}
+
+int inflate_pgmap(MonitorDBStore& st, unsigned n, bool can_be_trimmed) {
+  // put latest pg map into monstore to bloat it up
+  // only format version == 1 is supported
+  version_t last = st.get("pgmap", "last_committed");
+  bufferlist bl;
+
+  // get the latest delta
+  int r = st.get("pgmap", last, bl);
+  if (r) {
+    std::cerr << "Error getting pgmap: " << cpp_strerror(r) << std::endl;
+    return r;
+  }
+
+  // try to pull together an idempotent "delta"
+  ceph::unordered_map<pg_t, pg_stat_t> pg_stat;
+  for (KeyValueDB::Iterator i = st.get_iterator("pgmap_pg");
+       i->valid(); i->next()) {
+    pg_t pgid;
+    if (!pgid.parse(i->key().c_str())) {
+      std::cerr << "unable to parse key " << i->key() << std::endl;
+      continue;
+    }
+    bufferlist pg_bl = i->value();
+    pg_stat_t ps;
+    bufferlist::iterator p = pg_bl.begin();
+    ::decode(ps, p);
+    // will update the last_epoch_clean of all the pgs.
+    pg_stat[pgid] = ps;
+  }
+
+  version_t first = st.get("pgmap", "first_committed");
+  version_t ver = last;
+  MonitorDBStore::TransactionRef txn(new MonitorDBStore::Transaction);
+  for (unsigned i = 0; i < n; i++) {
+    bufferlist trans_bl;
+    bufferlist dirty_pgs;
+    for (ceph::unordered_map<pg_t, pg_stat_t>::iterator ps = pg_stat.begin();
+        ps != pg_stat.end(); ++ps) {
+      ::encode(ps->first, dirty_pgs);
+      if (!can_be_trimmed) {
+       ps->second.last_epoch_clean = first;
+      }
+      ::encode(ps->second, dirty_pgs);
+    }
+    utime_t inc_stamp = ceph_clock_now(NULL);
+    ::encode(inc_stamp, trans_bl);
+    ::encode_destructively(dirty_pgs, trans_bl);
+    bufferlist dirty_osds;
+    ::encode(dirty_osds, trans_bl);
+    txn->put("pgmap", ++ver, trans_bl);
+    // update the db in batch
+    if (txn->size() > 1024) {
+      st.apply_transaction(txn);
+      // reset the transaction
+      txn.reset(new MonitorDBStore::Transaction);
+    }
+  }
+  txn->put("pgmap", "last_committed", ver);
+  txn->put("pgmap_meta", "version", ver);
+  // this will also piggy back the leftover pgmap added in the loop above
+  st.apply_transaction(txn);
+  return 0;
+}
+
 int main(int argc, char **argv) {
   int err = 0;
   po::options_description desc("Allowed options");
@@ -330,6 +626,7 @@ int main(int argc, char **argv) {
   } else if (cmd == "get") {
     unsigned v = 0;
     string outpath;
+    bool readable = false;
     string map_type;
     // visible options for this command
     po::options_description op_desc("Allowed 'get' options");
@@ -339,6 +636,8 @@ int main(int argc, char **argv) {
        "output file (default: stdout)")
       ("version,v", po::value<unsigned>(&v),
        "map version to obtain")
+      ("readable,r", po::value<bool>(&readable)->default_value(false),
+       "print the map infomation in human readable format")
       ;
     // this is going to be a positional argument; we don't want to show
     // it as an option during --help, but we do want to have it captured
@@ -366,7 +665,11 @@ int main(int argc, char **argv) {
     }
 
     if (v == 0) {
-      v = st.get(map_type, "last_committed");
+      if (map_type == "crushmap") {
+        v = st.get("osdmap", "last_committed");
+      } else {
+        v = st.get(map_type, "last_committed");
+      }
     }
 
     int fd = STDOUT_FILENO;
@@ -380,26 +683,100 @@ int main(int argc, char **argv) {
       }
     }
 
+    BOOST_SCOPE_EXIT((&r) (&fd) (&outpath)) {
+      ::close(fd);
+      if (r < 0 && fd != STDOUT_FILENO) {
+        ::remove(outpath.c_str());
+      }
+    } BOOST_SCOPE_EXIT_END
+
     bufferlist bl;
     r = 0;
     if (map_type == "osdmap") {
       r = st.get(map_type, st.combine_strings("full", v), bl);
+    } else if (map_type == "crushmap") {
+      bufferlist tmp;
+      r = st.get("osdmap", st.combine_strings("full", v), tmp);
+      OSDMap osdmap;
+      osdmap.decode(tmp);
+      osdmap.crush->encode(bl);
     } else {
       r = st.get(map_type, v, bl);
     }
     if (r < 0) {
       std::cerr << "Error getting map: " << cpp_strerror(r) << std::endl;
       err = EINVAL;
-      ::close(fd);
       goto done;
     }
-    bl.write_fd(fd);
+
+    if (readable) {
+      stringstream ss;
+      bufferlist out;
+      if (map_type == "monmap") {
+        MonMap monmap;
+        monmap.decode(bl);
+        monmap.print(ss);
+      } else if (map_type == "osdmap") {
+        OSDMap osdmap;
+        osdmap.decode(bl);
+        osdmap.print(ss);
+      } else if (map_type == "mdsmap") {
+        MDSMap mdsmap;
+        mdsmap.decode(bl);
+        mdsmap.print(ss);
+      } else if (map_type == "crushmap") {
+        CrushWrapper cw;
+        bufferlist::iterator it = bl.begin();
+        cw.decode(it);
+        CrushCompiler cc(cw, std::cerr, 0);
+        cc.decompile(ss);
+      } else {
+        std::cerr << "This type of readable map does not exist: " << map_type << std::endl
+                  << "You can only specify[osdmap|monmap|mdsmap|crushmap]" << std::endl;
+      }
+      out.append(ss);
+      out.write_fd(fd);
+    } else {
+      bl.write_fd(fd);
+    }
 
     if (!outpath.empty()) {
       std::cout << "wrote " << map_type
                 << " version " << v << " to " << outpath
                 << std::endl;
     }
+  } else if (cmd == "show-versions") {
+    string map_type; //map type:osdmap,monmap...
+    // visible options for this command
+    po::options_description op_desc("Allowed 'show-versions' options");
+    op_desc.add_options()
+      ("help,h", "produce this help message")
+      ("map-type", po::value<string>(&map_type), "map_type");
+
+    po::positional_options_description op_positional;
+    op_positional.add("map-type", 1);
+
+    po::variables_map op_vm;
+    int r = parse_cmd_args(&op_desc, NULL, &op_positional,
+                           subcmds, &op_vm);
+    if (r < 0) {
+      err = -r;
+      goto done;
+    }
+
+    if (op_vm.count("help") || map_type.empty()) {
+      usage(argv[0], op_desc);
+      err = 0;
+      goto done;
+    }
+
+    unsigned int v_first = 0;
+    unsigned int v_last = 0;
+    v_first = st.get(map_type, "first_committed");
+    v_last = st.get(map_type, "last_committed");
+
+    std::cout << "first committed:\t" << v_first << "\n"
+              << "last  committed:\t" << v_last << std::endl;
   } else if (cmd == "dump-paxos") {
     unsigned dstart = 0;
     unsigned dstop = ~0;
@@ -686,12 +1063,37 @@ int main(int argc, char **argv) {
                 << stringify(si_t(total_size)) << ")" << std::endl;
 
     } while (it->valid());
-
+    out_store.close();
     std::cout << "summary: copied " << total_keys << " keys, using "
               << total_tx << " transactions, totalling "
               << stringify(si_t(total_size)) << std::endl;
     std::cout << "from '" << store_path << "' to '" << out_path << "'"
               << std::endl;
+  } else if (cmd == "rewrite-crush") {
+    err = rewrite_crush(argv[0], subcmds, st);
+  } else if (cmd == "inflate-pgmap") {
+    unsigned n = 2000;
+    bool can_be_trimmed = false;
+    po::options_description op_desc("Allowed 'inflate-pgmap' options");
+    op_desc.add_options()
+      ("num-maps,n", po::value<unsigned>(&n),
+       "number of maps to add (default: 2000)")
+      ("can-be-trimmed", po::value<bool>(&can_be_trimmed),
+       "can be trimmed (default: false)")
+      ;
+
+    po::variables_map op_vm;
+    try {
+      po::parsed_options op_parsed = po::command_line_parser(subcmds).
+        options(op_desc).run();
+      po::store(op_parsed, op_vm);
+      po::notify(op_vm);
+    } catch (po::error &e) {
+      std::cerr << "error: " << e.what() << std::endl;
+      err = EINVAL;
+      goto done;
+    }
+    err = inflate_pgmap(st, n, can_be_trimmed);
   } else {
     std::cerr << "Unrecognized command: " << cmd << std::endl;
     usage(argv[0], desc);
index 54985adf14e79c3eb543e765e4a0a29e1dc9cbff..708b57c85595d34cf873660eb08ad885a04060cb 100644 (file)
@@ -26,7 +26,7 @@ MDSUtility::MDSUtility() :
   waiting_for_mds_map(NULL)
 {
   monc = new MonClient(g_ceph_context);
-  messenger = Messenger::create(g_ceph_context, g_ceph_context->_conf->ms_type, entity_name_t::CLIENT(), "mds", getpid());
+  messenger = Messenger::create_client_messenger(g_ceph_context, "mds");
   mdsmap = new MDSMap();
   objecter = new Objecter(g_ceph_context, messenger, monc, NULL, 0, 0);
 }
index 4b96ac5ae4a1063d849f2b2bfb4ba5807cb9733a..a48d73021cb3d0d72d7b482db9793a86d519cda6 100644 (file)
@@ -185,6 +185,8 @@ void usage(ostream& out)
 "        Set number of concurrent I/O operations\n"
 "   --show-time\n"
 "        prefix output with date/time\n"
+"   --no-verify\n"
+"        do not verify contents of read objects\n"
 "\n"
 "LOAD GEN OPTIONS:\n"
 "   --num-objects                    total number of objects\n"
@@ -1142,6 +1144,7 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
   int concurrent_ios = 16;
   unsigned op_size = default_op_size;
   bool cleanup = true;
+  bool no_verify = false;
   const char *snapname = NULL;
   snap_t snapid = CEPH_NOSNAP;
   std::map<std::string, std::string>::const_iterator i;
@@ -1311,7 +1314,10 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
   if (i != opts.end()) {
     nspace = i->second;
   }
-
+  i = opts.find("no-verify");
+  if (i != opts.end()) {
+    no_verify = true;
+  }
 
   // open rados
   ret = rados.init_with_context(g_ceph_context);
@@ -2262,7 +2268,7 @@ static int rados_tool_common(const std::map < std::string, std::string > &opts,
     RadosBencher bencher(g_ceph_context, rados, io_ctx);
     bencher.set_show_time(show_time);
     ret = bencher.aio_bench(operation, seconds, num_objs,
-                           concurrent_ios, op_size, cleanup, run_name);
+                           concurrent_ios, op_size, cleanup, run_name, no_verify);
     if (ret != 0)
       cerr << "error during benchmark: " << ret << std::endl;
   }
@@ -2641,6 +2647,8 @@ int main(int argc, const char **argv)
       opts["show-time"] = "true";
     } else if (ceph_argparse_flag(args, i, "--no-cleanup", (char*)NULL)) {
       opts["no-cleanup"] = "true";
+    } else if (ceph_argparse_flag(args, i, "--no-verify", (char*)NULL)) {
+      opts["no-verify"] = "true";
     } else if (ceph_argparse_witharg(args, i, &val, "--run-name", (char*)NULL)) {
       opts["run-name"] = val;
     } else if (ceph_argparse_witharg(args, i, &val, "--prefix", (char*)NULL)) {
index 16d300ec1dbbb5f426be2a31d7c3f227f70e1d73..5c6a4e243287b1c170df351efbc1fa94dbada52c 100644 (file)
@@ -1,79 +1,78 @@
-EXTRA_DIST = tracing-common.h
+EXTRA_DIST += \
+       tracing/tracing-common.h
 
 if WITH_LTTNG
-%.c %.h: %.tp
-       $(LTTNG_GEN_TP_PROG) $< -o $*.c -o $*.h
+tracing/%.h: tracing/%.tp
+       $(LTTNG_GEN_TP_PROG) $< -o tracing/$*.h
 endif
 
-dist_noinst_DATA = \
-       librados.tp \
-       librbd.tp \
-       oprequest.tp \
-       osd.tp \
-       pg.tp \
-       objectstore.tp
+dist_noinst_DATA += \
+       tracing/librados.tp \
+       tracing/librbd.tp \
+       tracing/oprequest.tp \
+       tracing/osd.tp \
+       tracing/pg.tp \
+       tracing/objectstore.tp
 
 if WITH_LTTNG
+libosd_tp_la_SOURCES = \
+       tracing/oprequest.c \
+       tracing/osd.c \
+       tracing/pg.c
 nodist_libosd_tp_la_SOURCES = \
-       oprequest.c \
-       oprequest.h \
-       osd.c \
-       osd.h \
-       pg.h \
-       pg.c
+       tracing/oprequest.h \
+       tracing/osd.h \
+       tracing/pg.h
 endif
 libosd_tp_la_LIBADD = -llttng-ust -ldl
-libosd_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
-libosd_tp_la_LDFLAGS =
+libosd_tp_la_CFLAGS = -I$(top_srcdir)/src/tracing -I$(top_srcdir)/src $(AM_CFLAGS) -fpic
+libosd_tp_la_LDFLAGS = -version-info 1:0:0
 
 if WITH_LTTNG
+librados_tp_la_SOURCES = \
+       tracing/librados.c
 nodist_librados_tp_la_SOURCES = \
-       librados.c \
-       librados.h
+       tracing/librados.h
 endif
 librados_tp_la_LIBADD = -llttng-ust -ldl
-librados_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
-librados_tp_la_CFLAGS = -I$(top_srcdir)/src $(AM_CFLAGS)
-librados_tp_la_LDFLAGS =
+librados_tp_la_CFLAGS = -I$(top_srcdir)/src/tracing -I$(top_srcdir)/src $(AM_CFLAGS) -fpic
+librados_tp_la_LDFLAGS = -version-info 2:0:0
 
 if WITH_LTTNG
+librbd_tp_la_SOURCES = \
+       tracing/librbd.c
 nodist_librbd_tp_la_SOURCES = \
-       librbd.c \
-       librbd.h
+       tracing/librbd.h
 endif
 librbd_tp_la_LIBADD = -llttng-ust -ldl
-librbd_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
-librbd_tp_la_CFLAGS = -I$(top_srcdir)/src $(AM_CFLAGS)
-librbd_tp_la_LDFLAGS =
+librbd_tp_la_CFLAGS = -I$(top_srcdir)/src/tracing -I$(top_srcdir)/src $(AM_CFLAGS) -fpic
+librbd_tp_la_LDFLAGS = -version-info 1:0:0
 
 if WITH_LTTNG
+libos_tp_la_SOURCES = \
+       tracing/objectstore.c
 nodist_libos_tp_la_SOURCES = \
-       objectstore.c \
-       objectstore.h
+       tracing/objectstore.h
 endif
 libos_tp_la_LIBADD = -llttng-ust -ldl
-libos_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
-libos_tp_la_CFLAGS = -I$(top_srcdir)/src $(AM_CFLAGS)
-libos_tp_la_LDFLAGS =
+libos_tp_la_CFLAGS = -I$(top_srcdir)/src/tracing -I$(top_srcdir)/src $(AM_CFLAGS) -fpic
+libos_tp_la_LDFLAGS = -version-info 1:0:0
 
 if WITH_LTTNG
-noinst_LTLIBRARIES = \
+lib_LTLIBRARIES += \
        libosd_tp.la \
+       libos_tp.la \
        librados_tp.la \
-       librbd_tp.la \
-       libos_tp.la
+       librbd_tp.la
 
-BUILT_SOURCES = \
-       librados.h \
-       librbd.h \
-       oprequest.h \
-       osd.h \
-       pg.h \
-       objectstore.h
+BUILT_SOURCES += \
+       tracing/librados.h \
+       tracing/librbd.h \
+       tracing/objectstore.h \
+       tracing/oprequest.h \
+       tracing/osd.h \
+       tracing/pg.h
 endif
 
-CLEANFILES = \
-       $(nodist_libosd_tp_la_SOURCES) \
-       $(nodist_librados_tp_la_SOURCES) \
-       $(nodist_librbd_tp_la_SOURCES) \
-       $(nodist_libos_tp_la_SOURCES)
+CLEANFILES += \
+       $(BUILT_SOURCES)
diff --git a/ceph/src/tracing/Makefile.in b/ceph/src/tracing/Makefile.in
deleted file mode 100644 (file)
index 13c3458..0000000
+++ /dev/null
@@ -1,818 +0,0 @@
-# Makefile.in generated by automake 1.14.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-
-VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \  ]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkglibexecdir = $(libexecdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-target_triplet = @target@
-subdir = src/tracing
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/depcomp $(dist_noinst_DATA)
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/ac_check_classpath.m4 \
-       $(top_srcdir)/m4/ac_prog_jar.m4 \
-       $(top_srcdir)/m4/ac_prog_javac.m4 \
-       $(top_srcdir)/m4/ac_prog_javac_works.m4 \
-       $(top_srcdir)/m4/ac_prog_javah.m4 \
-       $(top_srcdir)/m4/acx_pthread.m4 $(top_srcdir)/m4/ax_arm.m4 \
-       $(top_srcdir)/m4/ax_c_pretty_func.m4 \
-       $(top_srcdir)/m4/ax_c_var_func.m4 \
-       $(top_srcdir)/m4/ax_check_compile_flag.m4 \
-       $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \
-       $(top_srcdir)/m4/ax_cxx_static_cast.m4 \
-       $(top_srcdir)/m4/ax_intel.m4 $(top_srcdir)/m4/libtool.m4 \
-       $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
-       $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
-       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/src/acconfig.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-libos_tp_la_DEPENDENCIES =
-@WITH_LTTNG_TRUE@nodist_libos_tp_la_OBJECTS =  \
-@WITH_LTTNG_TRUE@      libos_tp_la-objectstore.lo
-libos_tp_la_OBJECTS = $(nodist_libos_tp_la_OBJECTS)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
-am__v_lt_1 = 
-libos_tp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libos_tp_la_CFLAGS) \
-       $(CFLAGS) $(libos_tp_la_LDFLAGS) $(LDFLAGS) -o $@
-@WITH_LTTNG_TRUE@am_libos_tp_la_rpath =
-libosd_tp_la_DEPENDENCIES =
-@WITH_LTTNG_TRUE@nodist_libosd_tp_la_OBJECTS =  \
-@WITH_LTTNG_TRUE@      libosd_tp_la-oprequest.lo libosd_tp_la-osd.lo \
-@WITH_LTTNG_TRUE@      libosd_tp_la-pg.lo
-libosd_tp_la_OBJECTS = $(nodist_libosd_tp_la_OBJECTS)
-libosd_tp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(libosd_tp_la_LDFLAGS) $(LDFLAGS) -o $@
-@WITH_LTTNG_TRUE@am_libosd_tp_la_rpath =
-librados_tp_la_DEPENDENCIES =
-@WITH_LTTNG_TRUE@nodist_librados_tp_la_OBJECTS =  \
-@WITH_LTTNG_TRUE@      librados_tp_la-librados.lo
-librados_tp_la_OBJECTS = $(nodist_librados_tp_la_OBJECTS)
-librados_tp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-       $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-       $(librados_tp_la_CFLAGS) $(CFLAGS) $(librados_tp_la_LDFLAGS) \
-       $(LDFLAGS) -o $@
-@WITH_LTTNG_TRUE@am_librados_tp_la_rpath =
-librbd_tp_la_DEPENDENCIES =
-@WITH_LTTNG_TRUE@nodist_librbd_tp_la_OBJECTS = librbd_tp_la-librbd.lo
-librbd_tp_la_OBJECTS = $(nodist_librbd_tp_la_OBJECTS)
-librbd_tp_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(librbd_tp_la_CFLAGS) \
-       $(CFLAGS) $(librbd_tp_la_LDFLAGS) $(LDFLAGS) -o $@
-@WITH_LTTNG_TRUE@am_librbd_tp_la_rpath =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
-       $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
-       $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC      " $@;
-am__v_CC_1 = 
-CCLD = $(CC)
-LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
-       $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD    " $@;
-am__v_CCLD_1 = 
-SOURCES = $(nodist_libos_tp_la_SOURCES) $(nodist_libosd_tp_la_SOURCES) \
-       $(nodist_librados_tp_la_SOURCES) \
-       $(nodist_librbd_tp_la_SOURCES)
-DIST_SOURCES =
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-DATA = $(dist_noinst_DATA)
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_CXXFLAGS = @AM_CXXFLAGS@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-AR = @AR@
-ARM_FLAGS = @ARM_FLAGS@
-ARM_NEON_FLAGS = @ARM_NEON_FLAGS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BOOST_PROGRAM_OPTIONS_LIBS = @BOOST_PROGRAM_OPTIONS_LIBS@
-BOOST_THREAD_LIBS = @BOOST_THREAD_LIBS@
-CC = @CC@
-CCAS = @CCAS@
-CCASDEPMODE = @CCASDEPMODE@
-CCASFLAGS = @CCASFLAGS@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CRYPTOPP_CFLAGS = @CRYPTOPP_CFLAGS@
-CRYPTOPP_LIBS = @CRYPTOPP_LIBS@
-CRYPTO_CFLAGS = @CRYPTO_CFLAGS@
-CRYPTO_LIBS = @CRYPTO_LIBS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DLLTOOL = @DLLTOOL@
-DSYMUTIL = @DSYMUTIL@
-DUMPBIN = @DUMPBIN@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXTRA_CLASSPATH_JAR = @EXTRA_CLASSPATH_JAR@
-FGREP = @FGREP@
-GCOV_PREFIX_STRIP = @GCOV_PREFIX_STRIP@
-GIT_CHECK = @GIT_CHECK@
-GREP = @GREP@
-HAVE_CXX11 = @HAVE_CXX11@
-HAVE_VALGRIND = @HAVE_VALGRIND@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INTEL_FLAGS = @INTEL_FLAGS@
-INTEL_PCLMUL_FLAGS = @INTEL_PCLMUL_FLAGS@
-INTEL_SSE2_FLAGS = @INTEL_SSE2_FLAGS@
-INTEL_SSE3_FLAGS = @INTEL_SSE3_FLAGS@
-INTEL_SSE4_1_FLAGS = @INTEL_SSE4_1_FLAGS@
-INTEL_SSE4_2_FLAGS = @INTEL_SSE4_2_FLAGS@
-INTEL_SSE_FLAGS = @INTEL_SSE_FLAGS@
-INTEL_SSSE3_FLAGS = @INTEL_SSSE3_FLAGS@
-JAR = @JAR@
-JAVAC = @JAVAC@
-JAVAH = @JAVAH@
-JDK_CPPFLAGS = @JDK_CPPFLAGS@
-KEYUTILS_LIB = @KEYUTILS_LIB@
-LD = @LD@
-LDFLAGS = @LDFLAGS@
-LIBEDIT_CFLAGS = @LIBEDIT_CFLAGS@
-LIBEDIT_LIBS = @LIBEDIT_LIBS@
-LIBFUSE = @LIBFUSE@
-LIBJEMALLOC = @LIBJEMALLOC@
-LIBOBJS = @LIBOBJS@
-LIBROCKSDB_CFLAGS = @LIBROCKSDB_CFLAGS@
-LIBROCKSDB_LIBS = @LIBROCKSDB_LIBS@
-LIBS = @LIBS@
-LIBTCMALLOC = @LIBTCMALLOC@
-LIBTOOL = @LIBTOOL@
-LIBZFS_CFLAGS = @LIBZFS_CFLAGS@
-LIBZFS_LIBS = @LIBZFS_LIBS@
-LIPO = @LIPO@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-LTTNG_GEN_TP_CHECK = @LTTNG_GEN_TP_CHECK@
-LTTNG_GEN_TP_PROG = @LTTNG_GEN_TP_PROG@
-MAKEINFO = @MAKEINFO@
-MANIFEST_TOOL = @MANIFEST_TOOL@
-MKDIR_P = @MKDIR_P@
-NM = @NM@
-NMEDIT = @NMEDIT@
-NSS_CFLAGS = @NSS_CFLAGS@
-NSS_LIBS = @NSS_LIBS@
-OBJDUMP = @OBJDUMP@
-OBJEXT = @OBJEXT@
-OTOOL = @OTOOL@
-OTOOL64 = @OTOOL64@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PKG_CONFIG = @PKG_CONFIG@
-PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
-PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
-PTHREAD_CC = @PTHREAD_CC@
-PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
-PTHREAD_LIBS = @PTHREAD_LIBS@
-PYTHON = @PYTHON@
-PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@
-PYTHON_PLATFORM = @PYTHON_PLATFORM@
-PYTHON_PREFIX = @PYTHON_PREFIX@
-PYTHON_VERSION = @PYTHON_VERSION@
-RANLIB = @RANLIB@
-RESOLV_LIBS = @RESOLV_LIBS@
-RPM_RELEASE = @RPM_RELEASE@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-WARN_ERROR_FORMAT_SECURITY = @WARN_ERROR_FORMAT_SECURITY@
-WARN_IGNORED_QUALIFIERS = @WARN_IGNORED_QUALIFIERS@
-WARN_TYPE_LIMITS = @WARN_TYPE_LIMITS@
-XIO_LIBS = @XIO_LIBS@
-YASM_CHECK = @YASM_CHECK@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_AR = @ac_ct_AR@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
-acx_pthread_config = @acx_pthread_config@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-pkgpyexecdir = @pkgpyexecdir@
-pkgpythondir = @pkgpythondir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-pyexecdir = @pyexecdir@
-pythondir = @pythondir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-subdirs = @subdirs@
-sysconfdir = @sysconfdir@
-target = @target@
-target_alias = @target_alias@
-target_cpu = @target_cpu@
-target_os = @target_os@
-target_vendor = @target_vendor@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = tracing-common.h
-dist_noinst_DATA = \
-       librados.tp \
-       librbd.tp \
-       oprequest.tp \
-       osd.tp \
-       pg.tp \
-       objectstore.tp
-
-@WITH_LTTNG_TRUE@nodist_libosd_tp_la_SOURCES = \
-@WITH_LTTNG_TRUE@      oprequest.c \
-@WITH_LTTNG_TRUE@      oprequest.h \
-@WITH_LTTNG_TRUE@      osd.c \
-@WITH_LTTNG_TRUE@      osd.h \
-@WITH_LTTNG_TRUE@      pg.h \
-@WITH_LTTNG_TRUE@      pg.c
-
-libosd_tp_la_LIBADD = -llttng-ust -ldl
-libosd_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
-libosd_tp_la_LDFLAGS = 
-@WITH_LTTNG_TRUE@nodist_librados_tp_la_SOURCES = \
-@WITH_LTTNG_TRUE@      librados.c \
-@WITH_LTTNG_TRUE@      librados.h
-
-librados_tp_la_LIBADD = -llttng-ust -ldl
-librados_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
-librados_tp_la_CFLAGS = -I$(top_srcdir)/src $(AM_CFLAGS)
-librados_tp_la_LDFLAGS = 
-@WITH_LTTNG_TRUE@nodist_librbd_tp_la_SOURCES = \
-@WITH_LTTNG_TRUE@      librbd.c \
-@WITH_LTTNG_TRUE@      librbd.h
-
-librbd_tp_la_LIBADD = -llttng-ust -ldl
-librbd_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
-librbd_tp_la_CFLAGS = -I$(top_srcdir)/src $(AM_CFLAGS)
-librbd_tp_la_LDFLAGS = 
-@WITH_LTTNG_TRUE@nodist_libos_tp_la_SOURCES = \
-@WITH_LTTNG_TRUE@      objectstore.c \
-@WITH_LTTNG_TRUE@      objectstore.h
-
-libos_tp_la_LIBADD = -llttng-ust -ldl
-libos_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
-libos_tp_la_CFLAGS = -I$(top_srcdir)/src $(AM_CFLAGS)
-libos_tp_la_LDFLAGS = 
-@WITH_LTTNG_TRUE@noinst_LTLIBRARIES = \
-@WITH_LTTNG_TRUE@      libosd_tp.la \
-@WITH_LTTNG_TRUE@      librados_tp.la \
-@WITH_LTTNG_TRUE@      librbd_tp.la \
-@WITH_LTTNG_TRUE@      libos_tp.la
-
-@WITH_LTTNG_TRUE@BUILT_SOURCES = \
-@WITH_LTTNG_TRUE@      librados.h \
-@WITH_LTTNG_TRUE@      librbd.h \
-@WITH_LTTNG_TRUE@      oprequest.h \
-@WITH_LTTNG_TRUE@      osd.h \
-@WITH_LTTNG_TRUE@      pg.h \
-@WITH_LTTNG_TRUE@      objectstore.h
-
-CLEANFILES = \
-       $(nodist_libosd_tp_la_SOURCES) \
-       $(nodist_librados_tp_la_SOURCES) \
-       $(nodist_librbd_tp_la_SOURCES) \
-       $(nodist_libos_tp_la_SOURCES)
-
-all: $(BUILT_SOURCES)
-       $(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .lo .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-               && { if test -f $@; then exit 0; else break; fi; }; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/tracing/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --foreign src/tracing/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLTLIBRARIES:
-       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-       @list='$(noinst_LTLIBRARIES)'; \
-       locs=`for p in $$list; do echo $$p; done | \
-             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-             sort -u`; \
-       test -z "$$locs" || { \
-         echo rm -f $${locs}; \
-         rm -f $${locs}; \
-       }
-
-libos_tp.la: $(libos_tp_la_OBJECTS) $(libos_tp_la_DEPENDENCIES) $(EXTRA_libos_tp_la_DEPENDENCIES) 
-       $(AM_V_CCLD)$(libos_tp_la_LINK) $(am_libos_tp_la_rpath) $(libos_tp_la_OBJECTS) $(libos_tp_la_LIBADD) $(LIBS)
-
-libosd_tp.la: $(libosd_tp_la_OBJECTS) $(libosd_tp_la_DEPENDENCIES) $(EXTRA_libosd_tp_la_DEPENDENCIES) 
-       $(AM_V_CCLD)$(libosd_tp_la_LINK) $(am_libosd_tp_la_rpath) $(libosd_tp_la_OBJECTS) $(libosd_tp_la_LIBADD) $(LIBS)
-
-librados_tp.la: $(librados_tp_la_OBJECTS) $(librados_tp_la_DEPENDENCIES) $(EXTRA_librados_tp_la_DEPENDENCIES) 
-       $(AM_V_CCLD)$(librados_tp_la_LINK) $(am_librados_tp_la_rpath) $(librados_tp_la_OBJECTS) $(librados_tp_la_LIBADD) $(LIBS)
-
-librbd_tp.la: $(librbd_tp_la_OBJECTS) $(librbd_tp_la_DEPENDENCIES) $(EXTRA_librbd_tp_la_DEPENDENCIES) 
-       $(AM_V_CCLD)$(librbd_tp_la_LINK) $(am_librbd_tp_la_rpath) $(librbd_tp_la_OBJECTS) $(librbd_tp_la_LIBADD) $(LIBS)
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libos_tp_la-objectstore.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libosd_tp_la-oprequest.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libosd_tp_la-osd.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libosd_tp_la-pg.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librados_tp_la-librados.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librbd_tp_la-librbd.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-
-libos_tp_la-objectstore.lo: objectstore.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libos_tp_la_CPPFLAGS) $(CPPFLAGS) $(libos_tp_la_CFLAGS) $(CFLAGS) -MT libos_tp_la-objectstore.lo -MD -MP -MF $(DEPDIR)/libos_tp_la-objectstore.Tpo -c -o libos_tp_la-objectstore.lo `test -f 'objectstore.c' || echo '$(srcdir)/'`objectstore.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libos_tp_la-objectstore.Tpo $(DEPDIR)/libos_tp_la-objectstore.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='objectstore.c' object='libos_tp_la-objectstore.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libos_tp_la_CPPFLAGS) $(CPPFLAGS) $(libos_tp_la_CFLAGS) $(CFLAGS) -c -o libos_tp_la-objectstore.lo `test -f 'objectstore.c' || echo '$(srcdir)/'`objectstore.c
-
-libosd_tp_la-oprequest.lo: oprequest.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libosd_tp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libosd_tp_la-oprequest.lo -MD -MP -MF $(DEPDIR)/libosd_tp_la-oprequest.Tpo -c -o libosd_tp_la-oprequest.lo `test -f 'oprequest.c' || echo '$(srcdir)/'`oprequest.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libosd_tp_la-oprequest.Tpo $(DEPDIR)/libosd_tp_la-oprequest.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='oprequest.c' object='libosd_tp_la-oprequest.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libosd_tp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libosd_tp_la-oprequest.lo `test -f 'oprequest.c' || echo '$(srcdir)/'`oprequest.c
-
-libosd_tp_la-osd.lo: osd.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libosd_tp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libosd_tp_la-osd.lo -MD -MP -MF $(DEPDIR)/libosd_tp_la-osd.Tpo -c -o libosd_tp_la-osd.lo `test -f 'osd.c' || echo '$(srcdir)/'`osd.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libosd_tp_la-osd.Tpo $(DEPDIR)/libosd_tp_la-osd.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='osd.c' object='libosd_tp_la-osd.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libosd_tp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libosd_tp_la-osd.lo `test -f 'osd.c' || echo '$(srcdir)/'`osd.c
-
-libosd_tp_la-pg.lo: pg.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libosd_tp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libosd_tp_la-pg.lo -MD -MP -MF $(DEPDIR)/libosd_tp_la-pg.Tpo -c -o libosd_tp_la-pg.lo `test -f 'pg.c' || echo '$(srcdir)/'`pg.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/libosd_tp_la-pg.Tpo $(DEPDIR)/libosd_tp_la-pg.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='pg.c' object='libosd_tp_la-pg.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libosd_tp_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libosd_tp_la-pg.lo `test -f 'pg.c' || echo '$(srcdir)/'`pg.c
-
-librados_tp_la-librados.lo: librados.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(librados_tp_la_CPPFLAGS) $(CPPFLAGS) $(librados_tp_la_CFLAGS) $(CFLAGS) -MT librados_tp_la-librados.lo -MD -MP -MF $(DEPDIR)/librados_tp_la-librados.Tpo -c -o librados_tp_la-librados.lo `test -f 'librados.c' || echo '$(srcdir)/'`librados.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/librados_tp_la-librados.Tpo $(DEPDIR)/librados_tp_la-librados.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='librados.c' object='librados_tp_la-librados.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(librados_tp_la_CPPFLAGS) $(CPPFLAGS) $(librados_tp_la_CFLAGS) $(CFLAGS) -c -o librados_tp_la-librados.lo `test -f 'librados.c' || echo '$(srcdir)/'`librados.c
-
-librbd_tp_la-librbd.lo: librbd.c
-@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(librbd_tp_la_CPPFLAGS) $(CPPFLAGS) $(librbd_tp_la_CFLAGS) $(CFLAGS) -MT librbd_tp_la-librbd.lo -MD -MP -MF $(DEPDIR)/librbd_tp_la-librbd.Tpo -c -o librbd_tp_la-librbd.lo `test -f 'librbd.c' || echo '$(srcdir)/'`librbd.c
-@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) $(DEPDIR)/librbd_tp_la-librbd.Tpo $(DEPDIR)/librbd_tp_la-librbd.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='librbd.c' object='librbd_tp_la-librbd.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(librbd_tp_la_CPPFLAGS) $(CPPFLAGS) $(librbd_tp_la_CFLAGS) $(CFLAGS) -c -o librbd_tp_la-librbd.lo `test -f 'librbd.c' || echo '$(srcdir)/'`librbd.c
-
-mostlyclean-libtool:
-       -rm -f *.lo
-
-clean-libtool:
-       -rm -rf .libs _libs
-
-ID: $(am__tagged_files)
-       $(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-am
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-       set x; \
-       here=`pwd`; \
-       $(am__define_uniq_tagged_files); \
-       shift; \
-       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         if test $$# -gt 0; then \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             "$$@" $$unique; \
-         else \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             $$unique; \
-         fi; \
-       fi
-ctags: ctags-am
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-       $(am__define_uniq_tagged_files); \
-       test -z "$(CTAGS_ARGS)$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && $(am__cd) $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-am
-
-cscopelist-am: $(am__tagged_files)
-       list='$(am__tagged_files)'; \
-       case "$(srcdir)" in \
-         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-         *) sdir=$(subdir)/$(srcdir) ;; \
-       esac; \
-       for i in $$list; do \
-         if test -f "$$i"; then \
-           echo "$(subdir)/$$i"; \
-         else \
-           echo "$$sdir/$$i"; \
-         fi; \
-       done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-check-am: all-am
-check: $(BUILT_SOURCES)
-       $(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(LTLIBRARIES) $(DATA)
-installdirs:
-install: $(BUILT_SOURCES)
-       $(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-       if test -z '$(STRIP)'; then \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-             install; \
-       else \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-       fi
-mostlyclean-generic:
-
-clean-generic:
-       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-am
-
-clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
-       mostlyclean-am
-
-distclean: distclean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-       -rm -rf ./$(DEPDIR)
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-       mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: all check install install-am install-strip
-
-.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
-       clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \
-       ctags-am distclean distclean-compile distclean-generic \
-       distclean-libtool distclean-tags distdir dvi dvi-am html \
-       html-am info info-am install install-am install-data \
-       install-data-am install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-man install-pdf install-pdf-am \
-       install-ps install-ps-am install-strip installcheck \
-       installcheck-am installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-compile \
-       mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
-       tags tags-am uninstall uninstall-am
-
-
-@WITH_LTTNG_TRUE@%.c %.h: %.tp
-@WITH_LTTNG_TRUE@      $(LTTNG_GEN_TP_PROG) $< -o $*.c -o $*.h
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/ceph/src/tracing/librados.c b/ceph/src/tracing/librados.c
new file mode 100644 (file)
index 0000000..5b8d4d6
--- /dev/null
@@ -0,0 +1,6 @@
+
+#define TRACEPOINT_CREATE_PROBES
+/*
+ * The header containing our TRACEPOINT_EVENTs.
+ */
+#include "librados.h"
diff --git a/ceph/src/tracing/librbd.c b/ceph/src/tracing/librbd.c
new file mode 100644 (file)
index 0000000..6e5977c
--- /dev/null
@@ -0,0 +1,6 @@
+
+#define TRACEPOINT_CREATE_PROBES
+/*
+ * The header containing our TRACEPOINT_EVENTs.
+ */
+#include "librbd.h"
diff --git a/ceph/src/tracing/objectstore.c b/ceph/src/tracing/objectstore.c
new file mode 100644 (file)
index 0000000..21bbf27
--- /dev/null
@@ -0,0 +1,6 @@
+
+#define TRACEPOINT_CREATE_PROBES
+/*
+ * The header containing our TRACEPOINT_EVENTs.
+ */
+#include "objectstore.h"
diff --git a/ceph/src/tracing/oprequest.c b/ceph/src/tracing/oprequest.c
new file mode 100644 (file)
index 0000000..02f1fc5
--- /dev/null
@@ -0,0 +1,6 @@
+
+#define TRACEPOINT_CREATE_PROBES
+/*
+ * The header containing our TRACEPOINT_EVENTs.
+ */
+#include "oprequest.h"
diff --git a/ceph/src/tracing/osd.c b/ceph/src/tracing/osd.c
new file mode 100644 (file)
index 0000000..ff70ddf
--- /dev/null
@@ -0,0 +1,6 @@
+
+#define TRACEPOINT_CREATE_PROBES
+/*
+ * The header containing our TRACEPOINT_EVENTs.
+ */
+#include "osd.h"
diff --git a/ceph/src/tracing/pg.c b/ceph/src/tracing/pg.c
new file mode 100644 (file)
index 0000000..661ebb7
--- /dev/null
@@ -0,0 +1,6 @@
+
+#define TRACEPOINT_CREATE_PROBES
+/*
+ * The header containing our TRACEPOINT_EVENTs.
+ */
+#include "pg.h"
index 2438c206f292bc729c15dbe73797090e8d4a568d..76d901694625131c241bb75660771e2734856ca5 100644 (file)
@@ -22,4 +22,8 @@ instance ${cluster:-ceph}/$id
 export cluster
 export id
 
-exec /usr/bin/ceph-osd --cluster="${cluster:-ceph}" -i "$id" -f
+script
+    test -f /etc/default/ceph && . /etc/default/ceph
+    export TCMALLOC_MAX_TOTAL_THREAD_CACHE_BYTES
+    exec /usr/bin/ceph-osd --cluster="${cluster:-ceph}" -i "$id" -f
+end script
diff --git a/debian/ceph.NEWS b/debian/ceph.NEWS
new file mode 100644 (file)
index 0000000..4943633
--- /dev/null
@@ -0,0 +1,56 @@
+ceph (0.80.9-2) unstable; urgency=medium
+
+  ## CRUSH fixes in 0.80.9
+
+  The 0.80.9 point release fixes several issues with CRUSH that trigger excessive
+  data migration when adjusting OSD weights. These are most obvious when a very
+  small weight change (e.g., a change from 0 to .01) triggers a large amount of
+  movement, but the same set of bugs can also lead to excessive (though less
+  noticeable) movement in other cases.
+
+  However, because the bug may already have affected your cluster, fixing it
+  may trigger movement back to the more correct location. For this reason, you
+  must manually opt-in to the fixed behavior.
+
+  In order to set the new tunable to correct the behavior:
+
+      ceph osd crush set-tunable straw_calc_version 1
+
+  Note that this change will have no immediate effect. However, from this
+  point forward, any â€˜straw’ bucket in your CRUSH map that is adjusted will get
+  non-buggy internal weights, and that transition may trigger some rebalancing.
+
+  You can estimate how much rebalancing will eventually be necessary on your
+  cluster with:
+
+      ceph osd getcrushmap -o /tmp/cm
+      crushtool -i /tmp/cm --num-rep 3 --test --show-mappings > /tmp/a 2>&1
+      crushtool -i /tmp/cm --set-straw-calc-version 1 -o /tmp/cm2
+      crushtool -i /tmp/cm2 --reweight -o /tmp/cm2
+      crushtool -i /tmp/cm2 --num-rep 3 --test --show-mappings > /tmp/b 2>&1
+      wc -l /tmp/a                          # num total mappings
+      diff -u /tmp/a /tmp/b | grep -c ^+    # num changed mappings
+
+  Divide the total number of lines in /tmp/a with the number of lines
+  changed.  We've found that most clusters are under 10%.
+
+  You can force all of this rebalancing to happen at once with:
+
+      ceph osd crush reweight-all
+
+  Otherwise, it will happen at some unknown point in the future when
+  CRUSH weights are next adjusted.
+
+  ## Mapping rbd devices with rbdmap on systemd systems
+
+  If you have setup rbd mappings in /etc/ceph/rbdmap and corresponding mounts
+  in /etc/fstab things might break with systemd because systemd waits for the
+  rbd device to appear before the legacy rbdmap init file has a chance to run
+  and drops into emergency mode if it times out.
+
+  This can be fixed by adding the nofail option in /etc/fstab to all rbd
+  backed mount points. With this systemd does not wait for the device and
+  proceeds with the boot process. After rbdmap mapped the device, systemd
+  detects the new device and mounts the file system.
+
+ -- Gaudenz Steinlin <gaudenz@debian.org>  Mon, 04 May 2015 22:49:48 +0200
index ca7a880636cc4344d70b1d02ea923cd3a5c9dc4f..c8999fd663f3fddaecce64643bcb371795038a9e 100644 (file)
@@ -1,8 +1,8 @@
 etc/ceph
-var/log/ceph
-var/lib/ceph/tmp
+var/lib/ceph/bootstrap-mds
+var/lib/ceph/bootstrap-osd
+var/lib/ceph/mds
 var/lib/ceph/mon
 var/lib/ceph/osd
-var/lib/ceph/mds
-var/lib/ceph/bootstrap-osd
-var/lib/ceph/bootstrap-mds
+var/lib/ceph/tmp
+var/log/ceph
diff --git a/debian/ceph.logrotate b/debian/ceph.logrotate
new file mode 120000 (symlink)
index 0000000..df20846
--- /dev/null
@@ -0,0 +1 @@
+../src/logrotate.conf
\ No newline at end of file
index 20e541fc12471b57cc71ee786131d82fc2fbba88..9a2e098950b2a728c8480c056a3576f044e4e80a 100644 (file)
@@ -1,3 +1,17 @@
+ceph (0.94.6-1~u14.04+mos1) mos9.0; urgency=low
+
+  * New upstream bugfix only release
+  * Added patche which makes ceph-disk work with udev generated symlinks
+  * Added a patch to fix rados bench crash
+  * Adjust packaging:
+    - disable make check, it fails anyway since some necessary files are
+      missing in the upstream tarball
+    - skip build dependencies necessary for tests only (valgrind, virtualenv)
+    - don't install ceph-deploy manual page to avoid file conflicts with
+      ceph-deploy package
+
+ -- Alexey Sheplyakov <asheplyakov@mirantis.com>  Wed, 24 Feb 2016 16:48:44 +0300
+
 ceph (0.94.5-0u~u14.04+mos1) mos8.0; urgency=medium
 
   * Rebuild for Ubuntu 14.04
index 8ca243cf94551d677c0b16e44f70d20a9a422d85..cfc88a8bbe2f5112a2aa0844e8e88ceff8bbd21b 100644 (file)
@@ -2,49 +2,48 @@ Source: ceph
 Section: admin
 Priority: optional
 Maintainer: MOS ceph team <mos-ceph@mirantis.com>
-XSBC-Original-Maintainer: Ceph Maintainers <ceph-maintainers@lists.ceph.com>
+XSBC-Original-Maintainer: Ceph Maintainer <ceph-maintainers@list.ceph.com>
 Homepage: http://ceph.com/
-Build-Depends:
- debhelper (>= 9~),
- default-jdk,
- dh-autoreconf,
- dh-python,
- dh-systemd (>= 1.5),
- dpkg-dev (>= 1.16.1~),
- javahelper,
- junit4,
- libaio-dev,
- libatomic-ops-dev,
- libbabeltrace-ctf-dev,
- libbabeltrace-dev,
- libblkid-dev,
- libboost-dev,
- libboost-program-options-dev,
- libboost-system-dev,
- libboost-thread-dev,
- libbz2-dev,
- libcurl4-gnutls-dev,
- libedit-dev,
- libexpat1-dev,
- libfcgi-dev,
- libfuse-dev,
- libgoogle-perftools-dev [i386 amd64 powerpc armhf arm64 ppc64el],
- libkeyutils-dev,
- libleveldb-dev,
- libnss3-dev,
- libs3-dev,
- libsnappy-dev,
- libtool,
- libudev-dev,
- libxml2-dev,
- pkg-config,
- python-all (>= 2.6.6-3~),
- python-nose,
- uuid-dev,
- uuid-runtime,
- xfslibs-dev,
- yasm [amd64],
- zlib1g-dev
+Build-Depends: debhelper (>= 9~),
+               default-jdk,
+               dh-autoreconf,
+               dh-python,
+               dh-systemd (>= 1.5),
+               dpkg-dev (>= 1.16.1~),
+               javahelper,
+               junit4,
+               libaio-dev,
+               libatomic-ops-dev,
+               libblkid-dev (>= 2.17),
+               libboost-dev (>= 1.54),
+               libboost-program-options-dev (>= 1.54),
+               libboost-system-dev (>= 1.54),
+               libboost-thread-dev (>= 1.54),
+               libbabeltrace-ctf-dev,
+               libbabeltrace-dev,
+               libbz2-dev,
+               libcurl4-gnutls-dev,
+               libedit-dev,
+               libexpat1-dev,
+               libfcgi-dev,
+               libfuse-dev,
+               libgoogle-perftools-dev [i386 amd64 powerpc armhf arm64 ppc64el],
+               libkeyutils-dev,
+               libleveldb-dev,
+               libnss3-dev,
+               libs3-dev,
+               libsnappy-dev,
+               libtool,
+               libudev-dev,
+               libxml2-dev,
+               pkg-config,
+               python-all (>= 2.6.6-3~),
+               python-nose,
+               uuid-dev,
+               uuid-runtime,
+               xfslibs-dev,
+               yasm [amd64],
+               zlib1g-dev
 Build-Conflicts: libcrypto++-dev
 Standards-Version: 3.9.6
 X-Python-Version: >= 2.6
@@ -52,29 +51,27 @@ XS-Testsuite: autopkgtest
 
 Package: ceph
 Architecture: linux-any
-Depends:
- binutils,
- ceph-common (= ${binary:Version}),
- cryptsetup-bin | cryptsetup,
- gdisk,
- hdparm | sdparm,
- parted,
- python-flask,
- uuid-runtime,
- xfsprogs,
- ${misc:Depends},
- ${python:Depends},
- ${shlibs:Depends}
+Depends: binutils,
+         ceph-common (= ${binary:Version}),
+         cryptsetup-bin | cryptsetup,
+         gdisk,
+         hdparm | sdparm,
+         parted,
+         python-flask,
+         uuid-runtime,
+         xfsprogs,
+         ${misc:Depends},
+         ${python:Depends},
+         ${shlibs:Depends}
 Pre-Depends: ${misc:Pre-Depends}
-Breaks: python-ceph (<< 0.93-0ubuntu1~)
+Breaks: python-ceph (<< 0.94.1-1~)
 Conflicts: gceph, librgw-dev, librgw1, librgw1-dbg, obsync
-Replaces:
- gceph,
- librgw-dev,
- librgw1,
- librgw1-dbg,
- obsync,
- python-ceph (<< 0.93-0ubuntu1~)
+Replaces: gceph,
+          librgw-dev,
+          librgw1,
+          librgw1-dbg,
+          obsync,
+          python-ceph (<< 0.94.1-1~)
 Recommends: libcephfs1, librados2, librbd1, ntp | time-daemon | chrony
 Suggests: logrotate
 Description: distributed storage and file system
@@ -101,25 +98,22 @@ Description: debugging symbols for ceph
 
 Package: ceph-common
 Architecture: linux-any
-Depends:
- librbd1 (= ${binary:Version}),
- python-cephfs (= ${binary:Version}),
- python-rados (= ${binary:Version}),
- python-rbd (= ${binary:Version}),
- python-requests,
- ${misc:Depends},
- ${python:Depends},
- ${shlibs:Depends}
+Depends: librbd1 (= ${binary:Version}),
+         python-cephfs (= ${binary:Version}),
+         python-rados (= ${binary:Version}),
+         python-rbd (= ${binary:Version}),
+         python-requests,
+         ${misc:Depends},
+         ${python:Depends},
+         ${shlibs:Depends}
 Conflicts: ceph-client-tools
-Breaks:
- ceph (<< 0.93-0ubuntu3~),
- librbd1 (<< 0.93-0ubuntu1~),
- python-ceph (<< 0.93-0ubuntu1~)
-Replaces:
- ceph (<< 0.93-0ubuntu3~),
- ceph-client-tools,
- librbd1 (<< 0.93-0ubuntu1~),
- python-ceph (<< 0.93-0ubuntu1~)
+Breaks: ceph (<< 0.93-0ubuntu3~),
+        librbd1 (<< 0.94.1-1~),
+        python-ceph (<< 0.94.1-1~)
+Replaces: ceph (<< 0.93-0ubuntu3~),
+          ceph-client-tools,
+          librbd1 (<< 0.94.1-1~),
+          python-ceph (<< 0.94.1-1~)
 Suggests: ceph, ceph-mds
 Description: common utilities to mount and interact with a ceph storage cluster
  Ceph is a distributed storage and file system designed to provide
@@ -477,12 +471,11 @@ Description: debugging symbols for ceph-test
 Package: python-ceph
 Architecture: all
 Section: python
-Depends:
- python-cephfs (>= ${binary:Version}),
- python-rados (>= ${binary:Version}),
- python-rbd (>= ${binary:Version}),
- ${misc:Depends},
- ${python:Depends}
+Depends: python-cephfs (>= ${binary:Version}),
+         python-rados (>= ${binary:Version}),
+         python-rbd (>= ${binary:Version}),
+         ${misc:Depends},
+         ${python:Depends}
 Description: Meta-package for python libraries for the Ceph libraries
  Ceph is a massively scalable, open-source, distributed
  storage system that runs on commodity hardware and delivers object,
@@ -494,8 +487,8 @@ Package: python-rados
 Architecture: linux-any
 Section: python
 Depends: librados2 (= ${binary:Version}), ${misc:Depends}, ${python:Depends}
-Replaces: python-ceph (<< 0.93-0ubuntu1~)
-Breaks: python-ceph (<< 0.93-0ubuntu1~)
+Replaces: python-ceph (<< 0.94.1-1~)
+Breaks: python-ceph (<< 0.94.1-1~)
 Description: Python libraries for the Ceph librados library
  Ceph is a massively scalable, open-source, distributed
  storage system that runs on commodity hardware and delivers object,
@@ -508,8 +501,8 @@ Package: python-rbd
 Architecture: linux-any
 Section: python
 Depends: librbd1 (= ${binary:Version}), ${misc:Depends}, ${python:Depends}
-Replaces: python-ceph (<< 0.93-0ubuntu1~)
-Breaks: python-ceph (<< 0.93-0ubuntu1~)
+Replaces: python-ceph (<< 0.94.1-1~)
+Breaks: python-ceph (<< 0.94.1-1~)
 Description: Python libraries for the Ceph librbd library
  Ceph is a massively scalable, open-source, distributed
  storage system that runs on commodity hardware and delivers object,
@@ -522,8 +515,8 @@ Package: python-cephfs
 Architecture: linux-any
 Section: python
 Depends: libcephfs1 (= ${binary:Version}), ${misc:Depends}, ${python:Depends}
-Replaces: python-ceph (<< 0.93-0ubuntu1~)
-Breaks: python-ceph (<< 0.93-0ubuntu1~)
+Replaces: python-ceph (<< 0.94.1-1~)
+Breaks: python-ceph (<< 0.94.1-1~)
 Description: Python libraries for the Ceph libcephfs library
  Ceph is a massively scalable, open-source, distributed
  storage system that runs on commodity hardware and delivers object,
index 9cba12f7e3d6ee9bb6ec5894950ec7eee18ff791..1d6769193eeaa51fd6304befa992bc926556f308 100644 (file)
@@ -2,6 +2,8 @@ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 Upstream-Name: ceph
 Upstream-Contact: Sage Weil <sage@newdream.net>
 Source: http://ceph.com/
+Files-Excluded: src/erasure-code/jerasure/gf-complete
+                src/erasure-code/jerasure/jerasure
 
 Files: *
 Copyright: 2004-2014 Sage Weil <sage@newdream.net>
index fce89ec4bcec72511eeebbce736083df6a6f95d3..458ab470f6a270cc85d01cec1a8d92a876e71fc0 100644 (file)
@@ -1,5 +1,6 @@
 [DEFAULT]
-debian-branch = ubuntu
+debian-branch = hammer
+upstream-branch = upstream-hammer
 pristine-tar = True
 
 [import-orig]
diff --git a/debian/patches/ObjBencher-seq_read_bench-fix-locking-errors.patch b/debian/patches/ObjBencher-seq_read_bench-fix-locking-errors.patch
new file mode 100644 (file)
index 0000000..430a92e
--- /dev/null
@@ -0,0 +1,50 @@
+From: Alexey Sheplyakov <asheplyakov@mirantis.com>
+Date: Fri, 26 Feb 2016 15:01:11 +0300
+Subject: ObjBencher::seq_read_bench: fix locking errors
+
+- take a lock before completion_ret
+- remove extraneous comparison: it's clearly misplaced (bad merge?)
+  and tries to unlock a Mutex twice in a row
+
+Fixes: #14873
+
+Signed-off-by: Alexey Sheplyakov <asheplyakov@mirantis.com>
+---
+ src/common/obj_bencher.cc | 11 ++---------
+ 1 file changed, 2 insertions(+), 9 deletions(-)
+
+diff --git a/src/common/obj_bencher.cc b/src/common/obj_bencher.cc
+index db4fd8f..a196e83 100644
+--- a/src/common/obj_bencher.cc
++++ b/src/common/obj_bencher.cc
+@@ -598,13 +598,13 @@ int ObjBencher::seq_read_bench(int seconds_to_run, int num_objects, int concurre
+     index[slot] = data.started;
+     lock.Unlock();
+     completion_wait(slot);
++    lock.Lock();
+     r = completion_ret(slot);
+     if (r < 0) {
+       cerr << "read got " << r << std::endl;
+       lock.Unlock();
+       goto ERR;
+     }
+-    lock.Lock();
+     total_latency += data.cur_latency;
+     if (data.cur_latency > data.max_latency) data.max_latency = data.cur_latency;
+     if (data.cur_latency < data.min_latency) data.min_latency = data.cur_latency;
+@@ -624,14 +624,7 @@ int ObjBencher::seq_read_bench(int seconds_to_run, int num_objects, int concurre
+     lock.Lock();
+     ++data.started;
+     ++data.in_flight;
+-      lock.Unlock();
+-    if (memcmp(data.object_contents, cur_contents->c_str(), data.object_size) != 0) {
+-      cerr << name[slot] << " is not correct!" << std::endl;
+-      ++errors;
+-    } else {
+-      lock.Unlock();
+-    }
+-
++    lock.Unlock();
+     name[slot] = newName;
+   }
diff --git a/debian/patches/bug-10036.patch b/debian/patches/bug-10036.patch
new file mode 100644 (file)
index 0000000..360e476
--- /dev/null
@@ -0,0 +1,32 @@
+Last-Update: 2014-12-25
+Bug-Ceph: http://tracker.ceph.com/issues/10036
+Author: Mykola Golub <mgolub@mirantis.com>
+Description: show primary-affinity in OSD tree
+
+--- a/src/osd/OSDMap.cc
++++ b/src/osd/OSDMap.cc
+@@ -2349,19 +2349,23 @@
+       *out << std::setprecision(4)
+          << (exists(cur) ? get_weightf(cur) : 0)
+          << std::setprecision(p)
+          << "\t";
++      *out << std::setprecision(4)
++           << (exists(cur) ? get_primary_affinityf(cur) : 0)
++           << std::setprecision(p);
+     }
+     if (f) {
+       f->dump_float("reweight", get_weightf(cur));
++      f->dump_float("primary_affinity", get_primary_affinityf(cur));
+     }
+   }
+ }
+ void OSDMap::print_tree(ostream *out, Formatter *f) const
+ {
+   if (out)
+-    *out << "# id\tweight\ttype name\tup/down\treweight\n";
++    *out << "# id\tweight\ttype name\tup/down\treweight\tprimary-affinity\n";
+   if (f)
+     f->open_array_section("nodes");
+   set<int> touched;
+   set<int> roots;
diff --git a/debian/patches/ceph-disk-fix-symlinks-handling.patch b/debian/patches/ceph-disk-fix-symlinks-handling.patch
new file mode 100644 (file)
index 0000000..341dc02
--- /dev/null
@@ -0,0 +1,128 @@
+From: Alexey Sheplyakov <asheplyakov@mirantis.com>
+Date: Tue, 5 Jan 2016 12:28:34 +0300
+Subject: ceph-disk: fix symlinks handling
+
+ceph-disk fails to work with a symlink pointing to the actual device due
+to a naive device name parsing in split_dev_base_partnum:
+
+[node-9][WARNIN] DEBUG:ceph-disk:Journal /dev/disk/by-id/ata-INTEL_SSDSC2BW240A4_PHDA410301812403GN-part3 was previously prepared with ceph-disk. Reusing it.
+[node-9][WARNIN] INFO:ceph-disk:Running command: /sbin/sgdisk -i 2 /dev/disk/by-id/ata-INTEL_SSDSC
+[node-9][WARNIN] Problem opening /dev/disk/by-id/ata-INTEL_SSDSC for reading! Error is 2.
+
+Rewrite split_dev_base_partnum so it uses /sys/block/dev/MAJOR:minor/partition
+instead of device name parsing. Use /sys/block/dev/M:m in list_partitions,
+list_all_partitions instead of the basename since the user/distro can set
+arbitrary device names (not necessary matching to those used by the driver).
+
+Fixes: #14231
+
+Signed-off-by: Alexey Sheplyakov <asheplyakov@mirantis.com>
+---
+ src/ceph-disk | 56 ++++++++++++++++++++++++++++++++++++++++++++------------
+ 1 file changed, 44 insertions(+), 12 deletions(-)
+
+diff --git a/src/ceph-disk b/src/ceph-disk
+index 7620ff8..49bc978 100755
+--- a/src/ceph-disk
++++ b/src/ceph-disk
+@@ -88,6 +88,7 @@ DMCRYPT_TOBE_UUID =         '89c57f98-2fe5-4dc0-89c1-5ec00ceff2be'
+ DMCRYPT_JOURNAL_TOBE_UUID = '89c57f98-2fe5-4dc0-89c1-35865ceff2be'
+ DEFAULT_FS_TYPE = 'xfs'
++SYSFS = '/sys'
+ MOUNT_OPTIONS = dict(
+     btrfs='noatime,user_subvol_rm_allowed',
+@@ -358,6 +359,38 @@ def platform_information():
+         str(codename).strip()
+     )
++#
++# An alternative block_path implementation would be
++#
++#   name = basename(dev)
++#   return /sys/devices/virtual/block/$name
++#
++# It is however more fragile because it relies on the fact
++# that the basename of the device the user will use always
++# matches the one the driver will use. On Ubuntu 14.04, for
++# instance, when multipath creates a partition table on
++#
++#   /dev/mapper/353333330000007d0 -> ../dm-0
++#
++# it will create partition devices named
++#
++#   /dev/mapper/353333330000007d0-part1
++#
++# which is the same device as /dev/dm-1 but not a symbolic
++# link to it:
++#
++#   ubuntu@other:~$ ls -l /dev/mapper /dev/dm-1
++#   brw-rw---- 1 root disk 252, 1 Aug 15 17:52 /dev/dm-1
++#   lrwxrwxrwx 1 root root        7 Aug 15 17:52 353333330000007d0 -> ../dm-0
++#   brw-rw---- 1 root disk 252,   1 Aug 15 17:52 353333330000007d0-part1
++#
++# Using the basename in this case fails.
++#
++def block_path(dev):
++    path = os.path.realpath(dev)
++    rdev = os.stat(path).st_rdev
++    (M, m) = (os.major(rdev), os.minor(rdev))
++    return "{sysfs}/dev/block/{M}:{m}".format(sysfs=SYSFS, M=M, m=m)
+ def get_dev_name(path):
+     """
+@@ -447,21 +480,22 @@ def list_all_partitions():
+     """
+     dev_part_list = {}
+     for name in os.listdir('/sys/block'):
++        LOG.debug("list_all_partitions: " + name)
+         # /dev/fd0 may hang http://tracker.ceph.com/issues/6827
+         if re.match(r'^fd\d$', name):
+             continue
+-        if not os.path.exists(os.path.join('/sys/block', name, 'device')):
+-            continue
+-        dev_part_list[name] = list_partitions(name)
++        dev_part_list[name] = list_partitions(os.path.join('/dev', name))
+     return dev_part_list
+-def list_partitions(basename):
++def list_partitions(dev):
+     """
+     Return a list of partitions on the given device name
+     """
++    dev = os.path.realpath(dev)
+     partitions = []
+-    for name in os.listdir(os.path.join('/sys/block', basename)):
++    basename = os.path.basename(dev)
++    for name in os.listdir(block_path(dev)):
+         if name.startswith(basename):
+             partitions.append(name)
+     return partitions
+@@ -561,8 +595,7 @@ def verify_not_in_use(dev, check_partitions=False):
+         raise Error('Device %s is in use by a device-mapper mapping (dm-crypt?)' % dev, ','.join(holders))
+     if check_partitions and not is_partition(dev):
+-        basename = get_dev_name(os.path.realpath(dev))
+-        for partname in list_partitions(basename):
++        for partname in list_partitions(dev):
+             partition = get_dev_path(partname)
+             if is_mounted(partition):
+                 raise Error('Device is mounted', partition)
+@@ -2362,11 +2395,10 @@ def get_dev_fs(dev):
+ def split_dev_base_partnum(dev):
+-    if 'loop' in dev or 'cciss' in dev or 'nvme' in dev:
+-        return re.match('(.*\d+)p(\d+)', dev).group(1, 2)
+-    else:
+-        return re.match('(\D+)(\d+)', dev).group(1, 2)
+-
++    b = block_path(dev)
++    partnum = open(os.path.join(b, 'partition')).read().strip()
++    base = get_partition_base(dev)
++    return (base, partnum)
+ def get_partition_type(part):
+     """
index f41598284457c9c4b3ab82a27c5feeb2e4268ad2..64a075aa6bc363562dc539eded4067240431b28c 100644 (file)
@@ -29,11 +29,11 @@ Signed-off-by: Dmitry Smirnov <onlyjob@member.fsf.org>
 
 --- a/src/init-rbdmap
 +++ b/src/init-rbdmap
-@@ -104,7 +104,18 @@ do_unmap() {
+@@ -105,7 +105,18 @@ do_unmap() {
                        MNT=$(findmnt --mtab --source ${DEV} --noheadings | awk '{print $1'})
                        if [ -n "${MNT}" ]; then
-                           log_action_cont_msg "un-mounting '${MNT}'"
--                          UMNT_RV=$(umount "${MNT}" 2>&1)
+                           logger -p "daemon.debug" -t init-rbdmap "Unmounting '${MNT}'"
+-                          umount "${MNT}" >>/dev/null 2>&1
 +                          local ULAZY=""
 +                          local RUNLEVEL=$(runlevel | awk '{print $2}')
 +                          if [ $? -eq 0 ]; then
@@ -45,7 +45,7 @@ Signed-off-by: Dmitry Smirnov <onlyjob@member.fsf.org>
 +                                  fi
 +                              fi
 +                          fi
-+                          UMNT_RV=$(umount ${ULAZY} "${MNT}" 2>&1)
++                          umount ${ULAZY} "${MNT}" >>/dev/null 2>&1
                        fi
                        if mountpoint -q "${MNT}"; then
                            ## Un-mounting failed.
index 44e9de6962defabec773d2a0a8247cd1e99b541e..91f94c4bb0e42f7131cceceecace0587a23fcb0b 100644 (file)
@@ -6,8 +6,19 @@ rbdmap3-lazyumount.patch
 arch.patch
 modules.patch
 sample.ceph.conf.patch
+# Disabled until adopted upstream
+# use_system_jerasure.patch
 virtualenv-never-download.patch
+# Testing patches
+tests-disable-ceph-disk.patch
+tests-disable.patch
+
+## From Ubuntu
 ceph-osd-prestart-path.patch
 fix-argparse-defaults.patch
 fix-cycles-arch.patch
 vivid-does-systemd.patch
+
+## MOS
+ceph-disk-fix-symlinks-handling.patch
+ObjBencher-seq_read_bench-fix-locking-errors.patch
diff --git a/debian/patches/tests-disable-ceph-disk.patch b/debian/patches/tests-disable-ceph-disk.patch
new file mode 100644 (file)
index 0000000..200407c
--- /dev/null
@@ -0,0 +1,16 @@
+Last-Update: 2014-10-31
+Forwarded: no
+Author: Dmitry Smirnov <onlyjob@member.fsf.org>
+Description: disable (FS-dependent?) "ceph-disk" test which always seems to fail...
+
+--- a/src/test/Makefile.am
++++ b/src/test/Makefile.am
+@@ -83,8 +83,6 @@ check_SCRIPTS += \
+ if ENABLE_ROOT_MAKE_CHECK
+ check_SCRIPTS += test/ceph-disk-root.sh
+-else
+-check_SCRIPTS += test/ceph-disk.sh
+ endif
+ EXTRA_DIST += \
diff --git a/debian/patches/tests-disable.patch b/debian/patches/tests-disable.patch
new file mode 100644 (file)
index 0000000..9056fb9
--- /dev/null
@@ -0,0 +1,52 @@
+Last-Update: 2014-10-31
+Forwarded: no
+Author: Dmitry Smirnov <onlyjob@member.fsf.org>
+Description: disable tests that depend on network...
+
+--- a/src/test/Makefile.am
++++ b/src/test/Makefile.am
+@@ -62,6 +62,7 @@ bin_DEBUGPROGRAMS += ceph_bench_log
+ ## Unit tests
++if WITH_CLUSTER_TESTS
+ check_SCRIPTS += \
+       test/ceph_objectstore_tool.py \
+       test/test-ceph-helpers.sh \
+@@ -80,6 +81,7 @@ check_SCRIPTS += \
+       test/osd/osd-bench.sh \
+       test/osd/osd-copy-from.sh \
+       test/mon/mon-handle-forward.sh
++endif
+ if ENABLE_ROOT_MAKE_CHECK
+ check_SCRIPTS += test/ceph-disk-root.sh
+--- a/configure.ac
++++ b/configure.ac
+@@ -1181,6 +1181,13 @@ AC_LANG_POP([C++])
+ AM_CONDITIONAL(WITH_BUILD_TESTS, test "$WITH_BUILD_TESTS" = "1")
++AC_ARG_WITH([cluster-tests],
++    [AS_HELP_STRING([--with-cluster-tests], [enables cluster tests])],
++    [],
++    [with_cluster_tests=no]
++)
++AM_CONDITIONAL(WITH_CLUSTER_TESTS, [ test "$with_cluster_tests" = "yes" ])
++
+ AM_PATH_PYTHON([2.4],
+       [], [AC_MSG_FAILURE([Failed to find Python 2.4 or newer])])
+--- a/src/test/erasure-code/Makefile.am
++++ b/src/test/erasure-code/Makefile.am
+@@ -1,8 +1,10 @@
+ if ENABLE_SERVER
+ if WITH_OSD
++if WITH_CLUSTER_TESTS
+ check_SCRIPTS += \
+       test/erasure-code/test-erasure-code.sh
++endif
+ noinst_HEADERS += \
+       test/erasure-code/ceph_erasure_code_benchmark.h
diff --git a/debian/patches/use_system_jerasure.patch b/debian/patches/use_system_jerasure.patch
new file mode 100644 (file)
index 0000000..7c9858c
--- /dev/null
@@ -0,0 +1,182 @@
+Last-Update: 2014-12-09
+Forwarded: not-needed
+Author: Dmitry Smirnov <onlyjob@member.fsf.org>
+Description: use system "libjerasure" instead of bundled one.
+
+--- a/src/erasure-code/jerasure/Makefile.am
++++ b/src/erasure-code/jerasure/Makefile.am
+@@ -1,40 +1,8 @@
+ # jerasure plugin
+ noinst_HEADERS += \
+-  erasure-code/jerasure/gf-complete/include/gf_complete.h \
+-  erasure-code/jerasure/gf-complete/include/gf_general.h \
+-  erasure-code/jerasure/gf-complete/include/gf_int.h \
+-  erasure-code/jerasure/gf-complete/include/gf_method.h \
+-  erasure-code/jerasure/gf-complete/include/gf_rand.h \
+-  erasure-code/jerasure/gf-complete/include/gf_w16.h \
+-  erasure-code/jerasure/gf-complete/include/gf_w32.h \
+-  erasure-code/jerasure/gf-complete/include/gf_w4.h \
+-  erasure-code/jerasure/gf-complete/include/gf_w64.h \
+-  erasure-code/jerasure/gf-complete/include/gf_w8.h \
+-  erasure-code/jerasure/jerasure/include/cauchy.h \
+-  erasure-code/jerasure/jerasure/include/galois.h \
+-  erasure-code/jerasure/jerasure/include/jerasure.h \
+-  erasure-code/jerasure/jerasure/include/liberation.h \
+-  erasure-code/jerasure/jerasure/include/reed_sol.h \
+   erasure-code/jerasure/ErasureCodeJerasure.h
+ jerasure_sources = \
+-  erasure-code/ErasureCode.cc \
+-  erasure-code/jerasure/jerasure/src/cauchy.c \
+-  erasure-code/jerasure/jerasure/src/galois.c \
+-  erasure-code/jerasure/jerasure/src/jerasure.c \
+-  erasure-code/jerasure/jerasure/src/liberation.c \
+-  erasure-code/jerasure/jerasure/src/reed_sol.c \
+-  erasure-code/jerasure/gf-complete/src/gf_wgen.c \
+-  erasure-code/jerasure/gf-complete/src/gf_method.c \
+-  erasure-code/jerasure/gf-complete/src/gf_w16.c \
+-  erasure-code/jerasure/gf-complete/src/gf.c \
+-  erasure-code/jerasure/gf-complete/src/gf_w32.c \
+-  erasure-code/jerasure/gf-complete/src/gf_w64.c \
+-  erasure-code/jerasure/gf-complete/src/gf_w128.c \
+-  erasure-code/jerasure/gf-complete/src/gf_general.c \
+-  erasure-code/jerasure/gf-complete/src/gf_w4.c \
+-  erasure-code/jerasure/gf-complete/src/gf_rand.c \
+-  erasure-code/jerasure/gf-complete/src/gf_w8.c \
+   erasure-code/jerasure/ErasureCodePluginJerasure.cc \
+   erasure-code/jerasure/ErasureCodeJerasure.cc
+@@ -42,13 +10,11 @@ erasure-code/jerasure/ErasureCodePluginJ
+ libec_jerasure_generic_la_SOURCES = ${jerasure_sources}
+ libec_jerasure_generic_la_CFLAGS = ${AM_CFLAGS}  \
+-      -I$(srcdir)/erasure-code/jerasure/gf-complete/include \
+-      -I$(srcdir)/erasure-code/jerasure/jerasure/include
++    -I$(includedir)/jerasure
+ libec_jerasure_generic_la_CXXFLAGS= ${AM_CXXFLAGS} \
+-      -I$(srcdir)/erasure-code/jerasure/gf-complete/include \
+-      -I$(srcdir)/erasure-code/jerasure/jerasure/include
++    -I$(includedir)/jerasure
+ libec_jerasure_generic_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
+-libec_jerasure_generic_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared
++libec_jerasure_generic_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared -lJerasure
+ if LINUX
+ libec_jerasure_generic_la_LDFLAGS += -export-symbols-regex '.*__erasure_code_.*'
+ endif
+@@ -85,17 +51,15 @@ libec_jerasure_sse3_la_CFLAGS = ${AM_CFL
+       ${INTEL_SSE2_FLAGS} \
+       ${INTEL_SSE3_FLAGS} \
+       ${INTEL_SSSE3_FLAGS} \
+-      -I$(srcdir)/erasure-code/jerasure/gf-complete/include \
+-      -I$(srcdir)/erasure-code/jerasure/jerasure/include
++    -I$(includedir)/jerasure
+ libec_jerasure_sse3_la_CXXFLAGS= ${AM_CXXFLAGS} \
+       ${INTEL_SSE_FLAGS} \
+       ${INTEL_SSE2_FLAGS} \
+       ${INTEL_SSE3_FLAGS} \
+       ${INTEL_SSSE3_FLAGS} \
+-      -I$(srcdir)/erasure-code/jerasure/gf-complete/include \
+-      -I$(srcdir)/erasure-code/jerasure/jerasure/include
++    -I$(includedir)/jerasure
+ libec_jerasure_sse3_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
+-libec_jerasure_sse3_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared
++libec_jerasure_sse3_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared -lJerasure
+ if LINUX
+ libec_jerasure_sse3_la_LDFLAGS += -export-symbols-regex '.*__erasure_code_.*'
+ endif
+@@ -112,8 +76,7 @@ libec_jerasure_sse4_la_CFLAGS = ${AM_CFL
+       ${INTEL_SSSE3_FLAGS} \
+       ${INTEL_SSE4_1_FLAGS} \
+       ${INTEL_SSE4_2_FLAGS} \
+-      -I$(srcdir)/erasure-code/jerasure/gf-complete/include \
+-      -I$(srcdir)/erasure-code/jerasure/jerasure/include
++    -I$(includedir)/jerasure
+ libec_jerasure_sse4_la_CXXFLAGS= ${AM_CXXFLAGS} \
+       ${INTEL_SSE_FLAGS} \
+       ${INTEL_SSE2_FLAGS} \
+@@ -121,10 +84,9 @@ libec_jerasure_sse4_la_CXXFLAGS= ${AM_CX
+       ${INTEL_SSSE3_FLAGS} \
+       ${INTEL_SSE4_1_FLAGS} \
+       ${INTEL_SSE4_2_FLAGS} \
+-      -I$(srcdir)/erasure-code/jerasure/gf-complete/include \
+-      -I$(srcdir)/erasure-code/jerasure/jerasure/include
++    -I$(includedir)/jerasure
+ libec_jerasure_sse4_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
+-libec_jerasure_sse4_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared
++libec_jerasure_sse4_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared -lJerasure
+ if LINUX
+ libec_jerasure_sse4_la_LDFLAGS += -export-symbols-regex '.*__erasure_code_.*'
+ endif
+@@ -138,7 +100,7 @@ libec_jerasure_la_SOURCES = \
+ libec_jerasure_la_CFLAGS = ${AM_CFLAGS}
+ libec_jerasure_la_CXXFLAGS= ${AM_CXXFLAGS}
+ libec_jerasure_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
+-libec_jerasure_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared
++libec_jerasure_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared -lJerasure
+ if LINUX
+ libec_jerasure_la_LDFLAGS += -export-symbols-regex '.*__erasure_code_.*'
+ endif
+--- a/src/erasure-code/shec/Makefile.am
++++ b/src/erasure-code/shec/Makefile.am
+@@ -6,54 +6,24 @@ libec_shec_la_SOURCES = \
+       erasure-code/shec/ErasureCodeShec.cc \
+       erasure-code/shec/ErasureCodeShecTableCache.cc \
+       erasure-code/shec/shec.cc \
+-      erasure-code/shec/determinant.c \
+-      erasure-code/jerasure/jerasure/src/cauchy.c \
+-      erasure-code/jerasure/jerasure/src/galois.c \
+-      erasure-code/jerasure/jerasure/src/jerasure.c \
+-      erasure-code/jerasure/jerasure/src/liberation.c \
+-      erasure-code/jerasure/jerasure/src/reed_sol.c \
+-      erasure-code/jerasure/gf-complete/src/gf_wgen.c \
+-      erasure-code/jerasure/gf-complete/src/gf_method.c \
+-      erasure-code/jerasure/gf-complete/src/gf_w16.c \
+-      erasure-code/jerasure/gf-complete/src/gf.c \
+-      erasure-code/jerasure/gf-complete/src/gf_w32.c \
+-      erasure-code/jerasure/gf-complete/src/gf_w64.c \
+-      erasure-code/jerasure/gf-complete/src/gf_w128.c \
+-      erasure-code/jerasure/gf-complete/src/gf_general.c \
+-      erasure-code/jerasure/gf-complete/src/gf_w4.c \
+-      erasure-code/jerasure/gf-complete/src/gf_rand.c \
+-      erasure-code/jerasure/gf-complete/src/gf_w8.c
++      erasure-code/shec/determinant.c
+ noinst_HEADERS += \
+       erasure-code/shec/ErasureCodeShec.h \
+       erasure-code/shec/ErasureCodeShecTableCache.h \
+-      erasure-code/shec/shec.h \
+-      erasure-code/jerasure/jerasure/include/cauchy.h \
+-      erasure-code/jerasure/jerasure/include/galois.h \
+-      erasure-code/jerasure/jerasure/include/jerasure.h \
+-      erasure-code/jerasure/jerasure/include/liberation.h \
+-      erasure-code/jerasure/jerasure/include/reed_sol.h \
+-      erasure-code/jerasure/gf-complete/include/gf_int.h \
+-      erasure-code/jerasure/gf-complete/include/gf_complete.h \
+-      erasure-code/jerasure/gf-complete/include/gf_rand.h \
+-      erasure-code/jerasure/gf-complete/include/gf_method.h \
+-      erasure-code/jerasure/gf-complete/include/gf_general.h
++      erasure-code/shec/shec.h
+ erasure-code/shec/ErasureCodePluginShec.cc: ./ceph_ver.h
+ libec_shec_la_CFLAGS = ${AM_CFLAGS} \
+-      -I$(srcdir)/erasure-code/jerasure/jerasure/include \
+-      -I$(srcdir)/erasure-code/jerasure/gf-complete/include \
+-      -I$(srcdir)/erasure-code/jerasure \
+-      -I$(srcdir)/erasure-code/shec
++      -I$(srcdir)/erasure-code/shec \
++    -I$(includedir)/jerasure
+ libec_shec_la_CXXFLAGS= ${AM_CXXFLAGS} \
+-      -I$(srcdir)/erasure-code/jerasure/jerasure/include \
+-      -I$(srcdir)/erasure-code/jerasure/gf-complete/include \
+-      -I$(srcdir)/erasure-code/jerasure \
+-      -I$(srcdir)/erasure-code/shec
++      -I$(srcdir)/erasure-code/shec \
++    -I$(includedir)/jerasure
+ libec_shec_la_LIBADD = $(LIBCRUSH) $(PTHREAD_LIBS) $(EXTRALIBS)
+ #libec_shec_la_LIBADD = $(PTHREAD_LIBS) $(EXTRALIBS)
+ #libec_shec_la_LDFLAGS = ${AM_LDFLAGS} -version-info 1:0:0 -export-symbols-regex '.*__erasure_code_.*'
+-libec_shec_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared
++libec_shec_la_LDFLAGS = ${AM_LDFLAGS} -module -avoid-version -shared -lJerasure
+ if LINUX
+ libec_shec_la_LDFLAGS += -export-symbols-regex '.*__erasure_code_.*'
+ endif
index f54add556786eccd9628b80a9f39160b677d78dc..b99cc97bb28445c905876ea385b12fe01bae6414 100644 (file)
@@ -1,3 +1,3 @@
+var/lib/ceph/radosgw
 var/log/ceph
 var/log/radosgw
-var/lib/ceph/radosgw
diff --git a/debian/radosgw.logrotate b/debian/radosgw.logrotate
new file mode 120000 (symlink)
index 0000000..6790479
--- /dev/null
@@ -0,0 +1 @@
+../src/rgw/logrotate.conf
\ No newline at end of file
index 6d3e23148f58c20f08c20a5aa32129168c9bf59f..301b56e4dca344f75853724e50ac6b6013b5cec8 100755 (executable)
@@ -19,6 +19,8 @@ extraopts += --with-ocf --with-rest-bench --with-nss
 extraopts += --with-debug
 extraopts += --enable-cephfs-java
 extraopts += --with-babeltrace
+## do not build with lttng just yet, see #765842.
+extraopts += --without-lttng
 
 ifeq ($(DEB_HOST_ARCH), armel)
   # armel supports ARMv4t or above instructions sets.
@@ -37,8 +39,6 @@ endif
 # Use system provided libs3
 extraopts += --with-system-libs3
 
-#extraopts += --with-cluster-tests
-
 %:
        dh $@ --with javahelper,python2,autoreconf,systemd --parallel
 
@@ -48,8 +48,6 @@ override_dh_autoreconf:
        dh_autoreconf $(DH_AS_NEEDED)
 
 override_dh_auto_configure:
-       ## copy gtest sources
-       #cp -Rv /usr/src/gtest src/
        dh_auto_configure -- $(extraopts)
 
 override_dh_auto_build:
@@ -57,8 +55,6 @@ override_dh_auto_build:
        cp -v src/upstart/rbdmap.conf debian/ceph.rbdmap.upstart
 
 override_dh_auto_clean:
-       #$(RM) -rv src/gtest
-       $(RM) -rv src/test/fake_home src/mkfs src/test-ceph-disk/osd
        dh_auto_clean
        rm -fv debian/*.upstart
 
@@ -119,7 +115,6 @@ override_dh_makeshlibs:
        dh_makeshlibs -V -X/usr/lib/jni -X/usr/lib/$(DEB_HOST_MULTIARCH)/ceph/erasure-code
 
 override_dh_auto_test:
-       # Skip tests as they depend on virtualenv
-       :
+       #-dh_auto_test -v || cat src/test-suite.log
 
 .PHONY: override_dh_auto_configure override_dh_installinit override_dh_strip override_dh_makeshlibs override_dh_auto_test
index dae6427ab9abcf9fd9c646859d19fe9eff392393..c1d7ce9928b26798e41e78304566629dabb4839d 100644 (file)
@@ -1,3 +1,3 @@
 version=3
 opts="uversionmangle=s/-/~/" \
- http://ceph.com/download/ceph-(\d.*)\.tar\.bz2
+ http://ceph.com/download/ceph-(0\.94\.\d.*)\.tar\.gz